Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jinan
traffic-signal-platform
Commits
c886e08d
Commit
c886e08d
authored
Apr 15, 2025
by
zhoushiguang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://106.120.201.126:14725/jinan/traffic-signal-platform
parents
a209c4b5
56c487f0
Changes
24
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
979 additions
and
111 deletions
+979
-111
CrossRunStateController.java
...anji/opt/controllerv2/report/CrossRunStateController.java
+10
-2
CrossPeakAnalysis.java
...t/wanji/opt/controllerv2/report/vo/CrossPeakAnalysis.java
+39
-0
CrossRunStateAnalysisResultResponseDTO.java
...rv2/report/vo/CrossRunStateAnalysisResultResponseDTO.java
+66
-0
CrossRunStateDetailAnalysisDataDTO.java
...ollerv2/report/vo/CrossRunStateDetailAnalysisDataDTO.java
+32
-0
StrategyPriorityController.java
...opt/controllerv2/strategy/StrategyPriorityController.java
+8
-5
GreenChartSchemeRingPhaseMapper.java
...wanji/opt/dao/mapper/GreenChartSchemeRingPhaseMapper.java
+11
-0
CrossRidLaneMapper.java
...a/net/wanji/opt/dao/mapper/report/CrossRidLaneMapper.java
+3
-0
StrategyPriorityMapper.java
...wanji/opt/dao/mapper/strategy/StrategyPriorityMapper.java
+14
-2
RingPhaseInfoDTO.java
...ice/src/main/java/net/wanji/opt/dto/RingPhaseInfoDTO.java
+5
-0
SchemeGreenDirGreenTimeDTO.java
...in/java/net/wanji/opt/dto/SchemeGreenDirGreenTimeDTO.java
+15
-0
GreenChartSchemeHist.java
.../main/java/net/wanji/opt/entity/GreenChartSchemeHist.java
+4
-0
StrategyPriorityDailyInfo.java
.../wanji/opt/entity/strategy/StrategyPriorityDailyInfo.java
+5
-0
StrategyPriorityGroup.java
.../wanji/opt/entity/strategy/dto/StrategyPriorityGroup.java
+7
-0
EvaluationInfoServiceImpl.java
.../servicev2/evaluation/impl/EvaluationInfoServiceImpl.java
+1
-1
TrendServiceV2Impl.java
...va/net/wanji/opt/servicev2/implv2/TrendServiceV2Impl.java
+11
-6
CrossRidLaneService.java
...a/net/wanji/opt/servicev2/report/CrossRidLaneService.java
+3
-0
CrossRidLaneServiceImpl.java
...ji/opt/servicev2/report/impl/CrossRidLaneServiceImpl.java
+301
-13
StrategyPriorityService.java
...wanji/opt/servicev2/strategy/StrategyPriorityService.java
+1
-1
StrategyPriorityServiceImpl.java
.../servicev2/strategy/impl/StrategyPriorityServiceImpl.java
+157
-56
HisenseGreenChartTask.java
...c/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
+26
-20
HisenseSchemeRingPhaseInfoTask.java
...va/net/wanji/opt/task/HisenseSchemeRingPhaseInfoTask.java
+128
-0
GreenChartSchemeRingPhaseMapper.xml
...main/resources/mapper/GreenChartSchemeRingPhaseMapper.xml
+5
-0
CrossRidLaneMapper.xml
...e/src/main/resources/mapper/report/CrossRidLaneMapper.xml
+45
-0
StrategyPriorityMapper.xml
...main/resources/mapper/strategy/StrategyPriorityMapper.xml
+82
-5
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/report/CrossRunStateController.java
View file @
c886e08d
...
@@ -12,10 +12,14 @@ import net.wanji.common.framework.rest.JsonViewObject;
...
@@ -12,10 +12,14 @@ import net.wanji.common.framework.rest.JsonViewObject;
import
net.wanji.opt.controllerv2.report.design.CrossRunStateAnalysisResult
;
import
net.wanji.opt.controllerv2.report.design.CrossRunStateAnalysisResult
;
import
net.wanji.opt.controllerv2.report.design.CrossRunStatePeakAnalysisResult
;
import
net.wanji.opt.controllerv2.report.design.CrossRunStatePeakAnalysisResult
;
import
net.wanji.opt.controllerv2.report.design.GreenReportRunStateResult
;
import
net.wanji.opt.controllerv2.report.design.GreenReportRunStateResult
;
import
net.wanji.opt.controllerv2.report.vo.CrossRunStateAnalysisResultResponseDTO
;
import
net.wanji.opt.servicev2.report.AnalysisGreenWavePeakDetailService
;
import
net.wanji.opt.servicev2.report.AnalysisGreenWavePeakDetailService
;
import
net.wanji.opt.servicev2.report.CrossRidLaneService
;
import
net.wanji.opt.vo2.report.GreenReportRunStateResponseVO
;
import
net.wanji.opt.vo2.report.GreenReportRunStateResponseVO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -35,6 +39,9 @@ import java.util.List;
...
@@ -35,6 +39,9 @@ import java.util.List;
@Api
(
value
=
"CrossRunStateController"
,
description
=
""
,
tags
=
"路口分析报告-周报"
)
@Api
(
value
=
"CrossRunStateController"
,
description
=
""
,
tags
=
"路口分析报告-周报"
)
public
class
CrossRunStateController
{
public
class
CrossRunStateController
{
@Autowired
private
CrossRidLaneService
crossRidLaneService
;
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"2.1-交通运行总体情况"
,
notes
=
""
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"2.1-交通运行总体情况"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"crossIds"
,
value
=
"路口ID,多个id用','分隔【为空时查询所有】"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13NEJ0B5R80,13N650B5P30"
),
@ApiImplicitParam
(
name
=
"crossIds"
,
value
=
"路口ID,多个id用','分隔【为空时查询所有】"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13NEJ0B5R80,13N650B5P30"
),
...
@@ -45,10 +52,11 @@ public class CrossRunStateController {
...
@@ -45,10 +52,11 @@ public class CrossRunStateController {
@ApiResponses
({
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
CrossRunStateAnalysisResult
.
class
),
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
CrossRunStateAnalysisResult
.
class
),
})
})
public
JsonViewObject
getTotalitySituation
(
String
crossIds
,
Integer
year
,
Integer
week
)
{
public
JsonViewObject
getTotalitySituation
(
@RequestParam
(
required
=
false
)
String
crossIds
,
Integer
year
,
Integer
week
)
{
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
try
{
try
{
CrossRunStateAnalysisResultResponseDTO
responseDTO
=
crossRidLaneService
.
getTotalitySituation
(
crossIds
,
year
,
week
);
jsonViewObject
.
success
(
responseDTO
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
jsonViewObject
.
fail
(
I18nResourceBundle
.
getConstants
(
"GET_FAILED_MSG"
));
jsonViewObject
.
fail
(
I18nResourceBundle
.
getConstants
(
"GET_FAILED_MSG"
));
log
.
error
(
"{} getAll error"
,
this
.
getClass
().
getSimpleName
(),
e
);
log
.
error
(
"{} getAll error"
,
this
.
getClass
().
getSimpleName
(),
e
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/report/vo/CrossPeakAnalysis.java
0 → 100644
View file @
c886e08d
package
net
.
wanji
.
opt
.
controllerv2
.
report
.
vo
;
import
lombok.Data
;
@Data
public
class
CrossPeakAnalysis
{
// 路口 ID
private
String
crossId
;
// 类型:1工作日 2节假日
private
Integer
dayType
;
// 高峰类型 1早高峰 2晚高峰 3平峰
private
Integer
peakType
;
// 日总流量平均值
private
Integer
dayTotalFlow
;
// 日最大小时流量平均值
private
Integer
dayMaxHourFlow
;
// 高峰期最大小时流量平均值
private
Integer
peakMaxHourFlow
;
// 高峰期交通指数平均值
private
Double
peakTrafficIndex
;
// 高峰期通行能力平均值
private
Integer
peakCapacity
;
// 高峰期平均延误时间平均值
private
Double
peakAvgDelayTime
;
// 高峰期最大排队长度平均值
private
Integer
peakMaxQueueLength
;
// 高峰期平均停车次数平均值
private
Integer
peakAvgStopTimes
;
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/report/vo/CrossRunStateAnalysisResultResponseDTO.java
0 → 100644
View file @
c886e08d
package
net
.
wanji
.
opt
.
controllerv2
.
report
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
public
class
CrossRunStateAnalysisResultResponseDTO
{
@ApiModelProperty
(
value
=
"区域周最大流量路口名称"
,
example
=
"经十路(舜耕路-山大路)"
)
private
String
maxFlowCrossName
;
@ApiModelProperty
(
value
=
"区域周交通指数最大路口名称"
,
example
=
"经十路(舜耕路-山大路)"
)
private
String
maxTrafficIndexCrossName
;
@ApiModelProperty
(
value
=
"工作日平均流量"
,
example
=
"13459899辆"
)
private
String
workDayAvgFlow
;
@ApiModelProperty
(
value
=
"工作日早高峰最大小时流量"
,
example
=
"35490辆"
)
private
String
workDayAmPeakMaxHourFlow
;
@ApiModelProperty
(
value
=
"工作日晚高峰最大小时流量"
,
example
=
"23454辆"
)
private
String
workDayPmPeakMaxHourFlow
;
@ApiModelProperty
(
value
=
"工作日平峰最大小时流量"
,
example
=
"234598辆"
)
private
String
workDayFmPeakMaxHourFlow
;
@ApiModelProperty
(
value
=
"周末全天平均流量"
,
example
=
"234598辆%"
)
private
String
weekEndAvgFlow
;
@ApiModelProperty
(
value
=
"工作日早高峰平均交通指数"
,
example
=
"4.5"
)
private
String
workDayAmPeakAvgTrafficIndex
;
@ApiModelProperty
(
value
=
"工作日晚高峰平均交通指数"
,
example
=
"5.5"
)
private
String
workDayPmPeakAvgTrafficIndex
;
//========================================================================
@ApiModelProperty
(
value
=
"工作日平均流量与上周比较情况"
,
example
=
"提升【下降】34000辆"
)
private
String
avgFlowLastWeekCompare
;
@ApiModelProperty
(
value
=
"工作日早高峰最大小时流量与上周比较情况"
,
example
=
"提升【下降】2300辆"
)
private
String
amPeakMaxHourFlowLastWeekCompare
;
@ApiModelProperty
(
value
=
"工作日晚高峰最大小时流量与上周比较情况"
,
example
=
"提升【下降】3100辆"
)
private
String
pmPeakMaxHourFlowLastWeekCompare
;
@ApiModelProperty
(
value
=
"工作日平峰最大小时流量与上周比较情况"
,
example
=
"提升【下降】1200辆"
)
private
String
fmPeakMaxHourFlowLastWeekCompare
;
@ApiModelProperty
(
value
=
"周末全天平均流量与上周比较情况"
,
example
=
"提升【下降】12000辆"
)
private
String
endAvgFlowLastWeekCompare
;
@ApiModelProperty
(
value
=
"工作日早高峰平均交通指数与上周比较情况"
,
example
=
"增加【减少】20%"
)
private
String
amPeakAvgTrafficIndexLastWeekCompare
;
@ApiModelProperty
(
value
=
"工作日晚高峰平均交通指数与上周比较情况"
,
example
=
"增加【减少】25%"
)
private
String
pmPeakAvgTrafficIndexLastWeekCompare
;
//================================================================================================//
private
List
<
CrossRunStateDetailAnalysisDataDTO
>
dataList
=
new
ArrayList
<>();
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/report/vo/CrossRunStateDetailAnalysisDataDTO.java
0 → 100644
View file @
c886e08d
package
net
.
wanji
.
opt
.
controllerv2
.
report
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@Data
public
class
CrossRunStateDetailAnalysisDataDTO
{
@ApiModelProperty
(
value
=
"路口名称"
,
example
=
"经十路(舜耕路-山大路)"
,
position
=
1
)
private
String
crossName
;
@ApiModelProperty
(
value
=
"本周高峰最大小时流量"
,
example
=
"8900"
,
position
=
2
)
private
Integer
thisWeekPeakMaxFlow
;
@ApiModelProperty
(
value
=
"上周高峰最大小时流量"
,
example
=
"8900"
,
position
=
3
)
private
Integer
lastWeekPeakMaxFlow
;
@ApiModelProperty
(
value
=
"本周周末最大小时流量"
,
example
=
"8900"
,
position
=
4
)
private
Integer
thisWeekEndMaxFlow
;
@ApiModelProperty
(
value
=
"上周周末最大小时流量"
,
example
=
"8900"
,
position
=
5
)
private
Integer
lastWeekEndMaxFlow
;
@ApiModelProperty
(
value
=
"本周工作日早高峰交通指数"
,
example
=
"4.0"
,
position
=
5
)
private
Double
thisWeekWorkDayAmTrafficIndex
;
@ApiModelProperty
(
value
=
"上周周工作日早高峰交通指数"
,
example
=
"3.5"
,
position
=
6
)
private
Double
lastWeekWorkDayAmTrafficIndex
;
@ApiModelProperty
(
value
=
"本周工作日晚高峰交通指数"
,
example
=
"3.5"
,
position
=
7
)
private
Double
thisWeekWorkDayPmTrafficIndex
;
@ApiModelProperty
(
value
=
"上周周工作日晚高峰交通指数"
,
example
=
"4.5"
,
position
=
8
)
private
Double
lastWeekWorkDayPmTrafficIndex
;
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/strategy/StrategyPriorityController.java
View file @
c886e08d
...
@@ -110,7 +110,7 @@ public class StrategyPriorityController {
...
@@ -110,7 +110,7 @@ public class StrategyPriorityController {
return
jsonView
;
return
jsonView
;
}
}
@ApiOperation
(
value
=
"策略管理-策略优先级批量保存"
,
notes
=
"批量保存"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
,
hidden
=
false
)
@ApiOperation
(
value
=
"策略管理-策略
路口干线
优先级批量保存"
,
notes
=
"批量保存"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
,
hidden
=
false
)
@ApiImplicitParams
({
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"dataList"
,
value
=
"优先级配置数据"
,
required
=
false
,
dataType
=
"String"
),
@ApiImplicitParam
(
name
=
"dataList"
,
value
=
"优先级配置数据"
,
required
=
false
,
dataType
=
"String"
),
})
})
...
@@ -127,15 +127,18 @@ public class StrategyPriorityController {
...
@@ -127,15 +127,18 @@ public class StrategyPriorityController {
return
jsonView
;
return
jsonView
;
}
}
@ApiOperation
(
value
=
"策略管理-策略优先级数据回显"
,
notes
=
"数据回显"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
,
hidden
=
false
)
@ApiOperation
(
value
=
"策略管理-策略
路口干线
优先级数据回显"
,
notes
=
"数据回显"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
,
hidden
=
false
)
@ApiImplicitParams
({
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口id"
,
required
=
true
,
dataType
=
"String"
)
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口id"
,
required
=
false
,
dataType
=
"String"
),
@ApiImplicitParam
(
name
=
"greenId"
,
value
=
"干线id"
,
required
=
false
,
dataType
=
"Integer"
),
@ApiImplicitParam
(
name
=
"type"
,
value
=
"类型"
,
required
=
true
,
dataType
=
"Integer"
),
})
})
@GetMapping
(
"/getPriorityConfig"
)
@GetMapping
(
"/getPriorityConfig"
)
public
JsonViewObject
getPriorityData
(
@RequestParam
(
required
=
true
)
String
crossId
){
public
JsonViewObject
getPriorityData
(
@RequestParam
(
required
=
false
)
String
crossId
,
@RequestParam
(
required
=
false
)
Integer
greenId
,
@RequestParam
(
required
=
true
)
Integer
type
){
JsonViewObject
jsonView
=
JsonViewObject
.
newInstance
();
JsonViewObject
jsonView
=
JsonViewObject
.
newInstance
();
try
{
try
{
List
<
StrategyFactoryEntity
>
list
=
strategyPriorityService
.
getPriorityData
(
crossId
);
List
<
StrategyFactoryEntity
>
list
=
strategyPriorityService
.
getPriorityData
(
crossId
,
greenId
,
type
);
jsonView
.
success
(
list
);
jsonView
.
success
(
list
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
jsonView
.
fail
(
I18nResourceBundle
.
getConstants
(
"SAVE_FAILED_MSG"
));
jsonView
.
fail
(
I18nResourceBundle
.
getConstants
(
"SAVE_FAILED_MSG"
));
...
...
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/GreenChartSchemeRingPhaseMapper.java
0 → 100644
View file @
c886e08d
package
net
.
wanji
.
opt
.
dao
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
net.wanji.opt.dto.SchemeGreenDirGreenTimeDTO
;
/**
* @author duanruiming
* @date 2025/04/15 15:13
*/
public
interface
GreenChartSchemeRingPhaseMapper
extends
BaseMapper
<
SchemeGreenDirGreenTimeDTO
>
{
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/report/CrossRidLaneMapper.java
View file @
c886e08d
package
net
.
wanji
.
opt
.
dao
.
mapper
.
report
;
package
net
.
wanji
.
opt
.
dao
.
mapper
.
report
;
import
net.wanji.opt.controllerv2.report.vo.CrossPeakAnalysis
;
import
net.wanji.opt.entity.report.CrossRidLaneDTO
;
import
net.wanji.opt.entity.report.CrossRidLaneDTO
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
...
@@ -7,4 +8,6 @@ import java.util.List;
...
@@ -7,4 +8,6 @@ import java.util.List;
public
interface
CrossRidLaneMapper
{
public
interface
CrossRidLaneMapper
{
List
<
CrossRidLaneDTO
>
getCrossInfoList
(
@Param
(
"crossIdList"
)
List
<
String
>
crossIdList
);
List
<
CrossRidLaneDTO
>
getCrossInfoList
(
@Param
(
"crossIdList"
)
List
<
String
>
crossIdList
);
List
<
CrossPeakAnalysis
>
getTotalitySituation
(
@Param
(
"crossIdList"
)
List
<
String
>
crossIdList
,
@Param
(
"yearWeek"
)
Integer
yearWeek
,
@Param
(
"dayType"
)
Integer
dayType
,
@Param
(
"peakType"
)
Integer
peakType
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/strategy/StrategyPriorityMapper.java
View file @
c886e08d
...
@@ -69,9 +69,9 @@ public interface StrategyPriorityMapper extends BaseMapper<StrategyPriorityDaily
...
@@ -69,9 +69,9 @@ public interface StrategyPriorityMapper extends BaseMapper<StrategyPriorityDaily
List
<
String
>
getstrategyNo
(
String
crossId
);
List
<
String
>
getstrategyNo
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"type"
)
Integer
type
);
List
<
StrategyFactoryEntity
>
getPriorityConfigData
(
@Param
(
"strategyNo"
)
List
<
String
>
strategyNo
,
@Param
(
"crossId"
)
String
crossId
);
List
<
StrategyFactoryEntity
>
getPriorityConfigData
(
@Param
(
"strategyNo"
)
List
<
String
>
strategyNo
,
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"type"
)
Integer
type
);
void
savePlanConfig
(
@Param
(
"savePlanList"
)
List
<
StrategyPriorityDailyInfo
>
savePlanList
);
void
savePlanConfig
(
@Param
(
"savePlanList"
)
List
<
StrategyPriorityDailyInfo
>
savePlanList
);
...
@@ -92,5 +92,17 @@ public interface StrategyPriorityMapper extends BaseMapper<StrategyPriorityDaily
...
@@ -92,5 +92,17 @@ public interface StrategyPriorityMapper extends BaseMapper<StrategyPriorityDaily
List
<
StrategyParameterConfig
>
getParamConfigData
(
String
crossId
);
List
<
StrategyParameterConfig
>
getParamConfigData
(
String
crossId
);
List
<
StrategyPriorityDailyInfo
>
getStrategyGreenWave
();
List
<
StrategyPriorityDailyInfo
>
getStrategyGreenWave
();
List
<
StrategyPriorityConfig
>
selectGreenPriorityTable
(
Integer
greenId
);
void
deleteGreenPriorityConfig
(
Integer
greenId
);
List
<
String
>
getGreenstrategyNo
(
@Param
(
"greenId"
)
Integer
greenId
,
@Param
(
"type"
)
Integer
type
);
List
<
StrategyFactoryEntity
>
getGreenPriorityConfigData
(
@Param
(
"strategyNo"
)
List
<
String
>
strategyNo
,
@Param
(
"greenId"
)
Integer
greenId
,
@Param
(
"type"
)
Integer
type
);
List
<
StrategyPriorityDailyInfo
>
selectGreenPlanTable
(
Integer
greenId
);
void
deleteGreenPlanConfig
(
Integer
greenId
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/RingPhaseInfoDTO.java
View file @
c886e08d
package
net
.
wanji
.
opt
.
dto
;
package
net
.
wanji
.
opt
.
dto
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -49,6 +51,9 @@ public class RingPhaseInfoDTO {
...
@@ -49,6 +51,9 @@ public class RingPhaseInfoDTO {
private
List
<
DirTurn
>
dirTurnInfoList
;
private
List
<
DirTurn
>
dirTurnInfoList
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
date
;
/**
/**
* 转换后万集的方向转向,不包含行人
* 转换后万集的方向转向,不包含行人
*/
*/
...
...
signal-optimize-service/src/main/java/net/wanji/opt/dto/SchemeGreenDirGreenTimeDTO.java
View file @
c886e08d
package
net
.
wanji
.
opt
.
dto
;
package
net
.
wanji
.
opt
.
dto
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.Date
;
/**
/**
* @author duanruiming
* @author duanruiming
* @date 2025/04/01 15:38
* @date 2025/04/01 15:38
*/
*/
@Data
@Data
@TableName
(
"t_green_chart_scheme_ring_phase_hist"
)
public
class
SchemeGreenDirGreenTimeDTO
{
public
class
SchemeGreenDirGreenTimeDTO
{
@TableField
(
value
=
"cross_id"
)
private
String
crossId
;
private
String
crossId
;
@TableField
(
value
=
"scheme_no"
)
private
Integer
schemeNo
;
private
Integer
schemeNo
;
private
Integer
offset
;
private
Integer
offset
;
@TableField
(
value
=
"cycle_len"
)
private
Integer
cycleLen
;
private
Integer
cycleLen
;
@TableField
(
value
=
"ring_no"
)
private
Integer
ringNo
;
private
Integer
ringNo
;
@TableField
(
value
=
"phase_id"
)
private
Integer
phaseId
;
private
Integer
phaseId
;
private
Integer
start
;
private
Integer
start
;
private
Integer
end
;
private
Integer
end
;
private
Integer
dir
;
private
Integer
dir
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
date
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/entity/GreenChartSchemeHist.java
View file @
c886e08d
...
@@ -29,6 +29,10 @@ public class GreenChartSchemeHist {
...
@@ -29,6 +29,10 @@ public class GreenChartSchemeHist {
@TableField
(
"scheme_detail"
)
@TableField
(
"scheme_detail"
)
private
String
schemeDetail
;
private
String
schemeDetail
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@TableField
(
"query_date"
)
private
Date
queryDate
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@TableField
(
"create_time"
)
@TableField
(
"create_time"
)
private
Date
createTime
;
private
Date
createTime
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/entity/strategy/StrategyPriorityDailyInfo.java
View file @
c886e08d
...
@@ -61,6 +61,11 @@ public class StrategyPriorityDailyInfo implements Serializable {
...
@@ -61,6 +61,11 @@ public class StrategyPriorityDailyInfo implements Serializable {
*/
*/
@TableField
(
exist
=
false
)
@TableField
(
exist
=
false
)
private
Integer
greenId
;
private
Integer
greenId
;
/**
* 类型 1:路口 2干线
*/
@TableField
(
exist
=
false
)
private
Integer
type
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/entity/strategy/dto/StrategyPriorityGroup.java
View file @
c886e08d
...
@@ -40,4 +40,11 @@ public class StrategyPriorityGroup {
...
@@ -40,4 +40,11 @@ public class StrategyPriorityGroup {
private
StrategySchedulingParam
schedulingParamters
;
private
StrategySchedulingParam
schedulingParamters
;
//1:路口,2干线
//1:路口,2干线
private
Integer
type
;
private
Integer
type
;
//干线 ID
private
Integer
greenId
;
//干线 IDs
private
List
<
Integer
>
greenIds
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/evaluation/impl/EvaluationInfoServiceImpl.java
View file @
c886e08d
...
@@ -117,7 +117,7 @@ public class EvaluationInfoServiceImpl extends ServiceImpl<CrossDataHistMapper,
...
@@ -117,7 +117,7 @@ public class EvaluationInfoServiceImpl extends ServiceImpl<CrossDataHistMapper,
private
static
double
calculatePercentage
(
double
analyseValue
,
double
contrastValue
)
{
private
static
double
calculatePercentage
(
double
analyseValue
,
double
contrastValue
)
{
// 防止除零错误
// 防止除零错误
if
(
contrastValue
==
0
)
{
if
(
contrastValue
==
0
)
{
return
0
;
return
(
int
)
analyseValue
*
10
0
;
}
}
// 计算变化值(分析值 - 对比值)
// 计算变化值(分析值 - 对比值)
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/implv2/TrendServiceV2Impl.java
View file @
c886e08d
...
@@ -48,6 +48,7 @@ import org.springframework.util.StringUtils;
...
@@ -48,6 +48,7 @@ import org.springframework.util.StringUtils;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.CopyOnWriteArrayList
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -87,8 +88,8 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
...
@@ -87,8 +88,8 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
@Resource
@Resource
private
GreenChartSchemeHistMapper
greenChartSchemeHistMapper
;
private
GreenChartSchemeHistMapper
greenChartSchemeHistMapper
;
private
static
List
<
OptMonitoringVO
>
greenListCache
=
new
ArrayList
<>(
10
);
private
static
List
<
OptMonitoringVO
>
greenListCache
=
new
CopyOnWriteArrayList
<>(
);
private
static
List
<
OptMonitoringVO
>
crossListCache
=
new
ArrayList
<>(
80
);
private
static
List
<
OptMonitoringVO
>
crossListCache
=
new
CopyOnWriteArrayList
<>(
);
@Override
@Override
...
@@ -243,8 +244,10 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
...
@@ -243,8 +244,10 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
}
}
}
}
});
});
if
(!
CollectionUtils
.
isEmpty
(
greenListCache
))
{
greenListCache
.
clear
();
greenListCache
.
clear
();
greenListCache
.
addAll
(
optMonitoringVOS
);
greenListCache
.
addAll
(
optMonitoringVOS
);
}
return
optMonitoringVOS
;
return
optMonitoringVOS
;
}
}
...
@@ -287,8 +290,10 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
...
@@ -287,8 +290,10 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
}
}
}
}
});
});
if
(!
CollectionUtils
.
isEmpty
(
crossListCache
))
{
crossListCache
.
clear
();
crossListCache
.
clear
();
crossListCache
.
addAll
(
optMonitoringVOS
);
crossListCache
.
addAll
(
optMonitoringVOS
);
}
return
optMonitoringVOS
;
return
optMonitoringVOS
;
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/report/CrossRidLaneService.java
View file @
c886e08d
package
net
.
wanji
.
opt
.
servicev2
.
report
;
package
net
.
wanji
.
opt
.
servicev2
.
report
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
net.wanji.opt.controllerv2.report.vo.CrossRunStateAnalysisResultResponseDTO
;
import
net.wanji.opt.vo2.report.CrossRidLaneResult
;
import
net.wanji.opt.vo2.report.CrossRidLaneResult
;
import
java.util.List
;
import
java.util.List
;
public
interface
CrossRidLaneService
{
public
interface
CrossRidLaneService
{
List
<
CrossRidLaneResult
>
getCrossInfoList
(
String
crossIds
);
List
<
CrossRidLaneResult
>
getCrossInfoList
(
String
crossIds
);
CrossRunStateAnalysisResultResponseDTO
getTotalitySituation
(
String
crossIds
,
Integer
year
,
Integer
week
);
}
}
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/report/impl/CrossRidLaneServiceImpl.java
View file @
c886e08d
...
@@ -2,12 +2,14 @@ package net.wanji.opt.servicev2.report.impl;
...
@@ -2,12 +2,14 @@ package net.wanji.opt.servicev2.report.impl;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.databus.dao.mapper.BaseCrossInfoMapper
;
import
net.wanji.databus.po.BaseCrossInfoPO
;
import
net.wanji.opt.common.enums.CrossDirEnum
;
import
net.wanji.opt.common.enums.CrossDirEnum
;
import
net.wanji.opt.common.enums.CrossTypeEnum
;
import
net.wanji.opt.common.enums.CrossTypeEnum
;
import
net.wanji.opt.common.enums.LaneTurnEnum
;
import
net.wanji.opt.common.enums.LaneTurnEnum
;
import
net.wanji.opt.controllerv2.report.vo.CrossRidLaneVO
;
import
net.wanji.opt.controllerv2.report.vo.*
;
import
net.wanji.opt.controllerv2.report.vo.LaneDirNumVO
;
import
net.wanji.opt.dao.mapper.report.CrossRidLaneMapper
;
import
net.wanji.opt.dao.mapper.report.CrossRidLaneMapper
;
import
net.wanji.opt.entity.report.CrossRidLaneDTO
;
import
net.wanji.opt.entity.report.CrossRidLaneDTO
;
import
net.wanji.opt.servicev2.report.CrossRidLaneService
;
import
net.wanji.opt.servicev2.report.CrossRidLaneService
;
...
@@ -26,11 +28,13 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
...
@@ -26,11 +28,13 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
@Autowired
@Autowired
private
CrossRidLaneMapper
crossRidLaneMapper
;
private
CrossRidLaneMapper
crossRidLaneMapper
;
@Autowired
private
BaseCrossInfoMapper
baseCrossInfoMapper
;
@Override
@Override
public
List
<
CrossRidLaneResult
>
getCrossInfoList
(
String
crossIds
)
{
public
List
<
CrossRidLaneResult
>
getCrossInfoList
(
String
crossIds
)
{
List
<
String
>
crossIdList
=
null
;
List
<
String
>
crossIdList
=
null
;
if
(
ObjectUtil
.
isNotEmpty
(
crossIds
))
{
if
(
ObjectUtil
.
isNotEmpty
(
crossIds
))
{
crossIdList
=
Arrays
.
stream
(
crossIds
.
split
(
","
))
crossIdList
=
Arrays
.
stream
(
crossIds
.
split
(
","
))
.
map
(
String:
:
trim
)
// 去除可能的空格
.
map
(
String:
:
trim
)
// 去除可能的空格
.
filter
(
s
->
!
s
.
isEmpty
())
// 过滤掉空字符串
.
filter
(
s
->
!
s
.
isEmpty
())
// 过滤掉空字符串
...
@@ -40,8 +44,8 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
...
@@ -40,8 +44,8 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
Map
<
String
,
List
<
CrossRidLaneDTO
>>
crossIdMap
=
crossRidLaneDTOList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossRidLaneDTO:
:
getCrossId
));
Map
<
String
,
List
<
CrossRidLaneDTO
>>
crossIdMap
=
crossRidLaneDTOList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossRidLaneDTO:
:
getCrossId
));
List
<
CrossRidLaneResult
>
crossRidLaneResultList
=
new
ArrayList
<>();
List
<
CrossRidLaneResult
>
crossRidLaneResultList
=
new
ArrayList
<>();
for
(
List
<
CrossRidLaneDTO
>
crossRidLaneDTOS
:
crossIdMap
.
values
())
{
for
(
List
<
CrossRidLaneDTO
>
crossRidLaneDTOS
:
crossIdMap
.
values
())
{
Map
<
String
,
List
<
CrossRidLaneDTO
>>
laneNameMap
=
crossRidLaneDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
x
->
{
Map
<
String
,
List
<
CrossRidLaneDTO
>>
laneNameMap
=
crossRidLaneDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
x
->
{
if
(
ObjectUtil
.
isNotEmpty
(
x
.
getLaneName
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
x
.
getLaneName
()))
{
String
[]
split
=
x
.
getLaneName
().
split
(
":"
);
String
[]
split
=
x
.
getLaneName
().
split
(
":"
);
return
split
[
0
];
return
split
[
0
];
}
}
...
@@ -59,10 +63,10 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
...
@@ -59,10 +63,10 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
List
<
CrossRidLaneDTO
>
laneDTOS
=
laneNameMap
.
get
(
laneName
);
List
<
CrossRidLaneDTO
>
laneDTOS
=
laneNameMap
.
get
(
laneName
);
CrossRidLaneVO
crossRidLaneVO
=
new
CrossRidLaneVO
();
CrossRidLaneVO
crossRidLaneVO
=
new
CrossRidLaneVO
();
crossRidLaneVO
.
setLaneName
(
laneName
);
crossRidLaneVO
.
setLaneName
(
laneName
);
if
(
ObjectUtil
.
isEmpty
(
laneDTOS
.
get
(
0
).
getInDir
())||
ObjectUtil
.
isEmpty
(
laneDTOS
.
get
(
0
).
getOutDir
()))
{
if
(
ObjectUtil
.
isEmpty
(
laneDTOS
.
get
(
0
).
getInDir
())
||
ObjectUtil
.
isEmpty
(
laneDTOS
.
get
(
0
).
getOutDir
()))
{
crossRidLaneVO
.
setLaneDir
(
getLaneDir
(
laneDTOS
.
get
(
0
).
getDir
()));
crossRidLaneVO
.
setLaneDir
(
getLaneDir
(
laneDTOS
.
get
(
0
).
getDir
()));
}
else
{
}
else
{
crossRidLaneVO
.
setLaneDir
(
CrossDirEnum
.
getDesc
(
laneDTOS
.
get
(
0
).
getInDir
())
+
CrossDirEnum
.
getDesc
(
laneDTOS
.
get
(
0
).
getOutDir
())+
"走向"
);
crossRidLaneVO
.
setLaneDir
(
CrossDirEnum
.
getDesc
(
laneDTOS
.
get
(
0
).
getInDir
())
+
CrossDirEnum
.
getDesc
(
laneDTOS
.
get
(
0
).
getOutDir
())
+
"走向"
);
}
}
crossRidLaneVO
.
setLaneNum
(
laneDTOS
.
size
());
crossRidLaneVO
.
setLaneNum
(
laneDTOS
.
size
());
Map
<
Integer
,
List
<
CrossRidLaneDTO
>>
dirLaneMap
=
laneDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossRidLaneDTO:
:
getDir
));
Map
<
Integer
,
List
<
CrossRidLaneDTO
>>
dirLaneMap
=
laneDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossRidLaneDTO:
:
getDir
));
...
@@ -70,14 +74,14 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
...
@@ -70,14 +74,14 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
for
(
Integer
dir
:
dirLaneMap
.
keySet
())
{
for
(
Integer
dir
:
dirLaneMap
.
keySet
())
{
List
<
CrossRidLaneDTO
>
dirLaneDTOS
=
dirLaneMap
.
get
(
dir
);
List
<
CrossRidLaneDTO
>
dirLaneDTOS
=
dirLaneMap
.
get
(
dir
);
LaneDirNumVO
laneDirNumVO
=
new
LaneDirNumVO
();
LaneDirNumVO
laneDirNumVO
=
new
LaneDirNumVO
();
laneDirNumVO
.
setLaneInDir
(
CrossDirEnum
.
getDesc
(
dir
)
+
"进口"
);
laneDirNumVO
.
setLaneInDir
(
CrossDirEnum
.
getDesc
(
dir
)
+
"进口"
);
laneDirNumVO
.
setLaneDirNum
(
dirLaneDTOS
.
size
());
laneDirNumVO
.
setLaneDirNum
(
dirLaneDTOS
.
size
());
Map
<
Integer
,
List
<
CrossRidLaneDTO
>>
turnMap
=
dirLaneDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossRidLaneDTO:
:
getTurn
));
Map
<
Integer
,
List
<
CrossRidLaneDTO
>>
turnMap
=
dirLaneDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossRidLaneDTO:
:
getTurn
));
String
laneDirTurn
=
""
;
String
laneDirTurn
=
""
;
for
(
Integer
turn
:
turnMap
.
keySet
())
{
for
(
Integer
turn
:
turnMap
.
keySet
())
{
if
(
""
.
equals
(
laneDirTurn
))
{
if
(
""
.
equals
(
laneDirTurn
))
{
laneDirTurn
=
turnMap
.
get
(
turn
).
size
()
+
LaneTurnEnum
.
getDesc
(
turn
);
laneDirTurn
=
turnMap
.
get
(
turn
).
size
()
+
LaneTurnEnum
.
getDesc
(
turn
);
}
else
{
}
else
{
laneDirTurn
=
laneDirTurn
+
","
+
turnMap
.
get
(
turn
).
size
()
+
LaneTurnEnum
.
getDesc
(
turn
);
laneDirTurn
=
laneDirTurn
+
","
+
turnMap
.
get
(
turn
).
size
()
+
LaneTurnEnum
.
getDesc
(
turn
);
}
}
}
}
...
@@ -93,8 +97,292 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
...
@@ -93,8 +97,292 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
return
crossRidLaneResultList
;
return
crossRidLaneResultList
;
}
}
@Override
public
CrossRunStateAnalysisResultResponseDTO
getTotalitySituation
(
String
crossIds
,
Integer
year
,
Integer
week
)
{
List
<
String
>
crossIdList
=
null
;
Integer
yearWeek
=
Integer
.
valueOf
(
""
+
year
+
week
);
Integer
yearWeekLast
=
Integer
.
valueOf
(
""
+
year
+
(
week
-
1
));
if
(
ObjectUtil
.
isNotEmpty
(
crossIds
))
{
crossIdList
=
Arrays
.
stream
(
crossIds
.
split
(
","
))
.
map
(
String:
:
trim
)
// 去除可能的空格
.
filter
(
s
->
!
s
.
isEmpty
())
// 过滤掉空字符串
.
collect
(
Collectors
.
toList
());
}
CrossRunStateAnalysisResultResponseDTO
crossRunStateAnalysisResultResponseDTO
=
new
CrossRunStateAnalysisResultResponseDTO
();
//按周,路口id查询
List
<
CrossPeakAnalysis
>
list
=
crossRidLaneMapper
.
getTotalitySituation
(
crossIdList
,
yearWeek
,
null
,
null
);
List
<
CrossPeakAnalysis
>
listLast
=
crossRidLaneMapper
.
getTotalitySituation
(
crossIdList
,
yearWeekLast
,
null
,
null
);
if
(
ObjectUtil
.
isEmpty
(
list
))
{
return
null
;
}
//最大车流路口
String
maxFlowCrossId
=
""
;
int
maxFlowTotal
=
0
;
//最大交通指数路口
String
maxTrafficIndexCrossId
=
""
;
double
maxTrafficIndex
=
0
;
for
(
CrossPeakAnalysis
crossPeakAnalysis
:
list
)
{
if
(
crossPeakAnalysis
.
getDayTotalFlow
()
>
maxFlowTotal
)
{
maxFlowTotal
=
crossPeakAnalysis
.
getDayTotalFlow
();
maxFlowCrossId
=
crossPeakAnalysis
.
getCrossId
();
}
}
BaseCrossInfoPO
maxFlowTotalBaseCrossInfoPO
=
maxFlowTotalBaseCrossInfoPO
=
baseCrossInfoMapper
.
selectById
(
maxFlowCrossId
);
crossRunStateAnalysisResultResponseDTO
.
setMaxFlowCrossName
(
maxFlowTotalBaseCrossInfoPO
.
getName
());
for
(
CrossPeakAnalysis
crossPeakAnalysis
:
list
)
{
if
(
crossPeakAnalysis
.
getPeakTrafficIndex
()
>
maxTrafficIndex
)
{
maxTrafficIndex
=
crossPeakAnalysis
.
getDayTotalFlow
();
maxTrafficIndexCrossId
=
crossPeakAnalysis
.
getCrossId
();
}
}
BaseCrossInfoPO
maxTrafficIndexBaseCrossInfoPO
=
baseCrossInfoMapper
.
selectById
(
maxTrafficIndexCrossId
);
crossRunStateAnalysisResultResponseDTO
.
setMaxTrafficIndexCrossName
(
maxTrafficIndexBaseCrossInfoPO
.
getName
());
//按工作日分组
Map
<
Integer
,
List
<
CrossPeakAnalysis
>>
dayTypeMap
=
list
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getDayType
));
Map
<
Integer
,
List
<
CrossPeakAnalysis
>>
dayTypeMapLast
=
listLast
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getDayType
));
double
workTotalFlow
=
0
;
double
workTotalFlowLast
=
0
;
int
workDayAmPeakMaxHourFlow
=
0
;
int
workDayAmPeakMaxHourFlowLast
=
0
;
int
workDayPmPeakMaxHourFlow
=
0
;
int
workDayPmPeakMaxHourFlowLast
=
0
;
int
workDayFmPeakMaxHourFlow
=
0
;
int
workDayFmPeakMaxHourFlowLast
=
0
;
double
weekEndAvgFlow
=
0
;
double
weekEndAvgFlowLast
=
0
;
double
workDayAmPeakAvgTrafficIndex
=
0
;
double
workDayAmPeakAvgTrafficIndexLast
=
0
;
double
workDayPmPeakAvgTrafficIndex
=
0
;
double
workDayPmPeakAvgTrafficIndexLast
=
0
;
if
(
ObjectUtil
.
isNotEmpty
(
dayTypeMap
.
get
(
1
)))
{
//工作日平均流量
workTotalFlow
=
dayTypeMap
.
get
(
1
).
stream
().
mapToInt
(
CrossPeakAnalysis:
:
getDayTotalFlow
).
average
().
orElse
(
0.0
);
//工作日高峰最大小时流量
Map
<
Integer
,
Integer
>
peakMaxHourFlowByPeak
=
dayTypeMap
.
get
(
1
).
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getDayType
,
// 按 dayType 分组
Collectors
.
collectingAndThen
(
// 对分组后的数据进行进一步处理
Collectors
.
maxBy
(
Comparator
.
comparingInt
(
CrossPeakAnalysis:
:
getPeakMaxHourFlow
)),
// 找到每组的最大值
optionalAnalysis
->
optionalAnalysis
.
map
(
CrossPeakAnalysis:
:
getPeakMaxHourFlow
).
orElse
(
0
)
// 提取最大值并提供默认值
)));
//工作日高峰平均交通指数
Map
<
Integer
,
Double
>
workDayPeakAvgTrafficIndexBypeak
=
dayTypeMap
.
get
(
1
).
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getDayType
,
// 按 dayType 分组
Collectors
.
averagingDouble
(
CrossPeakAnalysis:
:
getPeakTrafficIndex
)
));
workDayAmPeakMaxHourFlow
=
ObjectUtil
.
isEmpty
(
peakMaxHourFlowByPeak
.
get
(
1
))
?
0
:
peakMaxHourFlowByPeak
.
get
(
1
);
workDayPmPeakMaxHourFlow
=
ObjectUtil
.
isEmpty
(
peakMaxHourFlowByPeak
.
get
(
2
))
?
0
:
peakMaxHourFlowByPeak
.
get
(
2
);
workDayFmPeakMaxHourFlow
=
ObjectUtil
.
isEmpty
(
peakMaxHourFlowByPeak
.
get
(
3
))
?
0
:
peakMaxHourFlowByPeak
.
get
(
3
);
workDayAmPeakAvgTrafficIndex
=
ObjectUtil
.
isEmpty
(
workDayPeakAvgTrafficIndexBypeak
.
get
(
1
))
?
0
:
workDayPeakAvgTrafficIndexBypeak
.
get
(
1
);
workDayPmPeakAvgTrafficIndex
=
ObjectUtil
.
isEmpty
(
workDayPeakAvgTrafficIndexBypeak
.
get
(
2
))
?
0
:
workDayPeakAvgTrafficIndexBypeak
.
get
(
2
);
}
if
(
ObjectUtil
.
isNotEmpty
(
dayTypeMapLast
.
get
(
1
)))
{
//上周工作日平均流量
workTotalFlowLast
=
dayTypeMapLast
.
get
(
1
).
stream
().
mapToInt
(
CrossPeakAnalysis:
:
getDayTotalFlow
).
average
().
orElse
(
0.0
);
//上周工作日高峰最大小时流量
Map
<
Integer
,
Integer
>
peakMaxHourFlowByPeakLast
=
dayTypeMapLast
.
get
(
1
).
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getDayType
,
// 按 dayType 分组
Collectors
.
collectingAndThen
(
// 对分组后的数据进行进一步处理
Collectors
.
maxBy
(
Comparator
.
comparingInt
(
CrossPeakAnalysis:
:
getPeakMaxHourFlow
)),
// 找到每组的最大值
optionalAnalysis
->
optionalAnalysis
.
map
(
CrossPeakAnalysis:
:
getPeakMaxHourFlow
).
orElse
(
0
)
// 提取最大值并提供默认值
)));
//上周工作日高峰平均交通指数
Map
<
Integer
,
Double
>
workDayPeakAvgTrafficIndexBypeakLast
=
dayTypeMapLast
.
get
(
1
).
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getDayType
,
// 按 dayType 分组
Collectors
.
averagingDouble
(
CrossPeakAnalysis:
:
getPeakTrafficIndex
)
));
workDayAmPeakMaxHourFlowLast
=
ObjectUtil
.
isEmpty
(
peakMaxHourFlowByPeakLast
.
get
(
1
))
?
0
:
peakMaxHourFlowByPeakLast
.
get
(
1
);
workDayPmPeakMaxHourFlowLast
=
ObjectUtil
.
isEmpty
(
peakMaxHourFlowByPeakLast
.
get
(
2
))
?
0
:
peakMaxHourFlowByPeakLast
.
get
(
2
);
workDayFmPeakMaxHourFlowLast
=
ObjectUtil
.
isEmpty
(
peakMaxHourFlowByPeakLast
.
get
(
3
))
?
0
:
peakMaxHourFlowByPeakLast
.
get
(
3
);
workDayAmPeakAvgTrafficIndexLast
=
ObjectUtil
.
isEmpty
(
workDayPeakAvgTrafficIndexBypeakLast
.
get
(
1
))
?
0
:
workDayPeakAvgTrafficIndexBypeakLast
.
get
(
1
);
workDayPmPeakAvgTrafficIndexLast
=
ObjectUtil
.
isEmpty
(
workDayPeakAvgTrafficIndexBypeakLast
.
get
(
2
))
?
0
:
workDayPeakAvgTrafficIndexBypeakLast
.
get
(
2
);
}
if
(
ObjectUtil
.
isNotEmpty
(
dayTypeMap
.
get
(
2
)))
{
//周末车流量
weekEndAvgFlow
=
dayTypeMap
.
get
(
2
).
stream
().
mapToInt
(
CrossPeakAnalysis:
:
getDayTotalFlow
).
average
().
orElse
(
0.0
);
}
if
(
ObjectUtil
.
isNotEmpty
(
dayTypeMapLast
.
get
(
2
)))
{
//上周周末车流量
weekEndAvgFlowLast
=
dayTypeMapLast
.
get
(
2
).
stream
().
mapToInt
(
CrossPeakAnalysis:
:
getDayTotalFlow
).
average
().
orElse
(
0.0
);
}
//工作日平均车流差
double
workTotalFlowSum
=
workTotalFlow
-
workTotalFlowLast
;
//周末平均车流差
double
weekEndAvgFlowSum
=
weekEndAvgFlow
-
weekEndAvgFlowLast
;
int
workDayAmPeakMaxHourFlowSum
=
workDayAmPeakMaxHourFlow
-
workDayAmPeakMaxHourFlowLast
;
int
workDayPmPeakMaxHourFlowSum
=
workDayPmPeakMaxHourFlow
-
workDayPmPeakMaxHourFlowLast
;
int
workDayFmPeakMaxHourFlowSum
=
workDayFmPeakMaxHourFlow
-
workDayFmPeakMaxHourFlowLast
;
double
workDayAmPeakAvgTrafficIndexSum
=
workDayAmPeakAvgTrafficIndex
-
workDayAmPeakAvgTrafficIndexLast
;
double
workDayPmPeakAvgTrafficIndexSum
=
workDayPmPeakAvgTrafficIndex
-
workDayPmPeakAvgTrafficIndexLast
;
//工作日、周末车流
crossRunStateAnalysisResultResponseDTO
.
setWorkDayAvgFlow
(
String
.
valueOf
(
Math
.
round
(
workTotalFlow
))
+
"辆"
);
crossRunStateAnalysisResultResponseDTO
.
setWeekEndAvgFlow
(
String
.
valueOf
(
Math
.
round
(
weekEndAvgFlow
))
+
"辆"
);
crossRunStateAnalysisResultResponseDTO
.
setWorkDayAmPeakMaxHourFlow
(
String
.
valueOf
(
workDayAmPeakMaxHourFlow
)
+
"辆"
);
crossRunStateAnalysisResultResponseDTO
.
setWorkDayPmPeakMaxHourFlow
(
String
.
valueOf
(
workDayPmPeakMaxHourFlow
)
+
"辆"
);
crossRunStateAnalysisResultResponseDTO
.
setWorkDayFmPeakMaxHourFlow
(
String
.
valueOf
(
workDayFmPeakMaxHourFlow
)
+
"辆"
);
crossRunStateAnalysisResultResponseDTO
.
setWorkDayAmPeakAvgTrafficIndex
(
String
.
valueOf
(
workDayAmPeakAvgTrafficIndex
));
crossRunStateAnalysisResultResponseDTO
.
setWorkDayPmPeakAvgTrafficIndex
(
String
.
valueOf
(
workDayPmPeakAvgTrafficIndex
));
if
(
workTotalFlowSum
>
0
)
{
crossRunStateAnalysisResultResponseDTO
.
setAvgFlowLastWeekCompare
(
"提升"
+
Math
.
round
(
workTotalFlowSum
)
+
"辆"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setAvgFlowLastWeekCompare
(
"下降"
+
Math
.
abs
(
Math
.
round
(
workTotalFlowSum
))
+
"辆"
);
}
if
(
weekEndAvgFlowSum
>
0
)
{
crossRunStateAnalysisResultResponseDTO
.
setEndAvgFlowLastWeekCompare
(
"提升"
+
weekEndAvgFlowSum
+
"辆"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setEndAvgFlowLastWeekCompare
(
"下降"
+
Math
.
abs
(
weekEndAvgFlowSum
)
+
"辆"
);
}
if
(
workDayAmPeakMaxHourFlowSum
>
0
)
{
crossRunStateAnalysisResultResponseDTO
.
setAmPeakMaxHourFlowLastWeekCompare
(
"提升"
+
workDayAmPeakMaxHourFlowSum
+
"辆"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setAmPeakMaxHourFlowLastWeekCompare
(
"下降"
+
Math
.
abs
(
workDayAmPeakMaxHourFlowSum
)
+
"辆"
);
}
if
(
workDayPmPeakMaxHourFlowSum
>
0
)
{
crossRunStateAnalysisResultResponseDTO
.
setPmPeakMaxHourFlowLastWeekCompare
(
"提升"
+
workDayPmPeakMaxHourFlowSum
+
"辆"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setPmPeakMaxHourFlowLastWeekCompare
(
"下降"
+
Math
.
abs
(
workDayPmPeakMaxHourFlowSum
)
+
"辆"
);
}
if
(
workDayFmPeakMaxHourFlowSum
>
0
)
{
crossRunStateAnalysisResultResponseDTO
.
setFmPeakMaxHourFlowLastWeekCompare
(
"提升"
+
workDayFmPeakMaxHourFlowSum
+
"辆"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setFmPeakMaxHourFlowLastWeekCompare
(
"下降"
+
Math
.
abs
(
workDayFmPeakMaxHourFlowSum
)
+
"辆"
);
}
if
(
workDayAmPeakAvgTrafficIndexSum
>
0
)
{
if
(
workDayAmPeakAvgTrafficIndexLast
==
0
){
crossRunStateAnalysisResultResponseDTO
.
setAmPeakAvgTrafficIndexLastWeekCompare
(
"提升100%"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setAmPeakAvgTrafficIndexLastWeekCompare
(
"提升"
+
Math
.
round
(
workDayAmPeakAvgTrafficIndexSum
*
100
/
workDayAmPeakAvgTrafficIndexLast
*
100
)
/
100.0
+
"%"
);
}
}
else
{
if
(
workDayAmPeakAvgTrafficIndexLast
==
0
){
crossRunStateAnalysisResultResponseDTO
.
setAmPeakAvgTrafficIndexLastWeekCompare
(
"下降0%"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setAmPeakAvgTrafficIndexLastWeekCompare
(
"下降"
+
Math
.
abs
(
Math
.
round
(
workDayAmPeakAvgTrafficIndexSum
*
100
/
workDayAmPeakAvgTrafficIndexLast
*
100
)
/
100.0
)
+
"%"
);
}
}
if
(
workDayPmPeakAvgTrafficIndexSum
>
0
)
{
if
(
workDayAmPeakAvgTrafficIndexLast
==
0
){
crossRunStateAnalysisResultResponseDTO
.
setPmPeakAvgTrafficIndexLastWeekCompare
(
"提升100%"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setPmPeakAvgTrafficIndexLastWeekCompare
(
"提升"
+
Math
.
round
(
workDayPmPeakAvgTrafficIndexSum
*
100
/
workDayAmPeakAvgTrafficIndexLast
*
100
)
/
100.0
+
"%"
);
}
}
else
{
if
(
workDayAmPeakAvgTrafficIndexLast
==
0
){
crossRunStateAnalysisResultResponseDTO
.
setPmPeakAvgTrafficIndexLastWeekCompare
(
"下降0%"
);
}
else
{
crossRunStateAnalysisResultResponseDTO
.
setPmPeakAvgTrafficIndexLastWeekCompare
(
"下降"
+
Math
.
abs
(
Math
.
round
(
workDayPmPeakAvgTrafficIndexSum
*
100
/
workDayPmPeakAvgTrafficIndexLast
*
100
)
/
100.0
)
+
"%"
);
}
}
Map
<
String
,
List
<
CrossPeakAnalysis
>>
crossIdMap
=
list
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getCrossId
));
Map
<
String
,
List
<
CrossPeakAnalysis
>>
crossIdMapLast
=
listLast
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPeakAnalysis:
:
getCrossId
));
List
<
CrossRunStateDetailAnalysisDataDTO
>
crossRunStateDetailAnalysisDataDTOS
=
new
ArrayList
<>();
if
(
ObjectUtil
.
isNotEmpty
(
crossIdMap
)){
for
(
String
crossId
:
crossIdMap
.
keySet
())
{
CrossRunStateDetailAnalysisDataDTO
crossRunStateDetailAnalysisDataDTO
=
new
CrossRunStateDetailAnalysisDataDTO
();
List
<
CrossPeakAnalysis
>
crossPeakAnalyses
=
crossIdMap
.
get
(
crossId
);
List
<
CrossPeakAnalysis
>
crossPeakAnalysesLast
=
crossIdMapLast
.
get
(
crossId
);
int
thisWeekPeakMaxFlow
=
0
;
int
lastWeekPeakMaxFlow
=
0
;
int
thisWeekEndMaxFlow
=
0
;
int
lastWeekEndMaxFlow
=
0
;
double
thisWeekWorkDayAmTrafficIndex
=
0
;
int
thisWeekWorkDayAmTrafficIndexCount
=
0
;
double
lastWeekWorkDayAmTrafficIndex
=
0
;
int
lastWeekWorkDayAmTrafficIndexCount
=
0
;
double
thisWeekWorkDayPmTrafficIndex
=
0
;
int
thisWeekWorkDayPmTrafficIndexCount
=
0
;
double
lastWeekWorkDayPmTrafficIndex
=
0
;
int
lastWeekWorkDayPmTrafficIndexCount
=
0
;
if
(
ObjectUtil
.
isNotEmpty
(
crossPeakAnalyses
)){
for
(
CrossPeakAnalysis
crossPeakAnalysis
:
crossPeakAnalyses
)
{
if
(
crossPeakAnalysis
.
getDayType
()
==
1
)
{
if
(
crossPeakAnalysis
.
getPeakMaxHourFlow
()
>
thisWeekPeakMaxFlow
)
{
thisWeekPeakMaxFlow
=
crossPeakAnalysis
.
getPeakMaxHourFlow
();
}
if
(
crossPeakAnalysis
.
getPeakType
()
==
1
)
{
thisWeekWorkDayAmTrafficIndexCount
++;
thisWeekWorkDayAmTrafficIndex
+=
crossPeakAnalysis
.
getPeakTrafficIndex
();
}
if
(
crossPeakAnalysis
.
getPeakType
()
==
2
)
{
thisWeekWorkDayPmTrafficIndexCount
++;
thisWeekWorkDayPmTrafficIndex
+=
crossPeakAnalysis
.
getPeakTrafficIndex
();
}
}
if
(
crossPeakAnalysis
.
getDayType
()
==
2
)
{
if
(
crossPeakAnalysis
.
getPeakMaxHourFlow
()
>
thisWeekEndMaxFlow
)
{
thisWeekEndMaxFlow
=
crossPeakAnalysis
.
getPeakMaxHourFlow
();
}
}
}
}
if
(
ObjectUtil
.
isNotEmpty
(
crossPeakAnalysesLast
)){
for
(
CrossPeakAnalysis
crossPeakAnalysis
:
crossPeakAnalysesLast
)
{
if
(
crossPeakAnalysis
.
getDayType
()
==
1
)
{
if
(
crossPeakAnalysis
.
getPeakMaxHourFlow
()
>
lastWeekPeakMaxFlow
)
{
lastWeekEndMaxFlow
=
crossPeakAnalysis
.
getPeakMaxHourFlow
();
}
if
(
crossPeakAnalysis
.
getPeakType
()
==
1
)
{
lastWeekWorkDayAmTrafficIndexCount
++;
lastWeekWorkDayAmTrafficIndex
+=
crossPeakAnalysis
.
getPeakTrafficIndex
();
}
if
(
crossPeakAnalysis
.
getPeakType
()
==
2
)
{
lastWeekWorkDayPmTrafficIndexCount
++;
lastWeekWorkDayPmTrafficIndex
+=
crossPeakAnalysis
.
getPeakTrafficIndex
();
}
}
if
(
crossPeakAnalysis
.
getDayType
()
==
2
)
{
if
(
crossPeakAnalysis
.
getPeakMaxHourFlow
()
>
lastWeekEndMaxFlow
)
{
lastWeekEndMaxFlow
=
crossPeakAnalysis
.
getPeakMaxHourFlow
();
}
}
}
}
crossRunStateDetailAnalysisDataDTO
.
setThisWeekPeakMaxFlow
(
thisWeekPeakMaxFlow
);
crossRunStateDetailAnalysisDataDTO
.
setLastWeekPeakMaxFlow
(
lastWeekPeakMaxFlow
);
crossRunStateDetailAnalysisDataDTO
.
setThisWeekEndMaxFlow
(
thisWeekEndMaxFlow
);
crossRunStateDetailAnalysisDataDTO
.
setLastWeekEndMaxFlow
(
lastWeekEndMaxFlow
);
if
(
thisWeekWorkDayAmTrafficIndexCount
==
0
){
crossRunStateDetailAnalysisDataDTO
.
setThisWeekWorkDayAmTrafficIndex
(
0.0
);
}
else
{
crossRunStateDetailAnalysisDataDTO
.
setThisWeekWorkDayAmTrafficIndex
(
thisWeekWorkDayAmTrafficIndex
/
thisWeekWorkDayAmTrafficIndexCount
);
}
if
(
lastWeekWorkDayAmTrafficIndexCount
==
0
){
crossRunStateDetailAnalysisDataDTO
.
setLastWeekWorkDayAmTrafficIndex
(
0.0
);
}
else
{
crossRunStateDetailAnalysisDataDTO
.
setLastWeekWorkDayAmTrafficIndex
(
lastWeekWorkDayAmTrafficIndex
/
lastWeekWorkDayAmTrafficIndexCount
);
}
if
(
thisWeekWorkDayPmTrafficIndexCount
==
0
){
crossRunStateDetailAnalysisDataDTO
.
setThisWeekWorkDayPmTrafficIndex
(
0.0
);
}
else
{
crossRunStateDetailAnalysisDataDTO
.
setThisWeekWorkDayPmTrafficIndex
(
thisWeekWorkDayPmTrafficIndex
/
thisWeekWorkDayPmTrafficIndexCount
);
}
if
(
lastWeekWorkDayPmTrafficIndexCount
==
0
){
crossRunStateDetailAnalysisDataDTO
.
setThisWeekWorkDayAmTrafficIndex
(
0.0
);
}
else
{
crossRunStateDetailAnalysisDataDTO
.
setThisWeekWorkDayAmTrafficIndex
(
lastWeekWorkDayPmTrafficIndex
/
lastWeekWorkDayPmTrafficIndexCount
);
}
crossRunStateDetailAnalysisDataDTOS
.
add
(
crossRunStateDetailAnalysisDataDTO
);
}
}
crossRunStateAnalysisResultResponseDTO
.
setDataList
(
crossRunStateDetailAnalysisDataDTOS
);
return
crossRunStateAnalysisResultResponseDTO
;
}
private
String
getLaneDir
(
Integer
dir
)
{
private
String
getLaneDir
(
Integer
dir
)
{
switch
(
dir
){
switch
(
dir
)
{
case
1
:
case
1
:
return
"南北走向"
;
return
"南北走向"
;
case
2
:
case
2
:
...
@@ -129,7 +417,7 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
...
@@ -129,7 +417,7 @@ public class CrossRidLaneServiceImpl implements CrossRidLaneService {
String
longitude
=
parts
[
0
];
// 经度
String
longitude
=
parts
[
0
];
// 经度
String
latitude
=
parts
[
1
];
// 纬度
String
latitude
=
parts
[
1
];
// 纬度
return
longitude
+
","
+
latitude
;
return
longitude
+
","
+
latitude
;
}
else
{
}
else
{
log
.
error
(
"未找到匹配的 POINT 格式"
);
log
.
error
(
"未找到匹配的 POINT 格式"
);
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/strategy/StrategyPriorityService.java
View file @
c886e08d
...
@@ -34,7 +34,7 @@ public interface StrategyPriorityService extends IService<StrategyPriorityDailyI
...
@@ -34,7 +34,7 @@ public interface StrategyPriorityService extends IService<StrategyPriorityDailyI
void
savePriority
(
List
<
StrategyPriorityGroup
>
dataList
);
void
savePriority
(
List
<
StrategyPriorityGroup
>
dataList
);
List
<
StrategyFactoryEntity
>
getPriorityData
(
String
crossId
)
;
List
<
StrategyFactoryEntity
>
getPriorityData
(
String
crossId
,
Integer
greenId
,
Integer
type
)
throws
Exception
;
void
savePlanConfig
(
List
<
StrategyPriorityGroup
>
dailyPlanDetails
)
throws
JsonProcessingException
;
void
savePlanConfig
(
List
<
StrategyPriorityGroup
>
dailyPlanDetails
)
throws
JsonProcessingException
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/strategy/impl/StrategyPriorityServiceImpl.java
View file @
c886e08d
...
@@ -81,13 +81,18 @@ import java.util.stream.Collectors;
...
@@ -81,13 +81,18 @@ import java.util.stream.Collectors;
List
<
StrategyFactoryEntity
>
strategyList
=
strategyPriorityMapper
.
getCompanyList
();
List
<
StrategyFactoryEntity
>
strategyList
=
strategyPriorityMapper
.
getCompanyList
();
return
strategyList
;
return
strategyList
;
}
}
/*
* 策略优先级保存 路口 干线共用
* */
@Override
@Override
@Transactional
@Transactional
public
void
savePriority
(
List
<
StrategyPriorityGroup
>
dataList
)
{
public
void
savePriority
(
List
<
StrategyPriorityGroup
>
dataList
)
{
try
{
try
{
List
<
StrategyPriorityConfig
>
saveList
=
new
ArrayList
<>();
List
<
StrategyPriorityConfig
>
saveList
=
new
ArrayList
<>();
for
(
StrategyPriorityGroup
group
:
dataList
)
{
for
(
StrategyPriorityGroup
group
:
dataList
)
{
//Type : 1;路口2:干线
Integer
typePd
=
group
.
getType
();
if
(
typePd
==
1
)
{
String
label
=
group
.
getLabel
();
String
label
=
group
.
getLabel
();
Integer
labelCode
=
group
.
getLabelCode
();
Integer
labelCode
=
group
.
getLabelCode
();
//1;路口2干线
//1;路口2干线
...
@@ -120,6 +125,41 @@ import java.util.stream.Collectors;
...
@@ -120,6 +125,41 @@ import java.util.stream.Collectors;
}
}
}
}
}
}
}
else
if
(
typePd
==
2
){
String
label
=
group
.
getLabel
();
Integer
labelCode
=
group
.
getLabelCode
();
//1;路口2干线
Integer
type
=
group
.
getType
();
//干线id
List
<
Integer
>
greenList
=
group
.
getGreenIds
();
//选中多个干线存多条数据
for
(
Integer
greenId
:
greenList
)
{
//先判断表里有没有数据,有的话删除t_strategy_priority_config
List
<
StrategyPriorityConfig
>
priorityConfig
=
strategyPriorityMapper
.
selectGreenPriorityTable
(
greenId
);
if
(
priorityConfig
.
size
()
>
0
)
{
strategyPriorityMapper
.
deleteGreenPriorityConfig
(
greenId
);
}
if
(
CollectionUtils
.
isNotEmpty
(
group
.
getData
()))
{
for
(
StrategyPriorityConfig
item
:
group
.
getData
())
{
StrategyPriorityConfig
strategyPriorityConfig
=
new
StrategyPriorityConfig
();
//干线id
strategyPriorityConfig
.
setGreenId
(
greenId
);
//分组id
strategyPriorityConfig
.
setGroupId
(
labelCode
);
//分组名称
strategyPriorityConfig
.
setGroupName
(
label
);
//策略编号
strategyPriorityConfig
.
setStrategyNo
(
item
.
getStrategyNo
());
//优先级
strategyPriorityConfig
.
setPriority
(
item
.
getPriority
());
//type
strategyPriorityConfig
.
setType
(
type
);
saveList
.
add
(
strategyPriorityConfig
);
}
}
}
}
}
}
strategyPriorityMapper
.
savePriorityInsert
(
saveList
);
strategyPriorityMapper
.
savePriorityInsert
(
saveList
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
@@ -128,17 +168,38 @@ import java.util.stream.Collectors;
...
@@ -128,17 +168,38 @@ import java.util.stream.Collectors;
}
}
}
}
/*
* 策略优先级路口跟干线数据回显
* */
@Override
@Override
@Transactional
@Transactional
public
List
<
StrategyFactoryEntity
>
getPriorityData
(
String
crossId
)
{
public
List
<
StrategyFactoryEntity
>
getPriorityData
(
String
crossId
,
Integer
greenId
,
Integer
type
)
throws
Exception
{
try
{
try
{
List
<
StrategyFactoryEntity
>
priorityList
=
new
ArrayList
<>();
//type: 1路口 2干线
if
(
type
==
1
)
{
if
(
crossId
.
isEmpty
()){
throw
new
IllegalArgumentException
(
"crossId cannot be null"
);
}
//先获取策略编号
List
<
String
>
strategyNo
=
strategyPriorityMapper
.
getstrategyNo
(
crossId
,
type
);
if
(
CollectionUtils
.
isEmpty
(
strategyNo
))
{
return
Collections
.
emptyList
();
}
priorityList
=
strategyPriorityMapper
.
getPriorityConfigData
(
strategyNo
,
crossId
,
type
);
}
else
if
(
type
==
2
){
if
(
greenId
==
null
){
throw
new
IllegalArgumentException
(
"greenId cannot be null"
);
}
//先获取策略编号
//先获取策略编号
List
<
String
>
strategyNo
=
strategyPriorityMapper
.
getstrategyNo
(
crossId
);
List
<
String
>
strategyNo
=
strategyPriorityMapper
.
getGreenstrategyNo
(
greenId
,
type
);
if
(
CollectionUtils
.
isEmpty
(
strategyNo
))
{
if
(
CollectionUtils
.
isEmpty
(
strategyNo
))
{
return
Collections
.
emptyList
();
return
Collections
.
emptyList
();
}
}
List
<
StrategyFactoryEntity
>
priorityList
=
strategyPriorityMapper
.
getPriorityConfigData
(
strategyNo
,
crossId
);
priorityList
=
strategyPriorityMapper
.
getGreenPriorityConfigData
(
strategyNo
,
greenId
,
type
);
}
return
priorityList
;
return
priorityList
;
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
log
.
error
(
"{} getPriorityData"
,
this
.
getClass
().
getSimpleName
(),
e
);
log
.
error
(
"{} getPriorityData"
,
this
.
getClass
().
getSimpleName
(),
e
);
...
@@ -147,6 +208,9 @@ import java.util.stream.Collectors;
...
@@ -147,6 +208,9 @@ import java.util.stream.Collectors;
}
}
/*
* 策略管理日计划批量保存 干线跟路口
* */
@Override
@Override
@Transactional
@Transactional
public
void
savePlanConfig
(
List
<
StrategyPriorityGroup
>
dailyPlanDetails
)
throws
JsonProcessingException
{
public
void
savePlanConfig
(
List
<
StrategyPriorityGroup
>
dailyPlanDetails
)
throws
JsonProcessingException
{
...
@@ -155,12 +219,18 @@ import java.util.stream.Collectors;
...
@@ -155,12 +219,18 @@ import java.util.stream.Collectors;
List
<
StrategyPriorityDailyInfo
>
savePlanList
=
new
ArrayList
<>();
List
<
StrategyPriorityDailyInfo
>
savePlanList
=
new
ArrayList
<>();
ObjectMapper
objectMapper
=
new
ObjectMapper
();
ObjectMapper
objectMapper
=
new
ObjectMapper
();
for
(
StrategyPriorityGroup
group
:
dailyPlanDetails
)
{
for
(
StrategyPriorityGroup
group
:
dailyPlanDetails
)
{
//Type : 1;路口2:干线
Integer
typePd
=
group
.
getType
();
if
(
typePd
==
1
)
{
//路口ID
//路口ID
List
<
String
>
crossList
=
group
.
getCrossIds
();
List
<
String
>
crossList
=
group
.
getCrossIds
();
//选中多个路口存多条数据
//选中多个路口存多条数据
for
(
String
crossId
:
crossList
)
{
for
(
String
crossId
:
crossList
)
{
StrategyPriorityDailyInfo
strategyPriorityDailyInfo
=
new
StrategyPriorityDailyInfo
();
StrategyPriorityDailyInfo
strategyPriorityDailyInfo
=
new
StrategyPriorityDailyInfo
();
strategyPriorityDailyInfo
.
setCrossId
(
crossId
);
strategyPriorityDailyInfo
.
setCrossId
(
crossId
);
//1;路口2干线
Integer
type
=
group
.
getType
();
strategyPriorityDailyInfo
.
setType
(
type
);
//日计划编号
//日计划编号
Integer
dailyPlanId
=
group
.
getDailyPlanId
();
Integer
dailyPlanId
=
group
.
getDailyPlanId
();
strategyPriorityDailyInfo
.
setDailyPlanId
(
dailyPlanId
);
strategyPriorityDailyInfo
.
setDailyPlanId
(
dailyPlanId
);
...
@@ -178,10 +248,41 @@ import java.util.stream.Collectors;
...
@@ -178,10 +248,41 @@ import java.util.stream.Collectors;
String
dailyPlanDetailsJson
=
JSON
.
toJSONString
(
dailyPlanDetails1
);
String
dailyPlanDetailsJson
=
JSON
.
toJSONString
(
dailyPlanDetails1
);
strategyPriorityDailyInfo
.
setDailyPlanDetails
(
dailyPlanDetailsJson
);
strategyPriorityDailyInfo
.
setDailyPlanDetails
(
dailyPlanDetailsJson
);
savePlanList
.
add
(
strategyPriorityDailyInfo
);
}
}
else
if
(
typePd
==
2
){
//干线ID
List
<
Integer
>
greenIdList
=
group
.
getGreenIds
();
//选中多个路口存多条数据
for
(
Integer
greenId
:
greenIdList
)
{
StrategyPriorityDailyInfo
strategyPriorityDailyInfo
=
new
StrategyPriorityDailyInfo
();
strategyPriorityDailyInfo
.
setGreenId
(
greenId
);
//1;路口2干线
Integer
type
=
group
.
getType
();
strategyPriorityDailyInfo
.
setType
(
type
);
//日计划编号
Integer
dailyPlanId
=
group
.
getDailyPlanId
();
strategyPriorityDailyInfo
.
setDailyPlanId
(
dailyPlanId
);
//执行时间
String
weekExecute
=
group
.
getWeekExecute
();
strategyPriorityDailyInfo
.
setWeekExecute
(
weekExecute
);
//先判断表里有没有数据,有的话删除t_strategy_priority_daily_info
List
<
StrategyPriorityDailyInfo
>
planConfig
=
strategyPriorityMapper
.
selectGreenPlanTable
(
greenId
);
if
(
planConfig
.
size
()
>
0
)
{
strategyPriorityMapper
.
deleteGreenPlanConfig
(
greenId
);
}
//取出日计划详情
List
<
StrategyPriorityPlanDetails
>
dailyPlanDetails1
=
group
.
getDailyPlanDetails
();
String
dailyPlanDetailsJson
=
JSON
.
toJSONString
(
dailyPlanDetails1
);
strategyPriorityDailyInfo
.
setDailyPlanDetails
(
dailyPlanDetailsJson
);
savePlanList
.
add
(
strategyPriorityDailyInfo
);
savePlanList
.
add
(
strategyPriorityDailyInfo
);
}
}
}
}
}
strategyPriorityMapper
.
savePlanConfig
(
savePlanList
);
strategyPriorityMapper
.
savePlanConfig
(
savePlanList
);
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
log
.
error
(
"{} savePlanConfig"
,
this
.
getClass
().
getSimpleName
(),
e
);
log
.
error
(
"{} savePlanConfig"
,
this
.
getClass
().
getSimpleName
(),
e
);
throw
e
;
throw
e
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
View file @
c886e08d
...
@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
...
@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
*/
*/
@Component
@Component
@Slf4j
@Slf4j
@Profile
(
"
docker
"
)
@Profile
(
"
test
"
)
public
class
HisenseGreenChartTask
{
public
class
HisenseGreenChartTask
{
@Resource
@Resource
...
@@ -97,7 +97,12 @@ public class HisenseGreenChartTask {
...
@@ -97,7 +97,12 @@ public class HisenseGreenChartTask {
Integer
sort
=
indexDTO
.
getSort
();
Integer
sort
=
indexDTO
.
getSort
();
Integer
indexDir
=
indexDTO
.
getInDir
();
Integer
indexDir
=
indexDTO
.
getInDir
();
Integer
totalDistance
=
indexDTO
.
getTotalDistance
();
Integer
totalDistance
=
indexDTO
.
getTotalDistance
();
Double
travelTime
=
getTravelTime
(
realTimeMap
,
greenId
,
indexDir
,
totalDistance
);
String
greenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexDir
));
GreenwaveRealtimePO
greenwaveRealtimePO
=
realTimeMap
.
get
(
greenKey
);
Double
speed
=
Objects
.
isNull
(
greenwaveRealtimePO
.
getSpeed
())
?
0
:
greenwaveRealtimePO
.
getSpeed
()
;
// km/h速度换成m/s
Double
travelTime
=
totalDistance
/
speed
*
3.6
;
List
<
Double
>
offsets
=
new
ArrayList
<>();
List
<
Double
>
offsets
=
new
ArrayList
<>();
List
<
Double
>
distances
=
new
ArrayList
<>();
List
<
Double
>
distances
=
new
ArrayList
<>();
// 正向红灯时间
// 正向红灯时间
...
@@ -110,15 +115,19 @@ public class HisenseGreenChartTask {
...
@@ -110,15 +115,19 @@ public class HisenseGreenChartTask {
List
<
GreenCrossDirDTO
>
backValue
=
value
.
stream
().
sorted
(
Comparator
.
comparingInt
(
GreenCrossDirDTO:
:
getSort
).
reversed
()).
collect
(
Collectors
.
toList
());
List
<
GreenCrossDirDTO
>
backValue
=
value
.
stream
().
sorted
(
Comparator
.
comparingInt
(
GreenCrossDirDTO:
:
getSort
).
reversed
()).
collect
(
Collectors
.
toList
());
List
<
Double
>
backOffsets
=
new
ArrayList
<>();
List
<
Double
>
backOffsets
=
new
ArrayList
<>();
List
<
Double
>
backDistances
=
new
ArrayList
<>();
List
<
Double
>
backDistances
=
new
ArrayList
<>();
Double
backTravelTime
=
getTravelTime
(
realTimeMap
,
greenId
,
indexOutDir
,
totalDistance
);
String
backGreenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexOutDir
));
GreenwaveRealtimePO
backGreenwaveRealtimePO
=
realTimeMap
.
get
(
backGreenKey
);
// km/h速度换成m/s
Double
backSpeed
=
Objects
.
isNull
(
backGreenwaveRealtimePO
.
getSpeed
())
?
0
:
backGreenwaveRealtimePO
.
getSpeed
();
Double
backTravelTime
=
totalDistance
/
backSpeed
*
3.6
;
Map
<
String
,
List
<
List
<
Double
>>>
backCrossRedTimesMap
=
new
LinkedHashMap
<>();
Map
<
String
,
List
<
List
<
Double
>>>
backCrossRedTimesMap
=
new
LinkedHashMap
<>();
Map
<
String
,
List
<
List
<
Double
>>>
backCrossGreenTimesMap
=
new
LinkedHashMap
<>();
Map
<
String
,
List
<
List
<
Double
>>>
backCrossGreenTimesMap
=
new
LinkedHashMap
<>();
getCrossRedTimeMap
(
mapper
,
greenDirGreenTimeMap
,
backValue
,
indexOutDir
,
backTravelTime
,
backOffsets
,
backDistances
,
backCrossRedTimesMap
,
backCrossGreenTimesMap
);
getCrossRedTimeMap
(
mapper
,
greenDirGreenTimeMap
,
backValue
,
indexOutDir
,
backTravelTime
,
backOffsets
,
backDistances
,
backCrossRedTimesMap
,
backCrossGreenTimesMap
);
greenBeltChartDTO
.
setGreenId
(
greenId
);
greenBeltChartDTO
.
setGreenId
(
greenId
);
greenBeltChartDTO
.
setDir
(
indexDir
);
greenBeltChartDTO
.
setDir
(
indexDir
);
greenBeltChartDTO
.
setBackDir
(
indexOutDir
);
greenBeltChartDTO
.
setBackDir
(
indexOutDir
);
greenBeltChartDTO
.
setSpeed
(
totalDistance
/
travelTime
);
greenBeltChartDTO
.
setSpeed
(
speed
);
greenBeltChartDTO
.
setBackSpeed
(
totalDistance
/
backTravelTime
);
greenBeltChartDTO
.
setBackSpeed
(
backSpeed
);
greenBeltChartDTO
.
setOffsets
(
offsets
);
greenBeltChartDTO
.
setOffsets
(
offsets
);
greenBeltChartDTO
.
setBackOffsets
(
backOffsets
);
greenBeltChartDTO
.
setBackOffsets
(
backOffsets
);
greenBeltChartDTO
.
setDistances
(
distances
);
greenBeltChartDTO
.
setDistances
(
distances
);
...
@@ -140,7 +149,7 @@ public class HisenseGreenChartTask {
...
@@ -140,7 +149,7 @@ public class HisenseGreenChartTask {
// 正向 1
// 正向 1
getGreenwaveStartGroup
(
greenBeltChartDTOS
,
greenwaveStartGroup
,
greenId
,
value
,
1
);
getGreenwaveStartGroup
(
greenBeltChartDTOS
,
greenwaveStartGroup
,
greenId
,
value
,
1
);
// 反向 2
// 反向 2
List
<
GreenCrossDirDTO
>
backValue
=
value
.
stream
().
sorted
(
Comparator
.
comparingInt
(
GreenCrossDirDTO:
:
getSort
)).
collect
(
Collectors
.
toList
());
List
<
GreenCrossDirDTO
>
backValue
=
value
.
stream
().
sorted
(
Comparator
.
comparingInt
(
GreenCrossDirDTO:
:
getSort
)
.
reversed
()
).
collect
(
Collectors
.
toList
());
getGreenwaveStartGroup
(
greenBeltChartDTOS
,
backGreenwaveStartGroup
,
greenId
,
backValue
,
2
);
getGreenwaveStartGroup
(
greenBeltChartDTOS
,
backGreenwaveStartGroup
,
greenId
,
backValue
,
2
);
greenBeltChartDTOS
.
forEach
(
item
->
{
greenBeltChartDTOS
.
forEach
(
item
->
{
if
(
Objects
.
equals
(
greenId
,
item
.
getGreenId
()))
{
if
(
Objects
.
equals
(
greenId
,
item
.
getGreenId
()))
{
...
@@ -157,6 +166,12 @@ public class HisenseGreenChartTask {
...
@@ -157,6 +166,12 @@ public class HisenseGreenChartTask {
greenChartSchemeHist
.
setGreenId
(
greenId
);
greenChartSchemeHist
.
setGreenId
(
greenId
);
greenChartSchemeHist
.
setGreenChart
(
mapper
.
writeValueAsString
(
result
));
greenChartSchemeHist
.
setGreenChart
(
mapper
.
writeValueAsString
(
result
));
greenChartSchemeHist
.
setSchemeDetail
(
mapper
.
writeValueAsString
(
list
));
greenChartSchemeHist
.
setSchemeDetail
(
mapper
.
writeValueAsString
(
list
));
Date
date
=
null
;
if
(!
CollectionUtils
.
isEmpty
(
list
))
{
SchemeGreenDirGreenTimeDTO
dto
=
list
.
get
(
0
);
date
=
dto
.
getDate
();
}
greenChartSchemeHist
.
setQueryDate
(
date
);
greenChartSchemeHistMapper
.
insert
(
greenChartSchemeHist
);
greenChartSchemeHistMapper
.
insert
(
greenChartSchemeHist
);
}
}
log
.
info
(
"绿波图实体参数:{}"
,
mapper
.
writeValueAsString
(
results
));
log
.
info
(
"绿波图实体参数:{}"
,
mapper
.
writeValueAsString
(
results
));
...
@@ -261,27 +276,17 @@ public class HisenseGreenChartTask {
...
@@ -261,27 +276,17 @@ public class HisenseGreenChartTask {
Double
speed
=
greenBeltChartDTO
.
getSpeed
();
Double
speed
=
greenBeltChartDTO
.
getSpeed
();
List
<
Double
>
distances
=
greenBeltChartDTO
.
getDistances
();
List
<
Double
>
distances
=
greenBeltChartDTO
.
getDistances
();
Double
distance
=
distances
.
get
(
i
);
Double
distance
=
distances
.
get
(
i
);
travelTime
=
distance
/
speed
;
travelTime
=
distance
/
speed
*
3.6
;
}
}
if
(
2
==
type
)
{
if
(
2
==
type
)
{
Double
speed
=
greenBeltChartDTO
.
getBackSpeed
();
Double
speed
=
greenBeltChartDTO
.
getBackSpeed
();
List
<
Double
>
distances
=
greenBeltChartDTO
.
getBackDistances
();
List
<
Double
>
distances
=
greenBeltChartDTO
.
getBackDistances
();
Double
distance
=
distances
.
get
(
i
+
1
);
Double
distance
=
distances
.
get
(
i
+
1
);
travelTime
=
distance
/
speed
;
travelTime
=
distance
/
speed
*
3.6
;
}
}
return
travelTime
;
return
travelTime
;
}
}
@NotNull
private
static
Double
getTravelTime
(
Map
<
String
,
GreenwaveRealtimePO
>
realTimeMap
,
Integer
greenId
,
Integer
indexDir
,
Integer
totalDistance
)
{
String
greenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexDir
));
GreenwaveRealtimePO
greenwaveRealtimePO
=
realTimeMap
.
get
(
greenKey
);
// km/h速度换成m/s
Double
speed
=
Objects
.
isNull
(
greenwaveRealtimePO
.
getSpeed
())
?
0
:
greenwaveRealtimePO
.
getSpeed
()
/
3.6
;
Double
travelTime
=
totalDistance
/
speed
;
return
travelTime
;
}
private
static
Map
<
String
,
List
<
List
<
Double
>>>
getCrossRedTimeMap
(
ObjectMapper
mapper
,
HashMap
<
String
,
SchemeGreenDirGreenTimeDTO
>
greenDirGreenTimeMap
,
private
static
Map
<
String
,
List
<
List
<
Double
>>>
getCrossRedTimeMap
(
ObjectMapper
mapper
,
HashMap
<
String
,
SchemeGreenDirGreenTimeDTO
>
greenDirGreenTimeMap
,
List
<
GreenCrossDirDTO
>
value
,
Integer
indexDir
,
Double
travelTime
,
List
<
GreenCrossDirDTO
>
value
,
Integer
indexDir
,
Double
travelTime
,
...
@@ -378,8 +383,7 @@ public class HisenseGreenChartTask {
...
@@ -378,8 +383,7 @@ public class HisenseGreenChartTask {
if
(
StringUtils
.
isBlank
(
str
))
{
if
(
StringUtils
.
isBlank
(
str
))
{
continue
;
continue
;
}
}
List
<
RingPhaseInfoDTO
>
ringPhaseInfoDTOS
=
mapper
.
readValue
(
str
,
new
TypeReference
<
List
<
RingPhaseInfoDTO
>>()
{
List
<
RingPhaseInfoDTO
>
ringPhaseInfoDTOS
=
mapper
.
readValue
(
str
,
new
TypeReference
<
List
<
RingPhaseInfoDTO
>>()
{});
});
// 遍历绿波路口协调方向
// 遍历绿波路口协调方向
if
(
StringUtils
.
isNotBlank
(
greenDirStr
))
{
if
(
StringUtils
.
isNotBlank
(
greenDirStr
))
{
String
[]
greenDirArray
=
greenDirStr
.
split
(
","
);
String
[]
greenDirArray
=
greenDirStr
.
split
(
","
);
...
@@ -410,6 +414,7 @@ public class HisenseGreenChartTask {
...
@@ -410,6 +414,7 @@ public class HisenseGreenChartTask {
Integer
schemeNo
=
ringPhaseInfoDTO
.
getSchemeNo
();
Integer
schemeNo
=
ringPhaseInfoDTO
.
getSchemeNo
();
Integer
cycleLen
=
ringPhaseInfoDTO
.
getCycleLen
();
Integer
cycleLen
=
ringPhaseInfoDTO
.
getCycleLen
();
Integer
offset
=
ringPhaseInfoDTO
.
getOffset
();
Integer
offset
=
ringPhaseInfoDTO
.
getOffset
();
Date
date
=
ringPhaseInfoDTO
.
getDate
();
for
(
RingPhaseInfoDTO
.
DirTurn
dirTurn
:
dirTurnInfoList
)
{
for
(
RingPhaseInfoDTO
.
DirTurn
dirTurn
:
dirTurnInfoList
)
{
Integer
dir
=
dirTurn
.
getDir
();
Integer
dir
=
dirTurn
.
getDir
();
Integer
turn
=
dirTurn
.
getTurn
();
Integer
turn
=
dirTurn
.
getTurn
();
...
@@ -427,6 +432,7 @@ public class HisenseGreenChartTask {
...
@@ -427,6 +432,7 @@ public class HisenseGreenChartTask {
schemeGreenDirGreenTimeDTO
.
setOffset
(
offset
);
schemeGreenDirGreenTimeDTO
.
setOffset
(
offset
);
Integer
endTime
=
start
+
greenTime
+
yellowTime
;
Integer
endTime
=
start
+
greenTime
+
yellowTime
;
schemeGreenDirGreenTimeDTO
.
setEnd
(
endTime
);
schemeGreenDirGreenTimeDTO
.
setEnd
(
endTime
);
schemeGreenDirGreenTimeDTO
.
setDate
(
date
);
schemeGreenDirGreenTimeDTOS
.
add
(
schemeGreenDirGreenTimeDTO
);
schemeGreenDirGreenTimeDTOS
.
add
(
schemeGreenDirGreenTimeDTO
);
}
else
{
// 如果是非协调方向, 相位时间作为开始时间
}
else
{
// 如果是非协调方向, 相位时间作为开始时间
start
+=
greenTime
+
yellowTime
+
redTime
;
start
+=
greenTime
+
yellowTime
+
redTime
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/HisenseSchemeRingPhaseInfoTask.java
0 → 100644
View file @
c886e08d
package
net
.
wanji
.
opt
.
task
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.databus.dao.entity.GreenCrossDirDTO
;
import
net.wanji.opt.cache.GreenCrossDirInfoCache
;
import
net.wanji.opt.common.RedisUtils
;
import
net.wanji.opt.dao.mapper.GreenChartSchemeRingPhaseMapper
;
import
net.wanji.opt.dto.RingPhaseInfoDTO
;
import
net.wanji.opt.dto.SchemeGreenDirGreenTimeDTO
;
import
org.springframework.context.annotation.Profile
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author duanruiming
* @date 2025/04/15 15:09
*/
@Component
@Slf4j
@Profile
(
"test"
)
public
class
HisenseSchemeRingPhaseInfoTask
{
@Resource
private
RedisUtils
redisUtils
;
@Resource
private
GreenChartSchemeRingPhaseMapper
greenChartSchemeRingPhaseMapper
;
@Scheduled
(
fixedRate
=
1
*
60
*
1000
,
initialDelay
=
1
*
60
*
1000
)
public
void
getSchemeRingPhase
()
{
List
<
SchemeGreenDirGreenTimeDTO
>
schemeGreenDirGreenTimeDTOS
=
new
ArrayList
<>();
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
try
{
List
<
GreenCrossDirDTO
>
greenCrossDirCache
=
GreenCrossDirInfoCache
.
greenCrossDirCache
;
if
(!
CollectionUtils
.
isEmpty
(
greenCrossDirCache
))
{
for
(
GreenCrossDirDTO
greenCrossDirDTO
:
greenCrossDirCache
)
{
Integer
greenId
=
greenCrossDirDTO
.
getGreenId
();
String
greenCrossId
=
greenCrossDirDTO
.
getCrossId
();
String
greenDirStr
=
greenCrossDirDTO
.
getGreenDir
();
// 海信环相位信息
String
str
=
(
String
)
redisUtils
.
getHash
(
"utc-hisense-ring-phase"
,
greenCrossId
);
if
(
StringUtils
.
isBlank
(
str
))
{
continue
;
}
List
<
RingPhaseInfoDTO
>
ringPhaseInfoDTOS
=
mapper
.
readValue
(
str
,
new
TypeReference
<
List
<
RingPhaseInfoDTO
>>()
{});
// 遍历绿波路口协调方向
if
(
StringUtils
.
isNotBlank
(
greenDirStr
))
{
String
[]
greenDirArray
=
greenDirStr
.
split
(
","
);
for
(
String
s
:
greenDirArray
)
{
// 协调方向
Integer
greenDir
=
Integer
.
valueOf
(
s
);
if
(!
CollectionUtils
.
isEmpty
(
ringPhaseInfoDTOS
))
{
Map
<
Integer
,
List
<
RingPhaseInfoDTO
>>
ringMap
=
ringPhaseInfoDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
RingPhaseInfoDTO:
:
getRingNo
));
for
(
Map
.
Entry
<
Integer
,
List
<
RingPhaseInfoDTO
>>
entry
:
ringMap
.
entrySet
())
{
Integer
ringNo
=
entry
.
getKey
();
if
(
Objects
.
equals
(
0
,
ringNo
))
{
continue
;
}
List
<
RingPhaseInfoDTO
>
ringPhaseList
=
entry
.
getValue
();
List
<
RingPhaseInfoDTO
>
sort
=
ringPhaseList
.
stream
().
sorted
(
Comparator
.
comparingInt
(
RingPhaseInfoDTO:
:
getSort
)).
collect
(
Collectors
.
toList
());
Integer
start
=
0
;
SchemeGreenDirGreenTimeDTO
schemeGreenDirGreenTimeDTO
=
new
SchemeGreenDirGreenTimeDTO
();
for
(
RingPhaseInfoDTO
ringPhaseInfoDTO
:
sort
)
{
List
<
RingPhaseInfoDTO
.
DirTurn
>
dirTurnInfoList
=
ringPhaseInfoDTO
.
getDirTurnInfoList
();
if
(
CollectionUtils
.
isEmpty
(
dirTurnInfoList
))
{
continue
;
}
Integer
phaseId
=
ringPhaseInfoDTO
.
getPhaseId
();
Integer
greenTime
=
ringPhaseInfoDTO
.
getGreenTime
();
Integer
yellowTime
=
ringPhaseInfoDTO
.
getYellowTime
();
Integer
redTime
=
ringPhaseInfoDTO
.
getRedTime
();
Integer
schemeNo
=
ringPhaseInfoDTO
.
getSchemeNo
();
Integer
cycleLen
=
ringPhaseInfoDTO
.
getCycleLen
();
Integer
offset
=
ringPhaseInfoDTO
.
getOffset
();
Date
date
=
ringPhaseInfoDTO
.
getDate
();
for
(
RingPhaseInfoDTO
.
DirTurn
dirTurn
:
dirTurnInfoList
)
{
Integer
dir
=
dirTurn
.
getDir
();
Integer
turn
=
dirTurn
.
getTurn
();
// 如果路口信息与绿波协调方向相同
// 如果是红灯,作为开始时间,结束时间是start + greenTime + yellowTime
if
(
Objects
.
equals
(
dir
,
greenDir
)
&&
Objects
.
equals
(
2
,
turn
))
{
// 黄灯做绿灯处理
schemeGreenDirGreenTimeDTO
.
setCrossId
(
greenCrossId
);
schemeGreenDirGreenTimeDTO
.
setSchemeNo
(
schemeNo
);
schemeGreenDirGreenTimeDTO
.
setDir
(
dir
);
schemeGreenDirGreenTimeDTO
.
setPhaseId
(
phaseId
);
schemeGreenDirGreenTimeDTO
.
setStart
(
start
);
schemeGreenDirGreenTimeDTO
.
setRingNo
(
ringNo
);
schemeGreenDirGreenTimeDTO
.
setCycleLen
(
cycleLen
);
schemeGreenDirGreenTimeDTO
.
setOffset
(
offset
);
Integer
endTime
=
start
+
greenTime
+
yellowTime
;
schemeGreenDirGreenTimeDTO
.
setEnd
(
endTime
);
schemeGreenDirGreenTimeDTO
.
setDate
(
date
);
schemeGreenDirGreenTimeDTOS
.
add
(
schemeGreenDirGreenTimeDTO
);
}
else
{
// 如果是非协调方向, 相位时间作为开始时间
start
+=
greenTime
+
yellowTime
+
redTime
;
}
}
}
}
}
}
}
}
//log.error("路口绿灯协调方向时间:{}", mapper.writeValueAsString(schemeGreenDirGreenTimeDTOS));
}
if
(!
CollectionUtils
.
isEmpty
(
schemeGreenDirGreenTimeDTOS
))
{
for
(
SchemeGreenDirGreenTimeDTO
schemeGreenDirGreenTimeDTO
:
schemeGreenDirGreenTimeDTOS
)
{
greenChartSchemeRingPhaseMapper
.
insert
(
schemeGreenDirGreenTimeDTO
);
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"方向环相位入库失败:{}"
,
e
);
//throw new RuntimeException(e);
}
}
}
signal-optimize-service/src/main/resources/mapper/GreenChartSchemeRingPhaseMapper.xml
0 → 100644
View file @
c886e08d
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"net.wanji.opt.dao.mapper.GreenChartSchemeRingPhaseMapper"
>
</mapper>
\ No newline at end of file
signal-optimize-service/src/main/resources/mapper/report/CrossRidLaneMapper.xml
View file @
c886e08d
...
@@ -28,4 +28,49 @@
...
@@ -28,4 +28,49 @@
</foreach>
</foreach>
</if>
</if>
</select>
</select>
<select
id=
"getTotalitySituation"
resultType=
"net.wanji.opt.controllerv2.report.vo.CrossPeakAnalysis"
>
SELECT
cross_id,
<if
test=
"dayType = null"
>
day_type,
</if>
<if
test=
"peakType = null"
>
peak_type,
</if>
COALESCE(avg( day_total_flow ),0) AS day_total_flow ,
COALESCE(avg( day_max_hour_flow ),0) as day_max_hour_flow,
COALESCE(avg( peak_max_hour_flow ),0) as peak_max_hour_flow,
COALESCE(avg( peak_traffic_index ),0) as peak_traffic_index,
COALESCE(avg( peak_capacity ),0) as peak_capacity,
COALESCE(avg( peak_avg_deay_time ),0) as peak_avg_deay_time,
COALESCE(avg( peak_max_queue_length ),0) as peak_max_queue_length,
COALESCE(avg( peak_avg_stop_times ),0) as peak_avg_stop_times
FROM
t_analysis_report_cross_peak_detail
where 1 = 1
<if
test=
"yearWeek != null"
>
and year_week = #{yearWeek}
</if>
<if
test=
"dayType != null"
>
and day_type = #{dayType}
</if>
<if
test=
"peakType != null"
>
and peak_type = #{peakType}
</if>
<if
test=
"crossIdList != null"
>
and cross_id in
<foreach
collection=
"crossIdList"
item=
"crossId"
separator=
","
open=
"("
close=
")"
>
#{crossId}
</foreach>
</if>
GROUP BY
cross_id
<if
test=
"dayType = null"
>
,day_type
</if>
<if
test=
"peakType = null"
>
,peak_type
</if>
</select>
</mapper>
</mapper>
\ No newline at end of file
signal-optimize-service/src/main/resources/mapper/strategy/StrategyPriorityMapper.xml
View file @
c886e08d
...
@@ -114,13 +114,15 @@
...
@@ -114,13 +114,15 @@
SELECT
SELECT
DISTINCT
DISTINCT
t4.`name` as waveName, t3.`name` as crossName,
t4.`name` as waveName, t3.`name` as crossName,
t3.id as crossId, t2.daily_plan_details as dailyPlanDetails
t3.id as crossId,
GROUP_CONCAT(t2.daily_plan_details SEPARATOR ', ') AS dailyPlanDetails
FROM
FROM
t_base_cross_info t3
t_base_cross_info t3
LEFT JOIN t_strategy_priority_daily_info t2 on t3.id = t2.cross_id
LEFT JOIN t_strategy_priority_daily_info t2 on t3.id = t2.cross_id
LEFT JOIN t_strategy_priority_config t1 on t3.id=t1.cross_id
LEFT JOIN t_strategy_priority_config t1 on t3.id=t1.cross_id
LEFT JOIN t_greenwave_info t4 on t4.id = t1.green_id
LEFT JOIN t_greenwave_info t4 on t4.id = t1.green_id
WHERE t3.is_signal='1'
WHERE t3.is_signal='1'
GROUP BY t3.id
</select>
</select>
<select
id=
"getStrategyList"
parameterType=
"map"
resultType=
"net.wanji.opt.synthesis.pojo.StrategyFactoryEntity"
>
<select
id=
"getStrategyList"
parameterType=
"map"
resultType=
"net.wanji.opt.synthesis.pojo.StrategyFactoryEntity"
>
SELECT
SELECT
...
@@ -153,10 +155,10 @@
...
@@ -153,10 +155,10 @@
<insert
id=
"savePriorityInsert"
parameterType=
"java.util.List"
>
<insert
id=
"savePriorityInsert"
parameterType=
"java.util.List"
>
INSERT INTO
INSERT INTO
t_strategy_priority_config (cross_id,group_id,group_name,priority,strategy_no,type)
t_strategy_priority_config (cross_id,group_id,group_name,priority,strategy_no,type
,green_id
)
VALUES
VALUES
<foreach
collection=
"list"
item=
"item"
separator=
","
>
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(#{item.crossId},#{item.groupId},#{item.groupName},#{item.priority},#{item.strategyNo},#{item.type})
(#{item.crossId},#{item.groupId},#{item.groupName},#{item.priority},#{item.strategyNo},#{item.type}
,#{item.greenId}
)
</foreach>
</foreach>
</insert>
</insert>
...
@@ -195,7 +197,32 @@
...
@@ -195,7 +197,32 @@
<if
test=
"crossId!=null and crossId!=''"
>
<if
test=
"crossId!=null and crossId!=''"
>
AND t1.cross_id=#{crossId}
AND t1.cross_id=#{crossId}
</if>
</if>
<if
test=
"type!=null and type!=''"
>
AND t1.type=#{type}
</if>
</select>
<select
id=
"getGreenPriorityConfigData"
parameterType=
"map"
resultType=
"net.wanji.opt.synthesis.pojo.StrategyFactoryEntity"
>
SELECT t2.status,
t2.method,t2.strategy_name,t2.strategy_no,
t2.mark,t2.company,t1.priority as priority,t1.id,
t1.group_id as labelCode ,t1.group_name as label,t1.cross_id as crossId
FROM
t_strategy_priority_config t1
LEFT JOIN t_strategy_factory_info t2 on t1.strategy_no=t2.strategy_no and t2.status='1'
WHERE
1=1
AND t1.strategy_no IN
<foreach
item=
"item"
collection=
"strategyNo"
open=
"("
close=
")"
separator=
","
>
#{item}
</foreach>
<if
test=
"greenId!=null and greenId!=''"
>
AND green_id=#{greenId}
</if>
<if
test=
"type!=null and type!=''"
>
AND t1.type=#{type}
</if>
</select>
</select>
<select
id=
"getstrategyNo"
resultType=
"java.lang.String"
>
<select
id=
"getstrategyNo"
resultType=
"java.lang.String"
>
SELECT
SELECT
strategy_no
strategy_no
...
@@ -206,14 +233,31 @@
...
@@ -206,14 +233,31 @@
<if
test=
"crossId!=null and crossId!=''"
>
<if
test=
"crossId!=null and crossId!=''"
>
AND cross_id=#{crossId}
AND cross_id=#{crossId}
</if>
</if>
<if
test=
"type!=null and type!=''"
>
AND type=#{type}
</if>
</select>
<select
id=
"getGreenstrategyNo"
resultType=
"java.lang.String"
>
SELECT
strategy_no
FROM
t_strategy_priority_config
WHERE
1=1
<if
test=
"greenId!=null and greenId!=''"
>
AND green_id=#{greenId}
</if>
<if
test=
"type!=null and type!=''"
>
AND type=#{type}
</if>
</select>
</select>
<insert
id=
"savePlanConfig"
parameterType=
"java.util.List"
>
<insert
id=
"savePlanConfig"
parameterType=
"java.util.List"
>
INSERT INTO
INSERT INTO
t_strategy_priority_daily_info (daily_plan_id,week_execute,daily_plan_details,cross_id)
t_strategy_priority_daily_info (daily_plan_id,week_execute,daily_plan_details,cross_id
,type,green_id
)
VALUES
VALUES
<foreach
collection=
"savePlanList"
item=
"item"
separator=
","
>
<foreach
collection=
"savePlanList"
item=
"item"
separator=
","
>
(#{item.dailyPlanId},#{item.weekExecute},#{item.dailyPlanDetails},#{item.crossId})
(#{item.dailyPlanId},#{item.weekExecute},#{item.dailyPlanDetails},#{item.crossId}
,#{item.type},#{item.greenId}
)
</foreach>
</foreach>
</insert>
</insert>
<select
id=
"selectPlanTable"
parameterType=
"map"
resultType=
"net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo"
>
<select
id=
"selectPlanTable"
parameterType=
"map"
resultType=
"net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo"
>
...
@@ -227,11 +271,27 @@
...
@@ -227,11 +271,27 @@
and cross_id = #{crossId}
and cross_id = #{crossId}
</if>
</if>
</select>
</select>
<select
id=
"selectGreenPlanTable"
parameterType=
"map"
resultType=
"net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo"
>
select
id,daily_plan_id,cross_id
FROM
t_strategy_priority_daily_info
WHERE
1=1
<if
test=
"greenId!=null and greenId!=''"
>
and green_id = #{greenId}
</if>
</select>
<delete
id=
"deletePlanConfig"
>
<delete
id=
"deletePlanConfig"
>
DELETE
DELETE
FROM t_strategy_priority_daily_info
FROM t_strategy_priority_daily_info
WHERE cross_id =#{crossId}
WHERE cross_id =#{crossId}
</delete>
</delete>
<delete
id=
"deleteGreenPlanConfig"
>
DELETE
FROM t_strategy_priority_daily_info
WHERE green_id =#{greenId}
</delete>
<select
id=
"getPlanConfigData"
parameterType=
"map"
resultType=
"net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo"
>
<select
id=
"getPlanConfigData"
parameterType=
"map"
resultType=
"net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo"
>
SELECT
SELECT
id,daily_plan_id,week_execute,daily_plan_details,cross_id
id,daily_plan_id,week_execute,daily_plan_details,cross_id
...
@@ -288,4 +348,21 @@
...
@@ -288,4 +348,21 @@
LEFT JOIN t_base_cross_info t3 on t1.cross_id = t3.id
LEFT JOIN t_base_cross_info t3 on t1.cross_id = t3.id
LEFT JOIN t_greenwave_info t4 on t1.green_id = t4.id
LEFT JOIN t_greenwave_info t4 on t1.green_id = t4.id
</select>
</select>
<select
id=
"selectGreenPriorityTable"
parameterType=
"map"
resultType=
"net.wanji.opt.entity.strategy.StrategyPriorityConfig"
>
select
id,group_id,cross_id
FROM
t_strategy_priority_config
WHERE
1=1
<if
test=
"greenId!=null and greenId!=''"
>
and green_id = #{greenId}
</if>
</select>
<delete
id=
"deleteGreenPriorityConfig"
parameterType=
"map"
>
DELETE
FROM t_strategy_priority_config
WHERE green_id =#{greenId}
</delete>
</mapper>
</mapper>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment