Commit a06a8b5c authored by duanruiming's avatar duanruiming

[add] 优化灯态相位;步进恢复逻辑优化

parent 2de1e01e
......@@ -33,7 +33,7 @@ public class CrossPhaseDirTurnCache implements CommandLineRunner {
private final CrossPhaseLightsMapper crossPhaseLightsMapper;
private final CrossLightsMapper crossLightsMapper;
private static final Map<String, List<CrossPhaseDirTurnPojo>> crossInfoMap = new HashMap<>();
public static final Map<String, List<CrossPhaseDirTurnPojo>> crossInfoMap = new HashMap<>();
public static List<CrossPhaseDirTurnPojo> getCrossPhaseDirTurnCache(String crossId) {
if (!crossInfoMap.isEmpty()) {
......
......@@ -13,13 +13,18 @@ import lombok.RequiredArgsConstructor;
import net.wanji.common.annotation.aspect.AspectLog;
import net.wanji.common.enums.BaseEnum;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.dao.entity.CrossLightsPO;
import net.wanji.databus.dto.CrossIdDateTimeDTO;
import net.wanji.databus.po.SignalStatusLogPO;
import net.wanji.databus.vo.LightsStatusVO;
import net.wanji.databus.vo.LightsStatusVO2;
import net.wanji.utc.cache.CrossPhaseDirTurnCache;
import net.wanji.utc.common.constant.Constants;
import net.wanji.utc.po.hk.CrossPhaseDirTurnPojo;
import net.wanji.utc.service.runninginfo.SignalStatusService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -31,6 +36,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 运行状态、告警、灯态信息接口
......@@ -79,6 +85,8 @@ public class SignalStatusController {
@ApiResponse(code = 200, message = "OK", response = LightsStatusVO.class)
})
public JsonViewObject lightStatusV2() throws Exception {
List<LightsStatusVO2> collect = null;
try {
//List<LightsStatusVO> lightsStatusVOList = signalStatusService.lightStatus4StaticScheme();
List<LightsStatusVO> lightsStatusVOList = signalStatusService.lightStatus();
List<LightsStatusVO2> listResult = new ArrayList<>(lightsStatusVOList.size());
......@@ -120,10 +128,118 @@ public class SignalStatusController {
dirList.add(dirInfo);
}
lightsStatusVO2.setDirLampGroupMapList(dirList);
/**
* 处理灯态,获取当前相位号灯态
*/
//if (StringUtils.equals("13N0C0B5P30", lightsStatusVO.getCrossId())) {
List<LightsStatusVO2.DirInfo> curPhaseDirList = getCurPhaseDirList(lightsStatusVO2);
lightsStatusVO2.setCurPhaseLampGroupMapList(curPhaseDirList);
//}
listResult.add(lightsStatusVO2);
}
return JsonViewObject.newInstance().success(listResult);
collect = listResult.stream().filter(vo -> StringUtils.equals(vo.getCrossId(), "13N0C0B5P30")).collect(Collectors.toList());
} catch (Exception e) {
throw new RuntimeException(e);
}
return JsonViewObject.newInstance().success(collect);
}
/**
* 通过当前灯态获取当前相位的灯态方向转向倒计时信息
* @param lightsStatusVO2
* @return
*/
private static List<LightsStatusVO2.DirInfo> getCurPhaseDirList(LightsStatusVO2 lightsStatusVO2) {
List<LightsStatusVO2.DirInfo> curPhaseList = new ArrayList<>();
try {
String crossId = lightsStatusVO2.getCrossId();
String schemeId = lightsStatusVO2.getSchemeId();
String phaseId = lightsStatusVO2.getPhaseId();
List<LightsStatusVO2.DirInfo> dirLampGroupMapList = lightsStatusVO2.getDirLampGroupMapList();
Map<String, List<CrossPhaseDirTurnPojo>> crossInfoMap = CrossPhaseDirTurnCache.crossInfoMap;
if (!crossInfoMap.isEmpty()) {
List<CrossPhaseDirTurnPojo> crossPhaseDirTurnPojos = crossInfoMap.get(crossId);
if (!CollectionUtils.isEmpty(crossPhaseDirTurnPojos)) {
for (CrossPhaseDirTurnPojo crossPhaseDirTurnPojo : crossPhaseDirTurnPojos) {
String curCrossId = crossPhaseDirTurnPojo.getCrossId();
Integer curSchemeNo = crossPhaseDirTurnPojo.getSchemeNo();
Integer curPhaseNo = crossPhaseDirTurnPojo.getPhaseNo();
if (StringUtils.equals(crossId, curCrossId) && Objects.equals(Integer.valueOf(schemeId), curSchemeNo)
&& Objects.equals(Integer.valueOf(phaseId), curPhaseNo)) {
Map<Integer, List<CrossLightsPO>> dirTurnMap = crossPhaseDirTurnPojo.getDirTurnMap();
if (!dirTurnMap.isEmpty()) {
for (Map.Entry<Integer, List<CrossLightsPO>> item : dirTurnMap.entrySet()) {
LightsStatusVO2.DirInfo dirInfo = new LightsStatusVO2.DirInfo();
Integer dir = item.getKey();
List<LightsStatusVO2.TurnInfo> turnList = new ArrayList<>();
List<CrossLightsPO> value = item.getValue();
if (!CollectionUtils.isEmpty(value)) {
for (CrossLightsPO crossLightsPO : value) {
Integer type = crossLightsPO.getType();
Integer curTurn = crossLightsPO.getTurn();
String color = "";
for (LightsStatusVO2.DirInfo info : dirLampGroupMapList) {
String statusDir = info.getDir();
if (StringUtils.equals(statusDir, String.valueOf(dir))) {
List<LightsStatusVO2.TurnInfo> statusTurnList = info.getTurnList();
for (LightsStatusVO2.TurnInfo turnInfo : statusTurnList) {
String statusTurn = turnInfo.getTurn();
if (StringUtils.equals(String.valueOf(curTurn), statusTurn)) {
color = turnInfo.getColor();
}
}
}
}
String turn = "";
// 过滤行人
if (Objects.equals(3, type)) {
continue;
}
if (Objects.equals(2, type)) {
for (int i = 1; i <= 2 ; i++) {
// 设置转向信息
LightsStatusVO2.TurnInfo turnInfo = new LightsStatusVO2.TurnInfo();
turnInfo.setTurn(String.valueOf(i));
turnInfo.setColor(color);
turnInfo.setCountDown(0);
turnList.add(turnInfo);
}
} else if (Objects.equals(1, type)){
turn = String.valueOf(curTurn);
LightsStatusVO2.TurnInfo turnInfo = new LightsStatusVO2.TurnInfo();
turnInfo.setTurn(turn);
turnInfo.setColor(color);
turnInfo.setCountDown(0);
turnList.add(turnInfo);
}
}
}
if (!CollectionUtils.isEmpty(turnList)) {
dirInfo.setDir(String.valueOf(dir));
dirInfo.setTurnList(turnList);
curPhaseList.add(dirInfo);
}
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
//log.error("获取当前相位灯态倒计时失败:", e);
}
return curPhaseList;
}
@AspectLog(description = "灯态数据历史数据列表", operationType = BaseEnum.OperationTypeEnum.QUERY)
@PostMapping(value = "/lightStatusHist", produces = MediaType.APPLICATION_JSON)
......
......@@ -215,7 +215,8 @@ public class CommandFaildTask {
String ip = "localhost";
signalCommandLogPO.setIp(ip);
log.info("定时任务返回 信息jsonViewObject:{}", jsonViewObject);
if (code == 200) {
// 添加恢复逻辑,因为延迟问题,自动恢复四次后认为恢复成功
if (code == 200 && updateCount == 3) {
signalCommandLogPO.setCommandResult(1);
signalCommandLogPO.setUpdateCount(0);
} else {
......
......@@ -5,6 +5,7 @@ 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.databus.dao.entity.CrossLightsPO;
import net.wanji.databus.dao.entity.CrossLightsStatusHistPO;
import net.wanji.databus.dao.entity.SignalCommandLogPO;
import net.wanji.databus.dao.entity.SignalCommandPO;
......@@ -18,9 +19,11 @@ import net.wanji.databus.vo.LightsStatusVO2;
import net.wanji.feign.service.EHualuFeignClients;
import net.wanji.feign.service.UtcDTFeignClients;
import net.wanji.feign.service.UtcHisenseFeignClients;
import net.wanji.utc.cache.CrossPhaseDirTurnCache;
import net.wanji.utc.common.constant.Constants;
import net.wanji.utc.common.typeenum.BasicEnum;
import net.wanji.utc.kafka.ProducerHandler;
import net.wanji.utc.po.hk.CrossPhaseDirTurnPojo;
import net.wanji.utc.service.runninginfo.HkLightsStatusService;
import net.wanji.utc.service.runninginfo.SignalStatusService;
import net.wanji.utc.util.RedisUtil;
......@@ -265,6 +268,13 @@ public class SignalStatusTask {
dirList.add(dirInfo);
}
lightsStatusVO2.setDirLampGroupMapList(dirList);
/**
* 处理灯态,获取当前相位号灯态
*/
List<LightsStatusVO2.DirInfo> curPhaseDirList = getCurPhaseDirList(lightsStatusVO2);
lightsStatusVO2.setCurPhaseLampGroupMapList(curPhaseDirList);
listResult.add(lightsStatusVO2);
}
} catch (Exception e) {
......@@ -274,6 +284,98 @@ public class SignalStatusTask {
return listResult;
}
/**
* 通过当前灯态获取当前相位的灯态方向转向倒计时信息
* @param lightsStatusVO2
* @return
*/
private static List<LightsStatusVO2.DirInfo> getCurPhaseDirList(LightsStatusVO2 lightsStatusVO2) {
List<LightsStatusVO2.DirInfo> curPhaseList = new ArrayList<>();
try {
String crossId = lightsStatusVO2.getCrossId();
String schemeId = lightsStatusVO2.getSchemeId();
String phaseId = lightsStatusVO2.getPhaseId();
List<LightsStatusVO2.DirInfo> dirLampGroupMapList = lightsStatusVO2.getDirLampGroupMapList();
Map<String, List<CrossPhaseDirTurnPojo>> crossInfoMap = CrossPhaseDirTurnCache.crossInfoMap;
if (!crossInfoMap.isEmpty()) {
List<CrossPhaseDirTurnPojo> crossPhaseDirTurnPojos = crossInfoMap.get(crossId);
if (!CollectionUtils.isEmpty(crossPhaseDirTurnPojos)) {
for (CrossPhaseDirTurnPojo crossPhaseDirTurnPojo : crossPhaseDirTurnPojos) {
String curCrossId = crossPhaseDirTurnPojo.getCrossId();
Integer curSchemeNo = crossPhaseDirTurnPojo.getSchemeNo();
Integer curPhaseNo = crossPhaseDirTurnPojo.getPhaseNo();
if (StringUtils.equals(crossId, curCrossId) && Objects.equals(Integer.valueOf(schemeId), curSchemeNo)
&& Objects.equals(Integer.valueOf(phaseId), curPhaseNo)) {
Map<Integer, List<CrossLightsPO>> dirTurnMap = crossPhaseDirTurnPojo.getDirTurnMap();
if (!dirTurnMap.isEmpty()) {
for (Map.Entry<Integer, List<CrossLightsPO>> item : dirTurnMap.entrySet()) {
LightsStatusVO2.DirInfo dirInfo = new LightsStatusVO2.DirInfo();
Integer dir = item.getKey();
List<LightsStatusVO2.TurnInfo> turnList = new ArrayList<>();
List<CrossLightsPO> value = item.getValue();
if (!CollectionUtils.isEmpty(value)) {
for (CrossLightsPO crossLightsPO : value) {
Integer type = crossLightsPO.getType();
Integer curTurn = crossLightsPO.getTurn();
String color = "";
for (LightsStatusVO2.DirInfo info : dirLampGroupMapList) {
String statusDir = info.getDir();
if (StringUtils.equals(statusDir, String.valueOf(dir))) {
List<LightsStatusVO2.TurnInfo> statusTurnList = info.getTurnList();
for (LightsStatusVO2.TurnInfo turnInfo : statusTurnList) {
String statusTurn = turnInfo.getTurn();
if (StringUtils.equals(String.valueOf(curTurn), statusTurn)) {
color = turnInfo.getColor();
}
}
}
}
String turn = "";
// 过滤行人
if (Objects.equals(3, type)) {
continue;
}
if (Objects.equals(2, type)) {
for (int i = 1; i <= 2 ; i++) {
// 设置转向信息
LightsStatusVO2.TurnInfo turnInfo = new LightsStatusVO2.TurnInfo();
turnInfo.setTurn(String.valueOf(i));
turnInfo.setColor(color);
turnInfo.setCountDown(0);
turnList.add(turnInfo);
}
} else if (Objects.equals(1, type)){
turn = String.valueOf(curTurn);
LightsStatusVO2.TurnInfo turnInfo = new LightsStatusVO2.TurnInfo();
turnInfo.setTurn(turn);
turnInfo.setColor(color);
turnInfo.setCountDown(0);
turnList.add(turnInfo);
}
}
}
if (!CollectionUtils.isEmpty(turnList)) {
dirInfo.setDir(String.valueOf(dir));
dirInfo.setTurnList(turnList);
curPhaseList.add(dirInfo);
}
}
}
}
}
}
}
} catch (Exception e) {
log.error("获取当前相位灯态倒计时失败:", e);
}
return curPhaseList;
}
/**
* 设置方向转向信息实体
*
......
package net.wanji.databus.dao.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
......@@ -13,6 +14,8 @@ public class CrossLightsStatusHistPO {
private String crossId;
private Integer batchTime;
private String lightsStatusJson;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gmtCreate;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gmtModified;
}
......@@ -38,6 +38,8 @@ public class LightsStatusVO2 extends BaseCrossInfo {
private String schemeId;
@ApiModelProperty(value = "灯组状态")
private List<DirInfo> dirLampGroupMapList;
@ApiModelProperty(value = "当前相位灯组状态")
private List<DirInfo> curPhaseLampGroupMapList;
@ApiModelProperty(value = "数据上报时间戳")
@Field(type = FieldType.Keyword, name = "timeStamp")
private String timeStamp;
......
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