Commit 1f7be484 authored by duanruiming's avatar duanruiming

[add] 信控控制指令日志;排查锁定问题

parent 018866b7
...@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service; ...@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -235,9 +236,9 @@ public class ControlCommandServiceImpl implements ControlCommandService { ...@@ -235,9 +236,9 @@ public class ControlCommandServiceImpl implements ControlCommandService {
// boolean isOk = true; // boolean isOk = true;
if (isOk) { if (isOk) {
return jsonViewObject.fail("第 "+i+1+" 次相位步进失败,取消步进成功,路口号: " + code); return jsonViewObject.fail("第 "+ (i+1) +" 次相位步进失败,取消步进成功,路口号: " + code);
} else { } else {
return jsonViewObject.fail("第 "+i+1+" 次相位步进失败,取消步进失败,路口号: " + code); return jsonViewObject.fail("第 "+ (i+1) +" 次相位步进失败,取消步进失败,路口号: " + code);
} }
} }
//停顿10ms //停顿10ms
...@@ -252,9 +253,9 @@ public class ControlCommandServiceImpl implements ControlCommandService { ...@@ -252,9 +253,9 @@ public class ControlCommandServiceImpl implements ControlCommandService {
// boolean isOk = true; // boolean isOk = true;
if (isOk) { if (isOk) {
return jsonViewObject.fail("第 "+i+1+" 次相位步进失败,但取消步进成功,路口号: " + code); return jsonViewObject.fail("第 "+(i+1)+" 次相位步进失败,但取消步进成功,路口号: " + code);
} else { } else {
return jsonViewObject.fail("第 "+i+1+" 次相位步进失败,取消步进失败,路口号: " + code); return jsonViewObject.fail("第 "+(i+1)+" 次相位步进失败,取消步进失败,路口号: " + code);
} }
} }
......
...@@ -262,24 +262,29 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -262,24 +262,29 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override @Override
public JsonViewObject stepControlStrategy(String crossId, Integer command, Integer stepNum) throws Exception { public JsonViewObject stepControlStrategy(String crossId, Integer command, Integer stepNum) throws Exception {
String now = LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER);
JsonViewObject jsonViewObject; JsonViewObject jsonViewObject;
try { try {
String manufacturerIdCode = crossInfoCache.getManufacturerCodeByCrossId(crossId); String now = LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER);
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) { try {
jsonViewObject = hkControlCommandService.stepControl(crossId, command, stepNum); String manufacturerIdCode = crossInfoCache.getManufacturerCodeByCrossId(crossId);
} else { if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = wanJiControlCommandService.stepControl(crossId, command, stepNum); 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) { } 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; return jsonViewObject;
} }
...@@ -290,77 +295,84 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -290,77 +295,84 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
* @Param jsonObject 参数 * @Param jsonObject 参数
* @return void * @return void
**/ **/
public void insertCommandLog(String queryTime,JsonViewObject jsonViewObject, JSONObject jsonObject,int commandType){ public void insertCommandLog(String queryTime,JsonViewObject jsonViewObject, JSONObject jsonObject,int commandType) throws Exception{
SignalCommandLogPO signalCommandLogPO = new SignalCommandLogPO(); try {
signalCommandLogPO.setCrossId(jsonObject.getString("crossId")); SignalCommandLogPO signalCommandLogPO = new SignalCommandLogPO();
signalCommandLogPO.setDataInfo(jsonObject.toJSONString()); signalCommandLogPO.setCrossId(jsonObject.getString("crossId"));
signalCommandLogPO.setCommandType(commandType); signalCommandLogPO.setDataInfo(jsonObject.toJSONString());
signalCommandLogPO.setQueryTime(queryTime); signalCommandLogPO.setCommandType(commandType);
Integer code = jsonViewObject.getCode(); signalCommandLogPO.setQueryTime(queryTime);
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); Integer code = jsonViewObject.getCode();
String ip = IpAddressUtil.getIpAddress(request); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
signalCommandLogPO.setIp(ip); String ip = IpAddressUtil.getIpAddress(request);
log.info("服务器请求返回 信息jsonViewObject:{}",jsonViewObject); signalCommandLogPO.setIp(ip);
int commandResult = 0; log.info("insertCommandLog服务器请求返回 信息jsonViewObject:{}",jsonViewObject);
if (code == 200){ int commandResult = 0;
commandResult = 1; if (code == 200){
}else { commandResult = 1;
commandResult = 2; }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);
} }
} signalCommandLogPO.setCommandResult(commandResult);
int insert = signalCommandLogPOMapper.insert(signalCommandLogPO); signalCommandLogPO.setResultMessage(jsonViewObject.getMessage());
if (insert > 0) {
log.info("定时任务 插入t_signal_command_log成功,crossId = {},commandType = {},time = {},insert = {}", jsonObject.getString("crossId"), commandType, LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER),insert); ConcurrentHashMap<String, List<LightsStatusVO2>> produceListMap = SignalStatusTask.produceListMap;
}else { if (!produceListMap.isEmpty()) {
log.info("定时任务 插入t_signal_command_log失败,crossId = {},commandType = {},time = {},insert = {}", jsonObject.getString("crossId"), commandType, LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER),insert); List<LightsStatusVO2> list = produceListMap.get(jsonObject.get("crossId"));
} if (ObjectUtil.isNotEmpty(list)){
//排除查询环图接口 LightsStatusVO2 lightsStatusVO2 = list.get(0);
if (commandType != 10){ String runMode = lightsStatusVO2.getRunMode();
LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper = new LambdaQueryWrapper<>(); String lampTime = lightsStatusVO2.getTimeStamp();
lambdaQueryWrapper.eq(SignalCommandPO::getCrossId,jsonObject.getString("crossId")); signalCommandLogPO.setRunMode(runMode);
List<SignalCommandPO> signalCommandPOS = signalCommandPOMapper.selectList(lambdaQueryWrapper); signalCommandLogPO.setLampTime(lampTime);
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);
} }
}
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 { }else {
//更新 log.info("定时任务 插入t_signal_command_log失败,crossId = {},commandType = {},time = {},insert = {}", jsonObject.getString("crossId"), commandType, LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER),insert);
SignalCommandPO signalCommandPO = signalCommandPOS.get(0); }
signalCommandPO.setDataInfo(jsonObject.toJSONString()); //排除查询环图接口
signalCommandPO.setCommandType(commandType); if (commandType != 10){
signalCommandPO.setCommandResult(commandResult); LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
signalCommandPO.setResultMessage(jsonViewObject.getMessage()); lambdaQueryWrapper.eq(SignalCommandPO::getCrossId,jsonObject.getString("crossId"));
signalCommandPO.setIp(ip); List<SignalCommandPO> signalCommandPOS = signalCommandPOMapper.selectList(lambdaQueryWrapper);
signalCommandPO.setQueryTime(queryTime); if (ObjectUtil.isEmpty(signalCommandPOS)){
signalCommandPO.setUpdateCount(0); //插入
int update = signalCommandPOMapper.update(signalCommandPO, lambdaQueryWrapper); SignalCommandPO signalCommandPO = new SignalCommandPO();
if (update > 0) { BeanUtil.copyProperties(signalCommandLogPO,signalCommandPO);
log.info("定时任务 更新t_signal_command成功,crossId = {},commandType = {},time = {},update = {}", jsonObject.getString("crossId"), commandType, LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER),update); int insert1 = signalCommandPOMapper.insert(signalCommandPO);
}else { if (insert1 > 0) {
log.info("定时任务 更新t_signal_command失败,crossId = {},commandType = {},time = {},update = {}", jsonObject.getString("crossId"), commandType, LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER),update); 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);
} }
} }
......
...@@ -52,26 +52,32 @@ public class CommandFaildTask { ...@@ -52,26 +52,32 @@ public class CommandFaildTask {
@Scheduled(cron = "0/5 * * * * ?") @Scheduled(cron = "0/5 * * * * ?")
public void commandFaildTask() throws Exception { public void commandFaildTask() throws Exception {
LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper = new LambdaQueryWrapper<>(); try {
lambdaQueryWrapper.eq(SignalCommandPO::getCommandResult, 2); LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
List<SignalCommandPO> crossInfoPOList = signalCommandPOMapper.selectList(lambdaQueryWrapper); lambdaQueryWrapper.eq(SignalCommandPO::getCommandResult, 2);
log.info("定时任务恢复控制指令,需要执行恢复路口集合crossInfoPOList = {}", crossInfoPOList); List<SignalCommandPO> crossInfoPOList = signalCommandPOMapper.selectList(lambdaQueryWrapper);
if (ObjectUtil.isNotEmpty(crossInfoPOList)) { log.info("定时任务恢复控制指令,需要执行恢复路口集合size:{}, crossInfoPOList = {}", crossInfoPOList.size(), crossInfoPOList);
for (SignalCommandPO signalCommandPO : crossInfoPOList) { if (ObjectUtil.isNotEmpty(crossInfoPOList)) {
String crossId = signalCommandPO.getCrossId(); for (SignalCommandPO signalCommandPO : crossInfoPOList) {
Integer commandType = signalCommandPO.getCommandType(); String crossId = signalCommandPO.getCrossId();
Integer updateCount = signalCommandPO.getUpdateCount(); Integer commandType = signalCommandPO.getCommandType();
if (ObjectUtil.isNull(updateCount)) { Integer updateCount = signalCommandPO.getUpdateCount();
updateCount = 0; if (ObjectUtil.isNull(updateCount)) {
} updateCount = 0;
try { }
log.info("定时任务自动恢复开始执行(不保证恢复成功),crossId={},commandType={},updateCount={}", crossId, commandType, updateCount); try {
//处理数据 log.info("定时任务自动恢复开始执行(不保证恢复成功),crossId={},commandType={},updateCount={}", crossId, commandType, updateCount);
handlerCommand(crossId, commandType, updateCount); //处理数据
} catch (Exception e) { handlerCommand(crossId, commandType, updateCount);
log.error("定时任务自动恢复报错,crossId={},commandType={},updateCount={}", 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 { ...@@ -254,6 +260,8 @@ public class CommandFaildTask {
}else { }else {
log.info("定时任务 更新t_signal_command失败,crossId = {},commandType = {},time = {},update = {}", jsonObject.getString("crossId"), commandType, LocalDateTimeUtil.formatNow(LocalDateTimeUtil.TIMEFORMATTER),update); 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);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment