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
06210f5f
Commit
06210f5f
authored
Mar 03, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 诊断优化,下发手动干预、恢复下发
parent
4e0dce3b
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
181 additions
and
2 deletions
+181
-2
DiagnoController.java
.../main/java/net/wanji/opt/controller/DiagnoController.java
+25
-0
SendManualDTO.java
...ervice/src/main/java/net/wanji/opt/dto/SendManualDTO.java
+30
-0
DiagnoService.java
...ce/src/main/java/net/wanji/opt/service/DiagnoService.java
+5
-0
DiagnoServiceImpl.java
...in/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
+120
-1
SchemeOptSendVO.java
...rvice/src/main/java/net/wanji/opt/vo/SchemeOptSendVO.java
+1
-1
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/DiagnoController.java
View file @
06210f5f
...
...
@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiResponses;
import
net.wanji.common.dto.CrossIdDTO
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.opt.dto.CrossIdAndSchemeIdDTO
;
import
net.wanji.opt.dto.SendManualDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.service.DiagnoService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
...
...
@@ -83,4 +84,28 @@ public class DiagnoController {
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
=
diagnoService
.
queryOptTime
(
crossIdAndSchemeIdDTO
);
return
JsonViewObject
.
newInstance
().
success
(
phaseOptTimeList
);
}
@ApiOperation
(
value
=
"下发手动干预"
,
notes
=
"下发手动干预"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/sendManual"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
JsonViewObject
.
class
),
})
public
JsonViewObject
sendManual
(
@RequestBody
SendManualDTO
sendManualDTO
)
throws
Exception
{
diagnoService
.
sendManual
(
sendManualDTO
);
return
JsonViewObject
.
newInstance
().
success
();
}
@ApiOperation
(
value
=
"恢复下发"
,
notes
=
"恢复下发"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/restoreSend"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
JsonViewObject
.
class
),
})
public
JsonViewObject
restoreSend
(
@RequestBody
CrossIdDTO
crossIdDTO
)
throws
Exception
{
diagnoService
.
restoreSend
(
crossIdDTO
);
return
JsonViewObject
.
newInstance
().
success
();
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/dto/SendManualDTO.java
0 → 100644
View file @
06210f5f
package
net
.
wanji
.
opt
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
net.wanji.opt.vo.SchemeOptVO
;
import
java.util.List
;
/**
* @author hfx
* @date 2023/1/12 09:11
* @desc 路口基础信息
*/
@Data
@ApiModel
(
value
=
"SendManualDTO"
,
description
=
"下发手动干预输入参数"
)
public
class
SendManualDTO
{
@ApiModelProperty
(
value
=
"优化模式 0手动干预 1中心优化 6边缘优化"
)
private
Integer
optType
;
@ApiModelProperty
(
value
=
"当前路口路口状态 1失衡 2拥堵 3溢出"
)
private
Integer
crossStatus
;
@ApiModelProperty
(
value
=
"当前路口ID"
)
private
String
currentCrossId
;
@ApiModelProperty
(
value
=
"下发路口ID"
)
private
String
sendCrossId
;
@ApiModelProperty
(
value
=
"原方案ID"
)
private
Integer
schemeId
;
@ApiModelProperty
(
value
=
"调整时间表格"
)
private
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/DiagnoService.java
View file @
06210f5f
...
...
@@ -2,6 +2,7 @@ package net.wanji.opt.service;
import
net.wanji.common.dto.CrossIdDTO
;
import
net.wanji.opt.dto.CrossIdAndSchemeIdDTO
;
import
net.wanji.opt.dto.SendManualDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.SchemeOptVO
;
...
...
@@ -20,4 +21,8 @@ public interface DiagnoService {
SchemeOptVO
querySchemeOpt
(
CrossIdDTO
crossIdDTO
);
List
<
SchemeOptVO
.
PhaseOptTime
>
queryOptTime
(
CrossIdAndSchemeIdDTO
crossIdAndSchemeIdDTO
);
void
sendManual
(
SendManualDTO
sendManualDTO
)
throws
Exception
;
void
restoreSend
(
CrossIdDTO
crossIdDTO
)
throws
Exception
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/DiagnoServiceImpl.java
View file @
06210f5f
...
...
@@ -6,6 +6,7 @@ import net.wanji.common.dto.CrossIdDTO;
import
net.wanji.common.utils.tool.CrossUtil
;
import
net.wanji.databus.dao.entity.RidInfoEntity
;
import
net.wanji.databus.dao.mapper.RidInfoMapper
;
import
net.wanji.feign.pojo.vo.SchemeSendVO
;
import
net.wanji.opt.dao.mapper.CrossDirInfoMapper
;
import
net.wanji.opt.dao.mapper.CrossInfoMapper
;
import
net.wanji.opt.dao.mapper.CrossPhaseMapper
;
...
...
@@ -14,6 +15,7 @@ import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import
net.wanji.opt.dao.mapper.strategy.SceneMapper
;
import
net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper
;
import
net.wanji.opt.dto.CrossIdAndSchemeIdDTO
;
import
net.wanji.opt.dto.SendManualDTO
;
import
net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO
;
import
net.wanji.opt.dto.strategy.QuerySceneDTO
;
import
net.wanji.opt.po.base.CrossInfoPO
;
...
...
@@ -23,17 +25,22 @@ import net.wanji.opt.po.base.CrossSchemePO;
import
net.wanji.opt.po.strategy.ScenePO
;
import
net.wanji.opt.po.trend.CrossDataRealtimePO
;
import
net.wanji.opt.service.DiagnoService
;
import
net.wanji.opt.service.signalcontrol.FeignProxyService
;
import
net.wanji.opt.service.strategy.SceneService
;
import
net.wanji.opt.vo.CrossIdAndLocationVO
;
import
net.wanji.opt.vo.SchemeOptSendVO
;
import
net.wanji.opt.vo.SchemeOptVO
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
* @author Kent HAN
...
...
@@ -52,11 +59,13 @@ public class DiagnoServiceImpl implements DiagnoService {
private
final
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
;
private
final
CrossSchemeMapper
crossSchemeMapper
;
private
final
CrossPhaseMapper
crossPhaseMapper
;
private
final
FeignProxyService
feignProxyService
;
public
DiagnoServiceImpl
(
CrossInfoMapper
crossInfoMapper
,
CrossDataRealtimeMapper
crossDataRealtimeMapper
,
SceneService
sceneService
,
SceneMapper
sceneMapper
,
CrossDirInfoMapper
crossDirInfoMapper
,
RidInfoMapper
ridInfoMapper
,
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
CrossSchemeMapper
crossSchemeMapper
,
CrossPhaseMapper
crossPhaseMapper
)
{
CrossSchemeMapper
crossSchemeMapper
,
CrossPhaseMapper
crossPhaseMapper
,
FeignProxyService
feignProxyService
)
{
this
.
crossInfoMapper
=
crossInfoMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
this
.
sceneService
=
sceneService
;
...
...
@@ -66,6 +75,7 @@ public class DiagnoServiceImpl implements DiagnoService {
this
.
crossSchemeOptLogMapper
=
crossSchemeOptLogMapper
;
this
.
crossSchemeMapper
=
crossSchemeMapper
;
this
.
crossPhaseMapper
=
crossPhaseMapper
;
this
.
feignProxyService
=
feignProxyService
;
}
@Override
...
...
@@ -164,6 +174,115 @@ public class DiagnoServiceImpl implements DiagnoService {
return
phaseOptTimeList
;
}
@Override
public
void
sendManual
(
SendManualDTO
sendManualDTO
)
throws
Exception
{
SchemeOptSendVO
schemeOptSendVO
=
new
SchemeOptSendVO
();
Integer
optTypeInt
=
sendManualDTO
.
getOptType
();
String
optTypeStr
=
String
.
valueOf
(
optTypeInt
);
schemeOptSendVO
.
setOptType
(
optTypeStr
);
Integer
crossStatus
=
sendManualDTO
.
getCrossStatus
();
String
crossStatusStr
=
String
.
valueOf
(
crossStatus
);
schemeOptSendVO
.
setOptReason
(
crossStatusStr
);
String
currentCrossId
=
sendManualDTO
.
getCurrentCrossId
();
String
sendCrossId
=
sendManualDTO
.
getSendCrossId
();
if
(!
Objects
.
equals
(
currentCrossId
,
sendCrossId
))
{
schemeOptSendVO
.
setRelationFlag
(
String
.
valueOf
(
0
));
// 是否被关联调整 1否 0是
schemeOptSendVO
.
setRelationCrossId
(
currentCrossId
);
}
else
{
schemeOptSendVO
.
setRelationFlag
(
String
.
valueOf
(
1
));
}
Map
<
String
,
Integer
>
phaseOffsetTimeMap
=
new
HashMap
<>();
List
<
SchemeOptVO
.
PhaseOptTime
>
phaseOptTimeList
=
sendManualDTO
.
getPhaseOptTimeList
();
for
(
SchemeOptVO
.
PhaseOptTime
phaseOptTime
:
phaseOptTimeList
)
{
phaseOffsetTimeMap
.
put
(
phaseOptTime
.
getPhaseNo
(),
phaseOptTime
.
getOptTime
());
}
schemeOptSendVO
.
setPhaseOffsetTimeMap
(
phaseOffsetTimeMap
);
schemeOptSendVO
.
setCrossCode
(
sendCrossId
);
Integer
schemeId
=
sendManualDTO
.
getSchemeId
();
List
<
SchemeSendVO
.
Pattern
>
patternList
=
buildPatternList
(
sendCrossId
,
schemeId
,
phaseOffsetTimeMap
);
schemeOptSendVO
.
setPatternList
(
patternList
);
feignProxyService
.
schemeOptSend
(
schemeOptSendVO
);
}
private
List
<
SchemeSendVO
.
Pattern
>
buildPatternList
(
String
sendCrossId
,
Integer
schemeId
,
Map
<
String
,
Integer
>
phaseOffsetTimeMap
)
{
List
<
SchemeSendVO
.
Pattern
>
patternList
=
new
ArrayList
<>();
CrossSchemePO
crossSchemePO
=
crossSchemeMapper
.
selectById
(
schemeId
);
SchemeSendVO
.
Pattern
pattern
=
new
SchemeSendVO
.
Pattern
();
pattern
.
setPatternNo
(
crossSchemePO
.
getSchemeNo
());
pattern
.
setPatternName
(
crossSchemePO
.
getName
());
pattern
.
setCycle
(
crossSchemePO
.
getCycle
().
toString
());
pattern
.
setCoordPhase
(
crossSchemePO
.
getCoordPhase
().
toString
());
pattern
.
setOffset
(
crossSchemePO
.
getOffset
().
toString
());
// 构造环列表
List
<
SchemeSendVO
.
Pattern
.
Ring
>
rings
=
buildRings
(
sendCrossId
,
schemeId
,
phaseOffsetTimeMap
);
pattern
.
setRings
(
rings
);
patternList
.
add
(
pattern
);
return
patternList
;
}
private
List
<
SchemeSendVO
.
Pattern
.
Ring
>
buildRings
(
String
sendCrossId
,
Integer
schemeId
,
Map
<
String
,
Integer
>
phaseOffsetTimeMap
)
{
List
<
SchemeSendVO
.
Pattern
.
Ring
>
rings
=
new
ArrayList
<>();
// 根据路口ID和方案ID查询相位集合,根据ringNo分组,特殊控制ringNo为0
List
<
CrossPhasePO
>
crossPhasePOList
=
crossPhaseMapper
.
listCrossPhase
(
sendCrossId
,
schemeId
.
toString
());
Map
<
Integer
,
List
<
CrossPhasePO
>>
collectMap
=
crossPhasePOList
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
CrossPhasePO:
:
getRingNo
));
for
(
Map
.
Entry
<
Integer
,
List
<
CrossPhasePO
>>
entry
:
collectMap
.
entrySet
())
{
SchemeSendVO
.
Pattern
.
Ring
ring
=
new
SchemeSendVO
.
Pattern
.
Ring
();
ring
.
setRingNo
(
entry
.
getKey
().
toString
());
// 构造相位列表
List
<
CrossPhasePO
>
phases
=
entry
.
getValue
();
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
phaseList
=
buildPhaseList
(
phases
,
phaseOffsetTimeMap
);
ring
.
setPhaseList
(
phaseList
);
rings
.
add
(
ring
);
}
return
rings
;
}
private
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
buildPhaseList
(
List
<
CrossPhasePO
>
phases
,
Map
<
String
,
Integer
>
phaseOffsetTimeMap
)
{
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
phaseList
=
new
ArrayList
<>();
for
(
CrossPhasePO
phasePO
:
phases
)
{
SchemeSendVO
.
Pattern
.
Ring
.
Phase
phase
=
new
SchemeSendVO
.
Pattern
.
Ring
.
Phase
();
String
phaseNo
=
phasePO
.
getPhaseNo
();
phase
.
setPhaseNo
(
phaseNo
);
phase
.
setPhaseName
(
phasePO
.
getName
());
phase
.
setSort
(
phasePO
.
getSort
().
toString
());
phase
.
setControlMode
(
phasePO
.
getControlMode
().
toString
());
phase
.
setMinGreenTime
(
phasePO
.
getMinGreenTime
().
toString
());
phase
.
setMaxGreenTime
(
phasePO
.
getMaxGreenTime
().
toString
());
phase
.
setPhaseTime
(
phasePO
.
getPhaseTime
().
toString
());
Integer
oldGreenTime
=
phasePO
.
getGreenTime
();
Integer
optTime
=
phaseOffsetTimeMap
.
get
(
phaseNo
);
if
(
optTime
!=
null
)
{
Integer
newGreenTime
=
oldGreenTime
+
optTime
;
phase
.
setGreenTime
(
newGreenTime
.
toString
());
}
else
{
phase
.
setGreenTime
(
oldGreenTime
.
toString
());
}
phase
.
setGreenFlashTime
(
phasePO
.
getGreenFlashTime
().
toString
());
phase
.
setPedFlashTime
(
phasePO
.
getPedFlashTime
().
toString
());
phase
.
setYellowTime
(
phasePO
.
getYellowTime
().
toString
());
phase
.
setRedTime
(
phasePO
.
getRedTime
().
toString
());
phaseList
.
add
(
phase
);
}
return
phaseList
;
}
@Override
public
void
restoreSend
(
CrossIdDTO
crossIdDTO
)
throws
Exception
{
String
crossId
=
crossIdDTO
.
getCrossId
();
feignProxyService
.
schemeOptRestore
(
crossId
);
}
private
Integer
getNewGreenTime
(
String
crossId
,
Integer
schemeId
,
String
phaseNo
)
{
List
<
CrossPhasePO
>
crossPhasePOList
=
crossPhaseMapper
.
listCrossPhase
(
crossId
,
String
.
valueOf
(
schemeId
));
for
(
CrossPhasePO
crossPhasePO
:
crossPhasePOList
)
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/SchemeOptSendVO.java
View file @
06210f5f
...
...
@@ -20,7 +20,7 @@ public class SchemeOptSendVO extends SchemeSendVO {
@ApiModelProperty
(
value
=
"优化类型: 0-手动优化; 1-自动优化; 2-恢复; 3-绿波优化; 4-区域优化; 5-高峰方案下发"
)
@NotBlank
(
message
=
"优化类型不能为空"
)
private
String
optType
;
@ApiModelProperty
(
value
=
"调整原因: 1-失衡; 2-
溢出; 3-拥堵
; 4-绿波优化; 5-高峰方案下发-失衡; 6-高峰方案下发-溢出; 7-高峰方案下发-拥堵; 8-活动预案; 90-事故单点优化"
)
@ApiModelProperty
(
value
=
"调整原因: 1-失衡; 2-
拥堵; 3-溢出
; 4-绿波优化; 5-高峰方案下发-失衡; 6-高峰方案下发-溢出; 7-高峰方案下发-拥堵; 8-活动预案; 90-事故单点优化"
)
private
String
optReason
;
@ApiModelProperty
(
value
=
"是否被关联调整: 1-否; 0-是"
)
private
String
relationFlag
;
...
...
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