Commit 2f5ddba9 authored by duanruiming's avatar duanruiming

[update] 优化代码3,优化灯态定时任务程序可读性

parent 90ef44c4
......@@ -11,7 +11,6 @@ import net.wanji.databus.dao.mapper.CrossLightsStatusHistMapper;
import net.wanji.databus.dao.mapper.ManufacturerInfoMapper;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.ManufacturerInfoPO;
import net.wanji.databus.po.SignalStatusLogPO;
import net.wanji.databus.vo.LightsStatusVO;
import net.wanji.databus.vo.LightsStatusVO2;
import net.wanji.feign.service.UtcDTFeignClients;
......@@ -75,7 +74,7 @@ public class SignalStatusTask {
// 运行状态、告警,1分钟一次
@Scheduled(fixedRate = 60 * 1000)
public void runningStatusAlarm() throws Exception {
List<SignalStatusLogPO> signalStatusLogPOS = signalStatusService.runningStatusAlarm();
signalStatusService.runningStatusAlarm();
}
// 灯态,每秒一次
......@@ -89,38 +88,39 @@ public class SignalStatusTask {
//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>>() {});
} else if (StringUtils.endsWithIgnoreCase("STATIC", manufacturerInfoPO.getCode())) {
LightsStatusVO lightsStatusVO = SignalStatus4StaticSchemeTask.currentCrossLightStatusCache.get(crossId);
if (Objects.nonNull(lightsStatusVO)) {
lightsStatusVOS = new ArrayList<>();
lightsStatusVOS.add(lightsStatusVO);
List<LightsStatusVO> lightsStatusVOS = getLightsStatusVOS(mapper, crossId, crossInfoPO);
saveAndSendLightsStatus(mapper, crossId, lightsStatusVOS, entry);
//});
}
sendKafka();
}
} catch (Exception e) {
log.error("获取厂商灯态异常", e);
log.error("实时推送灯态数据失败", e);
}
}
/**
* 保存灯态数据并发送
*
* @param mapper
* @param crossId
* @param lightsStatusVOS
*/
private void saveAndSendLightsStatus(ObjectMapper mapper, String crossId, List<LightsStatusVO> lightsStatusVOS,
Map.Entry<String, List<Map.Entry<String, RealTimeDataWebSocket>>> entry) {
List<Map.Entry<String, RealTimeDataWebSocket>> value = entry.getValue();
if (!CollectionUtils.isEmpty(lightsStatusVOS)) {
for (LightsStatusVO lightsStatusVO : lightsStatusVOS) {
if (Objects.nonNull(lightsStatusVO) && Objects.equals(lightsStatusVO.getCrossId(), crossId)) {
calculateControlCountDown(crossId, lightsStatusVO);
try { // 相同路口不同websocket统一发送灯态
try {
// 相同路口不同websocket统一发送灯态
List<LightsStatusVO2> listResult = lightsStatusVOCopy(lightsStatusVOS);
String json = mapper.writeValueAsString(listResult);
for (Map.Entry<String, RealTimeDataWebSocket> socketEntry : value) {
......@@ -134,15 +134,46 @@ public class SignalStatusTask {
log.error("RealTimeDataWebSocket发送异常,异常信息:", e);
}
}
produceListMap.remove(crossId);
}
}
//});
}
sendKafka();
/**
* 获取不同厂商的灯态列表
*
* @param mapper
* @param crossId
* @param manufacturerInfoPO
* @return
*/
private List<LightsStatusVO> getLightsStatusVOS(ObjectMapper mapper, String crossId, CrossInfoPO crossInfoPO) {
try {
ManufacturerInfoPO manufacturerInfoPO = manufacturerInfoMapper.selectById(crossInfoPO.getManufacturerId());
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerInfoPO.getCode())) {
return hkLightsStatusService.getHkLightsStatus(crossId);
}
if (StringUtils.equals(BasicEnum.ManufacturerEnum.DT.getCode(), manufacturerInfoPO.getCode())) {
JsonViewObject jsonViewObject = utcDTFeignClients.lightStatus(crossId);
return mapper.convertValue(jsonViewObject.getContent(), new TypeReference<List<LightsStatusVO>>() {});
}
if (StringUtils.endsWithIgnoreCase(BasicEnum.ManufacturerEnum.HISENSE.getCode(), manufacturerInfoPO.getCode())) {
JsonViewObject jsonViewObject = utcHisenseFeignClients.lightStatus(crossId);
return mapper.convertValue(jsonViewObject.getContent(), new TypeReference<List<LightsStatusVO>>() {});
}
if (StringUtils.endsWithIgnoreCase("STATIC", manufacturerInfoPO.getCode())) {
LightsStatusVO lightsStatusVO = SignalStatus4StaticSchemeTask.currentCrossLightStatusCache.get(crossId);
List<LightsStatusVO> lightsStatusVOS = new ArrayList<>();
if (Objects.nonNull(lightsStatusVO)) {
lightsStatusVOS.add(lightsStatusVO);
}
return lightsStatusVOS;
}
} catch (Exception e) {
log.error("实时推送灯态数据失败", e);
log.error("获取当前厂商路口编号[{}]灯态异常", crossId, e);
}
return Collections.emptyList();
}
private static List<LightsStatusVO2> lightsStatusVOCopy(List<LightsStatusVO> lightsStatusVOS) throws Exception {
......@@ -245,6 +276,11 @@ public class SignalStatusTask {
Constants.controlModeMap.put(crossId, lightsStatusVO.getRunMode());
}
/**
* 不同系统获取统一路口灯态,统一处理
* @param evenWarnWebSocketMap
* @return
*/
private static Map<String, List<Map.Entry<String, RealTimeDataWebSocket>>> getCrossEntryMap(ConcurrentHashMap<String, RealTimeDataWebSocket> evenWarnWebSocketMap) {
Map<String, List<Map.Entry<String, RealTimeDataWebSocket>>> tempMap = new ConcurrentHashMap<>();
for (Map.Entry<String, RealTimeDataWebSocket> item : evenWarnWebSocketMap.entrySet()) {
......
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