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
9e8652e7
Commit
9e8652e7
authored
Aug 31, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 新信号评价-场景评价-异常事件时空图
parent
04dae3df
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
116 additions
and
5 deletions
+116
-5
SceneEvaluateServiceImpl.java
.../net/wanji/opt/service/impl/SceneEvaluateServiceImpl.java
+83
-3
SceneEvaluateabnormalDistributeVO.java
...a/net/wanji/opt/vo/SceneEvaluateabnormalDistributeVO.java
+33
-2
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/SceneEvaluateServiceImpl.java
View file @
9e8652e7
package
net
.
wanji
.
opt
.
service
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.enums.CrossStatusEnum
;
import
net.wanji.common.utils.tool.TimeArrayUtil
;
import
net.wanji.databus.bo.CrossIdAndStartEndDateBO
;
import
net.wanji.databus.dao.mapper.CrossDataHistMapper
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.opt.service.SceneEvaluateService
;
import
net.wanji.opt.vo.RunningEvaluateMetricsDetailVO
;
import
net.wanji.opt.vo.SceneEvaluateabnormalDistributeVO
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.stereotype.Service
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -22,6 +26,7 @@ import java.util.stream.Collectors;
public
class
SceneEvaluateServiceImpl
implements
SceneEvaluateService
{
private
final
CrossDataHistMapper
crossDataHistMapper
;
private
final
RunningEvaluateServiceImpl
runningEvaluateService
;
SimpleDateFormat
HOUR_SDF
=
new
SimpleDateFormat
(
"HH:mm"
);
public
SceneEvaluateServiceImpl
(
CrossDataHistMapper
crossDataHistMapper
,
RunningEvaluateServiceImpl
runningEvaluateService
)
{
this
.
crossDataHistMapper
=
crossDataHistMapper
;
...
...
@@ -37,13 +42,13 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
SceneEvaluateabnormalDistributeVO
vo
=
new
SceneEvaluateabnormalDistributeVO
();
List
<
SceneEvaluateabnormalDistributeVO
.
TimeDistribution
>
timeDistributionList
=
buildTimeDistributionList
(
crossId
,
startDate
,
endDate
);
vo
.
set
FinalTim
eDistributionList
(
buildFinalTimeDistributionList
(
timeDistributionList
));
vo
.
set
TimeDat
eDistributionList
(
buildFinalTimeDistributionList
(
timeDistributionList
));
setCounts
(
timeDistributionList
,
vo
);
return
vo
;
}
public
List
<
SceneEvaluateabnormalDistributeVO
.
FinalTim
eDistribution
>
buildFinalTimeDistributionList
(
public
List
<
SceneEvaluateabnormalDistributeVO
.
TimeDat
eDistribution
>
buildFinalTimeDistributionList
(
List
<
SceneEvaluateabnormalDistributeVO
.
TimeDistribution
>
timeDistributionList
)
{
List
<
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
>
finalTimeDistributionList
=
new
ArrayList
<>();
...
...
@@ -110,7 +115,82 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
finalTimeDistributionList
.
sort
(
Comparator
.
comparing
(
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
::
getProblemDate
)
.
thenComparing
(
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
::
getDistributionTime
));
return
finalTimeDistributionList
;
// 生成时间日期分布
List
<
SceneEvaluateabnormalDistributeVO
.
TimeDateDistribution
>
timeDateDistributionList
=
new
ArrayList
<>();
List
<
String
>
minuteSectionArray
=
TimeArrayUtil
.
getMinuteSectionArray
(
5
);
for
(
String
timeStr
:
minuteSectionArray
)
{
SceneEvaluateabnormalDistributeVO
.
TimeDateDistribution
timeDateDistribution
=
new
SceneEvaluateabnormalDistributeVO
.
TimeDateDistribution
();
timeDateDistribution
.
setHourMinute
(
timeStr
);
timeDateDistribution
.
setStatusByDateList
(
buildStatusByDateList
(
timeStr
,
finalTimeDistributionList
));
timeDateDistributionList
.
add
(
timeDateDistribution
);
}
return
timeDateDistributionList
;
}
private
List
<
SceneEvaluateabnormalDistributeVO
.
StatusByDate
>
buildStatusByDateList
(
String
timeStr
,
List
<
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
>
finalTimeDistributionList
)
{
List
<
SceneEvaluateabnormalDistributeVO
.
StatusByDate
>
res
=
new
ArrayList
<>();
for
(
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
ftd
:
finalTimeDistributionList
)
{
Date
problemDate
=
ftd
.
getProblemDate
();
Date
distributionTime
=
ftd
.
getDistributionTime
();
String
format
=
HOUR_SDF
.
format
(
distributionTime
);
if
(
Objects
.
equals
(
timeStr
,
format
))
{
SceneEvaluateabnormalDistributeVO
.
StatusByDate
inRes
=
getRecordInRes
(
res
,
problemDate
);
// 如果 res 中没有记录
if
(
ObjectUtil
.
isEmpty
(
inRes
))
{
SceneEvaluateabnormalDistributeVO
.
StatusByDate
statusByDate
=
buildStatusByDate
(
ftd
,
problemDate
);
res
.
add
(
statusByDate
);
}
else
{
modifyRecordInRes
(
ftd
,
inRes
);
}
}
}
return
res
;
}
private
void
modifyRecordInRes
(
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
ftd
,
SceneEvaluateabnormalDistributeVO
.
StatusByDate
inRes
)
{
Integer
status
=
ftd
.
getStatus
();
if
(
Objects
.
equals
(
status
,
CrossStatusEnum
.
UNBALANCE
.
getCode
()))
{
inRes
.
setIsUnbalance
(
1
);
}
else
if
(
Objects
.
equals
(
status
,
CrossStatusEnum
.
CONGESTION
.
getCode
()))
{
inRes
.
setIsCongestion
(
1
);
}
else
if
(
Objects
.
equals
(
status
,
CrossStatusEnum
.
SPILLOVER
.
getCode
()))
{
inRes
.
setIsSpillover
(
1
);
}
}
@NotNull
private
SceneEvaluateabnormalDistributeVO
.
StatusByDate
buildStatusByDate
(
SceneEvaluateabnormalDistributeVO
.
FinalTimeDistribution
ftd
,
Date
problemDate
)
{
SceneEvaluateabnormalDistributeVO
.
StatusByDate
statusByDate
=
new
SceneEvaluateabnormalDistributeVO
.
StatusByDate
();
statusByDate
.
setProblemDate
(
problemDate
);
modifyRecordInRes
(
ftd
,
statusByDate
);
return
statusByDate
;
}
private
SceneEvaluateabnormalDistributeVO
.
StatusByDate
getRecordInRes
(
List
<
SceneEvaluateabnormalDistributeVO
.
StatusByDate
>
res
,
Date
problemDate
)
{
for
(
SceneEvaluateabnormalDistributeVO
.
StatusByDate
statusByDate
:
res
)
{
Date
problemDateInRes
=
statusByDate
.
getProblemDate
();
// 创建Calendar实例
Calendar
cal1
=
Calendar
.
getInstance
();
Calendar
cal2
=
Calendar
.
getInstance
();
// 设置Calendar实例的时间
cal1
.
setTime
(
problemDate
);
cal2
.
setTime
(
problemDateInRes
);
// 比较两个日期是否相等(忽略时间部分)
boolean
isSameDay
=
cal1
.
get
(
Calendar
.
YEAR
)
==
cal2
.
get
(
Calendar
.
YEAR
)
&&
cal1
.
get
(
Calendar
.
DAY_OF_YEAR
)
==
cal2
.
get
(
Calendar
.
DAY_OF_YEAR
);
if
(
isSameDay
)
{
return
statusByDate
;
}
}
return
null
;
}
private
boolean
isSameDay
(
Date
date1
,
Date
date2
)
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/SceneEvaluateabnormalDistributeVO.java
View file @
9e8652e7
...
...
@@ -30,8 +30,8 @@ public class SceneEvaluateabnormalDistributeVO {
@ApiModelProperty
(
value
=
"溢出时长(分钟)"
)
Integer
spilloverDuration
;
@ApiModelProperty
(
value
=
"时间分布"
)
List
<
FinalTimeDistribution
>
finalTim
eDistributionList
;
@ApiModelProperty
(
value
=
"时间
日期
分布"
)
List
<
TimeDateDistribution
>
timeDat
eDistributionList
;
@NoArgsConstructor
@Data
...
...
@@ -61,4 +61,35 @@ public class SceneEvaluateabnormalDistributeVO {
private
Date
distributionTime
;
}
@NoArgsConstructor
@Data
public
static
class
TimeDateDistribution
{
@ApiModelProperty
(
value
=
"时间 HH:mm"
)
private
String
hourMinute
;
@ApiModelProperty
(
value
=
"状态列表"
)
private
List
<
StatusByDate
>
statusByDateList
;
}
@NoArgsConstructor
@Data
public
static
class
StatusByDate
{
@ApiModelProperty
(
value
=
"日期"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"M/d"
,
timezone
=
"GMT+8"
)
private
Date
problemDate
;
@ApiModelProperty
(
value
=
"是否失衡 0否 1是"
)
private
Integer
isUnbalance
=
0
;
@ApiModelProperty
(
value
=
"是否溢出 0否 1是"
)
private
Integer
isSpillover
=
0
;
@ApiModelProperty
(
value
=
"是否拥堵 0否 1是"
)
private
Integer
isCongestion
=
0
;
}
}
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