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<ExeDevice> 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;
|
// }
|
}
|