Commit aec32bae authored by duanruiming's avatar duanruiming

[add] 海信临时方案下发

parent b4048f1b
...@@ -119,7 +119,7 @@ public class RedisConfig extends CachingConfigurerSupport { ...@@ -119,7 +119,7 @@ public class RedisConfig extends CachingConfigurerSupport {
@Bean @Bean
public Jedis jedis() { public Jedis jedis() {
Jedis jedis = new Jedis(redisHost, redisPort); Jedis jedis = new Jedis(redisHost, redisPort);
jedis.auth(password); jedis.auth("Wanji@300552");
return jedis; return jedis;
} }
......
...@@ -49,7 +49,6 @@ import java.text.ParseException; ...@@ -49,7 +49,6 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* @author duanruiming * @author duanruiming
...@@ -79,7 +78,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -79,7 +78,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
private final CrossPhaseDirTurnCache crossPhaseDirTurnCache; private final CrossPhaseDirTurnCache crossPhaseDirTurnCache;
private final CrossSchemePhaseTimeCountCache crossSchemePhaseTimeCountCache; private final CrossSchemePhaseTimeCountCache crossSchemePhaseTimeCountCache;
@Resource @Resource
WanJiCommonStaticInfoService wanjiCommonStaticInfoService; private WanJiCommonStaticInfoService wanjiCommonStaticInfoService;
@Override @Override
...@@ -687,42 +686,58 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -687,42 +686,58 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override @Override
public JsonViewObject schemePhaseGreenTimeOpt(SchemePhaseGreenTimeOptVO vo) throws Exception { public JsonViewObject schemePhaseGreenTimeOpt(SchemePhaseGreenTimeOptVO vo) throws Exception {
ObjectMapper mapper = JacksonUtils.getInstance(); JsonViewObject result = JsonViewObject.newInstance();
try { try {
ObjectMapper mapper = JacksonUtils.getInstance();
String crossId = vo.getCrossId(); String crossId = vo.getCrossId();
Integer schemeId = vo.getSchemeId(); Integer schemeId = vo.getSchemeNo();
Integer offset = vo.getOffset(); Integer offset = vo.getOffset();
Integer cycle = vo.getCycle(); Integer cycle = vo.getCycle();
List<SchemePhaseGreenTimeOptVO.PhaseOptTime> phaseOptTimeList = vo.getPhaseOptTimeList(); List<SchemePhaseGreenTimeOptVO.PhaseOptTime> phaseOptTimeList = vo.getPhaseOptTimeList();
// 获取方案环图中,将平台优化的相位阶段转化为海信相位时间
// 获取方案环图中,将环图中相位转化为阶段中相位对应关系
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO(); CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(crossId); crossSchemeRingsDTO.setCrossId(crossId);
crossSchemeRingsDTO.setPattern(String.valueOf(schemeId)); crossSchemeRingsDTO.setPattern(String.valueOf(schemeId));
JsonViewObject jsonViewObject = wanjiCommonStaticInfoService.selectCrossSchemeRingsToStages(crossSchemeRingsDTO); // 方案环图结果
if (Objects.nonNull(jsonViewObject) && Objects.equals(200, jsonViewObject.getCode())) { CrossSchemeRingsToStagesPO crossSchemeRingsToStagesPO = new CrossSchemeRingsToStagesPO();
String contentStr = String.valueOf(jsonViewObject.getContent()); try {
CrossSchemeRingsToStagesPO crossSchemeRingsToStagesPO = mapper.convertValue(contentStr, CrossSchemeRingsToStagesPO.class); JsonViewObject res = wanjiCommonStaticInfoService.selectCrossSchemeRingsToStages(crossSchemeRingsDTO);
Map<Integer, Integer> phaseTimeMap = new HashMap<>(); if (Objects.nonNull(res) && 200 == res.getCode()) {
if (Objects.nonNull(crossSchemeRingsToStagesPO)) { Object content = res.getContent();
crossSchemeRingsToStagesPO = mapper.convertValue(content, CrossSchemeRingsToStagesPO.class);
} else {
log.error("平台临时方案下发-路口号查询方案号远程服务调用异常:{}", res);
result.fail("根据路口号和方案号查询环图阶段远程服务调用异常");
}
} catch (Exception e) {
log.error("平台临时方案下发-路口号查询方案号远程服务调用异常:", e);
return result.fail("根据路口号和方案号查询环图阶段远程服务调用异常");
}
Map<Integer, Integer> phaseTimeMap = new TreeMap<>();
// 将阶段中相位加减绿灯时间转化到环相位中
if (!CollectionUtils.isEmpty(phaseOptTimeList)) {
for (SchemePhaseGreenTimeOptVO.PhaseOptTime phaseOptTime : phaseOptTimeList) {
String optPhaseNo = phaseOptTime.getPhaseNo();
Integer optTime = phaseOptTime.getOptTime();
List<CrossSchemeRingsToStagesPO.Phase> phaseList = crossSchemeRingsToStagesPO.getPhaseList(); List<CrossSchemeRingsToStagesPO.Phase> phaseList = crossSchemeRingsToStagesPO.getPhaseList();
if (!CollectionUtils.isEmpty(phaseList) && !CollectionUtils.isEmpty(phaseOptTimeList)) { String oriPhaseTimeStr = crossSchemeRingsToStagesPO.getSplit();
for (SchemePhaseGreenTimeOptVO.PhaseOptTime phaseOptTime : phaseOptTimeList) { if (!CollectionUtils.isEmpty(phaseList) && StringUtils.isNotEmpty(oriPhaseTimeStr)) {
String optPhaseNo = phaseOptTime.getPhaseNo(); String[] oriHisensePhaseList = oriPhaseTimeStr.split(" ");
Integer optGreenTime = phaseOptTime.getOptGreenTime();
for (CrossSchemeRingsToStagesPO.Phase oriPhase : phaseList) { for (CrossSchemeRingsToStagesPO.Phase phase : phaseList) {
String oriPhaseNo = oriPhase.getPhaseNo(); String oriPhaseNo = phase.getPhaseNo();
String oriPhaseList = oriPhase.getPhaseList(); String oriPhaseList = phase.getPhaseList();
Integer oriPhaseTime = oriPhase.getPhaseTime(); if (StringUtils.equals(optPhaseNo, oriPhaseNo)) {
if (StringUtils.equals(optPhaseNo, oriPhaseNo)) { if (StringUtils.isNotEmpty(oriPhaseList)) {
if (StringUtils.isNotBlank(oriPhaseList)) { String[] split = oriPhaseList.split(",");
for (String s : oriPhaseList.split(",")) { for (String hisensePhaseNoStr : split) {
Integer hisensePhaseNo = Integer.valueOf(s); int hisensePhaseNo = Integer.parseInt(hisensePhaseNoStr);
if (phaseTimeMap.containsKey(hisensePhaseNo)) { int oriHisensePhaseTime = Integer.parseInt(oriHisensePhaseList[hisensePhaseNo - 1]);
Integer oriGreen = phaseTimeMap.get(hisensePhaseNo); if (phaseTimeMap.containsKey(hisensePhaseNo)) {
phaseTimeMap.put(hisensePhaseNo, oriGreen + optGreenTime); phaseTimeMap.compute(hisensePhaseNo, (k, tempPhaseTime) -> tempPhaseTime + optTime);
} else { } else {
phaseTimeMap.put(hisensePhaseNo, oriPhaseTime + optGreenTime); phaseTimeMap.put(hisensePhaseNo, oriHisensePhaseTime + optTime);
}
} }
} }
} }
...@@ -730,44 +745,42 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -730,44 +745,42 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
} }
} }
} }
// 将相位对应绿信比转成发送格式 }
String splitSend = ""; StringBuilder sb = new StringBuilder();
if (!phaseTimeMap.isEmpty()) { for (int i = 1; i <= 16; i++) {
LinkedHashMap<Integer, Integer> sortMap = phaseTimeMap.entrySet().stream().sorted( Integer value = phaseTimeMap.get(i);
Map.Entry.comparingByKey()).collect(Collectors.toMap( if (Objects.nonNull(value)) {
Map.Entry::getKey, sb.append(value).append(" ");
Map.Entry::getValue, } else {
(oldValue, newValue) -> oldValue, sb.append(0).append(" ");
LinkedHashMap::new
));
List<Integer> hisensePhaseTimeList = new ArrayList<>(16);
for (Map.Entry<Integer, Integer> entry : sortMap.entrySet()) {
hisensePhaseTimeList.add(entry.getValue());
}
splitSend = hisensePhaseTimeList.stream().map(String::valueOf).collect(Collectors.joining(","));
} }
// 下发临时方案 }
TempSchemeSendVO tempSchemeSendVO = new TempSchemeSendVO(); log.debug("平台临时方案下发相位信息:{}", sb.substring(0, sb.length() - 1).toString());
tempSchemeSendVO.setCrossId(crossId); log.debug("平台临时方案下发相位信息-原始相位:{}", mapper.writeValueAsString(crossSchemeRingsToStagesPO));
tempSchemeSendVO.setPattern(String.valueOf(schemeId)); // 下发临时方案
tempSchemeSendVO.setCycle(String.valueOf(cycle)); TempSchemeSendVO tempSchemeSendVO = new TempSchemeSendVO();
tempSchemeSendVO.setOffset(String.valueOf(offset)); tempSchemeSendVO.setCrossId(crossId);
tempSchemeSendVO.setType("9"); tempSchemeSendVO.setCycle(String.valueOf(cycle));
tempSchemeSendVO.setSplit(splitSend); tempSchemeSendVO.setType("9");
JsonViewObject jsonViewObject1 = tempSchemeDetail(tempSchemeSendVO); tempSchemeSendVO.setPattern(String.valueOf(schemeId));
if (Objects.nonNull(jsonViewObject1) && Objects.equals(200, jsonViewObject1.getCode())) { tempSchemeSendVO.setOffset(crossSchemeRingsToStagesPO.getOffset()); // todo 需要确认,是不是前端传。默认原方案
return JsonViewObject.newInstance().success("方案相位绿灯时间优化下发成功"); tempSchemeSendVO.setSplit(sb.substring(0, sb.length() - 1).toString());
try {
JsonViewObject tempSchemeRes = this.tempSchemeDetail(tempSchemeSendVO);
if (Objects.nonNull(tempSchemeRes) && 200 == tempSchemeRes.getCode()) {
return result.success("平台临时方案下发");
} else { } else {
log.error("方案相位绿灯时间优化下发异常:{}", jsonViewObject1); log.error("平台临时方案下发-海信临时方案下发异常:{}", tempSchemeRes);
return JsonViewObject.newInstance().fail("海信临时方案接口远程调用异常"); result.fail("平台临时方案下发-海信临时方案下发异常");
} }
} else { } catch (Exception e) {
log.error("根据路口号和方案号查询环转阶段异常:{}", jsonViewObject); log.error("平台临时方案下发-海信临时方案下发异常:{}", e);
return JsonViewObject.newInstance().fail("根据路口号和方案号查询环转阶段异常"); result.fail("平台临时方案下发-海信临时方案下发异常");
} }
} catch (Exception e) { } catch (Exception e) {
log.error("方案相位绿灯时间优化下发异常,异常信息:{}", e); log.error("平台临时方案下发异常:", e);
throw new RuntimeException(e); throw new RuntimeException(e);
} }
return result.fail("平台临时方案下发异常");
} }
} }
...@@ -31,7 +31,7 @@ import java.util.stream.Collectors; ...@@ -31,7 +31,7 @@ import java.util.stream.Collectors;
* @date 2025/03/26 10:00 * @date 2025/03/26 10:00
* @description 每十分钟同步海信信号机方案环图请求 * @description 每十分钟同步海信信号机方案环图请求
*/ */
@Component //@Component
@Slf4j @Slf4j
@Profile("docker") @Profile("docker")
public class HisenseSchemeRingTask { public class HisenseSchemeRingTask {
......
package net.wanji.utc.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import lombok.extern.slf4j.Slf4j;import net.wanji.common.utils.tool.BeanListUtils;import net.wanji.databus.dao.entity.SignalCommandLogPO;import net.wanji.databus.dao.entity.SignalCommandPO;import net.wanji.databus.dao.mapper.SignalCommandLogPOMapper;import net.wanji.databus.dao.mapper.SignalCommandPOMapper;import net.wanji.utc.common.typeenum.DateStyle;import net.wanji.utc.dto.LightStatusAlarmDTO;import net.wanji.utc.kafka.ProducerHandler;import net.wanji.utc.util.DateUtils;import net.wanji.utc.util.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Profile;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import org.springframework.util.CollectionUtils; import javax.annotation.Resource;import java.util.*;import java.util.concurrent.ConcurrentHashMap;import java.util.stream.Collectors; /** * @author duanruiming * @date 2024/12/26 10:33 * @description 信号命令日志同步 */@Component@Slf4j@Profile("docker")public class SignalCommandSyncTask { @Resource private SignalCommandPOMapper signalCommandPOMapper; @Resource SignalCommandLogPOMapper signalCommandLogPOMapper; @Autowired private ProducerHandler producerHandler; /** * 信号机状态控制模式缓存,更新数据库后查询 */ public static Map<String, SignalCommandPO> signalStatusRunModelMap = new HashMap<>(); @Scheduled(fixedRate = 5 * 1000, initialDelay = 30 * 1000) public void sync() { try { ConcurrentHashMap<String, SignalCommandPO> crossLightsStatusMap = SignalStatusTask.crossLightsStatusMap; LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper = new LambdaQueryWrapper(); List<SignalCommandPO> signalCommandPOS = signalCommandPOMapper.selectList(lambdaQueryWrapper); long start = System.currentTimeMillis(); if (Objects.nonNull(crossLightsStatusMap) && !crossLightsStatusMap.isEmpty()) { List<SignalCommandPO> insertList = new ArrayList<>(); List<SignalCommandPO> updateList = new ArrayList<>(); for (Map.Entry<String, SignalCommandPO> entry : crossLightsStatusMap.entrySet()) { try { String crossId = entry.getKey(); SignalCommandPO statusRunModelCache = entry.getValue(); Integer statusCache = statusRunModelCache.getStatus(); String runModeCache = statusRunModelCache.getRunMode(); String lampTime = statusRunModelCache.getLampTime(); if (!CollectionUtils.isEmpty(signalCommandPOS)) { Map<String, SignalCommandPO> command4DBMap = signalCommandPOS.stream().collect(Collectors.toMap(SignalCommandPO::getCrossId, signalCommandPO -> signalCommandPO)); if (command4DBMap.containsKey(crossId)) { SignalCommandPO updatePO = command4DBMap.get(crossId); Integer status4DB = updatePO.getStatus(); String runMode4DB = updatePO.getRunMode(); if (Objects.equals(status4DB, statusCache) && StringUtils.equals(runMode4DB, runModeCache)) { // 路口编号 状态 控制模式相同,不更新 continue; } else { updatePO.setStatus(statusCache); updatePO.setRunMode(runModeCache); updatePO.setUpdateTime(new Date()); updatePO.setLampTime(lampTime); updateList.add(updatePO); } } else { // 表中没有当前路口插入数据 insertList.add(insertSignalCommandPO(crossId, statusCache, runModeCache, lampTime)); } } else { // 表中一条数据没有,插入路口 insertList.add(insertSignalCommandPO(crossId, statusCache, runModeCache, lampTime)); log.error("路口灯态缓存为空:{}", crossLightsStatusMap); } } catch (Exception e) { log.error("路口在线状态控制模式更新失败,路口编号信息:{}", entry, e); } } saveAndUpdate(insertList, updateList); LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper2 = new LambdaQueryWrapper(); List<SignalCommandPO> listUpdated = signalCommandPOMapper.selectList(lambdaQueryWrapper2); if (!CollectionUtils.isEmpty(listUpdated)) { for (SignalCommandPO signalCommandPO : listUpdated) { String crossId = signalCommandPO.getCrossId(); signalStatusRunModelMap.put(crossId, signalCommandPO); } } sendAlarmKafka(listUpdated); } else { log.error("从路口灯态缓存获取控制模式在线离线状态为空:{}", crossLightsStatusMap); } long end = System.currentTimeMillis(); log.info("SignalCommandSyncTask 定时任务执行时间: {} ms",end - start); } catch (Exception e) { log.error("信号机状态同步异常:", e); } } @Transactional(rollbackFor = Exception.class) public void saveAndUpdate(List<SignalCommandPO> insertList, List<SignalCommandPO> updateList) { try { if (!CollectionUtils.isEmpty(insertList)) { signalCommandPOMapper.insertBatch(insertList); List<SignalCommandLogPO> signalCommandLogPOS = new ArrayList<>(insertList.size()); BeanListUtils.populateList(insertList, signalCommandLogPOS, SignalCommandLogPO.class); signalCommandLogPOMapper.insertBatch(signalCommandLogPOS); } if (!CollectionUtils.isEmpty(updateList)) { signalCommandPOMapper.updateBatch(updateList); List<SignalCommandLogPO> signalCommandLogPOS = new ArrayList<>(updateList.size()); BeanListUtils.populateList(updateList, signalCommandLogPOS, SignalCommandLogPO.class); signalCommandLogPOMapper.insertBatch(signalCommandLogPOS); log.info("路口状态控制模式变动,数据库更新成功:{}", updateList); } } catch (Exception e) { log.error("路口状态控制模式变动,数据库更新失败:", e); throw new RuntimeException(e); } } private static SignalCommandPO insertSignalCommandPO(String crossId, Integer statusCache, String runModeCache, String lampTime) { SignalCommandPO insertPO = new SignalCommandPO(); insertPO.setCrossId(crossId); insertPO.setStatus(statusCache); insertPO.setRunMode(runModeCache); insertPO.setInsertTime(new Date()); insertPO.setLampTime(lampTime); return insertPO; } private void sendAlarmKafka(List<SignalCommandPO> signalCommandPOS) throws Exception { List<LightStatusAlarmDTO> lightStatusAlarmDTOS = new ArrayList<>(); try { if (!CollectionUtils.isEmpty(signalCommandPOS)) { for (SignalCommandPO signalCommandPO : signalCommandPOS) { LightStatusAlarmDTO dto = new LightStatusAlarmDTO(); dto.setCrossId(signalCommandPO.getCrossId()); dto.setCommandMsg(signalCommandPO.getResultMessage()); dto.setCommandResult(signalCommandPO.getCommandResult()); dto.setCount(signalCommandPO.getUpdateCount()); dto.setStatus(signalCommandPO.getStatus()); dto.setRunMode(signalCommandPO.getRunMode()); dto.setMachineTimestamp(signalCommandPO.getLampTime()); Date date = DateUtils.stringToDate(signalCommandPO.getQueryTime(), DateStyle.YYYY_MM_DD_HH_MM_SS.getValue()); dto.setRequestTime(date); dto.setDbTime(signalCommandPO.getUpdateTime()); lightStatusAlarmDTOS.add(dto); } } producerHandler.send("light_status_alarm", lightStatusAlarmDTOS); } catch (Exception e) { log.error("灯态告警推送kafka失败:", e); throw new RuntimeException(e); } } } package net.wanji.utc.task; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import lombok.extern.slf4j.Slf4j;import net.wanji.common.utils.tool.BeanListUtils;import net.wanji.databus.dao.entity.SignalCommandLogPO;import net.wanji.databus.dao.entity.SignalCommandPO;import net.wanji.databus.dao.mapper.SignalCommandLogPOMapper;import net.wanji.databus.dao.mapper.SignalCommandPOMapper;import net.wanji.utc.common.typeenum.DateStyle;import net.wanji.utc.dto.LightStatusAlarmDTO;import net.wanji.utc.kafka.ProducerHandler;import net.wanji.utc.util.DateUtils;import net.wanji.utc.util.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Profile;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import org.springframework.util.CollectionUtils; import javax.annotation.Resource;import java.util.*;import java.util.concurrent.ConcurrentHashMap;import java.util.stream.Collectors; /** * @author duanruiming * @date 2024/12/26 10:33 * @description 信号命令日志同步 *///@Component @Slf4j @Profile("docker") public class SignalCommandSyncTask { @Resource private SignalCommandPOMapper signalCommandPOMapper; @Resource SignalCommandLogPOMapper signalCommandLogPOMapper; @Autowired private ProducerHandler producerHandler; /** * 信号机状态控制模式缓存,更新数据库后查询 */ public static Map<String, SignalCommandPO> signalStatusRunModelMap = new HashMap<>(); @Scheduled(fixedRate = 5 * 1000, initialDelay = 30 * 1000) public void sync() { try { ConcurrentHashMap<String, SignalCommandPO> crossLightsStatusMap = SignalStatusTask.crossLightsStatusMap; LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper = new LambdaQueryWrapper(); List<SignalCommandPO> signalCommandPOS = signalCommandPOMapper.selectList(lambdaQueryWrapper); long start = System.currentTimeMillis(); if (Objects.nonNull(crossLightsStatusMap) && !crossLightsStatusMap.isEmpty()) { List<SignalCommandPO> insertList = new ArrayList<>(); List<SignalCommandPO> updateList = new ArrayList<>(); for (Map.Entry<String, SignalCommandPO> entry : crossLightsStatusMap.entrySet()) { try { String crossId = entry.getKey(); SignalCommandPO statusRunModelCache = entry.getValue(); Integer statusCache = statusRunModelCache.getStatus(); String runModeCache = statusRunModelCache.getRunMode(); String lampTime = statusRunModelCache.getLampTime(); if (!CollectionUtils.isEmpty(signalCommandPOS)) { Map<String, SignalCommandPO> command4DBMap = signalCommandPOS.stream().collect(Collectors.toMap(SignalCommandPO::getCrossId, signalCommandPO -> signalCommandPO)); if (command4DBMap.containsKey(crossId)) { SignalCommandPO updatePO = command4DBMap.get(crossId); Integer status4DB = updatePO.getStatus(); String runMode4DB = updatePO.getRunMode(); if (Objects.equals(status4DB, statusCache) && StringUtils.equals(runMode4DB, runModeCache)) { // 路口编号 状态 控制模式相同,不更新 continue; } else { updatePO.setStatus(statusCache); updatePO.setRunMode(runModeCache); updatePO.setUpdateTime(new Date()); updatePO.setLampTime(lampTime); updateList.add(updatePO); } } else { // 表中没有当前路口插入数据 insertList.add(insertSignalCommandPO(crossId, statusCache, runModeCache, lampTime)); } } else { // 表中一条数据没有,插入路口 insertList.add(insertSignalCommandPO(crossId, statusCache, runModeCache, lampTime)); log.error("路口灯态缓存为空:{}", crossLightsStatusMap); } } catch (Exception e) { log.error("路口在线状态控制模式更新失败,路口编号信息:{}", entry, e); } } saveAndUpdate(insertList, updateList); LambdaQueryWrapper<SignalCommandPO> lambdaQueryWrapper2 = new LambdaQueryWrapper(); List<SignalCommandPO> listUpdated = signalCommandPOMapper.selectList(lambdaQueryWrapper2); if (!CollectionUtils.isEmpty(listUpdated)) { for (SignalCommandPO signalCommandPO : listUpdated) { String crossId = signalCommandPO.getCrossId(); signalStatusRunModelMap.put(crossId, signalCommandPO); } } sendAlarmKafka(listUpdated); } else { log.error("从路口灯态缓存获取控制模式在线离线状态为空:{}", crossLightsStatusMap); } long end = System.currentTimeMillis(); log.info("SignalCommandSyncTask 定时任务执行时间: {} ms",end - start); } catch (Exception e) { log.error("信号机状态同步异常:", e); } } @Transactional(rollbackFor = Exception.class) public void saveAndUpdate(List<SignalCommandPO> insertList, List<SignalCommandPO> updateList) { try { if (!CollectionUtils.isEmpty(insertList)) { signalCommandPOMapper.insertBatch(insertList); List<SignalCommandLogPO> signalCommandLogPOS = new ArrayList<>(insertList.size()); BeanListUtils.populateList(insertList, signalCommandLogPOS, SignalCommandLogPO.class); signalCommandLogPOMapper.insertBatch(signalCommandLogPOS); } if (!CollectionUtils.isEmpty(updateList)) { signalCommandPOMapper.updateBatch(updateList); List<SignalCommandLogPO> signalCommandLogPOS = new ArrayList<>(updateList.size()); BeanListUtils.populateList(updateList, signalCommandLogPOS, SignalCommandLogPO.class); signalCommandLogPOMapper.insertBatch(signalCommandLogPOS); log.info("路口状态控制模式变动,数据库更新成功:{}", updateList); } } catch (Exception e) { log.error("路口状态控制模式变动,数据库更新失败:", e); throw new RuntimeException(e); } } private static SignalCommandPO insertSignalCommandPO(String crossId, Integer statusCache, String runModeCache, String lampTime) { SignalCommandPO insertPO = new SignalCommandPO(); insertPO.setCrossId(crossId); insertPO.setStatus(statusCache); insertPO.setRunMode(runModeCache); insertPO.setInsertTime(new Date()); insertPO.setLampTime(lampTime); return insertPO; } private void sendAlarmKafka(List<SignalCommandPO> signalCommandPOS) throws Exception { List<LightStatusAlarmDTO> lightStatusAlarmDTOS = new ArrayList<>(); try { if (!CollectionUtils.isEmpty(signalCommandPOS)) { for (SignalCommandPO signalCommandPO : signalCommandPOS) { LightStatusAlarmDTO dto = new LightStatusAlarmDTO(); dto.setCrossId(signalCommandPO.getCrossId()); dto.setCommandMsg(signalCommandPO.getResultMessage()); dto.setCommandResult(signalCommandPO.getCommandResult()); dto.setCount(signalCommandPO.getUpdateCount()); dto.setStatus(signalCommandPO.getStatus()); dto.setRunMode(signalCommandPO.getRunMode()); dto.setMachineTimestamp(signalCommandPO.getLampTime()); Date date = DateUtils.stringToDate(signalCommandPO.getQueryTime(), DateStyle.YYYY_MM_DD_HH_MM_SS.getValue()); dto.setRequestTime(date); dto.setDbTime(signalCommandPO.getUpdateTime()); lightStatusAlarmDTOS.add(dto); } } producerHandler.send("light_status_alarm", lightStatusAlarmDTOS); } catch (Exception e) { log.error("灯态告警推送kafka失败:", e); throw new RuntimeException(e); } } }
\ No newline at end of file \ No newline at end of file
......
...@@ -18,7 +18,7 @@ public class SchemePhaseGreenTimeOptVO { ...@@ -18,7 +18,7 @@ public class SchemePhaseGreenTimeOptVO {
@ApiModelProperty(name = "路口ID",notes = "") @ApiModelProperty(name = "路口ID",notes = "")
private String crossId; private String crossId;
@ApiModelProperty(name = "原方案ID",notes = "") @ApiModelProperty(name = "原方案ID",notes = "")
private Integer schemeId; private Integer schemeNo;
@ApiModelProperty(value = "优化模式 0-信控调优平台优化") @ApiModelProperty(value = "优化模式 0-信控调优平台优化")
private Integer optType; private Integer optType;
@ApiModelProperty(value = "周期") @ApiModelProperty(value = "周期")
......
...@@ -15,4 +15,4 @@ spring: ...@@ -15,4 +15,4 @@ spring:
password: Nacos@2025 password: Nacos@2025
inforsuite: inforsuite:
license-path: D:\\license license-path: /license
\ No newline at end of file \ No newline at end of file
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