Commit 6aeb1a5b authored by duanruiming's avatar duanruiming

[update] 下发方案参数

parent 3f8df9a1
......@@ -45,7 +45,7 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
CrossInfoPO crossInfoPO = crossInfoCache.getCrossInfoCache().get(crossId);
List<SchemeSendVO.Pattern> schemeVOList = schemeSendVO.getPatternList();
setSchemePhaseStageInfo(crossInfoPO, schemeVOList);
return JsonViewObject.newInstance().success("下发成功异常");
return JsonViewObject.newInstance().success("下发方案成功");
}
private void setSchemePhaseStageInfo(CrossInfoPO crossInfoPO, List<SchemeSendVO.Pattern> schemeVOList) {
......@@ -55,17 +55,86 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
}
private void setSchemeInfo(CrossInfoPO crossInfoPO, List<SchemeSendVO.Pattern> schemeVOList) {
StringBuffer sb = new StringBuffer();
for (SchemeSendVO.Pattern schemeVO : schemeVOList) {
String schemeNo = schemeVO.getPatternNo();
String cycle = schemeVO.getCycle();
String offset = schemeVO.getOffset();
List<SchemeSendVO.Pattern.Ring> rings = schemeVO.getRings();
for (SchemeSendVO.Pattern.Ring ring : rings) {
String ringNo = ring.getRingNo();
List<SchemeSendVO.Pattern.Ring.Phase> phaseList = ring.getPhaseList();
String matchStr = "0902%s%s";
for (int i = 2; i <= 8; i++) {
sb.append(String.format(matchStr, String.format("%02x", i), String.format("%02x", Integer.valueOf(schemeNo))));
if (i == 2) {
sb.append("01").append(String.format("%02x", i)).append("08"); //路口序号 + 序号
}
if (i == 3) {
String cycleHex = StringUtils.leftPad(String.format("%02x", Integer.valueOf(cycle)), 8, "0");
sb.append(cycleHex).append(String.format("%02x", i)).append("05");
}
if (i == 4) { //协调序号 默认00
sb.append("00").append(String.format("%02x", i)).append("06");
}
if (i == 5) {
String offsetHex = StringUtils.leftPad(String.format("%02x", Integer.valueOf(offset)), 4, "0");
sb.append(offsetHex).append(String.format("%02x", i)).append("06");
}
if (i == 6) {
String phaseStageIdChain = getPhaseStageIdChainHex(schemeVO.getRings());
sb.append(phaseStageIdChain).append(String.format("%02x", i)).append("24");
}
if (i == 7) {
String phaseStageIdChain = getPhaseStageIdTimeChainHex(schemeVO.getRings());
sb.append(phaseStageIdChain).append(String.format("%02x", i)).append("14");
}
if (i == 7) {
String phaseStageIdTypeChain = getPhaseStageIdTypeChainHex(schemeVO.getRings());
sb.append(phaseStageIdTypeChain).append(String.format("%02x", i)).append("05");
}
}
}
String bodyValueLength = String.format("%02x", schemeVOList.size() * 7); // 调度数量 * 属性数量
String message = String.format(Constants.COMMAND_SET_COMMON, Constants.COMMAND_SET, bodyValueLength, sb.substring(0, sb.length() - 4));
String planSign = StringUtils.join(Constants.COMMAND_SCHME_CONFIG, Constants.COMMAND_SET_REPLY);
String planMessageHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfoPO.getIp(), crossInfoPO.getPort(), planMessageHex, planSign, 300);
if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) {
log.info("下发方案成功");
}
}
private String getPhaseStageIdTypeChainHex(List<SchemeSendVO.Pattern.Ring> rings) {
StringBuffer sb = new StringBuffer();
for (SchemeSendVO.Pattern.Ring ring : rings) { // 都是单环模式 相位就是阶段
List<SchemeSendVO.Pattern.Ring.Phase> phaseList = ring.getPhaseList();
for (SchemeSendVO.Pattern.Ring.Phase phase : phaseList) {
sb.insert(0, "01");
}
}
return StringUtils.leftPad(sb.toString(), 32, "0");
}
private String getPhaseStageIdTimeChainHex(List<SchemeSendVO.Pattern.Ring> rings) {
StringBuffer sb = new StringBuffer();
for (SchemeSendVO.Pattern.Ring ring : rings) { // 都是单环模式 相位就是阶段
List<SchemeSendVO.Pattern.Ring.Phase> phaseList = ring.getPhaseList();
for (SchemeSendVO.Pattern.Ring.Phase phase : phaseList) {
String phaseTime = phase.getPhaseTime();
sb.insert(0, String.format("%02x", Integer.valueOf(phaseTime)));
}
}
return StringUtils.leftPad(sb.toString(), 64, "0");
}
private String getPhaseStageIdChainHex(List<SchemeSendVO.Pattern.Ring> rings) {
StringBuffer sb = new StringBuffer();
for (SchemeSendVO.Pattern.Ring ring : rings) { // 都是单环模式 相位就是阶段
List<SchemeSendVO.Pattern.Ring.Phase> phaseList = ring.getPhaseList();
for (SchemeSendVO.Pattern.Ring.Phase phase : phaseList) {
String phaseNo = phase.getPhaseNo();
sb.insert(0, String.format("%02x", Integer.valueOf(phaseNo)));
}
}
return StringUtils.leftPad(sb.toString(), 32, "0");
}
private void setPhaseStageInfo(CrossInfoPO crossInfoPO, List<SchemeSendVO.Pattern> schemeVOList) {
......@@ -80,14 +149,14 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
List<PlanSendVO.Plan> planList = planSendVO.getPlanList();
StringBuilder sb = new StringBuilder();
for (PlanSendVO.Plan plan : planList) {
sb.append(buidDailyPlanHex(plan));
sb.append(buildDailyPlanHex(plan));
}
// 只下发有效计划返回报错
if (planList.size() < 8) {
for (int i = planList.size() + 1; i <= 8 - planList.size(); i++) {
PlanSendVO.Plan plan = new PlanSendVO.Plan();
plan.setPlanNo(String.valueOf(i));
sb.append(buidDailyPlanHex(plan));
sb.append(buildDailyPlanHex(plan));
}
}
String bodyValueLength = String.format("%02x", planList.size() * 5); // 调度数量 * 属性数量
......@@ -101,7 +170,7 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
return JsonViewObject.newInstance().success("下发计划异常");
}
private String buidDailyPlanHex(PlanSendVO.Plan plan) {
private String buildDailyPlanHex(PlanSendVO.Plan plan) {
String planNo = plan.getPlanNo();
List<PlanSendVO.Plan.Section> sectionList = plan.getSectionList();
StringBuilder hourMinuteSb = new StringBuilder();
......
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