package com.ld.igds.n2.manager;
|
|
import com.ld.igds.common.CoreDeviceService;
|
import com.ld.igds.constant.DeviceStatus;
|
import com.ld.igds.constant.DeviceType;
|
import com.ld.igds.io.RemoteControlService;
|
import com.ld.igds.io.request.DeviceControlRequest;
|
import com.ld.igds.io.request.ExeDevice;
|
import com.ld.igds.models.Device;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.concurrent.Callable;
|
|
|
/**
|
* 自动气调模式执行,首先针对双通道设备,先开口,第二次执行开风机
|
*/
|
public class N2AutoControlTask implements Callable<String> {
|
|
private DeviceControlRequest request;
|
|
private CoreDeviceService coreDeviceService;
|
|
RemoteControlService remoteControlService;
|
|
|
public void setRequest(DeviceControlRequest request) {
|
this.request = request;
|
}
|
|
public void setRemoteControlService(RemoteControlService remoteControlService) {
|
this.remoteControlService = remoteControlService;
|
}
|
|
public void setCoreDeviceService(CoreDeviceService coreDeviceService) {
|
this.coreDeviceService = coreDeviceService;
|
}
|
|
public N2AutoControlTask() {
|
super();
|
}
|
|
public N2AutoControlTask(DeviceControlRequest request, CoreDeviceService coreDeviceService, RemoteControlService remoteControlService) {
|
this.request = request;
|
this.coreDeviceService = coreDeviceService;
|
this.remoteControlService = remoteControlService;
|
}
|
|
|
@Override
|
public String call() throws Exception {
|
|
|
//第一輪執行
|
List<ExeDevice> listNext = exeCall(1, request.getDeviceList());
|
|
|
//第二轮执行
|
Thread.sleep(5 * 1000);
|
if (null == listNext || listNext.isEmpty()) {
|
exeCall(2, request.getDeviceList());
|
}
|
|
return "SUCCESS";
|
}
|
|
private List<ExeDevice> exeCall(int index, List<ExeDevice> listExeDevice) throws Exception {
|
|
|
if (listExeDevice.isEmpty()) return null;
|
|
|
List<ExeDevice> result = new ArrayList<>();
|
|
//设备状态查询
|
remoteControlService.queryStatus(request);
|
|
Thread.sleep(5 * 1000);
|
|
//取设备状态
|
List<Device> listDevice = coreDeviceService.getCacheDeviceBySerId(request.getCompanyId(), request.getSerId());
|
|
//第一轮执行
|
String curStatus;
|
for (ExeDevice device : listExeDevice) {
|
|
if (DeviceStatus.W_OPEN.getCode().equals(device.getTargetStatus())) {
|
device.setPassCode(Integer.valueOf(device.getLink()));
|
todoControl(device);
|
|
continue;
|
}
|
|
if (DeviceStatus.W_CLOSE.getCode().equals(device.getTargetStatus())) {
|
curStatus = this.getCurDeviceStatus(device.getId(), listDevice);
|
if (DeviceStatus.F_OPEN.getCode().equals(curStatus)) {
|
//第一轮执行-关风机
|
device.setTargetStatus(DeviceStatus.F_CLOSE.getCode());
|
todoControl(device);
|
|
//第二次执行关闭窗户
|
device.setTargetStatus(DeviceStatus.W_CLOSE.getCode());
|
device.setPassCode(Integer.valueOf(device.getLink()));
|
result.add(device);
|
|
} else {
|
device.setPassCode(Integer.valueOf(device.getLink()));
|
todoControl(device);
|
}
|
|
continue;
|
}
|
|
if (DeviceStatus.F_OPEN.getCode().equals(device.getTargetStatus())) {
|
if (DeviceType.TYPE_02.getCode().equals(device.getType()) || DeviceType.TYPE_0C.getCode().equals(device.getType())) {
|
curStatus = this.getCurDeviceStatus(device.getId(), listDevice);
|
if (DeviceStatus.W_CLOSE.getCode().equals(curStatus)) {
|
|
result.add(device);
|
|
//第一轮执行-开窗
|
device.setPassCode(Integer.valueOf(device.getLink()));
|
device.setTargetStatus(DeviceStatus.W_OPEN.getCode());
|
todoControl(device);
|
|
} else {
|
todoControl(device);
|
}
|
} else {
|
todoControl(device);
|
}
|
|
continue;
|
}
|
|
todoControl(device);
|
}
|
|
if (index == 1) return result;
|
|
return null;
|
}
|
|
/**
|
* 执行操作
|
*
|
* @param device
|
*/
|
private void todoControl(ExeDevice device) {
|
List<ExeDevice> temp = new ArrayList<>();
|
temp.add(device);
|
request.setDeviceList(temp);
|
remoteControlService.deviceControl(request);
|
}
|
|
|
private String getCurDeviceStatus(String deviceId, List<Device> listDevice) {
|
for (Device device : listDevice) {
|
if (deviceId.equals(device.getId())) return device.getStatus();
|
}
|
return "";
|
}
|
}
|