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
310e5878
Commit
310e5878
authored
Dec 02, 2024
by
董国亮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
诱导下发代码优化
parent
f708007b
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
142 additions
and
101 deletions
+142
-101
InduceSendController.java
...net/wanji/opt/controller/induce/InduceSendController.java
+29
-6
InducesMonitorTask.java
.../src/main/java/net/wanji/opt/task/InducesMonitorTask.java
+109
-95
StrategyGreenOptHistMapper.xml
.../src/main/resources/mapper/StrategyGreenOptHistMapper.xml
+4
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/induce/InduceSendController.java
View file @
310e5878
...
...
@@ -10,13 +10,11 @@ import net.wanji.common.framework.Constants;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.utils.tool.DateUtil
;
import
net.wanji.opt.entity.GreenwaveInduces
;
import
net.wanji.opt.entity.GreenwaveInducesHist
;
import
net.wanji.opt.entity.InduceHist
;
import
net.wanji.opt.entity.InduceTemplate
;
import
net.wanji.opt.dto.induce.MessageParam
;
import
net.wanji.opt.service.induce.GreenwaveInducesService
;
import
net.wanji.opt.service.induce.InduceHistService
;
import
net.wanji.opt.service.induce.InduceSendService
;
import
net.wanji.opt.service.induce.InduceTemplateService
;
import
net.wanji.opt.service.induce.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpStatus
;
...
...
@@ -48,11 +46,26 @@ public class InduceSendController {
@Autowired
private
GreenwaveInducesService
greenwaveInducesService
;
@Autowired
private
GreenwaveInducesHistService
greenwaveInducesHistService
;
@ApiOperation
(
value
=
"发送诱导信息"
,
notes
=
"发送诱导信息"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
"/send"
)
public
JsonViewObject
send
(
@RequestBody
MessageParam
param
)
{
JsonViewObject
jsonView
=
JsonViewObject
.
newInstance
();
try
{
if
(
Objects
.
nonNull
(
param
.
getGreenId
()))
{
LambdaQueryWrapper
<
GreenwaveInducesHist
>
greenwaveInducesHistQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
param
.
getGreenId
());
List
<
GreenwaveInducesHist
>
greenwaveInducesHistList
=
greenwaveInducesHistService
.
list
(
greenwaveInducesHistQueryWrapper
);
if
(
Objects
.
nonNull
(
greenwaveInducesHistList
)
&&
greenwaveInducesHistList
.
size
()
>
0
&&
Objects
.
nonNull
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
())
&&
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"|"
).
length
>
0
&&
DateUtil
.
isBetween
(
new
Date
(),
DateUtil
.
parse
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
0
],
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
),
DateUtil
.
parse
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
1
],
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
)))
{
param
.
setStartTime
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
0
]);
param
.
setEndTime
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
1
]);
}
else
{
param
.
setStartTime
(
DateUtil
.
format
(
new
Date
(),
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
));
param
.
setEndTime
(
DateUtil
.
format
(
System
.
currentTimeMillis
()
+
1000
*
30
,
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
));
}
}
induceSendService
.
send
(
param
);
return
jsonView
.
success
();
}
catch
(
Exception
e
)
{
...
...
@@ -70,6 +83,11 @@ public class InduceSendController {
LambdaQueryWrapper
<
GreenwaveInduces
>
greenwaveInducesQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesQueryWrapper
.
eq
(
GreenwaveInduces:
:
getGreenId
,
param
.
getGreenId
());
List
<
GreenwaveInduces
>
greenwaveInducesList
=
greenwaveInducesService
.
list
(
greenwaveInducesQueryWrapper
);
LambdaQueryWrapper
<
GreenwaveInducesHist
>
greenwaveInducesHistQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
param
.
getGreenId
());
List
<
GreenwaveInducesHist
>
greenwaveInducesHistList
=
greenwaveInducesHistService
.
list
(
greenwaveInducesHistQueryWrapper
);
for
(
GreenwaveInduces
greenwaveInduces:
greenwaveInducesList
)
{
LambdaQueryWrapper
<
InduceTemplate
>
induceTemplateQueryWrapper
=
new
LambdaQueryWrapper
<>();
...
...
@@ -81,8 +99,13 @@ public class InduceSendController {
param
.
setEquipCode
(
greenwaveInduces
.
getEquipCode
());
param
.
setPlayorder
(
induceTemplateList
.
size
());
param
.
setDuration
(
greenwaveInduces
.
getDuration
());
if
(
Objects
.
nonNull
(
greenwaveInducesHistList
)
&&
greenwaveInducesHistList
.
size
()
>
0
&&
Objects
.
nonNull
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
())
&&
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"|"
).
length
>
0
&&
DateUtil
.
isBetween
(
new
Date
(),
DateUtil
.
parse
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
0
],
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
),
DateUtil
.
parse
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
1
],
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
)))
{
param
.
setStartTime
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
0
]);
param
.
setEndTime
(
greenwaveInducesHistList
.
get
(
0
).
getControlOptTimes
().
split
(
"\\|"
)[
1
]);
}
else
{
param
.
setStartTime
(
DateUtil
.
format
(
new
Date
(),
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
));
param
.
setEndTime
(
DateUtil
.
format
(
System
.
currentTimeMillis
()
+
1000
*
30
,
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
));
}
induceSendService
.
send
(
param
);
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/InducesMonitorTask.java
View file @
310e5878
...
...
@@ -5,8 +5,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.Constants
;
import
net.wanji.common.utils.tool.DateUtil
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.databus.dao.entity.GreenwaveCrossPO
;
import
net.wanji.databus.dao.entity.GreenwaveCrossPOExt
;
import
net.wanji.databus.dao.entity.GreenwaveInfoPO
;
import
net.wanji.databus.dao.mapper.CrossDataRealtimeMapper
;
import
net.wanji.databus.dao.mapper.GreenwaveCrossMapper
;
import
net.wanji.databus.dao.mapper.GreenwaveInfoMapper
;
...
...
@@ -17,7 +22,6 @@ import net.wanji.opt.dto.induce.MessageParam;
import
net.wanji.opt.entity.GreenwaveInduces
;
import
net.wanji.opt.entity.GreenwaveInducesHist
;
import
net.wanji.opt.po.StrategyGreenOptHistEntity
;
import
net.wanji.databus.dao.entity.GreenwaveInfoPO
;
import
net.wanji.opt.service.induce.GreenwaveInducesHistService
;
import
net.wanji.opt.service.induce.GreenwaveInducesService
;
import
net.wanji.opt.service.induce.InduceSendService
;
...
...
@@ -38,6 +42,7 @@ import java.util.List;
import
java.util.Objects
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -81,19 +86,20 @@ public class InducesMonitorTask {
* #绿波调度计划扫描周期
* 5 分钟 300000
*/
//
@Scheduled(fixedRate = 300000)
@Scheduled
(
fixedRate
=
300000
)
public
void
refresh
()
throws
Exception
{
long
start
=
System
.
currentTimeMillis
();
AtomicLong
synCount
=
new
AtomicLong
();
try
{
log
.
info
(
"每5分钟刷新绿波优化下发数据..................."
);
// List<GreenwaveInfoPO> greenwaveInfoPOList=greenwaveInfoMapper.selectAll();
// for(GreenwaveInfoPO greenwaveInfoPO :greenwaveInfoPOList) {
List
<
GreenwaveInfoPO
>
greenwaveInfoPOList
=
greenwaveInfoMapper
.
selectAll
();
for
(
GreenwaveInfoPO
greenwaveInfoPO
:
greenwaveInfoPOList
)
{
AtomicBoolean
flag
=
new
AtomicBoolean
(
false
);
//是否已发布优化
AtomicReference
<
Integer
>
strategyId
=
new
AtomicReference
<
Integer
>(
0
);
//1、查询所有绿波带路口信息,获取路口下的绿波策略计划
List
<
GreenwaveCrossPOExt
>
greenwaveCrossList
=
greenwaveCrossMapper
.
selectAllGreeenCross
(
);
List
<
GreenwaveCrossPO
>
greenwaveCrossList
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
greenwaveInfoPO
.
getId
()
);
greenwaveCrossList
.
stream
().
forEach
(
o
->
{
//System.out.println("绿波路口--->"+o.getGreenwaveName()+"=="+o.getCrossId());
AtomicBoolean
flag
=
new
AtomicBoolean
(
false
);
//是否已发布优化
//创建路口策略列表
List
<
StrategyPlanInfoEntity
>
strategyPlanInfoEntityList
=
strategyPlanInfoMapper
.
selectByCrossId
(
o
.
getCrossId
());
//strategyPlanInfoEntityList.stream().filter(x->Objects.nonNull(x.getCrossId()) && x.getCrossId().equals(o.getCrossId()) ).forEach(x->
...
...
@@ -138,28 +144,42 @@ public class InducesMonitorTask {
System
.
out
.
println
(
"当前时间在范围内: "
+
LocalTime
.
now
());
//3、如果在绿波时段内,未上屏,则获取固定配时绿波信息
//4、获取优化绿波方案,如果不存在,则执行固定绿波方案
List
<
StrategyGreenOptHistEntity
>
strategyGreenOptHistEntitiesList
=
strategyGreenOptHistMapper
.
selectByGreenId
(
String
.
valueOf
(
o
.
getGreenId
())).
stream
().
distinct
().
collect
(
Collectors
.
toList
());
flag
.
set
(
true
);
strategyId
.
set
(
p
.
getDailyPlanId
());
}
}
}
});
}
}
}
}
});
//如果在绿波时段内,未上屏,则获取固定配时绿波信息
if
(
flag
.
get
())
{
List
<
StrategyGreenOptHistEntity
>
strategyGreenOptHistEntitiesList
=
strategyGreenOptHistMapper
.
selectByGreenId
(
String
.
valueOf
(
greenwaveInfoPO
.
getId
())).
stream
().
distinct
().
collect
(
Collectors
.
toList
());
if
(
Objects
.
nonNull
(
strategyGreenOptHistEntitiesList
))
{
for
(
StrategyGreenOptHistEntity
greenOptHistEntity
:
strategyGreenOptHistEntitiesList
)
{
LambdaQueryWrapper
<
GreenwaveInducesHist
>
greenwaveInducesHistQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
o
.
getGreen
Id
());
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getDir
,
getDir
(
greenOptHistEntity
.
getDir
()));
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
greenwaveInfoPO
.
get
Id
());
//
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getDir, getDir(greenOptHistEntity.getDir()));
GreenwaveInducesHist
greenwaveInducesHist
=
greenwaveInducesHistService
.
getOne
(
greenwaveInducesHistQueryWrapper
);
if
(
Objects
.
isNull
(
greenwaveInducesHist
))
{
greenwaveInducesHist
=
new
GreenwaveInducesHist
();
greenwaveInducesHist
.
setCreateTime
(
new
Date
());
greenwaveInducesHist
.
setGreenId
(
o
.
getGreen
Id
());
greenwaveInducesHist
.
setGreenId
(
greenwaveInfoPO
.
get
Id
());
greenwaveInducesHist
.
setDir
(
getDir
(
greenOptHistEntity
.
getDir
()));
}
greenwaveInducesHist
.
setStrategyId
(
strategyPlanInfoEntity
.
getPlanId
());
greenwaveInducesHist
.
setStrategyName
(
o
.
getGreenwaveName
());
//当前策略名称
greenwaveInducesHist
.
setControlOptTimes
(
greenOptHistEntity
.
getControlTime
());
//执行时段
greenwaveInducesHist
.
setType
(
strategyPlanInfoEntity
.
getType
());
// 执行策略
greenwaveInducesHist
.
setStrategyId
(
strategyId
.
get
());
greenwaveInducesHist
.
setStrategyName
(
greenwaveInfoPO
.
getName
());
//当前策略名称
if
(
StringUtils
.
isNotBlank
(
greenOptHistEntity
.
getControlTime
())
&&
greenOptHistEntity
.
getControlDuration
()>
0
)
{
greenwaveInducesHist
.
setControlOptTimes
(
greenOptHistEntity
.
getControlTime
()
+
"|"
+
DateUtil
.
format
(
DateUtil
.
addSecond
(
greenOptHistEntity
.
getControlTime
(),
greenOptHistEntity
.
getControlDuration
()),
Constants
.
DATE_FORMAT
.
E_DATE_FORMAT_SECOND
));
//执行时段
}
greenwaveInducesHist
.
setType
(
greenOptHistEntity
.
getType
());
// 执行策略
greenwaveInducesHist
.
setMinSpeed
(
greenOptHistEntity
.
getMinSpeed
());
greenwaveInducesHist
.
setMaxSpeed
(
greenOptHistEntity
.
getMaxSpeed
());
greenwaveInducesHist
.
setDir
(
greenOptHistEntity
.
getDirType
());
//5、获取绿波信息,调用上屏服务;发布互联网诱导方案
flag
.
set
(
true
);
//[{"crossId":"13MOD0B5SI0","phaseStartTime":32.0,"phaseEndTime":122.0,"greenStartTime":35.0,"speed":"39.71","offset":208.0,"travelTime":57.0,"distance":"628.81"},{"crossId":"13MQJ0B5SI0","phaseStartTime":43.0,"phaseEndTime":158.0,"greenStartTime":0.0,"speed":"35.54","offset":69.0,"travelTime":42.0,"distance":"414.62"},{"crossId":"13MS20B5SI0","phaseStartTime":32.0,"phaseEndTime":142.0,"greenStartTime":8.0,"speed":"22.72","offset":114.0,"travelTime":116.0,"distance":"732.00"},{"crossId":"13MUK0B5SH0","phaseStartTime":0.0,"phaseEndTime":135.0,"greenStartTime":0.0,"speed":"42.33","offset":50.0,"travelTime":45.0,"distance":"529.16"},{"crossId":"13N0F0B5SH0","phaseStartTime":25.0,"phaseEndTime":156.0,"greenStartTime":70.0,"speed":"40.67","offset":0.0,"travelTime":40.0,"distance":"451.89"},{"crossId":"13N200B5SH0","phaseStartTime":23.0,"phaseEndTime":150.0,"greenStartTime":0.0,"speed":"-1.00","offset":112.0,"travelTime":-1.0,"distance":"-1.00"}]
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>
crossGreenDetailList
=
new
ArrayList
<>();
try
{
...
...
@@ -168,24 +188,18 @@ public class InducesMonitorTask {
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"绿波详情转换失败:"
+
greenOptHistEntity
.
getGreenId
()
+
"---"
+
e
.
getMessage
());
}
greenwaveInducesHist
.
setStatus
(
1
);
// greenwaveInducesHist.setStatus(1);
greenwaveInducesHist
.
setModifyTime
(
new
Date
());
greenwaveInducesHistService
.
saveOrUpdate
(
greenwaveInducesHist
);
synCount
.
getAndIncrement
();
log
.
info
(
"同步绿波状态信息成功->"
+
o
.
getPlanName
());
}
}
}
}
}
});
}
log
.
info
(
"同步绿波状态信息成功->"
+
greenwaveInfoPO
.
getName
());
}
}
}
//如果没有绿波方案则调用下屏服务
if
(!
flag
.
get
())
{
LambdaQueryWrapper
<
GreenwaveInducesHist
>
greenwaveInducesHistQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
o
.
getGreen
Id
());
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
greenwaveInfoPO
.
get
Id
());
List
<
GreenwaveInducesHist
>
greenwaveInducesHistList
=
greenwaveInducesHistService
.
list
(
greenwaveInducesHistQueryWrapper
);
greenwaveInducesHistList
.
stream
().
forEach
(
n
->
{
//调用下屏
...
...
@@ -194,7 +208,7 @@ public class InducesMonitorTask {
MessageParam
messageParam
=
new
MessageParam
();
messageParam
.
setFlg
(
2
);
LambdaQueryWrapper
<
GreenwaveInduces
>
greenwaveInducesQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesQueryWrapper
.
eq
(
GreenwaveInduces:
:
getGreenId
,
o
.
getGreen
Id
());
greenwaveInducesQueryWrapper
.
eq
(
GreenwaveInduces:
:
getGreenId
,
greenwaveInfoPO
.
get
Id
());
List
<
GreenwaveInduces
>
greenwaveInducesList
=
greenwaveInducesService
.
list
(
greenwaveInducesQueryWrapper
);
greenwaveInducesList
.
stream
().
forEach
(
v
->
{
messageParam
.
setEquipCode
(
v
.
getEquipCode
());
...
...
@@ -209,14 +223,14 @@ public class InducesMonitorTask {
log
.
error
(
"发送下屏信息失败"
);
}
//保存绿波状态
//n.setStatus(0);
//greenwaveInducesHistService.saveOrUpdate(n);
log
.
info
(
"同步绿波状态信息(下屏)->"
+
o
.
getPlanName
());
n
.
setStatus
(
0
);
n
.
setModifyTime
(
new
Date
());
greenwaveInducesHistService
.
saveOrUpdate
(
n
);
log
.
info
(
"同步绿波状态信息(下屏)->"
+
greenwaveInfoPO
.
getName
());
synCount
.
getAndIncrement
();
});
}
});
//}
}
}
catch
(
Exception
e
)
{
throw
new
Exception
(
"每5分钟刷新绿波下发状态失败"
,
e
);
}
finally
{
...
...
signal-optimize-service/src/main/resources/mapper/StrategyGreenOptHistMapper.xml
View file @
310e5878
...
...
@@ -4,4 +4,8 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper"
>
<select
id=
"selectByGreenId"
resultType=
"net.wanji.opt.po.StrategyGreenOptHistEntity"
parameterType=
"String"
>
select * from t_strategy_green_opt_hist where `green_id` = #{greenId} and TIMESTAMPDIFF(SECOND,`control_time`, now())
<
`control_duration` order by create_time desc limit 1;
</select>
</mapper>
\ No newline at end of file
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