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
9ff4f78e
Commit
9ff4f78e
authored
Feb 01, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
方案管理-方案下发,强制方案下发
parent
d8d1e287
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
149 additions
and
30 deletions
+149
-30
PlanSendController.java
...ain/java/net/wanji/web/controller/PlanSendController.java
+8
-0
SaveSchemeConfigDTO.java
.../src/main/java/net/wanji/web/dto/SaveSchemeConfigDTO.java
+2
-0
SchemeIdDTO.java
...-service/src/main/java/net/wanji/web/dto/SchemeIdDTO.java
+18
-0
CrossSchemeMapper.java
...n/java/net/wanji/web/mapper/scheme/CrossSchemeMapper.java
+3
-1
SchemeSendService.java
...rc/main/java/net/wanji/web/service/SchemeSendService.java
+3
-0
SchemeSendServiceImpl.java
...ava/net/wanji/web/service/impl/SchemeSendServiceImpl.java
+107
-29
SchemeConfigServiceImpl.java
...anji/web/service/scheme/impl/SchemeConfigServiceImpl.java
+1
-0
CrossSchemeMapper.xml
...ce/src/main/resources/mapper/scheme/CrossSchemeMapper.xml
+7
-0
No files found.
signal-control-service/src/main/java/net/wanji/web/controller/PlanSendController.java
View file @
9ff4f78e
...
...
@@ -4,6 +4,7 @@ import io.swagger.annotations.Api;
import
io.swagger.annotations.ApiOperation
;
import
net.wanji.feign.pojo.result.JsonViewObject
;
import
net.wanji.web.dto.ScheduleIdDTO
;
import
net.wanji.web.dto.SchemeIdDTO
;
import
net.wanji.web.service.impl.SchemeSendServiceImpl
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -31,4 +32,11 @@ public class PlanSendController {
JsonViewObject
jsonViewObject
=
schemeSendService
.
scheduleSend
(
scheduleIdDTO
);
return
jsonViewObject
;
}
@ApiOperation
(
value
=
"强制方案"
,
notes
=
"强制方案"
)
@PostMapping
(
"/schemeSend"
)
public
JsonViewObject
schemeSend
(
@RequestBody
SchemeIdDTO
schemeIdDTO
)
{
JsonViewObject
jsonViewObject
=
schemeSendService
.
schemeSend
(
schemeIdDTO
);
return
jsonViewObject
;
}
}
signal-control-service/src/main/java/net/wanji/web/dto/SaveSchemeConfigDTO.java
View file @
9ff4f78e
...
...
@@ -20,6 +20,8 @@ public class SaveSchemeConfigDTO {
private
List
<
PhaseScheme
>
phaseSchemeList
;
// 方案列表
@Data
public
static
class
PhaseScheme
{
@ApiModelProperty
(
value
=
"方案ID"
,
required
=
true
)
private
Integer
schemeId
;
@ApiModelProperty
(
value
=
"方案号"
,
required
=
true
)
private
String
schemeNo
;
@ApiModelProperty
(
value
=
"方案名称"
,
required
=
true
)
...
...
signal-control-service/src/main/java/net/wanji/web/dto/SchemeIdDTO.java
0 → 100644
View file @
9ff4f78e
package
net
.
wanji
.
web
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 方案下发-强制方案输入参数
*
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public
class
SchemeIdDTO
{
@ApiModelProperty
(
value
=
"路口ID,如:c7e7b1f352dd4acab4a60088eb391cca"
,
required
=
true
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"方案ID"
,
required
=
true
)
private
Integer
schemeId
;
}
signal-control-service/src/main/java/net/wanji/web/mapper/scheme/CrossSchemeMapper.java
View file @
9ff4f78e
package
net
.
wanji
.
web
.
mapper
.
scheme
;
import
io.lettuce.core.dynamic.annotation.Param
;
import
net.wanji.web.po.scheme.CrossSchemePO
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
...
...
@@ -31,4 +31,6 @@ public interface CrossSchemeMapper {
CrossSchemePO
selectByCrossIdAndSchemeName
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"schemeName"
)
String
schemeName
);
CrossSchemePO
selectById
(
@Param
(
"id"
)
Integer
id
);
}
signal-control-service/src/main/java/net/wanji/web/service/SchemeSendService.java
View file @
9ff4f78e
...
...
@@ -2,6 +2,7 @@ package net.wanji.web.service;
import
net.wanji.feign.pojo.result.JsonViewObject
;
import
net.wanji.web.dto.ScheduleIdDTO
;
import
net.wanji.web.dto.SchemeIdDTO
;
/**
* @author Kent HAN
...
...
@@ -9,4 +10,6 @@ import net.wanji.web.dto.ScheduleIdDTO;
*/
public
interface
SchemeSendService
{
JsonViewObject
scheduleSend
(
ScheduleIdDTO
scheduleIdDTO
);
JsonViewObject
schemeSend
(
SchemeIdDTO
schemeIdDTO
);
}
signal-control-service/src/main/java/net/wanji/web/service/impl/SchemeSendServiceImpl.java
View file @
9ff4f78e
...
...
@@ -2,12 +2,18 @@ package net.wanji.web.service.impl;
import
net.wanji.feign.pojo.result.JsonViewObject
;
import
net.wanji.feign.pojo.vo.ScheduleSendVO
;
import
net.wanji.feign.pojo.vo.SchemeSendVO
;
import
net.wanji.feign.service.UtcFeignClients
;
import
net.wanji.web.dto.ScheduleIdDTO
;
import
net.wanji.web.dto.SchemeIdDTO
;
import
net.wanji.web.mapper.scheme.CrossPhaseMapper
;
import
net.wanji.web.mapper.scheme.CrossPlanMapper
;
import
net.wanji.web.mapper.scheme.CrossSchedulesPlanMapper
;
import
net.wanji.web.mapper.scheme.CrossSchemeMapper
;
import
net.wanji.web.po.scheme.CrossPhasePO
;
import
net.wanji.web.po.scheme.CrossPlanPO
;
import
net.wanji.web.po.scheme.CrossSchedulesPlanPO
;
import
net.wanji.web.po.scheme.CrossSchemePO
;
import
net.wanji.web.service.SchemeSendService
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.stereotype.Service
;
...
...
@@ -29,13 +35,17 @@ public class SchemeSendServiceImpl implements SchemeSendService {
private
final
UtcFeignClients
utcFeignClients
;
private
final
CrossSchedulesPlanMapper
crossSchedulesPlanMapper
;
private
final
CrossPlanMapper
crossPlanMapper
;
private
final
CrossSchemeMapper
crossSchemeMapper
;
private
final
CrossPhaseMapper
crossPhaseMapper
;
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
public
SchemeSendServiceImpl
(
@Qualifier
(
"net.wanji.feign.service.UtcFeignClients"
)
UtcFeignClients
utcFeignClients
,
CrossSchedulesPlanMapper
crossSchedulesPlanMapper
,
CrossPlanMapper
crossPlanMapper
)
{
public
SchemeSendServiceImpl
(
@Qualifier
(
"net.wanji.feign.service.UtcFeignClients"
)
UtcFeignClients
utcFeignClients
,
CrossSchedulesPlanMapper
crossSchedulesPlanMapper
,
CrossPlanMapper
crossPlanMapper
,
CrossSchemeMapper
crossSchemeMapper
,
CrossPhaseMapper
crossPhaseMapper
)
{
this
.
utcFeignClients
=
utcFeignClients
;
this
.
crossSchedulesPlanMapper
=
crossSchedulesPlanMapper
;
this
.
crossPlanMapper
=
crossPlanMapper
;
this
.
crossSchemeMapper
=
crossSchemeMapper
;
this
.
crossPhaseMapper
=
crossPhaseMapper
;
}
@Override
...
...
@@ -48,62 +58,130 @@ public class SchemeSendServiceImpl implements SchemeSendService {
scheduleSendVO
.
setSchedules
(
schedules
);
// 发送请求
JsonViewObject
jsonViewObject
=
utcFeignClients
.
scheduleSend
(
scheduleSendVO
);
if
(
Objects
.
isNull
(
jsonViewObject
)
||
jsonViewObject
.
getCode
()
!=
200
)
{
return
jsonViewObject
.
fail
(
"信号机方案下发-时间表下发UTC服务调用异常"
);
}
return
jsonViewObject
.
success
();
}
@Override
public
JsonViewObject
schemeSend
(
SchemeIdDTO
schemeIdDTO
)
{
String
crossId
=
schemeIdDTO
.
getCrossId
();
SchemeSendVO
schemeSendVO
=
new
SchemeSendVO
();
schemeSendVO
.
setCrossCode
(
crossId
);
// 构造方案列表
Integer
schemeId
=
schemeIdDTO
.
getSchemeId
();
List
<
SchemeSendVO
.
Pattern
>
patternList
=
buildPatternList
(
crossId
,
schemeId
);
schemeSendVO
.
setPatternList
(
patternList
);
// 发送请求
JsonViewObject
jsonViewObject
=
utcFeignClients
.
schemeSend
(
schemeSendVO
);
if
(
Objects
.
isNull
(
jsonViewObject
)
||
jsonViewObject
.
getCode
()
!=
200
)
{
return
jsonViewObject
.
fail
(
"信号机方案下发-基础方案下发UTC服务调用异常"
);
}
return
jsonViewObject
.
success
();
}
private
List
<
SchemeSendVO
.
Pattern
>
buildPatternList
(
String
crossId
,
Integer
schemeId
)
{
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
(
crossId
,
schemeId
);
pattern
.
setRings
(
rings
);
patternList
.
add
(
pattern
);
return
patternList
;
}
private
List
<
SchemeSendVO
.
Pattern
.
Ring
>
buildRings
(
String
crossId
,
Integer
schemeId
)
{
List
<
SchemeSendVO
.
Pattern
.
Ring
>
rings
=
new
ArrayList
<>();
// 根据路口ID和方案ID查询相位集合,根据ringNo分组,特殊控制ringNo为0
List
<
CrossPhasePO
>
crossPhasePOList
=
crossPhaseMapper
.
selectByCrossIdAndSchemeId
(
crossId
,
schemeId
);
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
);
ring
.
setPhaseList
(
phaseList
);
rings
.
add
(
ring
);
}
return
rings
;
}
private
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
buildPhaseList
(
List
<
CrossPhasePO
>
phases
)
{
List
<
SchemeSendVO
.
Pattern
.
Ring
.
Phase
>
phaseList
=
new
ArrayList
<>();
for
(
CrossPhasePO
phasePO
:
phases
)
{
SchemeSendVO
.
Pattern
.
Ring
.
Phase
phase
=
new
SchemeSendVO
.
Pattern
.
Ring
.
Phase
();
phase
.
setPhaseNo
(
phasePO
.
getPhaseNo
());
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
());
phase
.
setGreenTime
(
phasePO
.
getGreenTime
().
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
;
}
private
List
<
ScheduleSendVO
.
Schedule
>
buildSchedules
(
String
crossId
,
ScheduleIdDTO
scheduleIdDTO
)
{
List
<
ScheduleSendVO
.
Schedule
>
schedules
=
new
ArrayList
<>();
Integer
scheduleId
=
scheduleIdDTO
.
getScheduleId
();
List
<
CrossSchedulesPlanPO
>
crossSchedulesPlanPOList
=
crossSchedulesPlanMapper
.
selectByCrossIdAndSchedulesId
(
crossId
,
scheduleId
);
// 根据计划ID分组
Map
<
Integer
,
List
<
CrossSchedulesPlanPO
>>
collectMap
=
crossSchedulesPlanPOList
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
CrossSchedulesPlanPO:
:
getPlanId
));
for
(
Map
.
Entry
<
Integer
,
List
<
CrossSchedulesPlanPO
>>
entry
:
collectMap
.
entrySet
())
{
ScheduleSendVO
.
Schedule
schedule
=
new
ScheduleSendVO
.
Schedule
();
List
<
ScheduleSendVO
.
Schedule
.
Week
>
weeks
=
new
ArrayList
<>();
List
<
ScheduleSendVO
.
Schedule
.
SpecialDay
>
specialDays
=
new
ArrayList
<>();
for
(
CrossSchedulesPlanPO
crossSchedulesPlanPO
:
entry
.
getValue
())
{
Integer
week
=
crossSchedulesPlanPO
.
getWeek
();
Date
specialDate
=
crossSchedulesPlanPO
.
getSpecialDate
();
if
(
week
!=
0
)
{
// 添加至星期列表
addToWeeks
(
weeks
,
week
,
entry
);
}
else
{
// 添加至特殊日期列表
addToSpecialDays
(
specialDays
,
specialDate
,
entry
);
}
ScheduleSendVO
.
Schedule
schedule
=
new
ScheduleSendVO
.
Schedule
();
List
<
ScheduleSendVO
.
Schedule
.
Week
>
weeks
=
new
ArrayList
<>();
List
<
ScheduleSendVO
.
Schedule
.
SpecialDay
>
specialDays
=
new
ArrayList
<>();
for
(
CrossSchedulesPlanPO
crossSchedulesPlanPO
:
crossSchedulesPlanPOList
)
{
Integer
planId
=
crossSchedulesPlanPO
.
getPlanId
();
Integer
week
=
crossSchedulesPlanPO
.
getWeek
();
Date
specialDate
=
crossSchedulesPlanPO
.
getSpecialDate
();
if
(
week
!=
0
)
{
// 添加至星期列表
addToWeeks
(
weeks
,
week
,
planId
);
}
else
{
// 添加至特殊日期列表
addToSpecialDays
(
specialDays
,
specialDate
,
planId
);
}
schedule
.
setWeeks
(
weeks
);
schedule
.
setSpecialDays
(
specialDays
);
schedules
.
add
(
schedule
);
}
schedule
.
setWeeks
(
weeks
);
schedule
.
setSpecialDays
(
specialDays
);
schedules
.
add
(
schedule
);
return
schedules
;
}
private
void
addToSpecialDays
(
List
<
ScheduleSendVO
.
Schedule
.
SpecialDay
>
specialDays
,
Date
specialDate
,
Map
.
Entry
<
Integer
,
List
<
CrossSchedulesPlanPO
>>
entry
)
{
private
void
addToSpecialDays
(
List
<
ScheduleSendVO
.
Schedule
.
SpecialDay
>
specialDays
,
Date
specialDate
,
Integer
planId
)
{
ScheduleSendVO
.
Schedule
.
SpecialDay
specialDay
=
new
ScheduleSendVO
.
Schedule
.
SpecialDay
();
specialDay
.
setDateStr
(
sdf
.
format
(
specialDate
));
String
planNo
=
getPlanNo
(
entry
);
String
planNo
=
getPlanNo
(
planId
);
specialDay
.
setPlanNo
(
Integer
.
parseInt
(
planNo
));
specialDays
.
add
(
specialDay
);
}
private
void
addToWeeks
(
List
<
ScheduleSendVO
.
Schedule
.
Week
>
weeks
,
Integer
week
,
Map
.
Entry
<
Integer
,
List
<
CrossSchedulesPlanPO
>>
entry
)
{
private
void
addToWeeks
(
List
<
ScheduleSendVO
.
Schedule
.
Week
>
weeks
,
Integer
week
,
Integer
planId
)
{
ScheduleSendVO
.
Schedule
.
Week
weekObj
=
new
ScheduleSendVO
.
Schedule
.
Week
();
weekObj
.
setWeekNum
(
week
);
String
planNo
=
getPlanNo
(
entry
);
String
planNo
=
getPlanNo
(
planId
);
weekObj
.
setPlanNo
(
Integer
.
parseInt
(
planNo
));
weeks
.
add
(
weekObj
);
}
private
String
getPlanNo
(
Map
.
Entry
<
Integer
,
List
<
CrossSchedulesPlanPO
>>
entry
)
{
Integer
planId
=
entry
.
getKey
();
private
String
getPlanNo
(
Integer
planId
)
{
CrossPlanPO
crossPlanPO
=
crossPlanMapper
.
selectById
(
planId
);
return
crossPlanPO
.
getPlanNo
();
}
...
...
signal-control-service/src/main/java/net/wanji/web/service/scheme/impl/SchemeConfigServiceImpl.java
View file @
9ff4f78e
...
...
@@ -118,6 +118,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
SaveSchemeConfigDTO
.
PhaseScheme
phaseScheme
=
new
SaveSchemeConfigDTO
.
PhaseScheme
();
phaseScheme
.
setSchemeNo
(
crossSchemePO
.
getSchemeNo
());
phaseScheme
.
setName
(
crossSchemePO
.
getName
());
phaseScheme
.
setSchemeId
(
crossSchemePO
.
getId
());
// 获取协调相位号
Integer
coordPhaseId
=
crossSchemePO
.
getCoordPhase
();
if
(
coordPhaseId
!=
null
)
{
...
...
signal-control-service/src/main/resources/mapper/scheme/CrossSchemeMapper.xml
View file @
9ff4f78e
...
...
@@ -60,5 +60,12 @@
where cross_id = #{crossId} and name = #{schemeName}
</select>
<select
id=
"selectById"
resultType=
"net.wanji.web.po.scheme.CrossSchemePO"
>
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,gmt_create,gmt_modified
from t_base_cross_scheme
where id = #{id}
</select>
</mapper>
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