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
4a1217c9
Commit
4a1217c9
authored
Aug 25, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 新信号评价-方案评价-根据入参筛选结果集
parent
b550d0ce
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
264 additions
and
0 deletions
+264
-0
ProblemSchemeBO.java
...rvice/src/main/java/net/wanji/opt/bo/ProblemSchemeBO.java
+33
-0
SchemeEvaluateController.java
...va/net/wanji/opt/controller/SchemeEvaluateController.java
+46
-0
SchemeEvaluateService.java
...ain/java/net/wanji/opt/service/SchemeEvaluateService.java
+11
-0
SchemeEvaluateServiceImpl.java
...net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
+85
-0
SchemeEvaluateProblemSchemeVO.java
.../java/net/wanji/opt/vo/SchemeEvaluateProblemSchemeVO.java
+89
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/bo/ProblemSchemeBO.java
0 → 100644
View file @
4a1217c9
package
net
.
wanji
.
opt
.
bo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.Date
;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel
(
value
=
"ProblemSchemeBO"
,
description
=
"问题方案列表接收参数"
)
public
class
ProblemSchemeBO
{
@ApiModelProperty
(
value
=
"路口ID"
,
required
=
true
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"开始日期 yyyy-MM-dd"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
startDate
;
@ApiModelProperty
(
value
=
"结束日期 yyyy-MM-dd"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
endDate
;
@ApiModelProperty
(
value
=
"开始时间 HH:mm"
)
String
startTime
;
@ApiModelProperty
(
value
=
"结束时间 HH:mm"
)
String
endTime
;
}
signal-optimize-service/src/main/java/net/wanji/opt/controller/SchemeEvaluateController.java
0 → 100644
View file @
4a1217c9
package
net
.
wanji
.
opt
.
controller
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.opt.bo.ProblemSchemeBO
;
import
net.wanji.opt.service.impl.SchemeEvaluateServiceImpl
;
import
net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.ws.rs.core.MediaType
;
import
java.util.List
;
/**
* 运行评价
*
* @author Kent HAN
*/
@Api
(
value
=
"SchemeEvaluateController"
,
description
=
"方案评价"
)
@RequestMapping
(
"/schemeEvaluate"
)
@RestController
public
class
SchemeEvaluateController
{
private
final
SchemeEvaluateServiceImpl
schemeEvaluateService
;
public
SchemeEvaluateController
(
SchemeEvaluateServiceImpl
schemeEvaluateService
)
{
this
.
schemeEvaluateService
=
schemeEvaluateService
;
}
@ApiOperation
(
value
=
"问题方案列表"
,
notes
=
"问题方案列表"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/problemSchemeList"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
SchemeEvaluateProblemSchemeVO
.
class
),
})
public
JsonViewObject
problemSchemeList
(
@RequestBody
ProblemSchemeBO
problemSchemeBO
)
{
List
<
SchemeEvaluateProblemSchemeVO
>
res
=
schemeEvaluateService
.
problemSchemeList
(
problemSchemeBO
);
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/service/SchemeEvaluateService.java
0 → 100644
View file @
4a1217c9
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
);
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
0 → 100644
View file @
4a1217c9
package
net
.
wanji
.
opt
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
lombok.extern.slf4j.Slf4j
;
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.SchemeEvaluateProblemSchemeVO
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.stereotype.Service
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author Kent HAN
* @date 2023/8/25 16:09
*/
@Slf4j
@Service
public
class
SchemeEvaluateServiceImpl
implements
SchemeEvaluateService
{
private
final
CrossDataHistMapper
crossDataHistMapper
;
public
SchemeEvaluateServiceImpl
(
CrossDataHistMapper
crossDataHistMapper
)
{
this
.
crossDataHistMapper
=
crossDataHistMapper
;
}
@Override
public
List
<
SchemeEvaluateProblemSchemeVO
>
problemSchemeList
(
ProblemSchemeBO
problemSchemeBO
)
{
List
<
SchemeEvaluateProblemSchemeVO
>
res
=
new
ArrayList
<>();
String
crossId
=
problemSchemeBO
.
getCrossId
();
Date
startDate
=
problemSchemeBO
.
getStartDate
();
Date
endDate
=
problemSchemeBO
.
getEndDate
();
endDate
=
DateUtil
.
offsetDay
(
endDate
,
1
);
// 包含最后一天
int
startDateStamp
=
(
int
)
(
startDate
.
getTime
()
/
1000
);
// 10位时间戳
int
endDateStamp
=
(
int
)
(
endDate
.
getTime
()
/
1000
);
String
startTime
=
problemSchemeBO
.
getStartTime
();
String
endTime
=
problemSchemeBO
.
getEndTime
();
List
<
CrossDataHistPO
>
crossDataHistPOList
=
crossDataHistMapper
.
selectByCrossIdAndStartEnd
(
crossId
,
startDateStamp
,
endDateStamp
);
// 根据入参筛选结果
Map
<
String
,
List
<
CrossDataHistPO
>>
stringListMap
=
getStringListMap
(
crossDataHistPOList
,
endTime
,
startTime
);
return
res
;
}
@NotNull
private
static
Map
<
String
,
List
<
CrossDataHistPO
>>
getStringListMap
(
List
<
CrossDataHistPO
>
crossDataHistPOList
,
String
endTime
,
String
startTime
)
{
// 过滤有问题的记录
List
<
CrossDataHistPO
>
filteredList
=
crossDataHistPOList
.
stream
()
.
filter
(
po
->
po
.
getStatus
()
!=
null
&&
po
.
getStatus
()
!=
0
)
.
collect
(
Collectors
.
toList
());
// 保留 duration 最大的一条
List
<
CrossDataHistPO
>
result
=
filteredList
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
CrossDataHistPO:
:
getStartTime
))
.
values
().
stream
()
.
map
(
list
->
list
.
stream
().
max
(
Comparator
.
comparingInt
(
CrossDataHistPO:
:
getDuration
)).
orElse
(
null
))
.
collect
(
Collectors
.
toList
());
// 按照 startTime 和 endTime 的 "HH:mm" 的时间区间分组
Map
<
String
,
List
<
CrossDataHistPO
>>
groupedByTimeInterval
=
result
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
po
->
{
Date
startTime1
=
po
.
getStartTime
();
Date
endTime1
=
new
Date
(
startTime1
.
getTime
()
+
po
.
getDuration
()
*
60
*
1000
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
return
sdf
.
format
(
startTime1
)
+
" - "
+
sdf
.
format
(
endTime1
);
}));
// 过滤 groupedByTimeInterval,保留与 startTime 和 endTime 有交叉的条目
Map
<
String
,
List
<
CrossDataHistPO
>>
filteredGroupedByTimeInterval
=
groupedByTimeInterval
.
entrySet
().
stream
()
.
filter
(
entry
->
{
String
[]
times
=
entry
.
getKey
().
split
(
" - "
);
String
groupStartTime
=
times
[
0
];
String
groupEndTime
=
times
[
1
];
return
(
groupStartTime
.
compareTo
(
endTime
)
<
0
||
groupStartTime
.
equals
(
endTime
))
&&
(
groupEndTime
.
compareTo
(
startTime
)
>
0
||
groupEndTime
.
equals
(
startTime
));
})
.
collect
(
Collectors
.
toMap
(
Map
.
Entry
::
getKey
,
Map
.
Entry
::
getValue
));
return
filteredGroupedByTimeInterval
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/vo/SchemeEvaluateProblemSchemeVO.java
0 → 100644
View file @
4a1217c9
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
*/
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"SchemeEvaluateProblemSchemeVO"
,
description
=
"问题方案列表元素"
)
public
class
SchemeEvaluateProblemSchemeVO
{
@ApiModelProperty
(
value
=
"问题次数"
)
private
Integer
problemCounts
;
@ApiModelProperty
(
value
=
"问题方案个数"
)
private
Integer
schemeCounts
;
@ApiModelProperty
(
value
=
"效率问题个数"
)
private
Integer
efficiencyProblemCounts
;
@ApiModelProperty
(
value
=
"均衡问题个数"
)
private
Integer
balanceProblemCounts
;
@ApiModelProperty
(
value
=
"安全问题个数"
)
private
Integer
securityProblemCounts
;
@ApiModelProperty
(
value
=
"问题方案列表(根据日期)"
)
private
List
<
ByDateVO
>
problemSchemeListByDate
;
@ApiModelProperty
(
value
=
"问题方案列表(根据方案)"
)
private
List
<
BySchemeVO
>
problemSchemeListByScheme
;
@NoArgsConstructor
@Data
public
static
class
ByDateVO
{
@ApiModelProperty
(
value
=
"日期"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"M/d"
,
timezone
=
"GMT+8"
)
private
Date
problemDate
;
@ApiModelProperty
(
value
=
"效率问题个数"
)
private
Integer
efficiencyProblemCounts
;
@ApiModelProperty
(
value
=
"均衡问题个数"
)
private
Integer
balanceProblemCounts
;
@ApiModelProperty
(
value
=
"安全问题个数"
)
private
Integer
securityProblemCounts
;
@ApiModelProperty
(
value
=
"时段方案列表"
)
private
List
<
SectionSechemeVO
>
sectionSechemeList
;
}
@NoArgsConstructor
@Data
public
static
class
SectionSechemeVO
{
@ApiModelProperty
(
value
=
"时段"
)
private
String
timeSection
;
@ApiModelProperty
(
value
=
"方案名称"
)
private
String
schemeName
;
}
@NoArgsConstructor
@Data
public
static
class
BySchemeVO
{
@ApiModelProperty
(
value
=
"方案名称"
)
private
String
schemeName
;
@ApiModelProperty
(
value
=
"日期"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"M/d"
,
timezone
=
"GMT+8"
)
private
Date
problemDate
;
@ApiModelProperty
(
value
=
"开始时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
Date
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"HH:mm"
,
timezone
=
"GMT+8"
)
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