Commit 7793515c authored by duanruiming's avatar duanruiming

[update] 下发计划

parent c10bb800
......@@ -36,7 +36,7 @@ public enum CommandResultSign {
SET_STAGE_INFO("3006", "setStageInfoService"),
SET_PHASE_SECURITY_INFO("3007", "setPhaseSecurityInfoService"),
SET_SCHEME_INFO("3009", "setSchemeInfoService"),
SET_DAILY_PLAN_INFO("3011", "setDailyPlanInfoService"),
SET_DAILY_PLAN_INFO("0b0240", "setDailyPlanInfoService"),
SET_SCHEDULES_INFO("090240", "setSchedulesInfoService"),
SET_TRAFFIC_DATA_INFO("3014", "setTrafficDataInfoService"),
SET_ALARM_INFO("3015", "setAlarmInfoService"),
......
package net.wanji.com.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Objects;
/**
* @author duanruiming
* @date 2023/06/21 9:31
*/
@Getter
@AllArgsConstructor
@RequiredArgsConstructor
public enum SectionControlModeEnum {
FIXED_CYCLE(1, "21", "定周期"),
GREEN_WAVE(2, "13", "绿灯"),
YELLOW_CONTROL(3, "31", "黄灯"),
RED_CONTROL(4, "32", "红灯"),
CLOSED_CONTROL(5, "33", "关灯"),
SELF_CONTROL(6, "14", "绿闪"),
FULL_INDUCTION(7, "31", "黄闪"),
HALF_INDUCTION(8, "32", "红闪");
private Integer wjControl;
private String dtControlHex;
private String message;
public static String getDtControlMode(Integer wjControlHex) {
for (ControlModelEnum value : ControlModelEnum.values()) {
if (Objects.equals(wjControlHex, value.getWjControl())) {
return value.getDtControlHex();
}
}
return null;
}
}
......@@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.com.cache.CrossInfoCache;
import net.wanji.com.common.constants.Constants;
import net.wanji.com.common.enums.ControlModelEnum;
import net.wanji.com.common.enums.SectionControlModeEnum;
import net.wanji.com.netty.NettyClient;
import net.wanji.com.pojo.netty.MessageResultPojo;
import net.wanji.com.service.controller.ControlCommandService;
......@@ -40,14 +41,94 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
@Override
public JsonViewObject schemeSend(SchemeSendVO schemeSendVO) throws Exception {
String hex = "";
MessageResultPojo resultPojo = NettyClient.sendMessage("ip", 5050, hex, "aabb", 300);
String crossId = schemeSendVO.getCrossCode();
CrossInfoPO crossInfoPO = crossInfoCache.getCrossInfoCache().get(crossId);
List<SchemeSendVO.Pattern> patternList = schemeSendVO.getPatternList();
StringBuilder sb = new StringBuilder();
for (SchemeSendVO.Pattern pattern : patternList) {
sb.append(buidSchemeHex(pattern));
}
String bodyValueLeght = String.format("%02x", patternList.size() * 6); // 调度数量 * 属性数量
String message = String.format(Constants.COMMAND_SET_COMMON, Constants.COMMAND_SET, bodyValueLeght, sb.toString());
String schemeSign = StringUtils.join(Constants.COMMAND_SCHME_CONFIG, Constants.COMMAND_SET_REPLY);
String schemeMessageHex = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfoPO.getIp(), crossInfoPO.getPort(), schemeMessageHex, schemeSign, 300);
if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) {
return JsonViewObject.newInstance().success("下发方案成功");
}
return JsonViewObject.newInstance().success("下发方案异常");
}
private String buidSchemeHex(SchemeSendVO.Pattern pattern) {
return null;
}
@Override
public JsonViewObject planSend(PlanSendVO planSendVO) throws Exception {
return null;
String crossId = planSendVO.getCrossCode();
CrossInfoPO crossInfoPO = crossInfoCache.getCrossInfoCache().get(crossId);
List<PlanSendVO.Plan> planList = planSendVO.getPlanList();
StringBuilder sb = new StringBuilder();
for (PlanSendVO.Plan plan : planList) {
sb.append(buidDailyPlanHex(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));
}
}
String bodyValueLength = String.format("%02x", planList.size() * 5); // 调度数量 * 属性数量
String message = String.format(Constants.COMMAND_SET_COMMON, Constants.COMMAND_SET, bodyValueLength, sb.substring(0, sb.length() - 4));
String planSign = StringUtils.join(Constants.COMMAND_DAILYPLAN_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())) {
return JsonViewObject.newInstance().success("下发计划成功");
}
return JsonViewObject.newInstance().success("下发计划异常");
}
private String buidDailyPlanHex(PlanSendVO.Plan plan) {
String planNo = plan.getPlanNo();
List<PlanSendVO.Plan.Section> sectionList = plan.getSectionList();
StringBuilder hourMinuteSb = new StringBuilder();
StringBuilder schemeNoSb = new StringBuilder();
StringBuilder controlModelSb = new StringBuilder();
if (!CollectionUtils.isEmpty(sectionList)) {
for (PlanSendVO.Plan.Section section : sectionList) {
String schemeNo = section.getPatternNo();
String schemeHex = String.format("%02x", Integer.valueOf(schemeNo));
schemeNoSb.insert(0, schemeHex).insert(0, schemeHex); // 开始时间结束时间两个时间段,插入两次
String beginTime = section.getBeginTime();
String startHourMinuteHex = CommonUtils.getHourMinuteHex(beginTime);
String endTime = section.getEndTime();
String endHourMinuteHex = CommonUtils.getHourMinuteHex(endTime);
hourMinuteSb.insert(0, startHourMinuteHex).insert(0, endHourMinuteHex);
String controlMode = section.getControlMode();
String dtControlMode = SectionControlModeEnum.getDtControlMode(Integer.valueOf(controlMode));
controlModelSb.insert(0, dtControlMode).insert(0, dtControlMode);
}
}
String matchStr = "0b02%s%s";
StringBuffer sb = new StringBuffer();
for (int i = 2; i <= 5; i++) { // 属性
sb.append(String.format(matchStr, String.format("%02x", i), String.format("%02x", Integer.parseInt(planNo))));
if (i == 2) {
sb.append("01").append(String.format("%02x", i)).append("64");
}
if (i == 3) {
sb.append(StringUtils.leftPad(hourMinuteSb.toString(), 192, "0")).append(String.format("%02x", i)).append("34");
}
if (i == 4) {
sb.append(StringUtils.leftPad(schemeNoSb.toString(), 96, "0")).append(String.format("%02x", i)).append("34");
}
if (i == 5) {
sb.append(StringUtils.leftPad(controlModelSb.toString(), 96, "0")).append(String.format("%02x", i)).append("05");
}
}
return sb.toString();
}
@Override
......@@ -61,7 +142,7 @@ public class DTControlCommandServiceImpl implements ControlCommandService {
}
String bodyValueLeght = String.format("%02x", schedules.size() * 6); // 调度数量 * 属性数量
String message = String.format(Constants.COMMAND_SET_COMMON, Constants.COMMAND_SET, bodyValueLeght, sb.toString());
String scheduleSign = StringUtils.join(Constants.COMMAND_SCHEDULE_CONFIG, Constants.COMMAND_SET_REPLY);
String scheduleSign = StringUtils.join("0901", Constants.COMMAND_SET_REPLY);
String scheduleMessage = Constants.buildMessage(message);
MessageResultPojo resultPojo = NettyClient.sendMessage(crossInfoPO.getIp(), crossInfoPO.getPort(), scheduleMessage, scheduleSign, 300);
if (Objects.nonNull(resultPojo) && StringUtils.isNotBlank(resultPojo.getHexMessageResult())) {
......
......@@ -8,6 +8,11 @@ import cn.hutool.core.util.HexUtil;
*/
public class CommonUtils {
/**
* 将数组转化为16进制字符串
* @param array
* @return
*/
public static String getHex4Array(int[] array) {
StringBuilder sb = new StringBuilder();
for (int i : array) {
......@@ -16,4 +21,17 @@ public class CommonUtils {
Integer binary = Integer.valueOf(sb.reverse().toString(), 2);
return HexUtil.toHex(binary);
}
/**
* 将时间转化为16进制 00:00 --> 061E0
* @param time
* @return
*/
public static String getHourMinuteHex(String time) {
StringBuffer sb = new StringBuffer();
String[] split = time.split(":");
String hour = String.format("%02x", Integer.valueOf(split[0]));
String minute = String.format("%02x", Integer.valueOf(split[1]));
return sb.append(hour).append(minute).toString();
}
}
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