Commit d0734422 authored by zhouleilei's avatar zhouleilei

Merge remote-tracking branch 'origin/jinan-signal-opt-v1-20250304' into...

Merge remote-tracking branch 'origin/jinan-signal-opt-v1-20250304' into jinan-signal-opt-v1-20250304
parents cd9979a5 2a4ab8e5
package net.wanji.utc.dto.ring;
import lombok.Data;
/**
* @author duanruiming
* @date 2025/03/28 14:41
*/
@Data
public class RingPhaseInfoDTO {
private Integer phaseId;
private Integer phaseTime;
private Integer redTime;
private Integer yellowTime;
private Integer greenTime;
private Integer minGTime;
private Integer maxGTime;
private Integer direction;
private Integer channel;
private Integer concurrent;
private Integer phaseStatus;
}
......@@ -245,7 +245,7 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe
CrossSchemeRings crossSchemeRings = mapper.convertValue(jsonViewObject.getContent(), CrossSchemeRings.class); // CrossSchemeRings
redisUtil.setHash("utc_scheme_offset", crossId, mapper.writeValueAsString(crossSchemeRings));
} catch (Exception e) {
log.error("方案换图请求存储redis失败:", e);
log.error("方案换图请求存储redis失败:{}", e);
throw new RuntimeException(e);
}
......
package net.wanji.utc.task;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.CrossSchemeRings;
import net.wanji.feign.service.common.FeignCommon;
import net.wanji.utc.cache.CrossInfoCache;
import net.wanji.utc.cache.UtcFeignClientCache;
import net.wanji.utc.dto.ring.RingPhaseInfoDTO;
import net.wanji.utc.util.RedisUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author duanruiming
* @date 2025/03/26 10:00
* @description 每半小时同步海信信号机方案环图请求
*/
@Component
@Slf4j
public class HisenseSchemeRingTask {
@Resource
private RedisUtil redisUtil;
@Resource
private CrossInfoCache crossInfoCache;
@Resource
private UtcFeignClientCache utcFeignClientCache;
@Scheduled(fixedRate = 1000, initialDelay = 30 * 1000)
public void getSchemeRing() throws Exception {
List<CrossInfoPO> crossInfoList = CrossInfoCache.crossInfoList;
ObjectMapper mapper = JacksonUtils.getInstance();
if (!CollectionUtils.isEmpty(crossInfoList)) {
List<CrossInfoPO> collect = crossInfoList.stream().filter(po -> Objects.equals(22, po.getManufacturerId())).collect(Collectors.toList());
List<CrossInfoPO> testList = crossInfoList.stream().filter(po -> Objects.equals("13MOD0B5SI0", po.getId())).collect(Collectors.toList());
for (CrossInfoPO crossInfoPO : testList) {
String crossId = crossInfoPO.getId();
String manufacturerCode = crossInfoCache.getManufacturerCodeByCrossId(crossId);
FeignCommon utcFeignClientService = utcFeignClientCache.getUtcFeignClientService(manufacturerCode);
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(crossId);
JsonViewObject jsonViewObject = null;
try {
jsonViewObject = utcFeignClientService.crossSchemeRings(crossSchemeRingsDTO);
log.info("方案环图请求,crossId:{}, result:{}", crossId, jsonViewObject);
if (Objects.nonNull(jsonViewObject) && Objects.equals(200, jsonViewObject.getCode())) {
Object content = jsonViewObject.getContent();
String contentStr = mapper.writeValueAsString(content);
CrossSchemeRings crossSchemeRings = mapper.convertValue(jsonViewObject.getContent(), CrossSchemeRings.class);
if (Objects.nonNull(crossSchemeRings)) {
String code = crossSchemeRings.getSpot();
String schemeNo = crossSchemeRings.getPattern();
String cycleLen = crossSchemeRings.getCycleLen();
String offset = crossSchemeRings.getOffset();
String ringCount = crossSchemeRings.getRingCount();
JSONObject cycleList = crossSchemeRings.getCycleList();
// 中间容器 环号-相位号列表
Map<Integer, List<Integer>> ringPhaseMap = new HashMap<>();
for (Map.Entry<String, Object> jsonEntry : cycleList.entrySet()) {
String ringNoStr = jsonEntry.getKey();
String ringNo = "";
String value = (String) jsonEntry.getValue();
List<Integer> phaseList = new ArrayList<>();
if (StringUtils.isNotBlank(ringNoStr) && StringUtils.isNotBlank(value)) {
ringNo = ringNoStr.replaceAll("Cycle", "");
String tempStr = value.replaceAll("_", " ");
String[] tempList = tempStr.split(" ");
for (String s : tempList) {
phaseList.add(Integer.valueOf(s));
}
}
ringPhaseMap.put(Integer.valueOf(ringNo), phaseList);
}
List<CrossSchemeRings.Phase> phaseList = crossSchemeRings.getPhaseList();
if (!CollectionUtils.isEmpty(phaseList)) {
List<Integer> greenTime = new ArrayList<>();
List<Integer> yellowTime = new ArrayList<>();
List<Integer> redTime = new ArrayList<>();
List<Integer> maxGTime = new ArrayList<>();
List<Integer> minGTime = new ArrayList<>();
List<Integer> direction = new ArrayList<>();
List<Integer> channelDim = new ArrayList<>();
List<Integer> concurrent = new ArrayList<>();
for (CrossSchemeRings.Phase phase : phaseList) {
String greenTimeStr = phase.getGreenTime();
String yellowTimeStr = phase.getYellowTime();
String redTimeStr = phase.getRedTime();
String maxGTimeStr = phase.getMaxGTime();
String minGTimeStr = phase.getMinGTime();
String directionStr = phase.getDirection();
String channelDimStr = phase.getChannelDim();
String concurrentStr = phase.getConcurrent();
greenTime = getListInt(greenTimeStr);
yellowTime = getListInt(yellowTimeStr);
redTime = getListInt(redTimeStr);
maxGTime = getListInt(maxGTimeStr);
minGTime = getListInt(minGTimeStr);
direction = getListInt(directionStr);
channelDim = getListInt(channelDimStr);
concurrent = getListInt(concurrentStr);
}
List<RingPhaseInfoDTO> RingPhaseInfoDTOS = new ArrayList<RingPhaseInfoDTO>(16);
for (int i = 0; i < 16; i++) {
RingPhaseInfoDTO ringPhaseInfoDTO = new RingPhaseInfoDTO();
ringPhaseInfoDTO.setPhaseId(i);
}
}
}
//redisUtil.setHash("utc_scheme_offset", crossId, mapper.writeValueAsString(crossSchemeRings));
} else {
log.error("海信环图请求异常:{}", jsonViewObject);
}
} catch (Exception e) {
log.error("远程调用海信环图请求失败:{}", e);
}
}
}
}
private List<Integer> getListInt(String str) {
List<Integer> list = new ArrayList<>();
if (StringUtils.isNotBlank(str)) {
String[] s = str.split(" ");
for (String s1 : s) {
list.add(Integer.valueOf(s1));
}
}
return list;
}
}
......@@ -58,7 +58,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @author Kent HAN
* @date 2022/11/21 9:01
*/
@Component
//@Component
@Slf4j
@SuppressWarnings("all")
public class SignalStatusTask {
......
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