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
jinan
traffic-signal-platform
Commits
124f721c
Commit
124f721c
authored
Apr 15, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 绿波图优化;海信方案环图入库
parent
3980f854
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
160 additions
and
6 deletions
+160
-6
GreenChartSchemeRingPhaseMapper.java
...wanji/opt/dao/mapper/GreenChartSchemeRingPhaseMapper.java
+11
-0
SchemeGreenDirGreenTimeDTO.java
...in/java/net/wanji/opt/dto/SchemeGreenDirGreenTimeDTO.java
+10
-0
HisenseGreenChartTask.java
...c/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
+6
-6
HisenseSchemeRingPhaseInfoTask.java
...va/net/wanji/opt/task/HisenseSchemeRingPhaseInfoTask.java
+128
-0
GreenChartSchemeRingPhaseMapper.xml
...main/resources/mapper/GreenChartSchemeRingPhaseMapper.xml
+5
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/GreenChartSchemeRingPhaseMapper.java
0 → 100644
View file @
124f721c
package
net
.
wanji
.
opt
.
dao
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
net.wanji.opt.dto.SchemeGreenDirGreenTimeDTO
;
/**
* @author duanruiming
* @date 2025/04/15 15:13
*/
public
interface
GreenChartSchemeRingPhaseMapper
extends
BaseMapper
<
SchemeGreenDirGreenTimeDTO
>
{
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/SchemeGreenDirGreenTimeDTO.java
View file @
124f721c
package
net
.
wanji
.
opt
.
dto
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
...
...
@@ -10,12 +14,18 @@ import java.util.Date;
* @date 2025/04/01 15:38
*/
@Data
@TableName
(
"t_green_chart_scheme_ring_phase_hist"
)
public
class
SchemeGreenDirGreenTimeDTO
{
@TableField
(
value
=
"cross_id"
)
private
String
crossId
;
@TableField
(
value
=
"scheme_no"
)
private
Integer
schemeNo
;
private
Integer
offset
;
@TableField
(
value
=
"cycle_len"
)
private
Integer
cycleLen
;
@TableField
(
value
=
"ring_no"
)
private
Integer
ringNo
;
@TableField
(
value
=
"phase_id"
)
private
Integer
phaseId
;
private
Integer
start
;
private
Integer
end
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
View file @
124f721c
...
...
@@ -47,8 +47,8 @@ public class HisenseGreenChartTask {
private
GreenChartSchemeHistMapper
greenChartSchemeHistMapper
;
//
@Scheduled(fixedRate = 10 * 60 * 1000, initialDelay = 1 * 60 * 1000)
@Scheduled
(
fixedRate
=
1
*
60
*
1000
,
initialDelay
=
30
*
1000
)
@Scheduled
(
fixedRate
=
10
*
60
*
1000
,
initialDelay
=
1
*
60
*
1000
)
//
@Scheduled(fixedRate = 1 * 60 * 1000, initialDelay = 30 * 1000)
public
void
getGreenChart
()
{
try
{
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
...
...
@@ -102,7 +102,7 @@ public class HisenseGreenChartTask {
GreenwaveRealtimePO
greenwaveRealtimePO
=
realTimeMap
.
get
(
greenKey
);
Double
speed
=
Objects
.
isNull
(
greenwaveRealtimePO
.
getSpeed
())
?
0
:
greenwaveRealtimePO
.
getSpeed
()
;
// km/h速度换成m/s
Double
travelTime
=
totalDistance
/
speed
/
3.6
;
Double
travelTime
=
totalDistance
/
speed
*
3.6
;
List
<
Double
>
offsets
=
new
ArrayList
<>();
List
<
Double
>
distances
=
new
ArrayList
<>();
// 正向红灯时间
...
...
@@ -119,7 +119,7 @@ public class HisenseGreenChartTask {
GreenwaveRealtimePO
backGreenwaveRealtimePO
=
realTimeMap
.
get
(
backGreenKey
);
// km/h速度换成m/s
Double
backSpeed
=
Objects
.
isNull
(
backGreenwaveRealtimePO
.
getSpeed
())
?
0
:
backGreenwaveRealtimePO
.
getSpeed
();
Double
backTravelTime
=
totalDistance
/
backSpeed
/
3.6
;
Double
backTravelTime
=
totalDistance
/
backSpeed
*
3.6
;
Map
<
String
,
List
<
List
<
Double
>>>
backCrossRedTimesMap
=
new
LinkedHashMap
<>();
Map
<
String
,
List
<
List
<
Double
>>>
backCrossGreenTimesMap
=
new
LinkedHashMap
<>();
getCrossRedTimeMap
(
mapper
,
greenDirGreenTimeMap
,
backValue
,
indexOutDir
,
backTravelTime
,
backOffsets
,
backDistances
,
backCrossRedTimesMap
,
backCrossGreenTimesMap
);
...
...
@@ -276,13 +276,13 @@ public class HisenseGreenChartTask {
Double
speed
=
greenBeltChartDTO
.
getSpeed
();
List
<
Double
>
distances
=
greenBeltChartDTO
.
getDistances
();
Double
distance
=
distances
.
get
(
i
);
travelTime
=
distance
/
speed
/
3.6
;
travelTime
=
distance
/
speed
*
3.6
;
}
if
(
2
==
type
)
{
Double
speed
=
greenBeltChartDTO
.
getBackSpeed
();
List
<
Double
>
distances
=
greenBeltChartDTO
.
getBackDistances
();
Double
distance
=
distances
.
get
(
i
+
1
);
travelTime
=
distance
/
speed
/
3.6
;
travelTime
=
distance
/
speed
*
3.6
;
}
return
travelTime
;
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/HisenseSchemeRingPhaseInfoTask.java
0 → 100644
View file @
124f721c
package
net
.
wanji
.
opt
.
task
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.databus.dao.entity.GreenCrossDirDTO
;
import
net.wanji.opt.cache.GreenCrossDirInfoCache
;
import
net.wanji.opt.common.RedisUtils
;
import
net.wanji.opt.dao.mapper.GreenChartSchemeRingPhaseMapper
;
import
net.wanji.opt.dto.RingPhaseInfoDTO
;
import
net.wanji.opt.dto.SchemeGreenDirGreenTimeDTO
;
import
org.springframework.context.annotation.Profile
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author duanruiming
* @date 2025/04/15 15:09
*/
@Component
@Slf4j
@Profile
(
"test"
)
public
class
HisenseSchemeRingPhaseInfoTask
{
@Resource
private
RedisUtils
redisUtils
;
@Resource
private
GreenChartSchemeRingPhaseMapper
greenChartSchemeRingPhaseMapper
;
@Scheduled
(
fixedRate
=
1
*
60
*
1000
,
initialDelay
=
1
*
60
*
1000
)
public
void
getSchemeRingPhase
()
{
List
<
SchemeGreenDirGreenTimeDTO
>
schemeGreenDirGreenTimeDTOS
=
new
ArrayList
<>();
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
try
{
List
<
GreenCrossDirDTO
>
greenCrossDirCache
=
GreenCrossDirInfoCache
.
greenCrossDirCache
;
if
(!
CollectionUtils
.
isEmpty
(
greenCrossDirCache
))
{
for
(
GreenCrossDirDTO
greenCrossDirDTO
:
greenCrossDirCache
)
{
Integer
greenId
=
greenCrossDirDTO
.
getGreenId
();
String
greenCrossId
=
greenCrossDirDTO
.
getCrossId
();
String
greenDirStr
=
greenCrossDirDTO
.
getGreenDir
();
// 海信环相位信息
String
str
=
(
String
)
redisUtils
.
getHash
(
"utc-hisense-ring-phase"
,
greenCrossId
);
if
(
StringUtils
.
isBlank
(
str
))
{
continue
;
}
List
<
RingPhaseInfoDTO
>
ringPhaseInfoDTOS
=
mapper
.
readValue
(
str
,
new
TypeReference
<
List
<
RingPhaseInfoDTO
>>()
{});
// 遍历绿波路口协调方向
if
(
StringUtils
.
isNotBlank
(
greenDirStr
))
{
String
[]
greenDirArray
=
greenDirStr
.
split
(
","
);
for
(
String
s
:
greenDirArray
)
{
// 协调方向
Integer
greenDir
=
Integer
.
valueOf
(
s
);
if
(!
CollectionUtils
.
isEmpty
(
ringPhaseInfoDTOS
))
{
Map
<
Integer
,
List
<
RingPhaseInfoDTO
>>
ringMap
=
ringPhaseInfoDTOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
RingPhaseInfoDTO:
:
getRingNo
));
for
(
Map
.
Entry
<
Integer
,
List
<
RingPhaseInfoDTO
>>
entry
:
ringMap
.
entrySet
())
{
Integer
ringNo
=
entry
.
getKey
();
if
(
Objects
.
equals
(
0
,
ringNo
))
{
continue
;
}
List
<
RingPhaseInfoDTO
>
ringPhaseList
=
entry
.
getValue
();
List
<
RingPhaseInfoDTO
>
sort
=
ringPhaseList
.
stream
().
sorted
(
Comparator
.
comparingInt
(
RingPhaseInfoDTO:
:
getSort
)).
collect
(
Collectors
.
toList
());
Integer
start
=
0
;
SchemeGreenDirGreenTimeDTO
schemeGreenDirGreenTimeDTO
=
new
SchemeGreenDirGreenTimeDTO
();
for
(
RingPhaseInfoDTO
ringPhaseInfoDTO
:
sort
)
{
List
<
RingPhaseInfoDTO
.
DirTurn
>
dirTurnInfoList
=
ringPhaseInfoDTO
.
getDirTurnInfoList
();
if
(
CollectionUtils
.
isEmpty
(
dirTurnInfoList
))
{
continue
;
}
Integer
phaseId
=
ringPhaseInfoDTO
.
getPhaseId
();
Integer
greenTime
=
ringPhaseInfoDTO
.
getGreenTime
();
Integer
yellowTime
=
ringPhaseInfoDTO
.
getYellowTime
();
Integer
redTime
=
ringPhaseInfoDTO
.
getRedTime
();
Integer
schemeNo
=
ringPhaseInfoDTO
.
getSchemeNo
();
Integer
cycleLen
=
ringPhaseInfoDTO
.
getCycleLen
();
Integer
offset
=
ringPhaseInfoDTO
.
getOffset
();
Date
date
=
ringPhaseInfoDTO
.
getDate
();
for
(
RingPhaseInfoDTO
.
DirTurn
dirTurn
:
dirTurnInfoList
)
{
Integer
dir
=
dirTurn
.
getDir
();
Integer
turn
=
dirTurn
.
getTurn
();
// 如果路口信息与绿波协调方向相同
// 如果是红灯,作为开始时间,结束时间是start + greenTime + yellowTime
if
(
Objects
.
equals
(
dir
,
greenDir
)
&&
Objects
.
equals
(
2
,
turn
))
{
// 黄灯做绿灯处理
schemeGreenDirGreenTimeDTO
.
setCrossId
(
greenCrossId
);
schemeGreenDirGreenTimeDTO
.
setSchemeNo
(
schemeNo
);
schemeGreenDirGreenTimeDTO
.
setDir
(
dir
);
schemeGreenDirGreenTimeDTO
.
setPhaseId
(
phaseId
);
schemeGreenDirGreenTimeDTO
.
setStart
(
start
);
schemeGreenDirGreenTimeDTO
.
setRingNo
(
ringNo
);
schemeGreenDirGreenTimeDTO
.
setCycleLen
(
cycleLen
);
schemeGreenDirGreenTimeDTO
.
setOffset
(
offset
);
Integer
endTime
=
start
+
greenTime
+
yellowTime
;
schemeGreenDirGreenTimeDTO
.
setEnd
(
endTime
);
schemeGreenDirGreenTimeDTO
.
setDate
(
date
);
schemeGreenDirGreenTimeDTOS
.
add
(
schemeGreenDirGreenTimeDTO
);
}
else
{
// 如果是非协调方向, 相位时间作为开始时间
start
+=
greenTime
+
yellowTime
+
redTime
;
}
}
}
}
}
}
}
}
//log.error("路口绿灯协调方向时间:{}", mapper.writeValueAsString(schemeGreenDirGreenTimeDTOS));
}
if
(!
CollectionUtils
.
isEmpty
(
schemeGreenDirGreenTimeDTOS
))
{
for
(
SchemeGreenDirGreenTimeDTO
schemeGreenDirGreenTimeDTO
:
schemeGreenDirGreenTimeDTOS
)
{
greenChartSchemeRingPhaseMapper
.
insert
(
schemeGreenDirGreenTimeDTO
);
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"方向环相位入库失败:{}"
,
e
);
//throw new RuntimeException(e);
}
}
}
signal-optimize-service/src/main/resources/mapper/GreenChartSchemeRingPhaseMapper.xml
0 → 100644
View file @
124f721c
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"net.wanji.opt.dao.mapper.GreenChartSchemeRingPhaseMapper"
>
</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