package com.ld.igds.protocol.bhzn.verb.builder; import com.alibaba.fastjson.JSON; import com.ld.igds.constant.DeviceStatus; import com.ld.igds.constant.DeviceType; import com.ld.igds.io.request.ExeDevice; import com.ld.igds.io.request.TempControlRequest; 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 com.ld.igds.util.BytesUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.util.List; @Slf4j public class TempControlCommandBuilder extends CommandBuilder { private final static TempControlCommandBuilder instance = new TempControlCommandBuilder(); private TempControlCommandBuilder() { } public static TempControlCommandBuilder getInstance() { return instance; } public IoMessage buildMessage(TempControlRequest 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, TempControlRequest 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; ExeDevice exeDevice = request.getExeDevice(); //空调类型设备 airStr[exeDevice.getPassCode()-41] = getAirStatus(request); airCount = exeDevice.getPassCode()-41; 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 Integer getAirStatus(TempControlRequest request){ try{ String h = ""; String l = ""; h = "001"+h; if(DeviceStatus.OPEN.getCode().equals(request.getExeDevice().getTargetStatus())){ h = "1"+h; }else{ h = "0"+h; } h = "0000"+h; h = BytesUtil.hexToInt(BytesUtil.bin2Hex(h)) + ""; if (h.length() < 2) { h = "0" + h; } l = BytesUtil.intToHexStr1(Integer.parseInt(request.getTargetTemp())); String s= l+ h ; return BytesUtil.hexToInt(s); }catch (Exception e){ log.error(e.getMessage(),e); return -1; } } }