package com.ld.igds.protocol.bhzn.verb.builder; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ld.igds.constant.DeviceStatus; import com.ld.igds.constant.DeviceType; import com.ld.igds.io.request.DeviceControlRequest; import com.ld.igds.io.request.ExeDevice; import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; import com.ld.igds.protocol.bhzn.verb.dto.Req248; import com.ld.igds.protocol.bhzn.verb.server.BhznVerbServerUtils; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; public class ControlCommandBuilder extends CommandBuilder { private final static ControlCommandBuilder instance = new ControlCommandBuilder(); private ControlCommandBuilder() { } public static ControlCommandBuilder getInstance() { return instance; } public IoMessage buildMessage(DeviceControlRequest request) { IoMessage message = new IoMessage(); message.setIp(request.getIp()); message.setPort(request.getPort()); message.setBegin(BhznVerbServerUtils.MSG_START1); // 调整信息 buildInfo(message, request); message.setSign("0000"); message.setVersion("V1.0000000"); message.setStNum(Integer.parseInt(request.getDepotId())); message.setSn(request.getSerId()); message.setCmd(248); message.setResult(""); message.setOrderId(request.getOrderId()); message.setEnd(BhznVerbServerUtils.MSG_END); // 生成整体命令信息和BYte信息 build(message); return message; } public void buildInfo(IoMessage message, DeviceControlRequest request) { Req248 info = new Req248(); Integer[] winStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; Integer[] fanStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; Integer[] airStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; Integer[] lightStr = new Integer[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int winCount = 0,fanCount = 0,airCount = 0,lightCount = 0; List deviceList = request.getDeviceList(); for (ExeDevice exeDevice : deviceList) { //窗户类型设备 包含 if( DeviceType.TYPE_0B.getCode().equals(exeDevice.getType()) || DeviceType.TYPE_01.getCode().equals(exeDevice.getType()) || DeviceType.TYPE_02.getCode().equals(exeDevice.getType()) || DeviceType.TYPE_0C.getCode().equals(exeDevice.getType()) ){ winStr[exeDevice.getPassCode()-1] = getVinStatus(exeDevice.getTargetStatus()); if(exeDevice.getPassCode() > winCount){ winCount = exeDevice.getPassCode(); } if(StringUtils.isNotEmpty(exeDevice.getLink()) && !"null".equals(exeDevice.getLink())){ fanStr[Integer.parseInt(exeDevice.getLink())-21] = getFanStatus(exeDevice.getTargetStatus()); if(Integer.parseInt(exeDevice.getLink()) > fanCount){ fanCount = exeDevice.getPassCode(); } } } //风机类型设备 if(DeviceType.TYPE_04.getCode().equals(exeDevice.getType()) ){ fanStr[exeDevice.getPassCode()-21] = getFanStatus(exeDevice.getTargetStatus()); if(exeDevice.getPassCode() > fanCount){ fanCount = exeDevice.getPassCode(); } } //空调类型设备 // if(DeviceType.TYPE_05.getCode().equals(exeDevice.getType()) // ){ // fanStr[exeDevice.getPassCode()-1] = getFanStatus(exeDevice.getTargetStatus()); // if(exeDevice.getPassCode() > fanCount){ // fanCount = exeDevice.getPassCode(); // } // } //照明类型设备 if(DeviceType.TYPE_06.getCode().equals(exeDevice.getType()) ){ lightStr[exeDevice.getPassCode()-61] = getFanStatus(exeDevice.getTargetStatus()); if(exeDevice.getPassCode() > lightCount){ lightCount = exeDevice.getPassCode(); } } } info.setWinCount(winCount); info.setWin_Str(winStr); info.setFanCount(fanCount); info.setFan_Str(fanStr); info.setAirCount(airCount); info.setAir_Str(airStr); info.setLightCount(lightCount); info.setLight_Str(lightStr); message.setContentStr(JSON.toJSONString(info)); } private int getVinStatus(String deviceStatus){ if(DeviceStatus.W_OPEN.getCode().equals(deviceStatus) || DeviceStatus.OPEN.getCode().equals(deviceStatus)){ return 1; } if(DeviceStatus.W_CLOSE.getCode().equals(deviceStatus) || DeviceStatus.CLOSE.getCode().equals(deviceStatus)){ return 2; } if(DeviceStatus.F_CLOSE.getCode().equals(deviceStatus) ){ return 0; } if(DeviceStatus.F_OPEN.getCode().equals(deviceStatus) ||DeviceStatus.F_OPEN_F.getCode().equals(deviceStatus) ){ return 1; } return -1; } private int getFanStatus(String deviceStatus){ if(DeviceStatus.F_CLOSE.getCode().equals(deviceStatus) ){ return 0; } if(DeviceStatus.F_OPEN.getCode().equals(deviceStatus) ||DeviceStatus.F_OPEN_F.getCode().equals(deviceStatus) ){ return 1; } return -1; } // private int getAirStatus(ExeDevice exeDevice){ // String s = ""; // s += "001"; // if(exeDevice.) // return 0; // } }