Commit c86ce934 authored by duanruiming's avatar duanruiming

[update] 日计划解析

parent 94deae49
...@@ -22,6 +22,9 @@ public class Constants { ...@@ -22,6 +22,9 @@ public class Constants {
public static final String COMMAND_PHASE_CONFIG = "0402"; public static final String COMMAND_PHASE_CONFIG = "0402";
public static final String COMMAND_LIGHT_CONFIG = "0302"; public static final String COMMAND_LIGHT_CONFIG = "0302";
public static final String COMMAND_PHASE_STAGE_CONFIG = "0602"; public static final String COMMAND_PHASE_STAGE_CONFIG = "0602";
public static final String COMMAND_SCHME_CONFIG = "0902";
public static final String COMMAND_DAILYPLAN_CONFIG = "1102";
/** /**
......
...@@ -18,8 +18,8 @@ public enum CommandResultSign { ...@@ -18,8 +18,8 @@ public enum CommandResultSign {
GET_DETECTOR_INFO("2005", "getDetectorInfoService"), GET_DETECTOR_INFO("2005", "getDetectorInfoService"),
GET_STAGE_INFO("060220", "getStageInfoService"), GET_STAGE_INFO("060220", "getStageInfoService"),
GET_PHASE_SECURITY_INFO("2007", "getPhaseSecurityInfoService"), GET_PHASE_SECURITY_INFO("2007", "getPhaseSecurityInfoService"),
GET_SCHEME_INFO("2009", "getSchemeInfoService"), GET_SCHEME_INFO("090220", "getSchemeInfoService"),
GET_DAILY_PLAN_INFO("2011", "getDailyPlanInfoService"), GET_DAILY_PLAN_INFO("110220", "getDailyPlanInfoService"),
GET_SCHEDULES_INFO("2012", "getSchedulesInfoService"), GET_SCHEDULES_INFO("2012", "getSchedulesInfoService"),
GET_RUNNING_STATE_INFO("2013", "getRunningStateInfoService"), GET_RUNNING_STATE_INFO("2013", "getRunningStateInfoService"),
GET_TRAFFIC_DATA_INFO("2014", "getTrafficDataInfoService"), GET_TRAFFIC_DATA_INFO("2014", "getTrafficDataInfoService"),
......
package net.wanji.com.pojo.dtconvert;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/06/14 17:31
*/
@Data
public class DailyPlanInfoPojo {
private Integer dailyPlanId;
private Integer crossId;
private List<String> startTimeChain;
private List<Integer> schemeIdChain;
private List<Integer> controlModelChain;
}
package net.wanji.com.pojo.dtconvert;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2023/06/14 15:39
*/
@Data
public class SchemeInfoPojo {
private Integer schemeId;
// 所属方案序号 一台信号机控制多路口时使用
private Integer crossId;
// 单位s
private Integer cycle;
// 方案协调序号 需要协调的相位序号
private Integer harmonizeId;
private Integer offset;
private List<Integer> phaseList;
private List<Integer> phaseTimeChain;
private List<Integer> phaseTypeChain;
}
...@@ -6,9 +6,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -6,9 +6,7 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.com.cache.CrossInfoCache; import net.wanji.com.cache.CrossInfoCache;
import net.wanji.com.common.constants.Constants; import net.wanji.com.common.constants.Constants;
import net.wanji.com.netty.NettyClient; import net.wanji.com.netty.NettyClient;
import net.wanji.com.pojo.dtconvert.LightsInfoPojo; import net.wanji.com.pojo.dtconvert.*;
import net.wanji.com.pojo.dtconvert.PhaseInfoPojo;
import net.wanji.com.pojo.dtconvert.PhaseStageInfoPojo;
import net.wanji.com.pojo.netty.MessageResultPojo; import net.wanji.com.pojo.netty.MessageResultPojo;
import net.wanji.com.service.controller.StaticInfoService; import net.wanji.com.service.controller.StaticInfoService;
import net.wanji.common.enums.BaseEnum; import net.wanji.common.enums.BaseEnum;
...@@ -56,10 +54,123 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -56,10 +54,123 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
List<PhaseInfoPojo> phaseInfoPojos = getPhaseInfo(crossInfo); List<PhaseInfoPojo> phaseInfoPojos = getPhaseInfo(crossInfo);
List<LightsInfoPojo> lightsInfoPojos = getLightsInfo(crossInfo); List<LightsInfoPojo> lightsInfoPojos = getLightsInfo(crossInfo);
List<PhaseStageInfoPojo> phaseStageInfoPojos = getPhaseStageInfo(crossInfo); List<PhaseStageInfoPojo> phaseStageInfoPojos = getPhaseStageInfo(crossInfo);
List<SchemeInfoPojo> schemeInfoPojos = getSchemeInfo(crossInfo);
List<DailyPlanInfoPojo> dailyPlanInfoPojos = getDailyPlanInfo(crossInfo);
return schemePhaseLightsVO; return schemePhaseLightsVO;
} }
private List<DailyPlanInfoPojo> getDailyPlanInfo(CrossInfoPO crossInfo) {
String message = String.format(Constants.COMMAND_COMMON, Constants.COMMAND_QUERY, Constants.COMMAND_DAILYPLAN_CONFIG);
String dailyPlanSign = Constants.COMMAND_DAILYPLAN_CONFIG.concat(Constants.COMMAND_QUERY_REPLY);
String dailyPlanHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), dailyPlanHex, dailyPlanSign, 300);
return getDailyPlanPojos(resultPojo);
}
private List<DailyPlanInfoPojo> getDailyPlanPojos(MessageResultPojo resultPojo) {
// String body = hexMessageResult.substring(32, hexMessageResult.length() - 2);
// int schemeSize = body.length() / 228;
return null;
}
private List<SchemeInfoPojo> getSchemeInfo(CrossInfoPO crossInfo) {
String message = String.format(Constants.COMMAND_COMMON, Constants.COMMAND_QUERY, Constants.COMMAND_SCHME_CONFIG);
String schemeSign = Constants.COMMAND_SCHME_CONFIG.concat(Constants.COMMAND_QUERY_REPLY);
String schemeHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfo.getIp(), crossInfo.getPort(), schemeHex, schemeSign, 300);
return getSchemeInfoPojos(resultPojo);
}
private List<SchemeInfoPojo> getSchemeInfoPojos(MessageResultPojo resultPojo) {
List<SchemeInfoPojo> schemeInfoPojos = new ArrayList<>();
if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) {
String hexMessageResult = resultPojo.getHexMessageResult();
Map<Integer, List<String>> schemeIdParamMap = getSchemeIdParamMap(hexMessageResult);
schemeInfoPojos = paramMapConvert(schemeIdParamMap);
}
return schemeInfoPojos;
}
private List<SchemeInfoPojo> paramMapConvert(Map<Integer, List<String>> schemeIdParamMap) {
List<SchemeInfoPojo> schemeInfoPojos = new ArrayList<>();
for (Map.Entry<Integer, List<String>> entry : schemeIdParamMap.entrySet()) {
SchemeInfoPojo schemeInfoPojo = new SchemeInfoPojo();
Integer schemeId = entry.getKey();
schemeInfoPojo.setSchemeId(schemeId);
List<String> value = entry.getValue();
schemeInfoPojo.setCrossId(HexUtil.hexToInt(value.get(0)));
schemeInfoPojo.setCycle(HexUtil.hexToInt(value.get(1)));
schemeInfoPojo.setHarmonizeId(HexUtil.hexToInt(value.get(2)));
schemeInfoPojo.setOffset(HexUtil.hexToInt(value.get(3)));
String phaseChainHex = value.get(4);
List<Integer> phaseList = getListFromHex(phaseChainHex, 2, "00");
schemeInfoPojo.setPhaseList(phaseList);
String phaseTimeChainHex = value.get(5);
List<Integer> phaseTimeList = getListFromHex(phaseTimeChainHex, 4, "0000");
schemeInfoPojo.setPhaseTimeChain(phaseTimeList);
String phaseTypeChainHex = value.get(6);
List<Integer> phaseTypeList = getListFromHex(phaseTypeChainHex, 2, "00");
schemeInfoPojo.setPhaseTypeChain(phaseTypeList);
schemeInfoPojos.add(schemeInfoPojo);
}
return schemeInfoPojos.stream().filter(schemeInfoPojo -> schemeInfoPojo.getCycle() != 0).collect(Collectors.toList());
}
/**
* 通用处理字符串多字节转int,固定长度
* 00000000000000000000000008070605 ==> 5 6 7 8
*
* @param hex
* @param offset
* @param ignoreStr
* @return
*/
public static List<Integer> getListFromHex(String hex, int offset, String ignoreStr) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < hex.length() / offset; i++) {
String phaseTypeHex = hex.substring(i * offset, i * offset + offset);
if (!StringUtils.equals(ignoreStr, phaseTypeHex)) {
list.add(HexUtil.hexToInt(phaseTypeHex));
}
}
return list;
}
private static Map<Integer, List<String>> getSchemeIdParamMap(String hexMessageResult) {
String body = hexMessageResult.substring(32, hexMessageResult.length() - 2);
int schemeSize = body.length() / 228;
String matchStr = "0902%s%s";
int schemeId = 0;
Map<Integer, List<String>> schemeIdParamMap = new HashMap<>();
for (int i = 0; i < schemeSize; i++) {
++schemeId;
List<String> paramList = new ArrayList<>();
// 属性ID数量
for (int j = 2; j < 9; j++) {
String currentMatchStr = String.format(matchStr, String.format("%02x", j), String.format("%02x", schemeId));
int paramStartIndex = body.indexOf(currentMatchStr) + 8;
String param = null;
if (j == 2 || j == 4) {
param = body.substring(paramStartIndex, paramStartIndex + 2);
} else if (j == 3) {
param = body.substring(paramStartIndex, paramStartIndex + 8);
} else if (j == 5) {
param = body.substring(paramStartIndex, paramStartIndex + 4);
} else if (j == 6 || j == 8) {
param = body.substring(paramStartIndex, paramStartIndex + 32);
} else if (j == 7) {
param = body.substring(paramStartIndex, paramStartIndex + 64);
}
paramList.add(param);
}
schemeIdParamMap.put(schemeId, paramList);
}
return schemeIdParamMap;
}
private List<PhaseStageInfoPojo> getPhaseStageInfo(CrossInfoPO crossInfo) { private List<PhaseStageInfoPojo> getPhaseStageInfo(CrossInfoPO crossInfo) {
String message = String.format(Constants.COMMAND_COMMON, Constants.COMMAND_QUERY, Constants.COMMAND_PHASE_STAGE_CONFIG); String message = String.format(Constants.COMMAND_COMMON, Constants.COMMAND_QUERY, Constants.COMMAND_PHASE_STAGE_CONFIG);
String phaseStageSign = Constants.COMMAND_PHASE_STAGE_CONFIG.concat(Constants.COMMAND_QUERY_REPLY); String phaseStageSign = Constants.COMMAND_PHASE_STAGE_CONFIG.concat(Constants.COMMAND_QUERY_REPLY);
...@@ -133,7 +244,7 @@ public class DTStaticInfoServiceImpl implements StaticInfoService { ...@@ -133,7 +244,7 @@ public class DTStaticInfoServiceImpl implements StaticInfoService {
* @param crossInfo * @param crossInfo
*/ */
private List<PhaseInfoPojo> getPhaseInfo(CrossInfoPO crossInfo) { private List<PhaseInfoPojo> getPhaseInfo(CrossInfoPO crossInfo) {
String message = String.format(Constants.COMMAND_COMMON, Constants.COMMAND_QUERY,Constants.COMMAND_PHASE_CONFIG); String message = String.format(Constants.COMMAND_COMMON, Constants.COMMAND_QUERY, Constants.COMMAND_PHASE_CONFIG);
String phaseResultSign = Constants.COMMAND_PHASE_CONFIG.concat(Constants.COMMAND_QUERY_REPLY); String phaseResultSign = Constants.COMMAND_PHASE_CONFIG.concat(Constants.COMMAND_QUERY_REPLY);
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);
......
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