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
b187b9b7
Commit
b187b9b7
authored
Apr 01, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 海信方案环相位
parent
a981bb1b
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
276 additions
and
1 deletion
+276
-1
GreenCrossDirInfoCache.java
...main/java/net/wanji/opt/cache/GreenCrossDirInfoCache.java
+45
-0
RingPhaseInfoDTO.java
...ice/src/main/java/net/wanji/opt/dto/RingPhaseInfoDTO.java
+60
-0
SchemeGreenDirGreenTimeDTO.java
...in/java/net/wanji/opt/dto/SchemeGreenDirGreenTimeDTO.java
+18
-0
GreenWaveWeekDataTask.java
...c/main/java/net/wanji/opt/task/GreenWaveWeekDataTask.java
+1
-1
HisenseGreenChartTask.java
...c/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
+125
-0
GreenCrossDirDTO.java
...n/java/net/wanji/databus/dao/entity/GreenCrossDirDTO.java
+14
-0
GreenwaveCrossMapper.java
...va/net/wanji/databus/dao/mapper/GreenwaveCrossMapper.java
+8
-0
GreenwaveCrossMapper.xml
...atabus/src/main/resources/mapper/GreenwaveCrossMapper.xml
+5
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/cache/GreenCrossDirInfoCache.java
0 → 100644
View file @
b187b9b7
package
net
.
wanji
.
opt
.
cache
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.databus.dao.entity.GreenCrossDirDTO
;
import
net.wanji.databus.dao.mapper.GreenwaveCrossMapper
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2025/04/01 14:18
*/
@Component
@Slf4j
public
class
GreenCrossDirInfoCache
implements
CommandLineRunner
{
@Resource
private
GreenwaveCrossMapper
greenwaveCrossMapper
;
public
static
List
<
GreenCrossDirDTO
>
greenCrossDirCache
=
new
ArrayList
<>();
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
try
{
init
();
}
catch
(
Exception
e
)
{
log
.
error
(
"缓存加载失败:"
,
e
);
throw
new
RuntimeException
(
e
);
}
}
public
void
init
()
{
try
{
List
<
GreenCrossDirDTO
>
greenCrossDirDTOS
=
greenwaveCrossMapper
.
selectAllGreenCrossDir
();
greenCrossDirCache
.
addAll
(
greenCrossDirDTOS
);
}
catch
(
Exception
e
)
{
log
.
error
(
"缓存加载失败:"
,
e
);
throw
new
RuntimeException
(
e
);
}
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/RingPhaseInfoDTO.java
0 → 100644
View file @
b187b9b7
package
net
.
wanji
.
opt
.
dto
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2025/03/28 14:41
*/
@Data
public
class
RingPhaseInfoDTO
{
private
Integer
schemeNo
;
private
Integer
offset
;
private
Integer
cycleLen
;
private
Integer
ringNo
;
private
Integer
phaseId
;
private
Integer
sort
;
private
Integer
phaseTime
;
private
Integer
redTime
;
private
Integer
yellowTime
;
private
Integer
greenTime
;
private
Integer
minGTime
;
private
Integer
maxGTime
;
/**
* 字段 Direction 和 ChannelDim 都表示相位的放行方向,但 Direction 不包含行人放行
* 信息,因此,建议使用 ChannelDim 字段,保留 Direction 字段仅为兼容之前版本。
*/
private
Integer
direction
;
private
Integer
channel
;
private
Integer
concurrent
;
private
Integer
phaseStatus
;
private
List
<
DirTurn
>
dirTurnInfoList
;
/**
* 转换后万集的方向转向,不包含行人
*/
@Data
public
static
class
DirTurn
{
private
Integer
dir
;
private
Integer
turn
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/SchemeGreenDirGreenTimeDTO.java
0 → 100644
View file @
b187b9b7
package
net
.
wanji
.
opt
.
dto
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2025/04/01 15:38
*/
@Data
public
class
SchemeGreenDirGreenTimeDTO
{
private
String
crossId
;
private
Integer
schemeNo
;
private
Integer
ringNo
;
private
Integer
phaseId
;
private
Integer
start
;
private
Integer
end
;
private
Integer
dir
;
}
signal-optimize-service/src/main/java/net/wanji/opt/task/GreenWaveWeekDataTask.java
View file @
b187b9b7
...
...
@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
@Component
//
@Component
@Slf4j
public
class
GreenWaveWeekDataTask
implements
ApplicationRunner
{
@Resource
...
...
signal-optimize-service/src/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
0 → 100644
View file @
b187b9b7
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.tool.redistool.RedisUtil
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.common.utils.tool.StringUtils
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.dao.entity.GreenCrossDirDTO
;
import
net.wanji.databus.dao.mapper.GreenwaveCrossMapper
;
import
net.wanji.opt.cache.GreenCrossDirInfoCache
;
import
net.wanji.opt.common.RedisUtils
;
import
net.wanji.opt.dto.RingPhaseInfoDTO
;
import
net.wanji.opt.dto.SchemeGreenDirGreenTimeDTO
;
import
net.wanji.opt.vo.GreenwaveDetailVO
;
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/01 11:18
* @description 海信通过reids缓存方案相位信息,设置绿波时序图
*/
@Component
@Slf4j
public
class
HisenseGreenChartTask
{
@Resource
private
RedisUtils
redisUtils
;
@Scheduled
(
fixedRate
=
60
*
1000
,
initialDelay
=
1
*
60
*
1000
)
public
void
getGreenChart
()
{
try
{
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
// 绿波路口数据
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
>>()
{});
log
.
info
(
"当前路口:{}, 环相位信息:{}"
,
greenCrossId
,
str
);
// 遍历绿波路口协调方向
if
(
StringUtils
.
isNotBlank
(
greenDirStr
))
{
String
[]
greenDirArray
=
greenDirStr
.
split
(
","
);
List
<
SchemeGreenDirGreenTimeDTO
>
schemeGreenDirGreenTimeDTOS
=
new
ArrayList
<>();
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
();
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
);
Integer
endTime
=
start
+
greenTime
+
yellowTime
;
schemeGreenDirGreenTimeDTO
.
setEnd
(
endTime
);
schemeGreenDirGreenTimeDTOS
.
add
(
schemeGreenDirGreenTimeDTO
);
}
else
{
// 如果是非协调方向, 相位时间作为开始时间
start
+=
greenTime
+
yellowTime
+
redTime
;
}
log
.
error
(
"当前路口:{}, 相位:{}, 协调方向:{},开始:{}, 结束:{}"
,
greenCrossId
,
phaseId
,
greenDir
,
start
,
schemeGreenDirGreenTimeDTO
.
getEnd
());
}
}
}
}
}
log
.
error
(
"路口绿灯协调方向时间:{}"
,
mapper
.
writeValueAsString
(
schemeGreenDirGreenTimeDTOS
));
}
}
}
log
.
error
(
"路口绿灯协调方向时间:{}"
,
"333"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"通过海信方案处理绿波波定时任务失败:{}"
,
e
);
//throw new RuntimeException(e);
}
}
}
wj-databus/src/main/java/net/wanji/databus/dao/entity/GreenCrossDirDTO.java
0 → 100644
View file @
b187b9b7
package
net
.
wanji
.
databus
.
dao
.
entity
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2025/04/01 14:13
*/
@Data
public
class
GreenCrossDirDTO
{
private
Integer
greenId
;
private
String
crossId
;
private
String
greenDir
;
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/GreenwaveCrossMapper.java
View file @
b187b9b7
package
net
.
wanji
.
databus
.
dao
.
mapper
;
import
net.wanji.databus.dao.entity.GreenCrossDirDTO
;
import
net.wanji.databus.dao.entity.GreenwaveCrossPO
;
import
net.wanji.databus.dao.entity.GreenwaveCrossPOExt
;
import
org.springframework.stereotype.Repository
;
...
...
@@ -28,4 +29,11 @@ public interface GreenwaveCrossMapper {
* @return
*/
List
<
GreenwaveCrossPOExt
>
selectAllGreeenCross
();
/**
* 查询所有绿波路口绿波方向
* @return
*/
List
<
GreenCrossDirDTO
>
selectAllGreenCrossDir
();
}
wj-databus/src/main/resources/mapper/GreenwaveCrossMapper.xml
View file @
b187b9b7
...
...
@@ -67,5 +67,10 @@
WHERE t1.green_id = t4.id
</select>
<select
id=
"selectAllGreenCrossDir"
resultType=
"net.wanji.databus.dao.entity.GreenCrossDirDTO"
>
select t2.green_id, t2.cross_id, t1.green_dir from t_greenwave_info t1
left join t_greenwave_cross t2 on t1.id = t2.green_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