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
1f7be484
Commit
1f7be484
authored
Jan 05, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 信控控制指令日志;排查锁定问题
parent
018866b7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
122 additions
and
101 deletions
+122
-101
ControlCommandServiceImpl.java
...i/utc/hisense/service/impl/ControlCommandServiceImpl.java
+5
-4
ControlCommandStrategyServiceImpl.java
...rvice/control/impl/ControlCommandStrategyServiceImpl.java
+91
-79
CommandFaildTask.java
...ce/src/main/java/net/wanji/utc/task/CommandFaildTask.java
+26
-18
No files found.
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/service/impl/ControlCommandServiceImpl.java
View file @
1f7be484
...
...
@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -235,9 +236,9 @@ public class ControlCommandServiceImpl implements ControlCommandService {
// boolean isOk = true;
if
(
isOk
)
{
return
jsonViewObject
.
fail
(
"第 "
+
i
+
1
+
" 次相位步进失败,取消步进成功,路口号: "
+
code
);
return
jsonViewObject
.
fail
(
"第 "
+
(
i
+
1
)
+
" 次相位步进失败,取消步进成功,路口号: "
+
code
);
}
else
{
return
jsonViewObject
.
fail
(
"第 "
+
i
+
1
+
" 次相位步进失败,取消步进失败,路口号: "
+
code
);
return
jsonViewObject
.
fail
(
"第 "
+
(
i
+
1
)
+
" 次相位步进失败,取消步进失败,路口号: "
+
code
);
}
}
//停顿10ms
...
...
@@ -252,9 +253,9 @@ public class ControlCommandServiceImpl implements ControlCommandService {
// boolean isOk = true;
if
(
isOk
)
{
return
jsonViewObject
.
fail
(
"第 "
+
i
+
1
+
" 次相位步进失败,但取消步进成功,路口号: "
+
code
);
return
jsonViewObject
.
fail
(
"第 "
+
(
i
+
1
)
+
" 次相位步进失败,但取消步进成功,路口号: "
+
code
);
}
else
{
return
jsonViewObject
.
fail
(
"第 "
+
i
+
1
+
" 次相位步进失败,取消步进失败,路口号: "
+
code
);
return
jsonViewObject
.
fail
(
"第 "
+
(
i
+
1
)
+
" 次相位步进失败,取消步进失败,路口号: "
+
code
);
}
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/control/impl/ControlCommandStrategyServiceImpl.java
View file @
1f7be484
...
...
@@ -262,24 +262,29 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override
public
JsonViewObject
stepControlStrategy
(
String
crossId
,
Integer
command
,
Integer
stepNum
)
throws
Exception
{
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
JsonViewObject
jsonViewObject
;
try
{
String
manufacturerIdCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
crossId
);
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerIdCode
))
{
jsonViewObject
=
hkControlCommandService
.
stepControl
(
crossId
,
command
,
stepNum
);
}
else
{
jsonViewObject
=
wanJiControlCommandService
.
stepControl
(
crossId
,
command
,
stepNum
);
String
now
=
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
);
try
{
String
manufacturerIdCode
=
crossInfoCache
.
getManufacturerCodeByCrossId
(
crossId
);
if
(
StringUtils
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerIdCode
))
{
jsonViewObject
=
hkControlCommandService
.
stepControl
(
crossId
,
command
,
stepNum
);
}
else
{
jsonViewObject
=
wanJiControlCommandService
.
stepControl
(
crossId
,
command
,
stepNum
);
}
}
catch
(
Exception
e
)
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
e
.
getMessage
());
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"crossId"
,
crossId
);
jsonObject
.
put
(
"command"
,
command
);
jsonObject
.
put
(
"stepNum"
,
stepNum
);
//插入命令操作日志
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
1
);
}
catch
(
Exception
e
)
{
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
e
.
getMessage
());
log
.
error
(
"stepControlStrategy步进控制远程服务调用异常:"
,
e
);
jsonViewObject
=
JsonViewObject
.
newInstance
().
fail
(
"步进控制远程服务调用异常"
);
}
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"crossId"
,
crossId
);
jsonObject
.
put
(
"command"
,
command
);
jsonObject
.
put
(
"stepNum"
,
stepNum
);
//插入命令操作日志
insertCommandLog
(
now
,
jsonViewObject
,
jsonObject
,
1
);
return
jsonViewObject
;
}
...
...
@@ -290,77 +295,84 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
* @Param jsonObject 参数
* @return void
**/
public
void
insertCommandLog
(
String
queryTime
,
JsonViewObject
jsonViewObject
,
JSONObject
jsonObject
,
int
commandType
){
SignalCommandLogPO
signalCommandLogPO
=
new
SignalCommandLogPO
();
signalCommandLogPO
.
setCrossId
(
jsonObject
.
getString
(
"crossId"
));
signalCommandLogPO
.
setDataInfo
(
jsonObject
.
toJSONString
());
signalCommandLogPO
.
setCommandType
(
commandType
);
signalCommandLogPO
.
setQueryTime
(
queryTime
);
Integer
code
=
jsonViewObject
.
getCode
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
ip
=
IpAddressUtil
.
getIpAddress
(
request
);
signalCommandLogPO
.
setIp
(
ip
);
log
.
info
(
"服务器请求返回 信息jsonViewObject:{}"
,
jsonViewObject
);
int
commandResult
=
0
;
if
(
code
==
200
){
commandResult
=
1
;
}
else
{
commandResult
=
2
;
}
signalCommandLogPO
.
setCommandResult
(
commandResult
);
signalCommandLogPO
.
setResultMessage
(
jsonViewObject
.
getMessage
());
ConcurrentHashMap
<
String
,
List
<
LightsStatusVO2
>>
produceListMap
=
SignalStatusTask
.
produceListMap
;
if
(!
produceListMap
.
isEmpty
())
{
List
<
LightsStatusVO2
>
list
=
produceListMap
.
get
(
jsonObject
.
get
(
"crossId"
));
if
(
ObjectUtil
.
isNotEmpty
(
list
)){
LightsStatusVO2
lightsStatusVO2
=
list
.
get
(
0
);
String
runMode
=
lightsStatusVO2
.
getRunMode
();
String
lampTime
=
lightsStatusVO2
.
getTimeStamp
();
//时间转换
// lampTime = LocalDateTimeUtil.formatTimeStamp(Long.valueOf(lampTime), LocalDateTimeUtil.TIMEFORMATTER);
signalCommandLogPO
.
setRunMode
(
runMode
);
signalCommandLogPO
.
setLampTime
(
lampTime
);
public
void
insertCommandLog
(
String
queryTime
,
JsonViewObject
jsonViewObject
,
JSONObject
jsonObject
,
int
commandType
)
throws
Exception
{
try
{
SignalCommandLogPO
signalCommandLogPO
=
new
SignalCommandLogPO
();
signalCommandLogPO
.
setCrossId
(
jsonObject
.
getString
(
"crossId"
));
signalCommandLogPO
.
setDataInfo
(
jsonObject
.
toJSONString
());
signalCommandLogPO
.
setCommandType
(
commandType
);
signalCommandLogPO
.
setQueryTime
(
queryTime
);
Integer
code
=
jsonViewObject
.
getCode
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
ip
=
IpAddressUtil
.
getIpAddress
(
request
);
signalCommandLogPO
.
setIp
(
ip
);
log
.
info
(
"insertCommandLog服务器请求返回 信息jsonViewObject:{}"
,
jsonViewObject
);
int
commandResult
=
0
;
if
(
code
==
200
){
commandResult
=
1
;
}
else
{
commandResult
=
2
;
}
}
int
insert
=
signalCommandLogPOMapper
.
insert
(
signalCommandLogPO
);
if
(
insert
>
0
)
{
log
.
info
(
"定时任务 插入t_signal_command_log成功,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert
);
}
else
{
log
.
info
(
"定时任务 插入t_signal_command_log失败,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert
);
}
//排除查询环图接口
if
(
commandType
!=
10
){
LambdaQueryWrapper
<
SignalCommandPO
>
lambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
lambdaQueryWrapper
.
eq
(
SignalCommandPO:
:
getCrossId
,
jsonObject
.
getString
(
"crossId"
));
List
<
SignalCommandPO
>
signalCommandPOS
=
signalCommandPOMapper
.
selectList
(
lambdaQueryWrapper
);
if
(
ObjectUtil
.
isEmpty
(
signalCommandPOS
)){
//插入
SignalCommandPO
signalCommandPO
=
new
SignalCommandPO
();
BeanUtil
.
copyProperties
(
signalCommandLogPO
,
signalCommandPO
);
int
insert1
=
signalCommandPOMapper
.
insert
(
signalCommandPO
);
if
(
insert1
>
0
)
{
log
.
info
(
"定时任务 插入t_signal_command成功,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert1
);
}
else
{
log
.
info
(
"定时任务 插入t_signal_command失败,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert1
);
signalCommandLogPO
.
setCommandResult
(
commandResult
);
signalCommandLogPO
.
setResultMessage
(
jsonViewObject
.
getMessage
());
ConcurrentHashMap
<
String
,
List
<
LightsStatusVO2
>>
produceListMap
=
SignalStatusTask
.
produceListMap
;
if
(!
produceListMap
.
isEmpty
())
{
List
<
LightsStatusVO2
>
list
=
produceListMap
.
get
(
jsonObject
.
get
(
"crossId"
));
if
(
ObjectUtil
.
isNotEmpty
(
list
)){
LightsStatusVO2
lightsStatusVO2
=
list
.
get
(
0
);
String
runMode
=
lightsStatusVO2
.
getRunMode
();
String
lampTime
=
lightsStatusVO2
.
getTimeStamp
();
signalCommandLogPO
.
setRunMode
(
runMode
);
signalCommandLogPO
.
setLampTime
(
lampTime
);
}
}
int
insert
=
signalCommandLogPOMapper
.
insert
(
signalCommandLogPO
);
if
(
insert
>
0
)
{
log
.
info
(
"定时任务 插入t_signal_command_log成功,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert
);
}
else
{
//更新
SignalCommandPO
signalCommandPO
=
signalCommandPOS
.
get
(
0
);
signalCommandPO
.
setDataInfo
(
jsonObject
.
toJSONString
());
signalCommandPO
.
setCommandType
(
commandType
);
signalCommandPO
.
setCommandResult
(
commandResult
);
signalCommandPO
.
setResultMessage
(
jsonViewObject
.
getMessage
());
signalCommandPO
.
setIp
(
ip
);
signalCommandPO
.
setQueryTime
(
queryTime
);
signalCommandPO
.
setUpdateCount
(
0
);
int
update
=
signalCommandPOMapper
.
update
(
signalCommandPO
,
lambdaQueryWrapper
);
if
(
update
>
0
)
{
log
.
info
(
"定时任务 更新t_signal_command成功,crossId = {},commandType = {},time = {},update = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
update
);
}
else
{
log
.
info
(
"定时任务 更新t_signal_command失败,crossId = {},commandType = {},time = {},update = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
update
);
log
.
info
(
"定时任务 插入t_signal_command_log失败,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert
);
}
//排除查询环图接口
if
(
commandType
!=
10
){
LambdaQueryWrapper
<
SignalCommandPO
>
lambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
lambdaQueryWrapper
.
eq
(
SignalCommandPO:
:
getCrossId
,
jsonObject
.
getString
(
"crossId"
));
List
<
SignalCommandPO
>
signalCommandPOS
=
signalCommandPOMapper
.
selectList
(
lambdaQueryWrapper
);
if
(
ObjectUtil
.
isEmpty
(
signalCommandPOS
)){
//插入
SignalCommandPO
signalCommandPO
=
new
SignalCommandPO
();
BeanUtil
.
copyProperties
(
signalCommandLogPO
,
signalCommandPO
);
int
insert1
=
signalCommandPOMapper
.
insert
(
signalCommandPO
);
if
(
insert1
>
0
)
{
log
.
info
(
"定时任务 插入t_signal_command成功,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert1
);
}
else
{
log
.
info
(
"定时任务 插入t_signal_command失败,crossId = {},commandType = {},time = {},insert = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
insert1
);
}
}
else
{
//更新
SignalCommandPO
signalCommandPO
=
signalCommandPOS
.
get
(
0
);
signalCommandPO
.
setDataInfo
(
jsonObject
.
toJSONString
());
signalCommandPO
.
setCommandType
(
commandType
);
signalCommandPO
.
setCommandResult
(
commandResult
);
signalCommandPO
.
setResultMessage
(
jsonViewObject
.
getMessage
());
signalCommandPO
.
setIp
(
ip
);
signalCommandPO
.
setQueryTime
(
queryTime
);
signalCommandPO
.
setUpdateCount
(
0
);
int
update
=
signalCommandPOMapper
.
update
(
signalCommandPO
,
lambdaQueryWrapper
);
if
(
update
>
0
)
{
log
.
info
(
"定时任务 更新t_signal_command成功,crossId = {},commandType = {},time = {},update = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
update
);
}
else
{
log
.
info
(
"定时任务 更新t_signal_command失败,crossId = {},commandType = {},time = {},update = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
update
);
}
}
}
LambdaQueryWrapper
<
SignalCommandPO
>
lambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
lambdaQueryWrapper
.
eq
(
SignalCommandPO:
:
getCrossId
,
jsonObject
.
getString
(
"crossId"
));
List
<
SignalCommandPO
>
signalCommandPOS
=
signalCommandPOMapper
.
selectList
(
lambdaQueryWrapper
);
log
.
error
(
"更新t_signal_command成功,数据库中查询结果集:{}"
,
signalCommandPOS
);
}
catch
(
Exception
e
)
{
log
.
error
(
"insertCommandLog命令日志插入失败:"
,
e
);
throw
new
RuntimeException
(
e
);
}
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/CommandFaildTask.java
View file @
1f7be484
...
...
@@ -52,26 +52,32 @@ public class CommandFaildTask {
@Scheduled
(
cron
=
"0/5 * * * * ?"
)
public
void
commandFaildTask
()
throws
Exception
{
LambdaQueryWrapper
<
SignalCommandPO
>
lambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
lambdaQueryWrapper
.
eq
(
SignalCommandPO:
:
getCommandResult
,
2
);
List
<
SignalCommandPO
>
crossInfoPOList
=
signalCommandPOMapper
.
selectList
(
lambdaQueryWrapper
);
log
.
info
(
"定时任务恢复控制指令,需要执行恢复路口集合crossInfoPOList = {}"
,
crossInfoPOList
);
if
(
ObjectUtil
.
isNotEmpty
(
crossInfoPOList
))
{
for
(
SignalCommandPO
signalCommandPO
:
crossInfoPOList
)
{
String
crossId
=
signalCommandPO
.
getCrossId
();
Integer
commandType
=
signalCommandPO
.
getCommandType
();
Integer
updateCount
=
signalCommandPO
.
getUpdateCount
();
if
(
ObjectUtil
.
isNull
(
updateCount
))
{
updateCount
=
0
;
}
try
{
log
.
info
(
"定时任务自动恢复开始执行(不保证恢复成功),crossId={},commandType={},updateCount={}"
,
crossId
,
commandType
,
updateCount
);
//处理数据
handlerCommand
(
crossId
,
commandType
,
updateCount
);
}
catch
(
Exception
e
)
{
log
.
error
(
"定时任务自动恢复报错,crossId={},commandType={},updateCount={}"
,
crossId
,
commandType
,
updateCount
);
try
{
LambdaQueryWrapper
<
SignalCommandPO
>
lambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
lambdaQueryWrapper
.
eq
(
SignalCommandPO:
:
getCommandResult
,
2
);
List
<
SignalCommandPO
>
crossInfoPOList
=
signalCommandPOMapper
.
selectList
(
lambdaQueryWrapper
);
log
.
info
(
"定时任务恢复控制指令,需要执行恢复路口集合size:{}, crossInfoPOList = {}"
,
crossInfoPOList
.
size
(),
crossInfoPOList
);
if
(
ObjectUtil
.
isNotEmpty
(
crossInfoPOList
))
{
for
(
SignalCommandPO
signalCommandPO
:
crossInfoPOList
)
{
String
crossId
=
signalCommandPO
.
getCrossId
();
Integer
commandType
=
signalCommandPO
.
getCommandType
();
Integer
updateCount
=
signalCommandPO
.
getUpdateCount
();
if
(
ObjectUtil
.
isNull
(
updateCount
))
{
updateCount
=
0
;
}
try
{
log
.
info
(
"定时任务自动恢复开始执行(不保证恢复成功),crossId={},commandType={},updateCount={}"
,
crossId
,
commandType
,
updateCount
);
//处理数据
handlerCommand
(
crossId
,
commandType
,
updateCount
);
}
catch
(
Exception
e
)
{
log
.
error
(
"定时任务自动恢复报错,crossId={},commandType={},updateCount={}"
,
crossId
,
commandType
,
updateCount
);
throw
new
Exception
(
e
);
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"commandFaildTask定时任务执行异常:"
,
e
);
throw
new
RuntimeException
(
e
);
}
}
...
...
@@ -254,6 +260,8 @@ public class CommandFaildTask {
}
else
{
log
.
info
(
"定时任务 更新t_signal_command失败,crossId = {},commandType = {},time = {},update = {}"
,
jsonObject
.
getString
(
"crossId"
),
commandType
,
LocalDateTimeUtil
.
formatNow
(
LocalDateTimeUtil
.
TIMEFORMATTER
),
update
);
}
List
<
SignalCommandPO
>
signalCommandPOS
=
signalCommandPOMapper
.
selectList
(
lambdaQueryWrapper
);
log
.
error
(
"定时任务 更新t_signal_command成功,数据库中查询结果集:{}"
,
signalCommandPOS
);
}
}
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