CZT
2023-11-27 c206acfaedc69c390fb67daa81bc686f58a212ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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 "";
    }
}