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
signal
traffic-signal-platform
Commits
cd882d04
Commit
cd882d04
authored
Aug 22, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 修改获取当前计划逻辑
parent
a88921c6
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
210 additions
and
7 deletions
+210
-7
CrossManageServiceImpl.java
...va/net/wanji/web/service/impl/CrossManageServiceImpl.java
+2
-1
RunningEvaluateServiceImpl.java
...et/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
+164
-6
RunningEvaluateMetricsDetailVO.java
...java/net/wanji/opt/vo/RunningEvaluateMetricsDetailVO.java
+44
-0
No files found.
signal-control-service/src/main/java/net/wanji/web/service/impl/CrossManageServiceImpl.java
View file @
cd882d04
...
...
@@ -527,7 +527,8 @@ public class CrossManageServiceImpl implements CrossManageService {
return
planId
;
}
}
}
else
if
(
CollectionUtil
.
isNotEmpty
(
week
))
{
}
if
(
CollectionUtil
.
isNotEmpty
(
week
))
{
for
(
Integer
day
:
week
)
{
// 1表示周日,2表示周一
int
today
=
DateUtil
.
dayOfWeek
(
datetime
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
View file @
cd882d04
package
net
.
wanji
.
opt
.
service
.
impl
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -9,10 +10,9 @@ import net.wanji.common.utils.tool.CrossUtil;
import
net.wanji.common.utils.tool.TimeArrayUtil
;
import
net.wanji.databus.bo.CrossIdAndStartEndDateBO
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.dao.entity.BaseCrossDirInfoPO
;
import
net.wanji.databus.dao.entity.BaseCrossSchemePO
;
import
net.wanji.databus.dao.entity.CrossSectionPO
;
import
net.wanji.databus.dao.entity.*
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.dto.RunningPlanDTO
;
import
net.wanji.databus.po.*
;
import
net.wanji.databus.vo.RunningEvaluateCrossListVO
;
import
net.wanji.opt.bo.CrossNameBO
;
...
...
@@ -47,6 +47,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
private
final
BaseCrossTurnInfoMapper
baseCrossTurnInfoMapper
;
private
final
LaneInfoMapper
laneInfoMapper
;
private
final
BaseCrossInfoMapper
baseCrossInfoMapper
;
private
final
BaseCrossPlanMapper
baseCrossPlanMapper
;
private
final
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
;
private
final
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
;
public
RunningEvaluateServiceImpl
(
CrossDataRealtimeMapper
crossDataRealtimeMapper
,
CrossDataHistMapper
crossDataHistMapper
,
...
...
@@ -55,7 +58,10 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
@Qualifier
(
"baseCrossDirInfoMapper"
)
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
,
@Qualifier
(
"baseCrossTurnInfoMapper"
)
BaseCrossTurnInfoMapper
baseCrossTurnInfoMapper
,
@Qualifier
(
"laneInfoMapper"
)
LaneInfoMapper
laneInfoMapper
,
@Qualifier
(
"baseCrossInfoMapper"
)
BaseCrossInfoMapper
baseCrossInfoMapper
)
{
@Qualifier
(
"baseCrossInfoMapper"
)
BaseCrossInfoMapper
baseCrossInfoMapper
,
@Qualifier
(
"baseCrossPlanMapper"
)
BaseCrossPlanMapper
baseCrossPlanMapper
,
@Qualifier
(
"baseCrossSchedulesMapper"
)
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
,
@Qualifier
(
"baseCrossSchedulesPlanMapper"
)
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
)
{
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
this
.
crossDataHistMapper
=
crossDataHistMapper
;
this
.
baseCrossSectionMapper
=
baseCrossSectionMapper
;
...
...
@@ -64,6 +70,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
this
.
baseCrossTurnInfoMapper
=
baseCrossTurnInfoMapper
;
this
.
laneInfoMapper
=
laneInfoMapper
;
this
.
baseCrossInfoMapper
=
baseCrossInfoMapper
;
this
.
baseCrossPlanMapper
=
baseCrossPlanMapper
;
this
.
baseCrossSchedulesMapper
=
baseCrossSchedulesMapper
;
this
.
baseCrossSchedulesPlanMapper
=
baseCrossSchedulesPlanMapper
;
}
@Override
...
...
@@ -296,7 +305,12 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String
eventStartTime
=
sdf
.
format
(
abnormalEventStartTime
);
String
eventEndTime
=
sdf
.
format
(
abnormalEventEndTime
);
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectByCrossId
(
crossId
);
SimpleDateFormat
sdf2
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
datetime
=
new
Date
();
String
dateStr
=
sdf2
.
format
(
datetime
);
// 获取当前计划ID
Integer
planId
=
findPlanId
(
datetime
,
dateStr
,
crossId
);
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectByCrossAndPlan
(
crossId
,
planId
);
for
(
CrossSectionPO
crossSectionPO
:
crossSectionPOList
)
{
String
sectionStartTime
=
crossSectionPO
.
getStartTime
();
String
sectionEndTime
=
crossSectionPO
.
getEndTime
();
...
...
@@ -399,7 +413,12 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String
eventStartTime
=
sdf
.
format
(
abnormalEventStartTime
);
String
eventEndTime
=
sdf
.
format
(
abnormalEventEndTime
);
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectByCrossId
(
crossId
);
SimpleDateFormat
sdf2
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
datetime
=
new
Date
();
String
dateStr
=
sdf2
.
format
(
datetime
);
// 获取当前计划ID
Integer
planId
=
findPlanId
(
datetime
,
dateStr
,
crossId
);
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectByCrossAndPlan
(
crossId
,
planId
);
for
(
CrossSectionPO
crossSectionPO
:
crossSectionPOList
)
{
String
sectionStartTime
=
crossSectionPO
.
getStartTime
();
String
sectionEndTime
=
crossSectionPO
.
getEndTime
();
...
...
@@ -416,6 +435,145 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return
schemeIdSet
.
size
();
}
private
Integer
findPlanId
(
Date
datetime
,
String
dateStr
,
String
crossId
)
{
CrossIdBO
crossIdBO
=
new
CrossIdBO
();
crossIdBO
.
setCrossId
(
crossId
);
RunningPlanDTO
runningPlanDTO
=
listRunningPlan
(
crossIdBO
);
List
<
RunningPlanDTO
.
SchedulesPlanListElement
>
schedulesPlanList
=
runningPlanDTO
.
getSchedulesPlanList
();
for
(
RunningPlanDTO
.
SchedulesPlanListElement
schedulesPlan
:
schedulesPlanList
)
{
List
<
RunningPlanDTO
.
ExecListElement
>
execList
=
schedulesPlan
.
getExecList
();
for
(
RunningPlanDTO
.
ExecListElement
execListElement
:
execList
)
{
// 先查询特殊日期,再查询星期
List
<
String
>
specialDateList
=
execListElement
.
getSpecialDateList
();
List
<
Integer
>
week
=
execListElement
.
getWeek
();
if
(
CollectionUtil
.
isNotEmpty
(
specialDateList
))
{
for
(
String
specialDate
:
specialDateList
)
{
String
substring
=
specialDate
.
substring
(
0
,
10
);
if
(
Objects
.
equals
(
dateStr
,
substring
))
{
Integer
planId
=
execListElement
.
getPlanId
();
return
planId
;
}
}
}
if
(
CollectionUtil
.
isNotEmpty
(
week
))
{
for
(
Integer
day
:
week
)
{
// 1表示周日,2表示周一
int
today
=
DateUtil
.
dayOfWeek
(
datetime
);
today
-=
1
;
if
(
today
==
0
)
{
today
=
7
;
}
if
(
day
==
today
)
{
Integer
planId
=
execListElement
.
getPlanId
();
return
planId
;
}
}
}
}
}
return
null
;
}
public
RunningPlanDTO
listRunningPlan
(
CrossIdBO
crossIdBO
)
{
RunningPlanDTO
runningPlanDTO
=
new
RunningPlanDTO
();
String
crossId
=
crossIdBO
.
getCrossId
();
runningPlanDTO
.
setCrossId
(
crossId
);
// 构造dailyPlanList
List
<
RunningPlanDTO
.
DailyPlanListElement
>
dailyPlanList
=
buildDailyPlanList
(
crossId
);
runningPlanDTO
.
setDailyPlanList
(
dailyPlanList
);
// 构造schedulesPlanList
List
<
RunningPlanDTO
.
SchedulesPlanListElement
>
schedulesPlanList
=
buildSchedulesPlanList
(
crossId
);
runningPlanDTO
.
setSchedulesPlanList
(
schedulesPlanList
);
return
runningPlanDTO
;
}
private
List
<
RunningPlanDTO
.
DailyPlanListElement
>
buildDailyPlanList
(
String
crossId
)
{
List
<
RunningPlanDTO
.
DailyPlanListElement
>
dailyPlanList
=
new
ArrayList
<>();
dailyPlanList
=
baseCrossPlanMapper
.
selectDailyPlanList
(
crossId
);
if
(
CollectionUtil
.
isEmpty
(
dailyPlanList
))
{
List
<
BaseCrossPlanPO
>
crossPlanPOList
=
baseCrossPlanMapper
.
selectByCrossId
(
crossId
);
if
(
CollectionUtil
.
isNotEmpty
(
crossPlanPOList
))
{
for
(
BaseCrossPlanPO
baseCrossPlanPO
:
crossPlanPOList
)
{
RunningPlanDTO
.
DailyPlanListElement
dailyPlan
=
new
RunningPlanDTO
.
DailyPlanListElement
();
dailyPlan
.
setPlanNo
(
baseCrossPlanPO
.
getPlanNo
());
dailyPlan
.
setName
(
baseCrossPlanPO
.
getName
());
dailyPlan
.
setTimeList
(
new
ArrayList
<>());
dailyPlanList
.
add
(
dailyPlan
);
}
}
}
else
{
for
(
RunningPlanDTO
.
DailyPlanListElement
dailyPlan
:
dailyPlanList
)
{
List
<
RunningPlanDTO
.
TimeListElement
>
timeList
=
dailyPlan
.
getTimeList
();
for
(
RunningPlanDTO
.
TimeListElement
timeListElement
:
timeList
)
{
String
[]
startEndTime
=
new
String
[
2
];
String
startTime
=
timeListElement
.
getStartTime
();
String
endTime
=
timeListElement
.
getEndTime
();
startEndTime
[
0
]
=
startTime
;
startEndTime
[
1
]
=
endTime
;
timeListElement
.
setStartEndTime
(
startEndTime
);
}
}
}
return
dailyPlanList
;
}
private
List
<
RunningPlanDTO
.
SchedulesPlanListElement
>
buildSchedulesPlanList
(
String
crossId
)
{
List
<
RunningPlanDTO
.
SchedulesPlanListElement
>
schedulesPlanList
=
new
ArrayList
<>();
List
<
BaseCrossSchedulesPO
>
baseCrossSchedulesPOList
=
baseCrossSchedulesMapper
.
selectByCrossId
(
crossId
);
for
(
BaseCrossSchedulesPO
baseCrossSchedulesPO
:
baseCrossSchedulesPOList
)
{
String
scheduleNo
=
baseCrossSchedulesPO
.
getScheduleNo
();
String
name
=
baseCrossSchedulesPO
.
getName
();
Integer
crossSchedulesPOId
=
baseCrossSchedulesPO
.
getId
();
RunningPlanDTO
.
SchedulesPlanListElement
schedulesPlan
=
new
RunningPlanDTO
.
SchedulesPlanListElement
();
schedulesPlan
.
setScheduleNo
(
scheduleNo
);
schedulesPlan
.
setName
(
name
);
schedulesPlan
.
setId
(
crossSchedulesPOId
);
schedulesPlan
.
setStatus
(
baseCrossSchedulesPO
.
getStatus
());
// 构造execList
List
<
RunningPlanDTO
.
ExecListElement
>
execList
=
buildExecList
(
crossId
,
scheduleNo
);
schedulesPlan
.
setExecList
(
execList
);
schedulesPlanList
.
add
(
schedulesPlan
);
}
return
schedulesPlanList
;
}
private
List
<
RunningPlanDTO
.
ExecListElement
>
buildExecList
(
String
crossId
,
String
scheduleNo
)
{
List
<
RunningPlanDTO
.
ExecListElement
>
execList
=
new
ArrayList
<>();
// 获取调度ID
BaseCrossSchedulesPO
schedulesPO
=
baseCrossSchedulesMapper
.
selectByCrossIdAndScheduleNo
(
crossId
,
scheduleNo
);
Integer
schedulesId
=
schedulesPO
.
getId
();
// 根据路口ID、调度ID和计划ID查询调度计划关系
List
<
BaseCrossSchedulesPlanPO
>
baseCrossSchedulesPlanPOList
=
baseCrossSchedulesPlanMapper
.
selectByCrossIdAndSchedulesId
(
crossId
,
schedulesId
);
Map
<
Integer
,
List
<
BaseCrossSchedulesPlanPO
>>
collectMap
=
baseCrossSchedulesPlanPOList
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
BaseCrossSchedulesPlanPO:
:
getPlanId
));
for
(
Map
.
Entry
<
Integer
,
List
<
BaseCrossSchedulesPlanPO
>>
entry
:
collectMap
.
entrySet
())
{
RunningPlanDTO
.
ExecListElement
execListElement
=
new
RunningPlanDTO
.
ExecListElement
();
List
<
Integer
>
week
=
new
ArrayList
<>();
List
<
String
>
specialDateList
=
new
ArrayList
<>();
Integer
planId
=
entry
.
getKey
();
List
<
BaseCrossSchedulesPlanPO
>
secondList
=
entry
.
getValue
();
for
(
BaseCrossSchedulesPlanPO
baseCrossSchedulesPlanPO
:
secondList
)
{
Integer
day
=
baseCrossSchedulesPlanPO
.
getWeek
();
if
(
day
==
0
)
{
// 特殊日期
Date
specialDate
=
baseCrossSchedulesPlanPO
.
getSpecialDate
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
specialDateList
.
add
(
sdf
.
format
(
specialDate
));
}
else
{
week
.
add
(
day
);
}
}
execListElement
.
setWeek
(
week
);
execListElement
.
setSpecialDateList
(
specialDateList
);
BaseCrossPlanPO
baseCrossPlanPO
=
baseCrossPlanMapper
.
selectById
(
planId
);
execListElement
.
setPlanName
(
baseCrossPlanPO
.
getName
());
execListElement
.
setPlanId
(
baseCrossPlanPO
.
getId
());
execList
.
add
(
execListElement
);
}
return
execList
;
}
private
boolean
isTimeIntersecting
(
String
startTime1
,
String
endTime1
,
String
startTime2
,
String
endTime2
)
{
return
!(
endTime1
.
compareTo
(
startTime2
)
<=
0
||
startTime1
.
compareTo
(
endTime2
)
>=
0
);
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/RunningEvaluateMetricsDetailVO.java
View file @
cd882d04
package
net
.
wanji
.
opt
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
import
java.util.List
;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
...
...
@@ -12,5 +17,44 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@ApiModel
(
value
=
"RunningEvaluateMetricsDetailVO"
,
description
=
"评价指标查询返回值"
)
public
class
RunningEvaluateMetricsDetailVO
{
@ApiModelProperty
(
value
=
"状态列表"
)
private
List
<
ProblemStatus
>
problemStatusList
;
@ApiModelProperty
(
value
=
"问题方案列表"
)
private
List
<
ProblemScheme
>
schemeList
;
// @ApiModelProperty(value = "指标列表")
// private List<CrossMetrics> metricsList;
@NoArgsConstructor
@Data
public
static
class
ProblemStatus
{
@ApiModelProperty
(
name
=
"路口状态 0正常 1 失衡 2 拥堵 3 溢出"
)
private
String
status
;
@ApiModelProperty
(
value
=
"开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
private
Date
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
private
Date
endTime
;
@ApiModelProperty
(
value
=
"持续时长(分钟)"
)
private
Integer
durationMinutes
;
}
@NoArgsConstructor
@Data
public
static
class
ProblemScheme
{
@ApiModelProperty
(
value
=
"方案名称"
)
private
String
patternName
;
@ApiModelProperty
(
value
=
"开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
private
Date
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
private
Date
endTime
;
}
}
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