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
Hide 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
());
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
));
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,111 +86,120 @@ 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) {
//1、查询所有绿波带路口信息,获取路口下的绿波策略计划
List
<
GreenwaveCrossPOExt
>
greenwaveCrossList
=
greenwaveCrossMapper
.
selectAllGreeenCross
();
greenwaveCrossList
.
stream
().
forEach
(
o
->
{
//System.out.println("绿波路口--->"+o.getGreenwaveName()+"=="+o.getCrossId());
List
<
GreenwaveInfoPO
>
greenwaveInfoPOList
=
greenwaveInfoMapper
.
selectAll
();
for
(
GreenwaveInfoPO
greenwaveInfoPO
:
greenwaveInfoPOList
)
{
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->
for
(
StrategyPlanInfoEntity
strategyPlanInfoEntity
:
strategyPlanInfoEntityList
)
{
//System.out.println("策略计划--->"+x.getCrossId()+"=="+x.getPlanDetails());
//2、检查绿波时段,判断是否在绿波时段内,如果不在,则判断是否执行过上屏操作,如果执行过,则调用下屏服务(此出屏幕自动处理,无需逻辑)
//[{"dailyPlanId":1,"weeks":[1,2,3,4,5]}]
List
<
StrategyControlDetailList
.
ExecutePlan
.
PlanDetail
>
planDetails
=
new
ArrayList
<>();
try
{
planDetails
=
JacksonUtils
.
getInstance
().
readValue
(
strategyPlanInfoEntity
.
getPlanDetails
(),
new
TypeReference
<
List
<
StrategyControlDetailList
.
ExecutePlan
.
PlanDetail
>>()
{
});
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"策略周计划详情转换失败:"
+
strategyPlanInfoEntity
.
getPlanId
()
+
"---"
+
e
.
getMessage
());
}
//处理日计划的时间拼合处理
if
(!
CollectionUtils
.
isEmpty
(
planDetails
))
{
for
(
StrategyControlDetailList
.
ExecutePlan
.
PlanDetail
planDetail
:
planDetails
)
{
Integer
dailyPlanId
=
planDetail
.
getDailyPlanId
();
List
<
Integer
>
weeks
=
planDetail
.
getWeeks
();
//获取当前周几,判断是否在时间范围内
if
(
weeks
.
contains
(
LocalDate
.
now
().
getDayOfWeek
().
getValue
()))
{
LambdaQueryWrapper
<
StrategyDailyPlanInfoEntity
>
dailyPlanQueryWrapper
=
new
LambdaQueryWrapper
<>();
dailyPlanQueryWrapper
.
eq
(
StrategyDailyPlanInfoEntity:
:
getCrossId
,
strategyPlanInfoEntity
.
getCrossId
());
dailyPlanQueryWrapper
.
eq
(
StrategyDailyPlanInfoEntity:
:
getDailyPlanId
,
dailyPlanId
);
List
<
StrategyDailyPlanInfoEntity
>
dailyPlanInfoEntities
=
strategyDailyPlanInfoMapper
.
selectList
(
dailyPlanQueryWrapper
);
dailyPlanInfoEntities
.
stream
().
forEach
(
p
->
{
System
.
out
.
println
(
"plan detail->"
+
p
.
getDailyPlanDetails
());
List
<
StrategyControlDetailList
.
DailyPlan
.
DailyPlanDetail
>
dailyPlanDetails
=
new
ArrayList
<>();
try
{
dailyPlanDetails
=
JacksonUtils
.
getInstance
().
readValue
(
p
.
getDailyPlanDetails
(),
new
TypeReference
<
List
<
StrategyControlDetailList
.
DailyPlan
.
DailyPlanDetail
>>()
{
});
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"策略日计划详情转换失败:"
+
p
.
getDailyPlanId
()
+
"---"
+
e
.
getMessage
());
}
for
(
StrategyControlDetailList
.
DailyPlan
.
DailyPlanDetail
dailyPlanDetail
:
dailyPlanDetails
)
{
//[{"strategy":1,"times":["00:00","20:00"]},{"strategy":2,"times":["20:00","23:59"]}]
if
(!
CollectionUtils
.
isEmpty
(
dailyPlanDetail
.
getTimes
()))
{
LocalTime
startTime
=
LocalTime
.
parse
(
dailyPlanDetail
.
getTimes
().
get
(
0
));
LocalTime
endTime
=
LocalTime
.
parse
(
dailyPlanDetail
.
getTimes
().
get
(
1
));
// 判断当前时间是否在范围内
if
(
LocalTime
.
now
().
isAfter
(
startTime
)
&&
LocalTime
.
now
().
isBefore
(
endTime
))
{
System
.
out
.
println
(
"当前时间在范围内: "
+
LocalTime
.
now
());
//3、如果在绿波时段内,未上屏,则获取固定配时绿波信息
//4、获取优化绿波方案,如果不存在,则执行固定绿波方案
List
<
StrategyGreenOptHistEntity
>
strategyGreenOptHistEntitiesList
=
strategyGreenOptHistMapper
.
selectByGreenId
(
String
.
valueOf
(
o
.
getGreenId
())).
stream
().
distinct
().
collect
(
Collectors
.
toList
());
if
(
Objects
.
nonNull
(
strategyGreenOptHistEntitiesList
))
{
for
(
StrategyGreenOptHistEntity
greenOptHistEntity
:
strategyGreenOptHistEntitiesList
)
{
LambdaQueryWrapper
<
GreenwaveInducesHist
>
greenwaveInducesHistQueryWrapper
=
new
LambdaQueryWrapper
<>();
greenwaveInducesHistQueryWrapper
.
eq
(
GreenwaveInducesHist:
:
getGreenId
,
o
.
getGreenId
());
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
.
getGreenId
());
greenwaveInducesHist
.
setDir
(
getDir
(
greenOptHistEntity
.
getDir
()));
}
greenwaveInducesHist
.
setStrategyId
(
strategyPlanInfoEntity
.
getPlanId
());
greenwaveInducesHist
.
setStrategyName
(
o
.
getGreenwaveName
());
//当前策略名称
greenwaveInducesHist
.
setControlOptTimes
(
greenOptHistEntity
.
getControlTime
());
//执行时段
greenwaveInducesHist
.
setType
(
strategyPlanInfoEntity
.
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
{
crossGreenDetailList
=
JacksonUtils
.
getInstance
().
readValue
(
greenOptHistEntity
.
getCrossGreenDetail
(),
new
TypeReference
<
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>>()
{
});
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"绿波详情转换失败:"
+
greenOptHistEntity
.
getGreenId
()
+
"---"
+
e
.
getMessage
());
}
greenwaveInducesHist
.
setStatus
(
1
);
greenwaveInducesHistService
.
saveOrUpdate
(
greenwaveInducesHist
);
synCount
.
getAndIncrement
();
log
.
info
(
"同步绿波状态信息成功->"
+
o
.
getPlanName
());
}
AtomicReference
<
Integer
>
strategyId
=
new
AtomicReference
<
Integer
>(
0
);
//1、查询所有绿波带路口信息,获取路口下的绿波策略计划
List
<
GreenwaveCrossPO
>
greenwaveCrossList
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
greenwaveInfoPO
.
getId
());
greenwaveCrossList
.
stream
().
forEach
(
o
->
{
//System.out.println("绿波路口--->"+o.getGreenwaveName()+"=="+o.getCrossId());
//创建路口策略列表
List
<
StrategyPlanInfoEntity
>
strategyPlanInfoEntityList
=
strategyPlanInfoMapper
.
selectByCrossId
(
o
.
getCrossId
());
//strategyPlanInfoEntityList.stream().filter(x->Objects.nonNull(x.getCrossId()) && x.getCrossId().equals(o.getCrossId()) ).forEach(x->
for
(
StrategyPlanInfoEntity
strategyPlanInfoEntity
:
strategyPlanInfoEntityList
)
{
//System.out.println("策略计划--->"+x.getCrossId()+"=="+x.getPlanDetails());
//2、检查绿波时段,判断是否在绿波时段内,如果不在,则判断是否执行过上屏操作,如果执行过,则调用下屏服务(此出屏幕自动处理,无需逻辑)
//[{"dailyPlanId":1,"weeks":[1,2,3,4,5]}]
List
<
StrategyControlDetailList
.
ExecutePlan
.
PlanDetail
>
planDetails
=
new
ArrayList
<>();
try
{
planDetails
=
JacksonUtils
.
getInstance
().
readValue
(
strategyPlanInfoEntity
.
getPlanDetails
(),
new
TypeReference
<
List
<
StrategyControlDetailList
.
ExecutePlan
.
PlanDetail
>>()
{
});
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"策略周计划详情转换失败:"
+
strategyPlanInfoEntity
.
getPlanId
()
+
"---"
+
e
.
getMessage
());
}
//处理日计划的时间拼合处理
if
(!
CollectionUtils
.
isEmpty
(
planDetails
))
{
for
(
StrategyControlDetailList
.
ExecutePlan
.
PlanDetail
planDetail
:
planDetails
)
{
Integer
dailyPlanId
=
planDetail
.
getDailyPlanId
();
List
<
Integer
>
weeks
=
planDetail
.
getWeeks
();
//获取当前周几,判断是否在时间范围内
if
(
weeks
.
contains
(
LocalDate
.
now
().
getDayOfWeek
().
getValue
()))
{
LambdaQueryWrapper
<
StrategyDailyPlanInfoEntity
>
dailyPlanQueryWrapper
=
new
LambdaQueryWrapper
<>();
dailyPlanQueryWrapper
.
eq
(
StrategyDailyPlanInfoEntity:
:
getCrossId
,
strategyPlanInfoEntity
.
getCrossId
());
dailyPlanQueryWrapper
.
eq
(
StrategyDailyPlanInfoEntity:
:
getDailyPlanId
,
dailyPlanId
);
List
<
StrategyDailyPlanInfoEntity
>
dailyPlanInfoEntities
=
strategyDailyPlanInfoMapper
.
selectList
(
dailyPlanQueryWrapper
);
dailyPlanInfoEntities
.
stream
().
forEach
(
p
->
{
System
.
out
.
println
(
"plan detail->"
+
p
.
getDailyPlanDetails
());
List
<
StrategyControlDetailList
.
DailyPlan
.
DailyPlanDetail
>
dailyPlanDetails
=
new
ArrayList
<>();
try
{
dailyPlanDetails
=
JacksonUtils
.
getInstance
().
readValue
(
p
.
getDailyPlanDetails
(),
new
TypeReference
<
List
<
StrategyControlDetailList
.
DailyPlan
.
DailyPlanDetail
>>()
{
});
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"策略日计划详情转换失败:"
+
p
.
getDailyPlanId
()
+
"---"
+
e
.
getMessage
());
}
for
(
StrategyControlDetailList
.
DailyPlan
.
DailyPlanDetail
dailyPlanDetail
:
dailyPlanDetails
)
{
//[{"strategy":1,"times":["00:00","20:00"]},{"strategy":2,"times":["20:00","23:59"]}]
if
(!
CollectionUtils
.
isEmpty
(
dailyPlanDetail
.
getTimes
()))
{
LocalTime
startTime
=
LocalTime
.
parse
(
dailyPlanDetail
.
getTimes
().
get
(
0
));
LocalTime
endTime
=
LocalTime
.
parse
(
dailyPlanDetail
.
getTimes
().
get
(
1
));
// 判断当前时间是否在范围内
if
(
LocalTime
.
now
().
isAfter
(
startTime
)
&&
LocalTime
.
now
().
isBefore
(
endTime
))
{
System
.
out
.
println
(
"当前时间在范围内: "
+
LocalTime
.
now
());
//3、如果在绿波时段内,未上屏,则获取固定配时绿波信息
//4、获取优化绿波方案,如果不存在,则执行固定绿波方案
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
,
greenwaveInfoPO
.
getId
());
// 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
(
greenwaveInfoPO
.
getId
());
greenwaveInducesHist
.
setDir
(
getDir
(
greenOptHistEntity
.
getDir
()));
}
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、获取绿波信息,调用上屏服务;发布互联网诱导方案
//[{"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
{
crossGreenDetailList
=
JacksonUtils
.
getInstance
().
readValue
(
greenOptHistEntity
.
getCrossGreenDetail
(),
new
TypeReference
<
List
<
GreenBeltInfoVO
.
CrossGreenDetail
>>()
{
});
}
catch
(
JsonProcessingException
e
)
{
log
.
error
(
"绿波详情转换失败:"
+
greenOptHistEntity
.
getGreenId
()
+
"---"
+
e
.
getMessage
());
}
// greenwaveInducesHist.setStatus(1);
greenwaveInducesHist
.
setModifyTime
(
new
Date
());
greenwaveInducesHistService
.
saveOrUpdate
(
greenwaveInducesHist
);
synCount
.
getAndIncrement
();
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