Commit 1e676e4c authored by duanruiming's avatar duanruiming

[update] 信号机状态,实时灯态

parent f2972a92
package net.wanji.com.cache;
import net.wanji.com.pojo.dtconvert.PhaseInfoPojo;
import net.wanji.com.pojo.dtconvert.PhaseStageInfoPojo;
import net.wanji.com.pojo.dtconvert.SchemeInfoPojo;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author duanruiming
* @date 2023/06/19 15:28
*/
@Component
public class SignalDataCache {
public static final Map<String, List<SchemeInfoPojo>> schemeInfoCache = new HashMap<>();
public static final Map<String, List<PhaseStageInfoPojo>> phaseStageInfoCache = new HashMap<>();
public static final Map<String, List<PhaseInfoPojo>> phaseInfoCache = new HashMap<>();
}
...@@ -23,13 +23,13 @@ public class Constants { ...@@ -23,13 +23,13 @@ public class Constants {
public static final String COMMAND_LIGHT_CONFIG = "0302"; public static final String COMMAND_LIGHT_CONFIG = "0302";
public static final String COMMAND_LIGHT_STATUS = "0303"; public static final String COMMAND_LIGHT_STATUS = "0303";
public static final String COMMAND_PHASE_STAGE_CONFIG = "0602"; public static final String COMMAND_PHASE_STAGE_CONFIG = "0602";
public static final String COMMAND_PHASE_STAGE_STATUS= "0603";
public static final String COMMAND_SCHME_CONFIG = "0902"; public static final String COMMAND_SCHME_CONFIG = "0902";
public static final String COMMAND_DAILYPLAN_CONFIG = "0b02"; public static final String COMMAND_DAILYPLAN_CONFIG = "0b02";
public static final String COMMAND_SCHEDULE_CONFIG = "0c02"; public static final String COMMAND_SCHEDULE_CONFIG = "0c02";
public static final String COMMAND_DEVICE_STATUS = "0d01";
public static final String COMMAND_RUNNING_STATUS = "0d02"; public static final String COMMAND_RUNNING_STATUS = "0d02";
public static final String COMMAND_FAULT_LIST = "1002"; public static final String COMMAND_FAULT_LIST = "1001";
/** /**
* 通过发送报文内容,添加报文长度,crc校验,报文头尾 * 通过发送报文内容,添加报文长度,crc校验,报文头尾
......
...@@ -11,13 +11,14 @@ import org.apache.commons.lang3.StringUtils; ...@@ -11,13 +11,14 @@ import org.apache.commons.lang3.StringUtils;
public enum CommandResultSign { public enum CommandResultSign {
HEARTBEAT("80", "heartBeatService"), HEARTBEAT("80", "heartBeatService"),
GET_DEVICE_INFO("2001", "getDeviceInfoService"), GET_DEVICE_INFO("0d0120", "getDeviceInfoService"),
GET_SIGNAL_BASE_INFO("2002","getBaseInfoService"), GET_SIGNAL_BASE_INFO("2002","getBaseInfoService"),
GET_LIGHTS_GROUP_INFO("030220", "getLightsGroupInfoService"), GET_LIGHTS_GROUP_INFO("030220", "getLightsGroupInfoService"),
GET_LIGHTS_STATUS_INFO("030320", "getLightsStatusInfoService"), GET_LIGHTS_STATUS_INFO("030320", "getLightsStatusInfoService"),
GET_PHASE_INFO("040220", "getPhaseInfoService"), GET_PHASE_INFO("040220", "getPhaseInfoService"),
GET_DETECTOR_INFO("2005", "getDetectorInfoService"), GET_DETECTOR_INFO("2005", "getDetectorInfoService"),
GET_STAGE_INFO("060220", "getStageInfoService"), GET_STAGE_INFO("060220", "getStageInfoService"),
GET_STAGE_STATUS("060320", "getStageStatusService"),
GET_PHASE_SECURITY_INFO("2007", "getPhaseSecurityInfoService"), GET_PHASE_SECURITY_INFO("2007", "getPhaseSecurityInfoService"),
GET_SCHEME_INFO("090220", "getSchemeInfoService"), GET_SCHEME_INFO("090220", "getSchemeInfoService"),
GET_DAILY_PLAN_INFO("0b0220", "getDailyPlanInfoService"), GET_DAILY_PLAN_INFO("0b0220", "getDailyPlanInfoService"),
......
package net.wanji.com.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
/**
* @author duanruiming
* @date 2023/06/19 10:07
*/
@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public enum ControlTypeEnum {
FIXED_CYCLE(1, "0021", "定周期"),
GREEN_WAVE(2, "0032", "全红"),
YELLOW_CONTROL(3, "0031", "黄闪"),
RED_CONTROL(4, "0015", "锁定 --> 中心手动控制"),
CLOSED_CONTROL(5, "0012", "中心优化"),
SELF_CONTROL(6, "0013", "MEC优化"),
FULL_INDUCTION(7, "0021", "现场手动");
private Integer wjControl;
private String dtControlHex;
private String message;
public static Integer getWjControlType(String dtControlHex) {
for (ControlTypeEnum value : ControlTypeEnum.values()) {
if (StringUtils.equals(dtControlHex, value.getDtControlHex())) {
return value.getWjControl();
}
}
return null;
}
}
package net.wanji.com.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
/**
* @author duanruiming
* @date 2023/06/19 16:27
*/
@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public enum PhaseLightColorEnum {
LIGHT_OFF("01", "off", "关灯"),
LIGHT_RED("10", "red", "红灯"),
LIGHT_RED_FLASH("11", "red", "红闪"),
LIGHT_RED_FAST_FLASH("12", "red", "红快闪"),
LIGHT_GREEN("20", "green", "绿灯"),
LIGHT_GREEN_FLASH("21", "green", "绿闪"),
LIGHT_GREEN_FAST_FLASH("22", "green", "率快闪"),
LIGHT_YELLOW("30", "yellow", "黄灯"),
LIGHT_YELLOW_FLASH("31", "yellow", "黄闪"),
LIGHT_YELLOW_FAST_FLASH("32", "yellow", "黄快闪"),
LIGHT_RED_YELLOW("40", "redYellow", "红黄灯");
private String dtLightColor;
private String wjLightColor;
private String message;
public static String getWjLightColor(String dtLightColor) {
for (PhaseLightColorEnum value : PhaseLightColorEnum.values()) {
if (StringUtils.equals(dtLightColor, value.getDtLightColor())) {
return value.getWjLightColor();
}
}
return null;
}
}
...@@ -42,11 +42,9 @@ public class SignalStatusController { ...@@ -42,11 +42,9 @@ public class SignalStatusController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SignalStatusLogPO.class) @ApiResponse(code = 200, message = "OK", response = SignalStatusLogPO.class)
}) })
public JsonViewObject runningStatusAlarm() { public JsonViewObject runningStatusAlarm(String crossId) {
List<SignalStatusLogPO> signalStatusLogPOList = signalStatusService.runningStatusAlarm(); List<SignalStatusLogPO> signalStatusLogPOList = signalStatusService.runningStatusAlarm(crossId);
signalStatusService.runningStatusAlarm("12F7L08J8S0"); return JsonViewObject.newInstance().success(signalStatusLogPOList);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(signalStatusLogPOList);
} }
...@@ -57,8 +55,8 @@ public class SignalStatusController { ...@@ -57,8 +55,8 @@ public class SignalStatusController {
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = LightsStatusVO.class) @ApiResponse(code = 200, message = "OK", response = LightsStatusVO.class)
}) })
public JsonViewObject lightStatus() { public JsonViewObject lightStatus(String crossId) {
List<LightsStatusVO> lightsStatusVOList = signalStatusService.lightStatus(); List<LightsStatusVO> lightsStatusVOList = signalStatusService.lightStatus(crossId);
JsonViewObject jsonViewObject = JsonViewObject.newInstance(); JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(lightsStatusVOList); return jsonViewObject.success(lightsStatusVOList);
} }
......
package net.wanji.com.netty.response.impl.get;
import net.wanji.com.netty.pojo.CommandPojo;
import net.wanji.com.netty.response.CommandResponseFactory;
import org.springframework.stereotype.Service;
/**
* @author duanruiming
* @date 2023/06/19 14:27
*/
@Service
public class GetStageStatusService implements CommandResponseFactory {
@Override
public String getCommandResponse(CommandPojo commandPojo) {
return commandPojo.getResponseMsg();
}
}
package net.wanji.com.pojo.dtconvert;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/06/19 14:29
*/
@Data
public class PhaseStageStatusPojo {
private Integer phaseStageId;
// 10 未放行 20 正在放行 30 过渡
private String phaseStageStatus;
private Integer runningTime;
private Integer remainTime;
}
...@@ -11,8 +11,6 @@ import java.util.List; ...@@ -11,8 +11,6 @@ import java.util.List;
*/ */
public interface SignalStatusService extends BeanMarkService { public interface SignalStatusService extends BeanMarkService {
List<SignalStatusLogPO> runningStatusAlarm();
/** /**
* todo 提供给其他平台,需要确认以厂商还是以路口形式推送数据 * todo 提供给其他平台,需要确认以厂商还是以路口形式推送数据
* *
...@@ -21,7 +19,5 @@ public interface SignalStatusService extends BeanMarkService { ...@@ -21,7 +19,5 @@ public interface SignalStatusService extends BeanMarkService {
*/ */
List<SignalStatusLogPO> runningStatusAlarm(String crossId); List<SignalStatusLogPO> runningStatusAlarm(String crossId);
List<LightsStatusVO> lightStatus();
List<LightsStatusVO> lightStatus(String crossId); List<LightsStatusVO> lightStatus(String crossId);
} }
...@@ -4,6 +4,7 @@ import cn.hutool.core.util.HexUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.util.HexUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.com.cache.CrossInfoCache; import net.wanji.com.cache.CrossInfoCache;
import net.wanji.com.cache.SignalDataCache;
import net.wanji.com.common.constants.Constants; import net.wanji.com.common.constants.Constants;
import net.wanji.com.common.enums.ControlModelEnum; import net.wanji.com.common.enums.ControlModelEnum;
import net.wanji.com.netty.NettyClient; import net.wanji.com.netty.NettyClient;
...@@ -39,6 +40,7 @@ import java.util.stream.Collectors; ...@@ -39,6 +40,7 @@ import java.util.stream.Collectors;
public class DTStaticInfoServiceImpl implements StaticInfoService { public class DTStaticInfoServiceImpl implements StaticInfoService {
private final CrossInfoCache crossInfoCache; private final CrossInfoCache crossInfoCache;
private final SignalDataCache signalDataCache;
@Override @Override
public String getBeanMark() { public String getBeanMark() {
...@@ -189,16 +191,17 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -189,16 +191,17 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
String schemeSign = Constants.COMMAND_SCHME_CONFIG.concat(Constants.COMMAND_QUERY_REPLY); String schemeSign = Constants.COMMAND_SCHME_CONFIG.concat(Constants.COMMAND_QUERY_REPLY);
String schemeHex = Constants.buildMessage(message); String schemeHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), schemeHex, schemeSign, 300); MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), schemeHex, schemeSign, 300);
return getSchemeInfoPojos(resultPojo); return getSchemeInfoPojos(crossInfo, resultPojo);
} }
private List<SchemeInfoPojo> getSchemeInfoPojos(MessageResultPojo resultPojo) { private List<SchemeInfoPojo> getSchemeInfoPojos(CrossInfoPO crossInfo, MessageResultPojo resultPojo) {
List<SchemeInfoPojo> schemeInfoPojos = new ArrayList<>(); List<SchemeInfoPojo> schemeInfoPojos = new ArrayList<>();
if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) { if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) {
String hexMessageResult = resultPojo.getHexMessageResult(); String hexMessageResult = resultPojo.getHexMessageResult();
Map<Integer, List<String>> schemeIdParamMap = getSchemeIdParamMap(hexMessageResult); Map<Integer, List<String>> schemeIdParamMap = getSchemeIdParamMap(hexMessageResult);
schemeInfoPojos = paramMapConvert(schemeIdParamMap); schemeInfoPojos = paramMapConvert(schemeIdParamMap);
} }
SignalDataCache.schemeInfoCache.put(crossInfo.getId(), schemeInfoPojos);
return schemeInfoPojos; return schemeInfoPojos;
} }
...@@ -289,10 +292,10 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -289,10 +292,10 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
String phaseStageSign = Constants.COMMAND_PHASE_STAGE_CONFIG.concat(Constants.COMMAND_QUERY_REPLY); String phaseStageSign = Constants.COMMAND_PHASE_STAGE_CONFIG.concat(Constants.COMMAND_QUERY_REPLY);
String phaseStageHex = Constants.buildMessage(message); String phaseStageHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), phaseStageHex, phaseStageSign, 300); MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), phaseStageHex, phaseStageSign, 300);
return getPhaseStageInfoPojos(resultPojo); return getPhaseStageInfoPojos(crossInfo, resultPojo);
} }
private List<PhaseStageInfoPojo> getPhaseStageInfoPojos(MessageResultPojo resultPojo) { private List<PhaseStageInfoPojo> getPhaseStageInfoPojos(CrossInfoPO crossInfo, MessageResultPojo resultPojo) {
List<PhaseStageInfoPojo> phaseStageInfoPojos = new ArrayList<>(); List<PhaseStageInfoPojo> phaseStageInfoPojos = new ArrayList<>();
if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) { if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) {
String hexMessageResult = resultPojo.getHexMessageResult(); String hexMessageResult = resultPojo.getHexMessageResult();
...@@ -322,6 +325,7 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -322,6 +325,7 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
phaseStageInfoPojos.add(phaseStageInfoPojo); phaseStageInfoPojos.add(phaseStageInfoPojo);
} }
} }
SignalDataCache.phaseStageInfoCache.put(crossInfo.getId(), phaseStageInfoPojos);
return phaseStageInfoPojos; return phaseStageInfoPojos;
} }
...@@ -362,10 +366,10 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -362,10 +366,10 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
String phaseHex = Constants.buildMessage(message); String phaseHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), phaseHex, phaseResultSign, 300); MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), phaseHex, phaseResultSign, 300);
Map<Integer, List<String>> phaseIdParamsMap = getHexPhaseParamMap(resultPojo); Map<Integer, List<String>> phaseIdParamsMap = getHexPhaseParamMap(resultPojo);
return getPhaseInfoPojos(phaseIdParamsMap); return getPhaseInfoPojos(crossInfo, phaseIdParamsMap);
} }
private static List<PhaseInfoPojo> getPhaseInfoPojos(Map<Integer, List<String>> phaseIdParamsMap) { private static List<PhaseInfoPojo> getPhaseInfoPojos(CrossInfoPO crossInfo, Map<Integer, List<String>> phaseIdParamsMap) {
List<PhaseInfoPojo> phaseInfoPojos = new ArrayList<>(); List<PhaseInfoPojo> phaseInfoPojos = new ArrayList<>();
for (Map.Entry<Integer, List<String>> item : phaseIdParamsMap.entrySet()) { for (Map.Entry<Integer, List<String>> item : phaseIdParamsMap.entrySet()) {
PhaseInfoPojo phaseInfoPojo = new PhaseInfoPojo(); PhaseInfoPojo phaseInfoPojo = new PhaseInfoPojo();
...@@ -395,7 +399,9 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -395,7 +399,9 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
} }
} }
// 过滤掉未配置的相位 // 过滤掉未配置的相位
return phaseInfoPojos.stream().filter(phaseInfoPojo -> phaseInfoPojo.getRedTime() != 0).collect(Collectors.toList()); List<PhaseInfoPojo> filter = phaseInfoPojos.stream().filter(phaseInfoPojo -> phaseInfoPojo.getRedTime() != 0).collect(Collectors.toList());
SignalDataCache.phaseInfoCache.put(crossInfo.getId(), filter);
return filter;
} }
private static Map<Integer, List<String>> getHexPhaseParamMap(MessageResultPojo resultPojo) { private static Map<Integer, List<String>> getHexPhaseParamMap(MessageResultPojo resultPojo) {
......
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