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
7e048636
Commit
7e048636
authored
Jan 02, 2024
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] UTC模拟灯态优化
parent
e5dc6b07
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
112 additions
and
72 deletions
+112
-72
BasicEnum.java
...rc/main/java/net/wanji/utc/common/typeenum/BasicEnum.java
+2
-1
SignalStatusServiceImpl.java
...utc/service/runninginfo/impl/SignalStatusServiceImpl.java
+34
-27
WanJiCommonRunningStatusServiceImpl.java
...runninginfo/impl/WanJiCommonRunningStatusServiceImpl.java
+4
-0
SignalStatus4StaticSchemeTask.java
...ava/net/wanji/utc/task/SignalStatus4StaticSchemeTask.java
+25
-2
SignalStatusTask.java
...ce/src/main/java/net/wanji/utc/task/SignalStatusTask.java
+47
-42
No files found.
signal-utc-service/src/main/java/net/wanji/utc/common/typeenum/BasicEnum.java
View file @
7e048636
...
...
@@ -9,7 +9,8 @@ public class BasicEnum {
public
enum
ManufacturerEnum
{
HK
(
"海康"
,
"HK"
),
DT
(
"东土"
,
"DT"
),
HISENSE
(
"海信"
,
"HISENSE"
);
HISENSE
(
"海信"
,
"HISENSE"
),
STATIC
(
"静态方案灯态"
,
"STATIC"
);
private
String
nick
;
private
String
code
;
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/impl/SignalStatusServiceImpl.java
View file @
7e048636
...
...
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.databus.dao.entity.CrossLightsStatusHistPO
;
import
net.wanji.databus.dao.mapper.CrossInfoMapper
;
...
...
@@ -37,6 +38,7 @@ import java.util.stream.Collectors;
*/
@RequiredArgsConstructor
@Service
@Slf4j
public
class
SignalStatusServiceImpl
implements
SignalStatusService
{
private
final
ManufacturerInfoMapper
manufacturerInfoMapper
;
private
final
CrossInfoMapper
crossInfoMapper
;
...
...
@@ -51,36 +53,41 @@ public class SignalStatusServiceImpl implements SignalStatusService {
@Transactional
public
List
<
SignalStatusLogPO
>
runningStatusAlarm
()
throws
Exception
{
List
<
SignalStatusLogPO
>
resList
=
new
ArrayList
<>();
BasicEnum
.
ManufacturerEnum
[]
manufacturerEnums
=
BasicEnum
.
ManufacturerEnum
.
values
();
for
(
BasicEnum
.
ManufacturerEnum
manufacturerEnum
:
manufacturerEnums
)
{
List
<
BaseCrossInfo
>
baseCrossInfoList
=
getBaseCrossInfoList
(
manufacturerEnum
);
if
(
baseCrossInfoList
==
null
)
{
continue
;
}
List
<
SignalStatusLogPO
>
signalStatusLogPOList
=
new
ArrayList
<>();
if
(
manufacturerEnum
.
getCode
().
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
// 海康
// 3.2.5信号机运行状态和告警信息
resList
.
addAll
(
hkRunningStatusService
.
getHkRunningStatus
(
baseCrossInfoList
));
}
else
if
(
manufacturerEnum
.
getCode
().
equals
(
BasicEnum
.
ManufacturerEnum
.
DT
.
getCode
()))
{
// todo 其他厂商
List
<
String
>
crossIdList
=
baseCrossInfoList
.
stream
().
map
(
BaseCrossInfo:
:
getCrossId
).
collect
(
Collectors
.
toList
());
resList
.
addAll
(
wanJiRunningStatusService
.
runningStatus
(
crossIdList
));
}
// 更新Redis
if
(
null
!=
signalStatusLogPOList
)
{
for
(
SignalStatusLogPO
signalStatusLogPO
:
signalStatusLogPOList
)
{
String
field
=
manufacturerEnum
.
getCode
()
+
Constants
.
SEPARATOR_UNDER_LINE
+
signalStatusLogPO
.
getSignalId
();
redisUtil
.
setHash
(
RedisKeyConst
.
KEY_PREFIX
+
RedisKeyConst
.
TELESEME_STATUS
,
field
,
signalStatusLogPO
.
getStatus
()
+
""
);
try
{
BasicEnum
.
ManufacturerEnum
[]
manufacturerEnums
=
BasicEnum
.
ManufacturerEnum
.
values
();
for
(
BasicEnum
.
ManufacturerEnum
manufacturerEnum
:
manufacturerEnums
)
{
List
<
BaseCrossInfo
>
baseCrossInfoList
=
getBaseCrossInfoList
(
manufacturerEnum
);
if
(
baseCrossInfoList
==
null
)
{
continue
;
}
List
<
SignalStatusLogPO
>
signalStatusLogPOList
=
new
ArrayList
<>();
if
(
manufacturerEnum
.
getCode
().
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
// 海康
// 3.2.5信号机运行状态和告警信息
resList
.
addAll
(
hkRunningStatusService
.
getHkRunningStatus
(
baseCrossInfoList
));
}
else
if
(
manufacturerEnum
.
getCode
().
equals
(
BasicEnum
.
ManufacturerEnum
.
DT
.
getCode
()))
{
// todo 其他厂商
List
<
String
>
crossIdList
=
baseCrossInfoList
.
stream
().
map
(
BaseCrossInfo:
:
getCrossId
).
collect
(
Collectors
.
toList
());
resList
.
addAll
(
wanJiRunningStatusService
.
runningStatus
(
crossIdList
));
}
// 更新日志数据库
if
(
ListUtil
.
isNotEmpty
(
signalStatusLogPOList
))
{
signalStatusLogMapper
.
insertBatch
(
signalStatusLogPOList
);
resList
.
addAll
(
signalStatusLogPOList
);
// 更新Redis
if
(
null
!=
signalStatusLogPOList
)
{
for
(
SignalStatusLogPO
signalStatusLogPO
:
signalStatusLogPOList
)
{
String
field
=
manufacturerEnum
.
getCode
()
+
Constants
.
SEPARATOR_UNDER_LINE
+
signalStatusLogPO
.
getSignalId
();
redisUtil
.
setHash
(
RedisKeyConst
.
KEY_PREFIX
+
RedisKeyConst
.
TELESEME_STATUS
,
field
,
signalStatusLogPO
.
getStatus
()
+
""
);
}
// 更新日志数据库
if
(
ListUtil
.
isNotEmpty
(
signalStatusLogPOList
))
{
signalStatusLogMapper
.
insertBatch
(
signalStatusLogPOList
);
resList
.
addAll
(
signalStatusLogPOList
);
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"运行状态、告警服务异常"
,
e
);
throw
new
Exception
(
e
);
}
return
resList
;
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/impl/WanJiCommonRunningStatusServiceImpl.java
View file @
7e048636
...
...
@@ -12,6 +12,7 @@ import net.wanji.utc.cache.CrossInfoCache;
import
net.wanji.utc.cache.UtcFeignClientCache
;
import
net.wanji.utc.service.runninginfo.WanJiCommonRunningStatusService
;
import
net.wanji.utc.util.HttpRestUtil
;
import
net.wanji.utc.util.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
...
...
@@ -37,6 +38,9 @@ public class WanJiCommonRunningStatusServiceImpl implements WanJiCommonRunningSt
List
<
SignalStatusLogPO
>
result
=
new
ArrayList
<>();
for
(
String
crossId
:
crossIdList
)
{
String
manufacturerIdCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
crossId
);
if
(
StringUtils
.
isEmpty
(
manufacturerIdCode
))
{
continue
;
}
JsonViewObject
jsonViewObject
=
utcFeignClientCache
.
getUtcFeignClientService
(
manufacturerIdCode
).
runningStatusAlarm
(
crossId
);
if
(
Objects
.
isNull
(
jsonViewObject
)
||
jsonViewObject
.
getCode
()
!=
200
)
{
throw
new
Exception
(
"获取运行状态、告警数据远程服务调用异常,异常信息"
+
jsonViewObject
.
getMessage
());
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/SignalStatus4StaticSchemeTask.java
View file @
7e048636
...
...
@@ -105,6 +105,10 @@ public class SignalStatus4StaticSchemeTask {
if
(
Objects
.
nonNull
(
crossSchemePO
))
{
String
schemeNo
=
crossSchemePO
.
getSchemeNo
();
if
(
StringUtils
.
isNotBlank
(
schemeNo
))
{
if
(
isNotNextSchemeNo
(
crossSchemePO
))
{
continue
;
}
List
<
CrossSchemePhaseCountDownDTO
>
crossSchemePhaseCountDownList
=
CrossSchemePhaseTimeCountCache
.
crossSchemePhaseCountDownList
;
for
(
CrossSchemePhaseCountDownDTO
crossSchemePhaseCountDownDTO
:
crossSchemePhaseCountDownList
)
{
if
(
StringUtils
.
equalsIgnoreCase
(
schemeNo
,
crossSchemePhaseCountDownDTO
.
getSchemeNo
())
&&
...
...
@@ -133,6 +137,21 @@ public class SignalStatus4StaticSchemeTask {
}
}
private
boolean
isNotNextSchemeNo
(
CrossSchemePO
crossSchemePO
)
{
if
(
Objects
.
nonNull
(
crossSchemePO
))
{
String
schemeNo
=
crossSchemePO
.
getSchemeNo
();
String
crossId
=
crossSchemePO
.
getCrossId
();
LightsStatusVO
lightsStatusVO
=
currentCrossLightStatusCache
.
get
(
crossId
);
if
(
Objects
.
nonNull
(
lightsStatusVO
))
{
String
currentSchemeNo
=
lightsStatusVO
.
getSchemeId
();
if
(
StringUtils
.
equalsIgnoreCase
(
schemeNo
,
currentSchemeNo
))
{
return
true
;
}
}
}
return
false
;
}
private
static
Integer
getCurrentSchemeId
(
List
<
CrossSectionPO
>
crossSectionPOS
,
LocalTime
currentTime
,
Integer
currentPlanId
)
{
if
(!
CollectionUtils
.
isEmpty
(
crossSectionPOS
))
{
List
<
CrossSectionPO
>
currentPlanIdSectionList
=
crossSectionPOS
.
stream
().
filter
(
po
->
Objects
.
equals
(
currentPlanId
,
po
.
getPlanId
())).
collect
(
Collectors
.
toList
());
...
...
@@ -178,7 +197,7 @@ public class SignalStatus4StaticSchemeTask {
}
private
static
void
getRedCountDown
(
String
crossId
,
LightsStatusVO
lightsStatusVO
,
String
schemeId
)
{
private
static
void
getRedCountDown
(
String
crossId
,
LightsStatusVO
lightsStatusVO
,
String
schemeId
)
throws
Exception
{
Map
<
String
,
Object
>
phaseMap
=
new
HashMap
<>();
List
<
CrossPhaseDirTurnPojo
>
crossPhaseDirTurnCache
=
CrossPhaseDirTurnCache
.
getCrossPhaseDirTurnCache
(
crossId
);
List
<
PhaseCountDownDTO
>
phaseCountDownList
=
getPhaseCountDownList
(
crossId
,
schemeId
);
...
...
@@ -351,7 +370,11 @@ public class SignalStatus4StaticSchemeTask {
}
else
{
lightsStatusVO
.
setCyclePhaseCountDown
(
lightsStatusVO
.
getCyclePhaseCountDown
()
-
1
);
Integer
cycleCountDown
=
lightsStatusVO
.
getCycleCountDown
();
lightsStatusVO
.
setCycleCountDown
(--
cycleCountDown
);
if
(
cycleCountDown
>=
2
)
{
lightsStatusVO
.
setCycleCountDown
(--
cycleCountDown
);
}
else
{
lightsStatusVO
.
setCycleCountDown
(
lightsStatusVO
.
getCycleLen
());
}
}
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/SignalStatusTask.java
View file @
7e048636
...
...
@@ -86,53 +86,56 @@ public class SignalStatusTask {
Map
<
String
,
List
<
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>>>
crossEntryMap
=
getCrossEntryMap
(
evenWarnWebSocketMap
);
for
(
Map
.
Entry
<
String
,
List
<
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>>>
entry
:
crossEntryMap
.
entrySet
())
{
//commonThreadPoolExecutor.execute(() -> {
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
String
crossId
=
entry
.
getKey
();
List
<
LightsStatusVO
>
lightsStatusVOS
=
null
;
CrossInfoPO
crossInfoPO
=
crossInfoMapper
.
selectByPrimaryKey
(
crossId
);
if
(
Objects
.
isNull
(
crossInfoPO
))
{
continue
;
}
ManufacturerInfoPO
manufacturerInfoPO
=
manufacturerInfoMapper
.
selectById
(
crossInfoPO
.
getManufacturerId
());
try
{
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerInfoPO
.
getCode
()))
{
lightsStatusVOS
=
hkLightsStatusService
.
getHkLightsStatus
(
crossId
);
}
else
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
DT
.
getCode
(),
manufacturerInfoPO
.
getCode
())){
JsonViewObject
jsonViewObject
=
utcDTFeignClients
.
lightStatus
(
crossId
);
lightsStatusVOS
=
mapper
.
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{});
}
else
if
(
StringUtils
.
endsWithIgnoreCase
(
BasicEnum
.
ManufacturerEnum
.
HISENSE
.
getCode
(),
manufacturerInfoPO
.
getCode
())){
JsonViewObject
jsonViewObject
=
utcHisenseFeignClients
.
lightStatus
(
crossId
);
lightsStatusVOS
=
mapper
.
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{});
ObjectMapper
mapper
=
JacksonUtils
.
getInstance
();
String
crossId
=
entry
.
getKey
();
List
<
LightsStatusVO
>
lightsStatusVOS
=
null
;
CrossInfoPO
crossInfoPO
=
crossInfoMapper
.
selectByPrimaryKey
(
crossId
);
if
(
Objects
.
isNull
(
crossInfoPO
))
{
continue
;
}
ManufacturerInfoPO
manufacturerInfoPO
=
manufacturerInfoMapper
.
selectById
(
crossInfoPO
.
getManufacturerId
());
try
{
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerInfoPO
.
getCode
()))
{
lightsStatusVOS
=
hkLightsStatusService
.
getHkLightsStatus
(
crossId
);
}
else
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
DT
.
getCode
(),
manufacturerInfoPO
.
getCode
()))
{
JsonViewObject
jsonViewObject
=
utcDTFeignClients
.
lightStatus
(
crossId
);
lightsStatusVOS
=
mapper
.
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{
});
}
else
if
(
StringUtils
.
endsWithIgnoreCase
(
BasicEnum
.
ManufacturerEnum
.
HISENSE
.
getCode
(),
manufacturerInfoPO
.
getCode
()))
{
JsonViewObject
jsonViewObject
=
utcHisenseFeignClients
.
lightStatus
(
crossId
);
lightsStatusVOS
=
mapper
.
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{
});
}
else
if
(
StringUtils
.
endsWithIgnoreCase
(
BasicEnum
.
ManufacturerEnum
.
STATIC
.
getCode
(),
manufacturerInfoPO
.
getCode
()))
{
LightsStatusVO
lightsStatusVO
=
SignalStatus4StaticSchemeTask
.
currentCrossLightStatusCache
.
get
(
crossId
);
if
(
Objects
.
nonNull
(
lightsStatusVO
))
{
lightsStatusVOS
=
new
ArrayList
<>();
lightsStatusVOS
.
add
(
lightsStatusVO
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"灯态异常"
);
//throw new Exception(e);
//lightsStatusVOS = new ArrayList<>();
//LightsStatusVO lightsStatusVO = SignalStatus4StaticSchemeTask.currentCrossLightStatusCache.get(crossId);
//lightsStatusVOS.add(lightsStatusVO);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取厂商灯态异常"
,
e
);
}
List
<
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>>
value
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
lightsStatusVOS
))
{
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
if
(
Objects
.
equals
(
lightsStatusVO
.
getCrossId
(),
crossId
))
{
calculateContolCountDown
(
crossId
,
lightsStatusVO
);
try
{
// 相同路口不同websocket统一发送灯态
String
json
=
mapper
.
writeValueAsString
(
lightsStatusVOS
);
for
(
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>
socketEntry
:
value
)
{
String
crossIdStr
=
socketEntry
.
getKey
();
RealTimeDataWebSocket
webSocket
=
socketEntry
.
getValue
();
webSocket
.
sendInfo
(
json
,
crossIdStr
);
}
insertIntoHist
(
crossId
,
json
);
produceListMap
.
put
(
crossId
,
lightsStatusVOS
);
}
catch
(
Exception
e
)
{
log
.
error
(
"RealTimeDataWebSocket发送异常,异常信息:"
,
e
);
List
<
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>>
value
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
lightsStatusVOS
))
{
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
if
(
Objects
.
equals
(
lightsStatusVO
.
getCrossId
(),
crossId
))
{
calculateContolCountDown
(
crossId
,
lightsStatusVO
);
try
{
// 相同路口不同websocket统一发送灯态
String
json
=
mapper
.
writeValueAsString
(
lightsStatusVOS
);
for
(
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>
socketEntry
:
value
)
{
String
crossIdStr
=
socketEntry
.
getKey
();
RealTimeDataWebSocket
webSocket
=
socketEntry
.
getValue
();
webSocket
.
sendInfo
(
json
,
crossIdStr
);
}
insertIntoHist
(
crossId
,
json
);
produceListMap
.
put
(
crossId
,
lightsStatusVOS
);
}
catch
(
Exception
e
)
{
log
.
error
(
"RealTimeDataWebSocket发送异常,异常信息:"
,
e
);
}
}
}
}
//});
}
sendKafka
();
...
...
@@ -157,6 +160,7 @@ public class SignalStatusTask {
/**
* 计算控制倒计时
*
* @param crossId
* @param lightsStatusVO
*/
...
...
@@ -186,7 +190,7 @@ public class SignalStatusTask {
String
[]
split
=
crossIdStr
.
split
(
","
);
crossId
=
split
[
0
];
}
List
<
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>>
socketList
=
new
ArrayList
<>();
List
<
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>>
socketList
=
new
ArrayList
<>();
if
(
tempMap
.
containsKey
(
crossId
))
{
socketList
=
tempMap
.
get
(
crossId
);
socketList
.
add
(
item
);
...
...
@@ -200,8 +204,9 @@ public class SignalStatusTask {
/**
* 插入路口灯态历史表
*
* @param crossId 路口ID
* @param json 灯态JSON字符串
* @param json
灯态JSON字符串
* @throws Exception 异常处理
*/
private
void
insertIntoHist
(
String
crossId
,
String
json
)
throws
Exception
{
...
...
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