Commit 5df5dfcd authored by duanruiming's avatar duanruiming

[update] 下发相位优化

parent ad3d5989
......@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/controlCommand")
@RestController
@RequiredArgsConstructor
public class ControlCommandController {
public class ControlCommandController {
private final ControlCommandService controlCommandService;
......
......@@ -428,7 +428,7 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
setLights();
setPhaseLights();
setPhaseInfo(crossInfoPO, phaseList);
return null;
return JsonViewObject.newInstance().success();
}
private void setPhaseLights() {
......@@ -438,28 +438,52 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
private void setLights() {
}
/**
* 东土相位灯组固定,只修改相位绿灯,绿闪,红灯,黄灯,最大最小绿时间
* @param crossInfoPO
* @param phaseList
*/
private void setPhaseInfo(CrossInfoPO crossInfoPO, List<PhaseTimingSendVO.Phase> phaseList) {
String matchStr = "0402%s%s";
StringBuffer sb = new StringBuffer();
for (PhaseTimingSendVO.Phase phase : phaseList) { // 绿灯时间 = 阶段时间 - 黄灯 - 红灯 22 - 2 - 3
Integer phaseNo = phase.getPhaseNo();
Integer yellow = phase.getYellow();
Integer allRed = phase.getAllred();
String greenFlash = phase.getGreenFlash();
String maxGreen = phase.getMaxGreen();
String minGreen = phase.getMinGreen();
List<PhaseTimingSendVO.Phase.Lane> lanes = phase.getLanes();
for (int j = 1; j <= 16; j++) {
Integer yellow = 0;
Integer allRed = 0;
Integer greenFlash = 0;
Integer maxGreen = 0;
Integer minGreen = 0;
String phaseNoHex = String.format("%02x", j);
// 下发相位数据
for (PhaseTimingSendVO.Phase phase : phaseList) { // 绿灯时间 = 阶段时间 - 黄灯 - 红灯 22 - 2 - 3
Integer phaseNo = phase.getPhaseNo();
if (j == phaseNo) {
yellow = phase.getYellow();
allRed = phase.getAllred();
greenFlash = Integer.valueOf(phase.getGreenFlash());
maxGreen = Integer.valueOf(phase.getMaxGreen());
minGreen = Integer.valueOf(phase.getMinGreen());
}
}
// 原东土相位数据
List<PhaseInfoPojo> phaseInfoList = SignalDataCache.phaseInfoCache.get(crossInfoPO.getId());
PhaseInfoPojo phaseInfoPojo = null;
for (PhaseInfoPojo element : phaseInfoList) {
if (Objects.equals(phaseNo, element.getPhaseId())) {
if (Objects.equals(j, element.getPhaseId())) {
phaseInfoPojo = element;
}
}
// 如果时间为0, 使用东土原数据
yellow = yellow == 0 ? phaseInfoPojo.getYellowTime() : yellow;
allRed = allRed == 0 ? phaseInfoPojo.getRedTime() : allRed;
greenFlash = greenFlash == 0 ? phaseInfoPojo.getGreenFlashTime() : greenFlash;
maxGreen = maxGreen == 0 ? phaseInfoPojo.getMaxGreenTime() : maxGreen;
minGreen = minGreen == 0 ? phaseInfoPojo.getMinGreenTime() : minGreen;
for (int i = 2; i <= 31; i++) {
sb.append(String.format(matchStr, String.format("%02x", i), String.format("%02x", phaseNo)));
if (i < 11 || (i > 26 && i < 30)) {
sb.append(String.format(matchStr, String.format("%02x", i), phaseNoHex));
}
if (i == 2) {
String phaseHex = StringUtils.leftPad(CommonUtils.getBinary(phaseNo), 16, "0");
String phaseHex = StringUtils.leftPad(CommonUtils.getBinary(j), 16, "0");
sb.append(phaseHex).append(String.format("%02x", i)).append("05");
}
if (i == 3) {
......@@ -490,7 +514,7 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
}
if (i == 11) {
String str = "04020B%s000B0504020C%s000C0504020D%s000D0504020E%s000E0504020F%s310F05040210%s0A1005040211%s001105040212%s001205040213%s001305040214%s001405040215%s311505040216%s0A1605040217%s001705040218%s001805040219%s00190504021A%s001A06";
sb.append(String.format(str, String.format("%02x", phaseNo)));
sb.append(str.replaceAll("%s", phaseNoHex));
}
if (i > 11 && i <= 26) {
continue;
......@@ -504,16 +528,15 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
sb.append(maxGreenHex).append(String.format("%02x", i)).append("06");
}
if (i == 30) {
sb.append(String.format("04021E%s00031E0C", String.format("%02x", phaseNo))); // 延长绿时间
sb.append(String.format("04021E%s00031E0C", phaseNoHex)); // 延长绿时间
}
if (i == 31) {
sb.append(String.format("04021F%s00000000000000001F0C", String.format("%02x", phaseNo)));
sb.append(String.format("04021F%s00000000000000001F0C", phaseNoHex));
}
}
}
String bodyValueLength = String.format("%02x", phaseList.size() * 31); // 调度数量 * 属性数量
String message = String.format(Constants.COMMAND_SET_COMMON, Constants.COMMAND_SET, bodyValueLength, sb.substring(0, sb.length() - 4));
String message = String.format(Constants.COMMAND_SET_COMMON, Constants.COMMAND_SET, "ff", sb.substring(0, sb.length() - 4));
String phaseSign = StringUtils.join(Constants.COMMAND_SCHME_CONFIG, Constants.COMMAND_SET_REPLY);
String phaseMessage = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfoPO.getIp(), crossInfoPO.getPort(), phaseMessage, phaseSign, 300);
......@@ -526,4 +549,5 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
public JsonViewObject phaseDiffSend() {
return null;
}
}
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