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
bc6765cc
Commit
bc6765cc
authored
Aug 28, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 新信号评价-方案评价,构造日期-问题方案结果集
parent
cb74c813
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
135 additions
and
15 deletions
+135
-15
SchemeEvaluateController.java
...va/net/wanji/opt/controller/SchemeEvaluateController.java
+1
-2
SchemeEvaluateService.java
...ain/java/net/wanji/opt/service/SchemeEvaluateService.java
+1
-4
RunningEvaluateServiceImpl.java
...et/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
+2
-2
SchemeEvaluateServiceImpl.java
...net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
+117
-7
BaseCrossSchemePO.java
.../java/net/wanji/databus/dao/entity/BaseCrossSchemePO.java
+14
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/SchemeEvaluateController.java
View file @
bc6765cc
...
...
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.ws.rs.core.MediaType
;
import
java.util.List
;
/**
* 运行评价
...
...
@@ -39,7 +38,7 @@ public class SchemeEvaluateController {
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
SchemeEvaluateProblemSchemeVO
.
class
),
})
public
JsonViewObject
problemSchemeList
(
@RequestBody
ProblemSchemeBO
problemSchemeBO
)
{
List
<
SchemeEvaluateProblemSchemeVO
>
res
=
schemeEvaluateService
.
problemSchemeList
(
problemSchemeBO
);
SchemeEvaluateProblemSchemeVO
res
=
schemeEvaluateService
.
problemSchemeList
(
problemSchemeBO
);
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/SchemeEvaluateService.java
View file @
bc6765cc
...
...
@@ -3,9 +3,6 @@ package net.wanji.opt.service;
import
net.wanji.opt.bo.ProblemSchemeBO
;
import
net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO
;
import
java.util.List
;
public
interface
SchemeEvaluateService
{
List
<
SchemeEvaluateProblemSchemeVO
>
problemSchemeList
(
ProblemSchemeBO
problemSchemeBO
);
SchemeEvaluateProblemSchemeVO
problemSchemeList
(
ProblemSchemeBO
problemSchemeBO
);
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
View file @
bc6765cc
...
...
@@ -755,7 +755,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return
schemeIdSet
.
size
();
}
private
Integer
findPlanId
(
Date
datetime
,
String
dateStr
,
String
crossId
)
{
Integer
findPlanId
(
Date
datetime
,
String
dateStr
,
String
crossId
)
{
CrossIdBO
crossIdBO
=
new
CrossIdBO
();
crossIdBO
.
setCrossId
(
crossId
);
RunningPlanDTO
runningPlanDTO
=
listRunningPlan
(
crossIdBO
);
...
...
@@ -894,7 +894,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return
execList
;
}
private
boolean
isTimeIntersecting
(
String
startTime1
,
String
endTime1
,
String
startTime2
,
String
endTime2
)
{
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/service/impl/SchemeEvaluateServiceImpl.java
View file @
bc6765cc
package
net
.
wanji
.
opt
.
service
.
impl
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.date.DateUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.databus.dao.entity.BaseCrossSchemePO
;
import
net.wanji.databus.dao.entity.CrossSectionPO
;
import
net.wanji.databus.dao.mapper.BaseCrossSchemeMapper
;
import
net.wanji.databus.dao.mapper.BaseCrossSectionMapper
;
import
net.wanji.databus.dao.mapper.CrossDataHistMapper
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.opt.bo.ProblemSchemeBO
;
import
net.wanji.opt.service.SchemeEvaluateService
;
import
net.wanji.opt.vo.RunningEvaluateMetricsDetailVO
;
import
net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.stereotype.Service
;
import
java.text.SimpleDateFormat
;
...
...
@@ -22,14 +29,23 @@ import java.util.stream.Collectors;
@Service
public
class
SchemeEvaluateServiceImpl
implements
SchemeEvaluateService
{
private
final
CrossDataHistMapper
crossDataHistMapper
;
private
final
RunningEvaluateServiceImpl
runningEvaluateService
;
private
final
BaseCrossSectionMapper
baseCrossSectionMapper
;
private
final
BaseCrossSchemeMapper
baseCrossSchemeMapper
;
public
SchemeEvaluateServiceImpl
(
CrossDataHistMapper
crossDataHistMapper
)
{
public
SchemeEvaluateServiceImpl
(
CrossDataHistMapper
crossDataHistMapper
,
RunningEvaluateServiceImpl
runningEvaluateService
,
@Qualifier
(
"baseCrossSectionMapper"
)
BaseCrossSectionMapper
baseCrossSectionMapper
,
@Qualifier
(
"baseCrossSchemeMapper"
)
BaseCrossSchemeMapper
baseCrossSchemeMapper
)
{
this
.
crossDataHistMapper
=
crossDataHistMapper
;
this
.
runningEvaluateService
=
runningEvaluateService
;
this
.
baseCrossSectionMapper
=
baseCrossSectionMapper
;
this
.
baseCrossSchemeMapper
=
baseCrossSchemeMapper
;
}
@Override
public
List
<
SchemeEvaluateProblemSchemeVO
>
problemSchemeList
(
ProblemSchemeBO
problemSchemeBO
)
{
List
<
SchemeEvaluateProblemSchemeVO
>
res
=
new
ArrayList
<>
();
public
SchemeEvaluateProblemSchemeVO
problemSchemeList
(
ProblemSchemeBO
problemSchemeBO
)
{
SchemeEvaluateProblemSchemeVO
res
=
new
SchemeEvaluateProblemSchemeVO
();
String
crossId
=
problemSchemeBO
.
getCrossId
();
Date
startDate
=
problemSchemeBO
.
getStartDate
();
Date
endDate
=
problemSchemeBO
.
getEndDate
();
...
...
@@ -40,18 +56,112 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
String
endTime
=
problemSchemeBO
.
getEndTime
();
List
<
CrossDataHistPO
>
crossDataHistPOList
=
crossDataHistMapper
.
selectByCrossIdAndStartEnd
(
crossId
,
startDateStamp
,
endDateStamp
);
//
根据入参筛选结果
Map
<
String
,
List
<
CrossDataHistPO
>>
stringListMap
=
getStringList
Map
(
//
构造时间-问题结果集
Map
<
String
,
List
<
CrossDataHistPO
>>
timeProblemMap
=
getTimeProblem
Map
(
crossDataHistPOList
,
endTime
,
startTime
);
// 构造结果
// 问题次数
int
problemCounts
=
0
;
if
(
CollectionUtil
.
isNotEmpty
(
timeProblemMap
))
{
for
(
List
<
CrossDataHistPO
>
list
:
timeProblemMap
.
values
())
{
problemCounts
+=
list
.
size
();
}
}
// 问题方案数量
res
.
setProblemCounts
(
problemCounts
);
// 构造问题方案列表(根据日期)
// 构造日期-问题结果集
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateProblemsMap
=
buildDateProblemsMap
(
timeProblemMap
);
// 构造日期-问题方案结果集
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
=
buildDateSchemesMap
(
dateProblemsMap
,
crossId
);
// res.setProblemSchemeListByDate();
// res.setSchemeCounts();
// res.setEfficiencyProblemCounts();
// res.setBalanceProblemCounts();
// res.setSecurityProblemCounts();
// res.setProblemSchemeListByScheme();
return
res
;
}
private
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
buildDateSchemesMap
(
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateProblemsMap
,
String
crossId
)
{
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
=
new
HashMap
<>();
// 获取当前计划ID
for
(
Map
.
Entry
<
Date
,
List
<
CrossDataHistPO
>>
dateListEntry
:
dateProblemsMap
.
entrySet
())
{
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
problemSchemeList
=
new
ArrayList
<>();
Date
datetime
=
dateListEntry
.
getKey
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
dateStr
=
sdf
.
format
(
datetime
);
Integer
planId
=
runningEvaluateService
.
findPlanId
(
datetime
,
dateStr
,
crossId
);
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectByCrossAndPlan
(
crossId
,
planId
);
for
(
CrossSectionPO
crossSectionPO
:
crossSectionPOList
)
{
String
sectionStartTime
=
crossSectionPO
.
getStartTime
();
String
sectionEndTime
=
crossSectionPO
.
getEndTime
();
List
<
CrossDataHistPO
>
value
=
dateListEntry
.
getValue
();
for
(
CrossDataHistPO
crossDataHistPO
:
value
)
{
SimpleDateFormat
sdf2
=
new
SimpleDateFormat
(
"HH:mm"
);
Date
abnormalEventStartTime
=
crossDataHistPO
.
getStartTime
();
Integer
duration
=
crossDataHistPO
.
getDuration
();
Date
abnormalEventEndTime
=
DateUtil
.
offsetMinute
(
abnormalEventStartTime
,
duration
);
String
eventStartTime
=
sdf2
.
format
(
abnormalEventStartTime
);
String
eventEndTime
=
sdf2
.
format
(
abnormalEventEndTime
);
// 比较两组时间段是否相交
boolean
isIntersecting
=
runningEvaluateService
.
isTimeIntersecting
(
eventStartTime
,
eventEndTime
,
sectionStartTime
,
sectionEndTime
);
if
(
isIntersecting
)
{
Integer
schemeId
=
crossSectionPO
.
getSchemeId
();
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectById
(
schemeId
);
String
schemeName
=
baseCrossSchemePO
.
getName
();
RunningEvaluateMetricsDetailVO
.
ProblemScheme
problemScheme
=
new
RunningEvaluateMetricsDetailVO
.
ProblemScheme
();
problemScheme
.
setSchemeName
(
schemeName
);
problemScheme
.
setStartTime
(
sectionStartTime
);
problemScheme
.
setEndTime
(
sectionEndTime
);
problemSchemeList
.
add
(
problemScheme
);
}
}
}
// 去除相同方案
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
uniqueRes
=
problemSchemeList
.
stream
()
.
distinct
()
.
collect
(
Collectors
.
toList
());
dateSchemesMap
.
put
(
datetime
,
uniqueRes
);
}
return
dateSchemesMap
;
}
private
Map
<
Date
,
List
<
CrossDataHistPO
>>
buildDateProblemsMap
(
Map
<
String
,
List
<
CrossDataHistPO
>>
timeProblemMap
)
{
// 创建一个新的Map,用于存储以Date为Key,List<CrossDataHistPO>为Value的数据
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateMap
=
new
HashMap
<>();
// 创建一个SimpleDateFormat对象,用于将10位时间戳转换为Date对象
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 遍历timeProblemMap的所有entries
for
(
List
<
CrossDataHistPO
>
list
:
timeProblemMap
.
values
())
{
for
(
CrossDataHistPO
po
:
list
)
{
long
timestamp
=
po
.
getBatchTime
()
*
1000L
;
// 将10位时间戳转换为13位
Date
date
=
new
Date
(
timestamp
);
String
formattedDate
=
sdf
.
format
(
date
);
// 格式化日期为"yyyy-MM-dd"
try
{
Date
keyDate
=
sdf
.
parse
(
formattedDate
);
// 将格式化后的日期字符串转回为Date对象
// 将CrossDataHistPO对象添加到相应日期的List中
dateMap
.
computeIfAbsent
(
keyDate
,
k
->
new
ArrayList
<>()).
add
(
po
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
return
dateMap
;
}
@NotNull
private
static
Map
<
String
,
List
<
CrossDataHistPO
>>
getStringListMap
(
List
<
CrossDataHistPO
>
crossDataHistPOList
,
String
endTime
,
String
startTime
)
{
private
static
Map
<
String
,
List
<
CrossDataHistPO
>>
getTimeProblemMap
(
List
<
CrossDataHistPO
>
crossDataHistPOList
,
String
endTime
,
String
startTime
)
{
// 过滤有问题的记录
List
<
CrossDataHistPO
>
filteredList
=
crossDataHistPOList
.
stream
()
.
filter
(
po
->
po
.
getStatus
()
!=
null
&&
po
.
getStatus
()
!=
0
)
...
...
wj-databus/src/main/java/net/wanji/databus/dao/entity/BaseCrossSchemePO.java
View file @
bc6765cc
...
...
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.Objects
;
/**
* @author Kent HAN
...
...
@@ -46,4 +47,17 @@ public class BaseCrossSchemePO {
/** 修改时间 */
@ApiModelProperty
(
name
=
"修改时间"
,
notes
=
""
)
private
Date
gmtModified
;
@Override
public
boolean
equals
(
Object
o
)
{
if
(
this
==
o
)
return
true
;
if
(
o
==
null
||
getClass
()
!=
o
.
getClass
())
return
false
;
BaseCrossSchemePO
that
=
(
BaseCrossSchemePO
)
o
;
return
Objects
.
equals
(
id
,
that
.
id
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
id
);
}
}
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