Commit 38f269ab1fc6bf89a0d8cd9d1ef8a8cb57dcf3c1
1 parent
7326522f
Exists in
master
物联代码提交
Showing
11 changed files
with
669 additions
and
439 deletions
Show diff stats
cloud/mypulsar/src/main/java/com/example/mypulsar/MyRunnerableInt.java
@@ -8,7 +8,6 @@ import com.example.mypulsar.mq.AESBase64Utils; | @@ -8,7 +8,6 @@ import com.example.mypulsar.mq.AESBase64Utils; | ||
8 | import com.example.mypulsar.mq.MessageHandlerTask; | 8 | import com.example.mypulsar.mq.MessageHandlerTask; |
9 | import com.example.mypulsar.mq.MqConsumer; | 9 | import com.example.mypulsar.mq.MqConsumer; |
10 | import com.example.mypulsar.mqtt.MqttConsumer; | 10 | import com.example.mypulsar.mqtt.MqttConsumer; |
11 | -import com.example.mypulsar.task.SchduledTasks; | ||
12 | import com.example.mypulsar.utils.ControlUtils; | 11 | import com.example.mypulsar.utils.ControlUtils; |
13 | import com.example.mypulsar.utils.JsonUtils; | 12 | import com.example.mypulsar.utils.JsonUtils; |
14 | import com.example.mypulsar.utils.PulsarConsumerPoolFactory; | 13 | import com.example.mypulsar.utils.PulsarConsumerPoolFactory; |
@@ -25,7 +24,6 @@ import org.springframework.util.CollectionUtils; | @@ -25,7 +24,6 @@ import org.springframework.util.CollectionUtils; | ||
25 | import org.springframework.util.StringUtils; | 24 | import org.springframework.util.StringUtils; |
26 | 25 | ||
27 | import java.text.SimpleDateFormat; | 26 | import java.text.SimpleDateFormat; |
28 | -import java.util.ArrayList; | ||
29 | import java.util.Date; | 27 | import java.util.Date; |
30 | import java.util.List; | 28 | import java.util.List; |
31 | import java.util.function.BiConsumer; | 29 | import java.util.function.BiConsumer; |
@@ -76,7 +74,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -76,7 +74,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
76 | //通过 AES (ECB 模式)对 accessKey 的中间 16 位代码进行解密 | 74 | //通过 AES (ECB 模式)对 accessKey 的中间 16 位代码进行解密 |
77 | String data = AESBase64Utils.decrypt(vo.getData(), accessKey.substring(8, 24)); | 75 | String data = AESBase64Utils.decrypt(vo.getData(), accessKey.substring(8, 24)); |
78 | TuYaReceiverBean tuYaReceiverBean = JSON.parseObject(data, TuYaReceiverBean.class); | 76 | TuYaReceiverBean tuYaReceiverBean = JSON.parseObject(data, TuYaReceiverBean.class); |
79 | - log.info("接收消息,消息内容:"+ JSON.toJSONString(tuYaReceiverBean)); | 77 | +// log.info("接收消息,消息内容:"+ JSON.toJSONString(tuYaReceiverBean)); |
80 | //处理数据上报 | 78 | //处理数据上报 |
81 | detealData(tuYaReceiverBean); | 79 | detealData(tuYaReceiverBean); |
82 | }); | 80 | }); |
@@ -128,8 +126,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -128,8 +126,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
128 | log.info("设备: {},已掉线",deviceName); | 126 | log.info("设备: {},已掉线",deviceName); |
129 | deviceBean.setDev_type(1); | 127 | deviceBean.setDev_type(1); |
130 | deviceBean.setDev_status(0); | 128 | deviceBean.setDev_status(0); |
131 | - updateDevStatus(deviceBean); | ||
132 | - updateStatus(devId, "0"); | 129 | + updateStatus(deviceBean.getDevId(), "0"); |
133 | break; | 130 | break; |
134 | case "online"://设备上线 | 131 | case "online"://设备上线 |
135 | log.info("设备: {},已上线",deviceName); | 132 | log.info("设备: {},已上线",deviceName); |
@@ -155,13 +152,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -155,13 +152,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
155 | } | 152 | } |
156 | 153 | ||
157 | private void updateStatus(String devId, String isConnection) { | 154 | private void updateStatus(String devId, String isConnection) { |
158 | -// String clintId = deviceDao.selectAttendance(devId); | ||
159 | -// if (clintId.equals(devId)) { | ||
160 | deviceDao.updateStatus(devId, isConnection, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); | 155 | deviceDao.updateStatus(devId, isConnection, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
161 | -// } else { | ||
162 | -// deviceDao.insert(devId, "-2", isConnection); | ||
163 | -// } | ||
164 | - | ||
165 | } | 156 | } |
166 | 157 | ||
167 | private void updateDevStatus(DeviceBean deviceBean) { | 158 | private void updateDevStatus(DeviceBean deviceBean) { |
@@ -173,8 +164,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -173,8 +164,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
173 | if (deviceBean.getDataId() == null) deviceBean.setDataId(""); | 164 | if (deviceBean.getDataId() == null) deviceBean.setDataId(""); |
174 | if (deviceBean.getCode() == null) deviceBean.setCode(""); | 165 | if (deviceBean.getCode() == null) deviceBean.setCode(""); |
175 | if (deviceBean.getProductKey() == null) deviceBean.setProductKey(""); | 166 | if (deviceBean.getProductKey() == null) deviceBean.setProductKey(""); |
176 | - log("设备上线,更新历史记录: "+JSON.toJSONString(deviceBean)); | ||
177 | - int index = deviceDao.addDevice(deviceBean.getDataId(), deviceBean.getDevId(), deviceBean.getProductKey(), deviceBean.getCode(), deviceBean.getValue() | 167 | + deviceDao.addDevice(deviceBean.getDataId(), deviceBean.getDevId(), deviceBean.getProductKey(), deviceBean.getCode(), deviceBean.getValue() |
178 | , deviceBean.getBizCode(), deviceBean.getTime(), deviceBean.getName(), deviceBean.getDpId(), deviceBean.getUid(), deviceBean.getDev_status(), deviceBean.getDev_type()); | 168 | , deviceBean.getBizCode(), deviceBean.getTime(), deviceBean.getName(), deviceBean.getDpId(), deviceBean.getUid(), deviceBean.getDev_status(), deviceBean.getDev_type()); |
179 | updateStatus(deviceBean.getDevId(), "1"); | 169 | updateStatus(deviceBean.getDevId(), "1"); |
180 | } | 170 | } |
@@ -206,16 +196,11 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -206,16 +196,11 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
206 | switch (code) { | 196 | switch (code) { |
207 | case "va_temperature"://温度 | 197 | case "va_temperature"://温度 |
208 | deviceBean.setValue(Integer.parseInt(value) / 100 + ""); | 198 | deviceBean.setValue(Integer.parseInt(value) / 100 + ""); |
209 | - log.info("温度:" + deviceBean.getValue()); | ||
210 | - //存储 对应设备对应的温度记录 | ||
211 | - ControlUtils.tempDevices.put(deviceBean.getDevId(),Integer.valueOf(deviceBean.getValue())); | ||
212 | break; | 199 | break; |
213 | case "va_humidity"://湿度 | 200 | case "va_humidity"://湿度 |
214 | deviceBean.setValue(Integer.parseInt(value) / 100 + ""); | 201 | deviceBean.setValue(Integer.parseInt(value) / 100 + ""); |
215 | - log.info("湿度:" + deviceBean.getValue()); | ||
216 | break; | 202 | break; |
217 | case "pir"://人体感应 | 203 | case "pir"://人体感应 |
218 | - log.info("人体感应:" + value); | ||
219 | if(value.equals("pir")){ | 204 | if(value.equals("pir")){ |
220 | deviceBean.setValue("有人"); | 205 | deviceBean.setValue("有人"); |
221 | }else{ | 206 | }else{ |
@@ -232,18 +217,18 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -232,18 +217,18 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
232 | case "battery_value"://电池电量值 | 217 | case "battery_value"://电池电量值 |
233 | break; | 218 | break; |
234 | case "battery"://门磁电池电量值 | 219 | case "battery"://门磁电池电量值 |
235 | - log("电池电量值:" + value); | 220 | + log.info("电池电量值:" + value); |
236 | break; | 221 | break; |
237 | case "battery_state"://电池电量状态 {“range”:[“low”,“middle”,“high”]} | 222 | case "battery_state"://电池电量状态 {“range”:[“low”,“middle”,“high”]} |
238 | - log("电池电量状态:" + value); | 223 | + log.info("电池电量状态:" + value); |
239 | break; | 224 | break; |
240 | case "doorcontact_state"://门磁状态 | 225 | case "doorcontact_state"://门磁状态 |
241 | value = (value.equals("true") ? "开门" : "关门"); | 226 | value = (value.equals("true") ? "开门" : "关门"); |
242 | - log("门磁状态:" + (value.equals("true") ? "开门" : "关门")); | 227 | + log.info("门磁状态:" + (value.equals("true") ? "开门" : "关门")); |
243 | break; | 228 | break; |
244 | case "switch"://门磁状态 | 229 | case "switch"://门磁状态 |
245 | value = (value.equals("true") ? "开门" : "关门"); | 230 | value = (value.equals("true") ? "开门" : "关门"); |
246 | - log("开关状态:" + (value.equals("true") ? "开门" : "关门")); | 231 | + log.info("开关状态:" + (value.equals("true") ? "开门" : "关门")); |
247 | break; | 232 | break; |
248 | case "cur_voltage"://当前电压 | 233 | case "cur_voltage"://当前电压 |
249 | if(value.equals("0")){ | 234 | if(value.equals("0")){ |
@@ -251,7 +236,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -251,7 +236,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
251 | }else{ | 236 | }else{ |
252 | value = Integer.parseInt(value) / 10 + ""; | 237 | value = Integer.parseInt(value) / 10 + ""; |
253 | } | 238 | } |
254 | - log(deviceBean.getDevId() + " 当前电压:" + value +"v"); | 239 | + log.info(deviceBean.getDevId() + " 当前电压:" + value +"v"); |
255 | break; | 240 | break; |
256 | case "cur_power"://当前功率 | 241 | case "cur_power"://当前功率 |
257 | if(value.equals("0")){ | 242 | if(value.equals("0")){ |
@@ -259,7 +244,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -259,7 +244,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
259 | }else{ | 244 | }else{ |
260 | value = Integer.parseInt(value) / 10+""; | 245 | value = Integer.parseInt(value) / 10+""; |
261 | } | 246 | } |
262 | - log(deviceBean.getDevId() + " 当前功率:" + value + "W"); | 247 | + log.info(deviceBean.getDevId() + " 当前功率:" + value + "W"); |
263 | break; | 248 | break; |
264 | case "cur_current"://当前电流 | 249 | case "cur_current"://当前电流 |
265 | if(value.equals("0")){ | 250 | if(value.equals("0")){ |
@@ -267,7 +252,7 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -267,7 +252,7 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
267 | }else{ | 252 | }else{ |
268 | value = Integer.parseInt(value) / 10+""; | 253 | value = Integer.parseInt(value) / 10+""; |
269 | } | 254 | } |
270 | - log(deviceBean.getDevId() + " 当前电流:" + value + "A"); | 255 | + log.info(deviceBean.getDevId() + " 当前电流:" + value + "A"); |
271 | break; | 256 | break; |
272 | case "smoke_sensor_state"://烟雾报警 | 257 | case "smoke_sensor_state"://烟雾报警 |
273 | break; | 258 | break; |
@@ -310,80 +295,9 @@ public class MyRunnerableInt implements ApplicationRunner { | @@ -310,80 +295,9 @@ public class MyRunnerableInt implements ApplicationRunner { | ||
310 | //获取人感设备控制 | 295 | //获取人感设备控制 |
311 | List<CalDevContrl> calDevContrls = deviceDao.getCalDevContrlWidthDevId(deviceBean.getDevId()); | 296 | List<CalDevContrl> calDevContrls = deviceDao.getCalDevContrlWidthDevId(deviceBean.getDevId()); |
312 | if (CollectionUtils.isEmpty(calDevContrls)) { | 297 | if (CollectionUtils.isEmpty(calDevContrls)) { |
313 | - log.info("未关联人感控制设备, 设备ID: "+ deviceBean.getDevId()); | 298 | + log.error("未关联人感控制设备, 设备ID: "+ deviceBean.getDevId()); |
314 | return; | 299 | return; |
315 | } | 300 | } |
316 | ControlUtils.getInstance(deviceDao).conTemper(calDevContrls, deviceBean); | 301 | ControlUtils.getInstance(deviceDao).conTemper(calDevContrls, deviceBean); |
317 | } | 302 | } |
318 | - | ||
319 | - /** | ||
320 | - * 设置更新上报时间 | ||
321 | - * @param clintId | ||
322 | - */ | ||
323 | - private void setClintTime(String clintId){ | ||
324 | - //获取人感设备 | ||
325 | - List<CalDevContrl> calDevContrls = deviceDao.getCalDevContrlWidthDevId(clintId); | ||
326 | - if(!CollectionUtils.isEmpty(calDevContrls)){ | ||
327 | - CalDevContrl calDevContrl = calDevContrls.get(0); | ||
328 | - String assDevice = calDevContrl.getAssDevice(); | ||
329 | - //获取人感关联红外遥控器 | ||
330 | - CalDevBeContrl hwClint = getCalDevBeCon(assDevice); | ||
331 | - if(hwClint==null) { | ||
332 | - log.info("未查询到控制红外遥控器"); | ||
333 | - return; | ||
334 | - } | ||
335 | - //红外遥控设备id | ||
336 | - String conDevId = hwClint.getConDevId(); | ||
337 | - SchduledTasks.closeDevMap.put(conDevId,new Date()); | ||
338 | - } | ||
339 | - } | ||
340 | - | ||
341 | - private CalDevBeContrl getCalDevBeCon(String assDevice) { | ||
342 | - String[] assDeviceIds = assDevice.split(","); | ||
343 | - List<CalDevBeContrl> devBeContrlList = new ArrayList<>(); | ||
344 | - for (int i = 0; i < assDeviceIds.length; i++) { | ||
345 | - String deviceId = assDeviceIds[i]; | ||
346 | - //获取温感设备 | ||
347 | - List<CalDevContrl> calDevContrl = deviceDao.getTempCalWitdDevid(deviceId); | ||
348 | - if(!CollectionUtils.isEmpty(calDevContrl)){ | ||
349 | - for (int j = 0; j < calDevContrl.size(); j++) { | ||
350 | - //温感设备 | ||
351 | - CalDevContrl calDevContrl1 = calDevContrl.get(j); | ||
352 | - if (!calDevContrl1.getDevBeId().equals("0")) { | ||
353 | - String[] calDevBeIdStr = calDevContrl1.getDevBeId().split(","); | ||
354 | - if (calDevBeIdStr != null) { | ||
355 | - for (int k = 0; k < calDevBeIdStr.length; k++) { | ||
356 | - //红外设备 | ||
357 | - CalDevBeContrl calDevBeContrl = deviceDao.getCalDevBeControl(calDevBeIdStr[k]); | ||
358 | - devBeContrlList.add(calDevBeContrl); | ||
359 | - } | ||
360 | - } | ||
361 | - } | ||
362 | - } | ||
363 | - } | ||
364 | - } | ||
365 | - if(devBeContrlList.size()>0){ | ||
366 | - return devBeContrlList.get(0); | ||
367 | - } | ||
368 | - return null; | ||
369 | - } | ||
370 | - | ||
371 | - /** | ||
372 | - * 根据温度变化控制设备 | ||
373 | - * | ||
374 | - * @param deviceBean | ||
375 | - */ | ||
376 | - private void calOpenOrCloseDevWithtemper(DeviceBean deviceBean) { | ||
377 | - | ||
378 | - ControlUtils.tempDevices.put(deviceBean.getDevId(), Integer.valueOf(deviceBean.getValue())); | ||
379 | - | ||
380 | -// List<CalDevContrl> calDevContrls = deviceDao.getCalDevContrlWidthDevId(deviceBean.getDevId()); | ||
381 | -// if (null != calDevContrls && calDevContrls.size() > 0) | ||
382 | -// ControlUtils.getInstance(deviceDao).conTemper(calDevContrls, deviceBean); | ||
383 | - | ||
384 | - } | ||
385 | - | ||
386 | - private void log(String content) { | ||
387 | - System.out.println("接收到数据:" + content); | ||
388 | - } | ||
389 | } | 303 | } |
cloud/mypulsar/src/main/java/com/example/mypulsar/bean/AirCommand.java
0 → 100644
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +package com.example.mypulsar.bean; | ||
2 | + | ||
3 | +/** | ||
4 | + * Created with IntelliJ IDEA. | ||
5 | + * | ||
6 | + * @Auther: xuquan | ||
7 | + * @Date: 2021/04/28 17:15 | ||
8 | + * @Description: | ||
9 | + */ | ||
10 | +public class AirCommand { | ||
11 | + private Integer key; | ||
12 | + private String value; | ||
13 | + | ||
14 | + public Integer getKey() { | ||
15 | + return key; | ||
16 | + } | ||
17 | + | ||
18 | + public void setKey(Integer key) { | ||
19 | + this.key = key; | ||
20 | + } | ||
21 | + | ||
22 | + public String getValue() { | ||
23 | + return value; | ||
24 | + } | ||
25 | + | ||
26 | + public void setValue(String value) { | ||
27 | + this.value = value; | ||
28 | + } | ||
29 | +} |
cloud/mypulsar/src/main/java/com/example/mypulsar/bean/AirLinkMode.java
0 → 100644
@@ -0,0 +1,32 @@ | @@ -0,0 +1,32 @@ | ||
1 | +package com.example.mypulsar.bean; | ||
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +/** | ||
6 | + * Created with IntelliJ IDEA. | ||
7 | + * | ||
8 | + * @Auther: xuquan | ||
9 | + * @Date: 2021/04/28 17:13 | ||
10 | + * @Description: | ||
11 | + */ | ||
12 | +public class AirLinkMode { | ||
13 | + | ||
14 | + private Integer deviceType; | ||
15 | + private List<AirCommand> KVs; | ||
16 | + | ||
17 | + public Integer getDeviceType() { | ||
18 | + return deviceType; | ||
19 | + } | ||
20 | + | ||
21 | + public void setDeviceType(Integer deviceType) { | ||
22 | + this.deviceType = deviceType; | ||
23 | + } | ||
24 | + | ||
25 | + public List<AirCommand> getKVs() { | ||
26 | + return KVs; | ||
27 | + } | ||
28 | + | ||
29 | + public void setKVs(List<AirCommand> KVs) { | ||
30 | + this.KVs = KVs; | ||
31 | + } | ||
32 | +} |
cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_Attendace.java
1 | package com.example.mypulsar.bean; | 1 | package com.example.mypulsar.bean; |
2 | 2 | ||
3 | -import afu.org.checkerframework.checker.igj.qual.I; | ||
4 | - | ||
5 | import java.io.Serializable; | 3 | import java.io.Serializable; |
6 | 4 | ||
7 | public class Wl_Attendace implements Serializable { | 5 | public class Wl_Attendace implements Serializable { |
@@ -12,6 +10,8 @@ public class Wl_Attendace implements Serializable { | @@ -12,6 +10,8 @@ public class Wl_Attendace implements Serializable { | ||
12 | 10 | ||
13 | private String name; | 11 | private String name; |
14 | 12 | ||
13 | + private Integer isConnection; | ||
14 | + | ||
15 | public Integer getSchool_id() { | 15 | public Integer getSchool_id() { |
16 | return school_id; | 16 | return school_id; |
17 | } | 17 | } |
@@ -36,6 +36,14 @@ public class Wl_Attendace implements Serializable { | @@ -36,6 +36,14 @@ public class Wl_Attendace implements Serializable { | ||
36 | this.name = name; | 36 | this.name = name; |
37 | } | 37 | } |
38 | 38 | ||
39 | + public Integer getIsConnection() { | ||
40 | + return isConnection; | ||
41 | + } | ||
42 | + | ||
43 | + public void setIsConnection(Integer isConnection) { | ||
44 | + this.isConnection = isConnection; | ||
45 | + } | ||
46 | + | ||
39 | @Override | 47 | @Override |
40 | public String toString() { | 48 | public String toString() { |
41 | return "Wl_Attendace{" + | 49 | return "Wl_Attendace{" + |
cloud/mypulsar/src/main/java/com/example/mypulsar/bean/Wl_LinkModeBean.java
@@ -8,6 +8,7 @@ public class Wl_LinkModeBean { | @@ -8,6 +8,7 @@ public class Wl_LinkModeBean { | ||
8 | 8 | ||
9 | private String Field; | 9 | private String Field; |
10 | 10 | ||
11 | + private String DevicePara; | ||
11 | 12 | ||
12 | public String getModeName() { | 13 | public String getModeName() { |
13 | return ModeName; | 14 | return ModeName; |
@@ -33,6 +34,14 @@ public class Wl_LinkModeBean { | @@ -33,6 +34,14 @@ public class Wl_LinkModeBean { | ||
33 | Field = field; | 34 | Field = field; |
34 | } | 35 | } |
35 | 36 | ||
37 | + public String getDevicePara() { | ||
38 | + return DevicePara; | ||
39 | + } | ||
40 | + | ||
41 | + public void setDevicePara(String devicePara) { | ||
42 | + DevicePara = devicePara; | ||
43 | + } | ||
44 | + | ||
36 | @Override | 45 | @Override |
37 | public String toString() { | 46 | public String toString() { |
38 | return "Wl_LinkModeBean{" + | 47 | return "Wl_LinkModeBean{" + |
cloud/mypulsar/src/main/java/com/example/mypulsar/dao/DeviceDao.java
@@ -32,15 +32,8 @@ public interface DeviceDao { | @@ -32,15 +32,8 @@ public interface DeviceDao { | ||
32 | @Select("select * from Iot_Device where devId = #{devId}") | 32 | @Select("select * from Iot_Device where devId = #{devId}") |
33 | List<DeviceBean> getDevice(@Param("devId") String devId); | 33 | List<DeviceBean> getDevice(@Param("devId") String devId); |
34 | 34 | ||
35 | - //获取联动控制模板 | ||
36 | - @Select("select * from CalDevContrl ") | ||
37 | - List<CalDevContrl> getCalDevContrl(); | ||
38 | - | ||
39 | - @Select("select top 1 * from WL_Attendance where clint_id = #{clint_id} and isConnection =1 and clint_type =10") | ||
40 | - Wl_Attendace getAttendace(@Param("clint_id") String clint_id); | ||
41 | - | ||
42 | - @Select("select * from CalDevContrl where Devid = #{Devid} and ModelType =10 and Status = 1") | ||
43 | - List<CalDevContrl> getCalDevContrlWidthDevId(@Param("Devid") String devId); | 35 | + @Select("select top 1 value from Iot_Device where devId = #{devId} and code = 'va_temperature' ORDER BY time desc") |
36 | + Integer getDeviceTemp(@Param("devId") String devId); | ||
44 | 37 | ||
45 | @Select("select * from CalDevBeContrl where State = 1 and Id = #{Id}") | 38 | @Select("select * from CalDevBeContrl where State = 1 and Id = #{Id}") |
46 | CalDevBeContrl getCalDevBeControl(@Param("Id") String Id); | 39 | CalDevBeContrl getCalDevBeControl(@Param("Id") String Id); |
@@ -48,31 +41,41 @@ public interface DeviceDao { | @@ -48,31 +41,41 @@ public interface DeviceDao { | ||
48 | @Select("select top 1 * from CalDevBeContrl where State = 1 and ConDevId = #{devId}") | 41 | @Select("select top 1 * from CalDevBeContrl where State = 1 and ConDevId = #{devId}") |
49 | CalDevBeContrl getHWDevControl(@Param("devId") String devId); | 42 | CalDevBeContrl getHWDevControl(@Param("devId") String devId); |
50 | 43 | ||
51 | - @Select("select * from CalDevContrl where Devid = #{Devid} and Status = 1 and ModelType = 9") | ||
52 | - List<CalDevContrl> getTempCalWitdDevid(@Param("Devid") String devId); | ||
53 | - | ||
54 | - @Select("select top 1* from CalDevContrl where DevBeId = #{beId} and Status = 1 and ModelType = 9") | ||
55 | - CalDevContrl getTempDevice(@Param("beId") Integer beId); | 44 | + @Select("select top 1 * from WL_Attendance where clint_id = #{clint_id} and clint_type =10") |
45 | + Wl_Attendace getAttendace(@Param("clint_id") String clint_id); | ||
56 | 46 | ||
57 | - @Select("select clint_id\n" + | ||
58 | - "from WL_Attendance where school_id = 1085 and clint_type = 12 and state = 1") | ||
59 | - List<String> getHWDEvices(int i); | 47 | + /*** |
48 | + * @Description: 获取人感 | ||
49 | + * @Param: [devId] | ||
50 | + */ | ||
51 | + @Select("select * from CalDevContrl where Devid = #{Devid} and Status = 1 and ModelType =10") | ||
52 | + List<CalDevContrl> getCalDevContrlWidthDevId(@Param("Devid") String devId); | ||
53 | + | ||
54 | + /*** | ||
55 | + * @Description: 获取温感 | ||
56 | + * @Param: [devId] | ||
57 | + */ | ||
58 | + @Select({"select * from CalDevContrl where Devid = #{Devid} and Status = 1 and ModelType = 9"}) | ||
59 | + List<CalDevContrl> getTempCalWitdDevid(@Param("Devid") String devId); | ||
60 | 60 | ||
61 | + /** | ||
62 | + * 获取红外遥控控制命令 | ||
63 | + * @param ConDevId | ||
64 | + * @return | ||
65 | + */ | ||
61 | @Select("select TOP(1) ConValue from CalDevBeContrl where State = 1 and ConDevId = #{ConDevId}") | 66 | @Select("select TOP(1) ConValue from CalDevBeContrl where State = 1 and ConDevId = #{ConDevId}") |
62 | String getConBeValue(@Param("ConDevId") String ConDevId); | 67 | String getConBeValue(@Param("ConDevId") String ConDevId); |
63 | 68 | ||
64 | - | ||
65 | - @Select("select Top(1) InUserTime from CalDevContrl where Status = 1") | ||
66 | - String getInuserTime(); | ||
67 | - | ||
68 | - @Select("select clint_id from WL_Attendance where State = 1 and school_id = 1085 and clint_type = 12") | 69 | + /** |
70 | + * 获取所有红外遥控器 | ||
71 | + * @return | ||
72 | + */ | ||
73 | + @Select("select clint_id,school_id,name,isConnection from WL_Attendance where State = 1 and school_id = 1085 and clint_type = 12") | ||
69 | List<Wl_Attendace> getHWIds(); | 74 | List<Wl_Attendace> getHWIds(); |
70 | 75 | ||
71 | - | ||
72 | @Select("select * from WL_Attendance where state = 1 and school_id = 1085") | 76 | @Select("select * from WL_Attendance where state = 1 and school_id = 1085") |
73 | List<Wl_Attendace> getWL_AttendanceIds(); | 77 | List<Wl_Attendace> getWL_AttendanceIds(); |
74 | 78 | ||
75 | - | ||
76 | @Select("select Top(1)name from WL_Attendance where State = 1 and school_id = 1085 and clint_type = 12 and clint_id =#{clint_id} order by intime desc") | 79 | @Select("select Top(1)name from WL_Attendance where State = 1 and school_id = 1085 and clint_type = 12 and clint_id =#{clint_id} order by intime desc") |
77 | String getWLName(@Param("clint_id") String clint_id); | 80 | String getWLName(@Param("clint_id") String clint_id); |
78 | 81 | ||
@@ -82,11 +85,13 @@ public interface DeviceDao { | @@ -82,11 +85,13 @@ public interface DeviceDao { | ||
82 | 85 | ||
83 | List<Wl_LinkModeBean> getWL_LinkMode(@Param("SchoolId") String SchoolId); | 86 | List<Wl_LinkModeBean> getWL_LinkMode(@Param("SchoolId") String SchoolId); |
84 | 87 | ||
85 | - IotDevice getIotDeviceRecord(@Param("devId") String devId, @Param("value") String value,@Param("openTime") String openTime); | 88 | + IotDevice getIotDeviceAfterRecord(@Param("devId") String devId, @Param("value") String value,@Param("openTime") String openTime); |
86 | 89 | ||
87 | - List<Wl_Attendace> getHWAtts(); | 90 | + IotDevice getIotDeviceRecord(@Param("devId") String devId, @Param("value") String value); |
88 | 91 | ||
92 | + List<Wl_Attendace> getHWAtts(); | ||
89 | 93 | ||
94 | + CalDevContrl getTempDevice(@Param("beId") String beId); | ||
90 | 95 | ||
91 | 96 | ||
92 | } | 97 | } |
cloud/mypulsar/src/main/java/com/example/mypulsar/task/SchduledTasks.java
@@ -5,9 +5,8 @@ import com.alibaba.fastjson.JSONObject; | @@ -5,9 +5,8 @@ import com.alibaba.fastjson.JSONObject; | ||
5 | import com.example.mypulsar.bean.*; | 5 | import com.example.mypulsar.bean.*; |
6 | import com.example.mypulsar.campusDao.CampusDao; | 6 | import com.example.mypulsar.campusDao.CampusDao; |
7 | import com.example.mypulsar.dao.DeviceDao; | 7 | import com.example.mypulsar.dao.DeviceDao; |
8 | +import com.example.mypulsar.utils.DateFormatUtil; | ||
8 | import com.example.mypulsar.utils.HttpUtil; | 9 | import com.example.mypulsar.utils.HttpUtil; |
9 | -import com.example.mypulsar.utils.JsonUtils; | ||
10 | -import lombok.Data; | ||
11 | import lombok.extern.slf4j.Slf4j; | 10 | import lombok.extern.slf4j.Slf4j; |
12 | import org.dom4j.Document; | 11 | import org.dom4j.Document; |
13 | import org.dom4j.DocumentException; | 12 | import org.dom4j.DocumentException; |
@@ -36,16 +35,20 @@ public class SchduledTasks { | @@ -36,16 +35,20 @@ public class SchduledTasks { | ||
36 | 35 | ||
37 | public static Map<String, Date> conDevMap = new HashMap<>();//存储被控制的设备 | 36 | public static Map<String, Date> conDevMap = new HashMap<>();//存储被控制的设备 |
38 | 37 | ||
39 | - public static Map<String, Date> closeDevMap = new HashMap<>(); | ||
40 | - | ||
41 | - private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
42 | - | ||
43 | private String closeModel = "{\"mode\":\"0\",\"power\":\"0\",\"remote_id\":\"%s\",\"remote_index\":\"11272\",\"temp\":\"26\",\"wind\":\"0\"}"; | 38 | private String closeModel = "{\"mode\":\"0\",\"power\":\"0\",\"remote_id\":\"%s\",\"remote_index\":\"11272\",\"temp\":\"26\",\"wind\":\"0\"}"; |
44 | 39 | ||
45 | boolean isClose = false; | 40 | boolean isClose = false; |
46 | boolean outClose= false; | 41 | boolean outClose= false; |
47 | 42 | ||
48 | - @Scheduled(fixedRate = 60000) | 43 | + |
44 | + /*** | ||
45 | + * @Description: 每间隔2分钟关闭一次到点设备无人状态下设备 | ||
46 | + * @Param: [] | ||
47 | + * @return: void | ||
48 | + * @Author: xuquan | ||
49 | + * @Date: 2021/4/29 | ||
50 | + */ | ||
51 | + @Scheduled(fixedRate = 300*1000) | ||
49 | public void closeAttend() { | 52 | public void closeAttend() { |
50 | log.info(".......定时任务执行设备关闭.......,有在线遥控设备数量" + conDevMap.size()); | 53 | log.info(".......定时任务执行设备关闭.......,有在线遥控设备数量" + conDevMap.size()); |
51 | Iterator<Map.Entry<String, Date>> it = conDevMap.entrySet().iterator(); | 54 | Iterator<Map.Entry<String, Date>> it = conDevMap.entrySet().iterator(); |
@@ -58,17 +61,19 @@ public class SchduledTasks { | @@ -58,17 +61,19 @@ public class SchduledTasks { | ||
58 | //获取红外绑定的遥控器ID | 61 | //获取红外绑定的遥控器ID |
59 | String conValue = getRemoteId(deviceDao.getConBeValue(conBeDeviceId)); | 62 | String conValue = getRemoteId(deviceDao.getConBeValue(conBeDeviceId)); |
60 | Date openTime = entry.getValue(); | 63 | Date openTime = entry.getValue(); |
61 | - log.info("在线红外设备:" + name + "---在线时间:" + simpleDateFormat.format(openTime)+" 当前时间:"+ simpleDateFormat.format(new Date())); | 64 | + //空调开启时间 |
65 | + String openTimeStr = DateFormatUtil.dateFormatString(openTime,"yyyy-MM-dd HH:mm:ss"); | ||
66 | + String nowTimeStr = DateFormatUtil.dateFormatString(new Date(),"yyyy-MM-dd HH:mm:ss"); | ||
67 | + log.info("在线红外设备:" + name + "---在线时间:" + openTimeStr +" 当前时间:"+ nowTimeStr); | ||
62 | //获取红外设备 | 68 | //获取红外设备 |
63 | CalDevBeContrl hwDevice = deviceDao.getHWDevControl(conBeDeviceId); | 69 | CalDevBeContrl hwDevice = deviceDao.getHWDevControl(conBeDeviceId); |
64 | if(hwDevice !=null){ | 70 | if(hwDevice !=null){ |
65 | - Integer beId = hwDevice.getId(); | 71 | + String beId = hwDevice.getId() + ""; |
66 | //获取温感设备 | 72 | //获取温感设备 |
67 | CalDevContrl calDevContrl = deviceDao.getTempDevice(beId); | 73 | CalDevContrl calDevContrl = deviceDao.getTempDevice(beId); |
68 | //无人状态直接关闭 | 74 | //无人状态直接关闭 |
69 | - boolean isOk = convertDeviceRecord(calDevContrl,openTime); | 75 | + boolean isOk = convertDeviceRecord(calDevContrl,openTimeStr); |
70 | if(isOk){ | 76 | if(isOk){ |
71 | - log.info("开始执行关闭命令, remote_id: {}",conValue); | ||
72 | String response = HttpUtil.addAirCode(String.format(closeModel, conValue), conBeDeviceId, name); | 77 | String response = HttpUtil.addAirCode(String.format(closeModel, conValue), conBeDeviceId, name); |
73 | try{ | 78 | try{ |
74 | // 将字符串转为XML | 79 | // 将字符串转为XML |
@@ -80,7 +85,7 @@ public class SchduledTasks { | @@ -80,7 +85,7 @@ public class SchduledTasks { | ||
80 | log.info("请求结果:" + title); | 85 | log.info("请求结果:" + title); |
81 | if(title.equals("200")){ | 86 | if(title.equals("200")){ |
82 | log.info("关闭成功:设备 :{},遥控ID: {}",name,conValue); | 87 | log.info("关闭成功:设备 :{},遥控ID: {}",name,conValue); |
83 | - conDevMap.remove(conBeDeviceId); | 88 | + it.remove(); |
84 | } | 89 | } |
85 | } catch (DocumentException e) { | 90 | } catch (DocumentException e) { |
86 | e.printStackTrace(); | 91 | e.printStackTrace(); |
@@ -91,141 +96,47 @@ public class SchduledTasks { | @@ -91,141 +96,47 @@ public class SchduledTasks { | ||
91 | } | 96 | } |
92 | } | 97 | } |
93 | } | 98 | } |
94 | - if (!outClose){ | ||
95 | - initWlModeOut(); | ||
96 | - } | ||
97 | - } | ||
98 | - | ||
99 | - | ||
100 | - /** | ||
101 | - * 解析上报记录,判断空间是否是无人状态。 | ||
102 | - * 条件:第一次上报无人后,五分钟内没有上报有人记录,则为无人 | ||
103 | - * @param calDevContrl | ||
104 | - * @param openTime | ||
105 | - * @return | ||
106 | - */ | ||
107 | - private boolean convertDeviceRecord(CalDevContrl calDevContrl,Date openTime){ | ||
108 | - if(calDevContrl != null){ | ||
109 | - List<String> list = new ArrayList(); | ||
110 | - Map map = new HashMap(); | ||
111 | - //温感设备ID | ||
112 | - String tempDevId =calDevContrl.getDevid(); | ||
113 | - //空调开启时间 | ||
114 | - String openTimeStr = simpleDateFormat.format(openTime); | ||
115 | - //温感关联的人感设备 | ||
116 | - String assDevice = calDevContrl.getAssDevice(); | ||
117 | - String[] assDeviceIds = assDevice.split(","); | ||
118 | - for (int i = 0; i < assDeviceIds.length; i++) { | ||
119 | - String deviceId = assDeviceIds[i]; | ||
120 | - //过滤温感设备ID | ||
121 | - if (!deviceId.equals(tempDevId)) { | ||
122 | - list.add(deviceId); | ||
123 | - Wl_Attendace attendance = deviceDao.getAttendace(deviceId); | ||
124 | - if(attendance==null){ | ||
125 | - map.put(deviceId,"true"); | ||
126 | - continue; | ||
127 | - } | ||
128 | - //取得空调开启时间,离最近一次上报无人记录 | ||
129 | - IotDevice iotDevice = deviceDao.getIotDeviceRecord(deviceId, "无人", openTimeStr); | ||
130 | - log.info("空调开启时间最近一次,无人记录,时间:{}, 设备信息:{}",openTime,JSON.toJSON(iotDevice)); | ||
131 | - if(iotDevice != null){ | ||
132 | - //五分钟内没有上报有人记录 | ||
133 | - String afterTime5 = getDateAddMinute(iotDevice.getTime(),5); | ||
134 | - iotDevice = deviceDao.getIotDeviceRecord(deviceId,"有人",afterTime5); | ||
135 | - log.info("5分钟之后的有人记录,时间:{}, 设备信息:{}",afterTime5,JSON.toJSON(iotDevice)); | ||
136 | - if(iotDevice ==null){ | ||
137 | - map.put(deviceId,"true"); | ||
138 | - }else{ | ||
139 | - map.put(deviceId,"false"); | ||
140 | - } | ||
141 | - }else{ | ||
142 | - map.put(deviceId,"false"); | ||
143 | - } | ||
144 | - } | ||
145 | - } | ||
146 | - log.info("设备信息:{}, 上报记录: {}",JSON.toJSON(list),JSON.toJSON(map)); | ||
147 | - //false 无人 true 有人,当前后人感都为无人下,返回true | ||
148 | - if(!CollectionUtils.isEmpty(list) && !map.isEmpty()){ | ||
149 | - if(map.get(list.get(0)).equals("true")&& map.get(list.get(1)).equals("true")){ | ||
150 | - return true; | ||
151 | - } | ||
152 | - } | ||
153 | - } | ||
154 | - return false; | ||
155 | } | 99 | } |
156 | 100 | ||
157 | - /** | ||
158 | - * 日期叠加计算,以月为单位:整数 | ||
159 | - * @param date 起始时间 | ||
160 | - * @return | ||
161 | - */ | ||
162 | - public static String getDateAddMinute(String date,int length) { | ||
163 | - Date date1 = stringFormatDate(date,"yyyy-MM-dd HH:mm:ss"); | ||
164 | - Calendar cal = Calendar.getInstance(); | ||
165 | - cal.setTime(date1);//设置起时间 | ||
166 | - cal.add(Calendar.MINUTE,length); | ||
167 | - String strDate = dateFormatString(cal.getTime(),"yyyy-MM-dd HH:mm:ss"); | ||
168 | - return strDate; | ||
169 | - } | ||
170 | 101 | ||
171 | - /** | ||
172 | - * String 转 Date : 指定格式:pattern | ||
173 | - * @param date | ||
174 | - * @param pattern | ||
175 | - * @return | 102 | + /*** |
103 | + * @Description: 每间每隔1分钟执行一次到点关闭 | ||
104 | + * @Param: [] | ||
105 | + * @return: void | ||
106 | + * @Author: xuquan | ||
107 | + * @Date: 2021/4/29 | ||
176 | */ | 108 | */ |
177 | - public static Date stringFormatDate(String date, String pattern) { | ||
178 | - SimpleDateFormat simpleDateFormat = null; | ||
179 | - if (date != null) { | ||
180 | - try{ | ||
181 | - simpleDateFormat = new SimpleDateFormat(pattern); | ||
182 | - Date retultDate = simpleDateFormat.parse(date); | ||
183 | - return retultDate; | ||
184 | - }catch (ParseException e){ | ||
185 | - e.printStackTrace(); | ||
186 | - } | 109 | + @Scheduled(fixedDelay = 60*1000) |
110 | + public void closeDevice(){ | ||
111 | + if (!outClose){ | ||
112 | + initWlModeOut(); | ||
187 | } | 113 | } |
188 | - return null; | ||
189 | } | 114 | } |
190 | 115 | ||
191 | - /** | ||
192 | - * Date转 String : 指定格式:pattern | ||
193 | - * @param date | ||
194 | - * @param pattern | ||
195 | - * @return | 116 | + /*** |
117 | + * @Description: 在06:00-- 22:00之外,每隔一个小时执行一次计划之外关闭 | ||
118 | + * @Param: [] | ||
119 | + * @return: void | ||
120 | + * @Author: xuquan | ||
121 | + * @Date: 2021/4/29 | ||
196 | */ | 122 | */ |
197 | - public static String dateFormatString(Date date,String pattern) { | ||
198 | - SimpleDateFormat df = null; | ||
199 | - String returnValue = null; | ||
200 | - if (date != null) { | ||
201 | - df = new SimpleDateFormat(pattern); | ||
202 | - returnValue = df.format(date); | ||
203 | - } | ||
204 | - return returnValue; | ||
205 | - } | ||
206 | - | ||
207 | - | ||
208 | - @Scheduled(cron = "0 0/30 * * * ?") | 123 | + @Scheduled(cron = "0 0 * * * ?") |
209 | public void closeAttendOut() { | 124 | public void closeAttendOut() { |
210 | int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); | 125 | int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); |
211 | - if (!isClose && hour < 23 && hour > 5){ | 126 | + if (!isClose && hour > 22 && hour < 6){ |
212 | initWlMode(); | 127 | initWlMode(); |
213 | } | 128 | } |
214 | } | 129 | } |
215 | 130 | ||
216 | - public static void main(String[] args) { | ||
217 | - System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); | ||
218 | - } | ||
219 | - | ||
220 | /** | 131 | /** |
221 | * 根据物联模板判断是否关闭 | 132 | * 根据物联模板判断是否关闭 |
222 | */ | 133 | */ |
223 | public void initWlModeOut() { | 134 | public void initWlModeOut() { |
224 | try { | 135 | try { |
225 | - isClose = true; | 136 | + outClose = true; |
226 | //获取有效的模板 | 137 | //获取有效的模板 |
227 | List<Wl_LinkModeBean> wl_linkModes = deviceDao.getWL_LinkMode("1085"); | 138 | List<Wl_LinkModeBean> wl_linkModes = deviceDao.getWL_LinkMode("1085"); |
228 | - if (null != wl_linkModes) { | 139 | + if (!CollectionUtils.isEmpty(wl_linkModes)) { |
229 | for (int i = 0; i < wl_linkModes.size(); i++) { | 140 | for (int i = 0; i < wl_linkModes.size(); i++) { |
230 | Wl_LinkModeBean wl_linkModeBean = wl_linkModes.get(i); | 141 | Wl_LinkModeBean wl_linkModeBean = wl_linkModes.get(i); |
231 | String field = wl_linkModeBean.getField();//场地id | 142 | String field = wl_linkModeBean.getField();//场地id |
@@ -239,39 +150,39 @@ public class SchduledTasks { | @@ -239,39 +150,39 @@ public class SchduledTasks { | ||
239 | String weekStr = jsonObject.getString("Week"); | 150 | String weekStr = jsonObject.getString("Week"); |
240 | String[] weeks = weekStr.split(","); | 151 | String[] weeks = weekStr.split(","); |
241 | String endTime = jsonObject.getString("EndTime"); | 152 | String endTime = jsonObject.getString("EndTime"); |
242 | - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); | ||
243 | - SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); | ||
244 | int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; | 153 | int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; |
245 | for (int k = 0; k < weeks.length; k++) { | 154 | for (int k = 0; k < weeks.length; k++) { |
246 | int week = Integer.parseInt(weeks[k]); | 155 | int week = Integer.parseInt(weeks[k]); |
247 | if (week == indexWeek) { | 156 | if (week == indexWeek) { |
248 | - try { | ||
249 | - //截至时间 | ||
250 | - Date endDate = simpleDateFormat.parse(endTime); | ||
251 | - Date endDate2 = getDateByTime(3,endDate); | ||
252 | - long entTime = endDate.getTime(); | ||
253 | - long entTime2 = endDate2.getTime(); | ||
254 | - //当前时间 | ||
255 | - Date date = simpleDateFormat1.parse(new Date().getHours() + ":" + new Date().getMinutes() + ":" + new Date().getSeconds()); | ||
256 | - long indexTime = date.getTime(); | ||
257 | - //当前时间等于结束时间触发一次指令 | ||
258 | - if (indexTime > entTime && indexTime < entTime2) { | ||
259 | - //关闭所有设备 | ||
260 | - for (int l = 0; l < fields.length; l++) { | ||
261 | - String fieldId = fields[l]; | ||
262 | - //获取红外遥控器 | ||
263 | - List<Wl_Attendace> clintIds = deviceDao.getHWAttsWithRoomId(fieldId); | ||
264 | - closeAllDevice(clintIds); | ||
265 | - } | 157 | + //截至时间 |
158 | + String endDateStr = DateFormatUtil.dateFormatString(new Date(),"yyyy-MM-dd"); | ||
159 | + endDateStr = endDateStr +" "+ endTime; | ||
160 | + Date endDate = DateFormatUtil.stringFormatDate(endDateStr,"yyyy-MM-dd HH:mm"); | ||
161 | + long endDateTime = endDate.getTime(); | ||
162 | + //截至时间后2分钟 | ||
163 | + Date after2Date = getDateByTime(3,endDate); | ||
164 | + long after2DateTime = after2Date.getTime(); | ||
165 | + //当前时间 | ||
166 | + Date now = new Date(); | ||
167 | + String nowStr = DateFormatUtil.dateFormatString(now,"yyyy-MM-dd HH:mm"); | ||
168 | + Date dateNow = DateFormatUtil.stringFormatDate(nowStr,"yyyy-MM-dd HH:mm"); | ||
169 | + long nowTime = dateNow.getTime(); | ||
170 | + //当前时间等于结束时间触发一次指令 | ||
171 | + if (nowTime > endDateTime && nowTime < after2DateTime) { | ||
172 | + log.info("计划结束---,开始执行关闭空调任务-----"); | ||
173 | + //关闭所有设备 | ||
174 | + for (int l = 0; l < fields.length; l++) { | ||
175 | + String fieldId = fields[l]; | ||
176 | + //获取红外遥控器 | ||
177 | + List<Wl_Attendace> clintIds = deviceDao.getHWAttsWithRoomId(fieldId); | ||
178 | + closeAllDevice(clintIds); | ||
266 | } | 179 | } |
267 | - } catch (ParseException e) { | ||
268 | - log.info("关闭设备异常: ",e); | ||
269 | } | 180 | } |
270 | } | 181 | } |
271 | } | 182 | } |
272 | } | 183 | } |
273 | } | 184 | } |
274 | - } catch (JSONException e) { | 185 | + } catch (Exception e) { |
275 | log.info("关闭设备异常: ",e); | 186 | log.info("关闭设备异常: ",e); |
276 | } | 187 | } |
277 | } | 188 | } |
@@ -279,13 +190,13 @@ public class SchduledTasks { | @@ -279,13 +190,13 @@ public class SchduledTasks { | ||
279 | } catch (Exception e) { | 190 | } catch (Exception e) { |
280 | log.info("关闭设备异常: ",e); | 191 | log.info("关闭设备异常: ",e); |
281 | } | 192 | } |
282 | - isClose = false;//保证条件一直在执行 | 193 | + outClose = false;//保证条件一直在执行 |
283 | } | 194 | } |
284 | 195 | ||
285 | public static Date getDateByTime(int length, Date date){ | 196 | public static Date getDateByTime(int length, Date date){ |
286 | Calendar cal = Calendar.getInstance(); | 197 | Calendar cal = Calendar.getInstance(); |
287 | cal.setTime(date);//设置起时间 | 198 | cal.setTime(date);//设置起时间 |
288 | - cal.add(Calendar.MINUTE,length);//把日期往后增加 | 199 | + cal.add(Calendar.MINUTE,length);//把日期往后增加3分钟 |
289 | return cal.getTime(); | 200 | return cal.getTime(); |
290 | } | 201 | } |
291 | 202 | ||
@@ -338,7 +249,6 @@ public class SchduledTasks { | @@ -338,7 +249,6 @@ public class SchduledTasks { | ||
338 | long starTime = startDate.getTime(); | 249 | long starTime = startDate.getTime(); |
339 | long indexTime = date.getTime(); | 250 | long indexTime = date.getTime(); |
340 | long entTime = endDate.getTime(); | 251 | long entTime = endDate.getTime(); |
341 | - | ||
342 | if (indexTime < starTime || indexTime > entTime) {//在时间之外 | 252 | if (indexTime < starTime || indexTime > entTime) {//在时间之外 |
343 | //关闭所有设备 | 253 | //关闭所有设备 |
344 | for (int l = 0; l < fields.length; l++) { | 254 | for (int l = 0; l < fields.length; l++) { |
@@ -362,6 +272,9 @@ public class SchduledTasks { | @@ -362,6 +272,9 @@ public class SchduledTasks { | ||
362 | } else { | 272 | } else { |
363 | //获取红外遥控器 | 273 | //获取红外遥控器 |
364 | List<Wl_Attendace> clintIds = deviceDao.getHWIds(); | 274 | List<Wl_Attendace> clintIds = deviceDao.getHWIds(); |
275 | + if(!CollectionUtils.isEmpty(clintIds)){ | ||
276 | + return; | ||
277 | + } | ||
365 | closeAllDevice(clintIds); | 278 | closeAllDevice(clintIds); |
366 | } | 279 | } |
367 | } catch (Exception e) { | 280 | } catch (Exception e) { |
@@ -416,4 +329,101 @@ public class SchduledTasks { | @@ -416,4 +329,101 @@ public class SchduledTasks { | ||
416 | } | 329 | } |
417 | 330 | ||
418 | 331 | ||
332 | + /** | ||
333 | + * 解析上报记录,判断空间是否是无人状态。 | ||
334 | + * 条件:第一次上报无人后,五分钟内没有上报有人记录,则为无人 | ||
335 | + * @param calDevContrl | ||
336 | + * @param openTimeStr | ||
337 | + * @return | ||
338 | + */ | ||
339 | + private boolean convertDeviceRecord(CalDevContrl calDevContrl,String openTimeStr){ | ||
340 | + if(calDevContrl != null){ | ||
341 | + List<String> list = new ArrayList(); | ||
342 | + Map<String,Integer> map = new HashMap(); | ||
343 | + //温感设备ID | ||
344 | + String tempDevId =calDevContrl.getDevid(); | ||
345 | + //温感关联的人感设备 | ||
346 | + String assDevice = calDevContrl.getAssDevice(); | ||
347 | + String[] assDeviceIds = assDevice.split(","); | ||
348 | + for (int i = 0; i < assDeviceIds.length; i++) { | ||
349 | + String deviceId = assDeviceIds[i]; | ||
350 | + //过滤温感设备ID | ||
351 | + if (!deviceId.equals(tempDevId)) { | ||
352 | + list.add(deviceId); | ||
353 | + //获取 | ||
354 | + Wl_Attendace attendance = deviceDao.getAttendace(deviceId); | ||
355 | + if(attendance==null){ | ||
356 | + log.warn("设备ID["+deviceId+"],未绑定。"); | ||
357 | + map.put(deviceId,1); | ||
358 | + continue; | ||
359 | + } | ||
360 | + String deviceName = attendance.getName(); | ||
361 | + Integer isConnection = attendance.getIsConnection(); | ||
362 | + if(isConnection.intValue()!=1){ | ||
363 | + log.warn("设备["+deviceName+"],离线跳过。"); | ||
364 | + map.put(deviceId,1); | ||
365 | + continue; | ||
366 | + } | ||
367 | + //取设备最近一次上报无人记录时间, | ||
368 | + IotDevice front = deviceDao.getIotDeviceRecord(deviceId, "无人"); | ||
369 | + String noTime = front.getTime(); | ||
370 | + //比较两者时间先后,无人时间 < 空调开启时间,则取最近10分钟是否有人记录上报 | ||
371 | + if(DateFormatUtil.timeCompare(noTime,openTimeStr) == -1){ | ||
372 | + log.info("------- 最近无人时间小于空调开启时间 ------"); | ||
373 | +// String afterTime = getDateAddMinute(noTime,5); | ||
374 | + log.info("{},最近无人时间:{},空调开启时间:{},10分钟后时间:{}",deviceName,noTime,openTimeStr,noTime); | ||
375 | + IotDevice iotDevice = deviceDao.getIotDeviceAfterRecord(deviceId, "有人", noTime); | ||
376 | + log.info("10分钟后有人,记录信息:{}",JSON.toJSON(iotDevice)); | ||
377 | + if(iotDevice == null){ | ||
378 | + map.put(deviceId,1); | ||
379 | + }else{ | ||
380 | + map.put(deviceId,2); | ||
381 | + } | ||
382 | + }else{//比较两者时间先后,无人时间 > 空调开启时间,则取空调开启后最近的无人记录上报 | ||
383 | + log.info("------- 最近无人时间大于空调开启时间 ------"); | ||
384 | + log.info("{}, 开启时间:{}",deviceName, openTimeStr); | ||
385 | + IotDevice iotDevice = deviceDao.getIotDeviceAfterRecord(deviceId, "无人", openTimeStr); | ||
386 | + log.info("空调开启后,最近无人记录,记录信息:{}",JSON.toJSON(iotDevice)); | ||
387 | + if(iotDevice != null) { | ||
388 | + noTime = iotDevice.getTime(); | ||
389 | +// String afterTime = getDateAddMinute(noTime, 5); | ||
390 | + log.info("{},最近无人时间: {}",deviceName,noTime); | ||
391 | + IotDevice after = deviceDao.getIotDeviceAfterRecord(deviceId, "有人", noTime); | ||
392 | + log.info("10分钟后有人,记录信息:{}",JSON.toJSON(after)); | ||
393 | + if (after == null) { | ||
394 | + map.put(deviceId, 1); | ||
395 | + } else { | ||
396 | + map.put(deviceId, 2); | ||
397 | + } | ||
398 | + }else { | ||
399 | + map.put(deviceId, 2); | ||
400 | + } | ||
401 | + } | ||
402 | + } | ||
403 | + } | ||
404 | + log.info("上报记录:"+JSON.toJSON(map)); | ||
405 | + //false 无人 true 有人,当前后人感都为无人下,返回true | ||
406 | + if(!CollectionUtils.isEmpty(list) && !map.isEmpty()){ | ||
407 | + if(map.get(list.get(0)).intValue()== 1 && map.get(list.get(1)).intValue()==1){ | ||
408 | + return true; | ||
409 | + } | ||
410 | + } | ||
411 | + } | ||
412 | + return false; | ||
413 | + } | ||
414 | + | ||
415 | + /** | ||
416 | + * 日期叠加计算,以月为单位:整数 | ||
417 | + * @param date 起始时间 | ||
418 | + * @return | ||
419 | + */ | ||
420 | + public static String getDateAddMinute(String date,int length) { | ||
421 | + Date date1 = DateFormatUtil.stringFormatDate(date,"yyyy-MM-dd HH:mm:ss"); | ||
422 | + Calendar cal = Calendar.getInstance(); | ||
423 | + cal.setTime(date1);//设置起时间 | ||
424 | + cal.add(Calendar.MINUTE,length); | ||
425 | + String strDate = DateFormatUtil.dateFormatString(cal.getTime(),"yyyy-MM-dd HH:mm:ss"); | ||
426 | + return strDate; | ||
427 | + } | ||
428 | + | ||
419 | } | 429 | } |
cloud/mypulsar/src/main/java/com/example/mypulsar/utils/ControlUtils.java
1 | package com.example.mypulsar.utils; | 1 | package com.example.mypulsar.utils; |
2 | 2 | ||
3 | import com.alibaba.fastjson.JSON; | 3 | import com.alibaba.fastjson.JSON; |
4 | -import com.example.mypulsar.bean.CalDevBeContrl; | ||
5 | -import com.example.mypulsar.bean.CalDevContrl; | ||
6 | -import com.example.mypulsar.bean.CloseClintBean; | ||
7 | -import com.example.mypulsar.bean.DeviceBean; | 4 | +import com.alibaba.fastjson.TypeReference; |
5 | +import com.example.mypulsar.bean.*; | ||
8 | import com.example.mypulsar.dao.DeviceDao; | 6 | import com.example.mypulsar.dao.DeviceDao; |
9 | import com.example.mypulsar.task.SchduledTasks; | 7 | import com.example.mypulsar.task.SchduledTasks; |
10 | -import io.micrometer.core.instrument.util.JsonUtils; | ||
11 | import lombok.extern.slf4j.Slf4j; | 8 | import lombok.extern.slf4j.Slf4j; |
12 | import org.springframework.boot.configurationprocessor.json.JSONArray; | 9 | import org.springframework.boot.configurationprocessor.json.JSONArray; |
13 | import org.springframework.boot.configurationprocessor.json.JSONException; | 10 | import org.springframework.boot.configurationprocessor.json.JSONException; |
14 | import org.springframework.boot.configurationprocessor.json.JSONObject; | 11 | import org.springframework.boot.configurationprocessor.json.JSONObject; |
15 | import org.springframework.util.CollectionUtils; | 12 | import org.springframework.util.CollectionUtils; |
16 | import org.springframework.util.StringUtils; | 13 | import org.springframework.util.StringUtils; |
17 | -import springfox.documentation.spring.web.json.Json; | ||
18 | 14 | ||
19 | import java.text.ParseException; | 15 | import java.text.ParseException; |
20 | import java.text.SimpleDateFormat; | 16 | import java.text.SimpleDateFormat; |
21 | import java.util.*; | 17 | import java.util.*; |
18 | +import java.util.stream.Collectors; | ||
22 | 19 | ||
23 | @Slf4j | 20 | @Slf4j |
24 | public class ControlUtils { | 21 | public class ControlUtils { |
@@ -63,7 +60,7 @@ public class ControlUtils { | @@ -63,7 +60,7 @@ public class ControlUtils { | ||
63 | try { | 60 | try { |
64 | //联动的时间范围,[{"Week":"5","StartTime":"14:02","EndTime":"14:06"}] | 61 | //联动的时间范围,[{"Week":"5","StartTime":"14:02","EndTime":"14:06"}] |
65 | if(StringUtils.isEmpty(cal.getInUserTime())){ | 62 | if(StringUtils.isEmpty(cal.getInUserTime())){ |
66 | - log.info("人感控制设备ID: {},未设置联动计划。",cal.getDevid()); | 63 | + log.error("人感控制设备ID: {},未设置联动计划。",cal.getDevid()); |
67 | continue; | 64 | continue; |
68 | } | 65 | } |
69 | String inUseTime =cal.getInUserTime(); | 66 | String inUseTime =cal.getInUserTime(); |
@@ -79,7 +76,6 @@ public class ControlUtils { | @@ -79,7 +76,6 @@ public class ControlUtils { | ||
79 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); | 76 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); |
80 | SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); | 77 | SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); |
81 | int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; | 78 | int indexWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; |
82 | - log.info("周计划日:{},当前日期:周:{}",weekStr,indexWeek); | ||
83 | for (int j = 0; j < weeks.length; j++) { | 79 | for (int j = 0; j < weeks.length; j++) { |
84 | int week = Integer.parseInt(weeks[j]); | 80 | int week = Integer.parseInt(weeks[j]); |
85 | if (week == indexWeek) { | 81 | if (week == indexWeek) { |
@@ -105,125 +101,61 @@ public class ControlUtils { | @@ -105,125 +101,61 @@ public class ControlUtils { | ||
105 | } | 101 | } |
106 | } | 102 | } |
107 | } catch (JSONException e) { | 103 | } catch (JSONException e) { |
108 | - e.printStackTrace(); | 104 | + log.error("解析联动计划失败。",e); |
109 | } catch (ParseException e) { | 105 | } catch (ParseException e) { |
110 | - e.printStackTrace(); | 106 | + log.error("解析联动计划失败。",e); |
111 | } | 107 | } |
112 | } | 108 | } |
113 | } | 109 | } |
114 | 110 | ||
115 | - /** | ||
116 | - * @param cal 人体感应器 | ||
117 | - * @param deviceBean 控制设备 | ||
118 | - */ | ||
119 | private void calCompre(CalDevContrl cal, DeviceBean deviceBean) { | 111 | private void calCompre(CalDevContrl cal, DeviceBean deviceBean) { |
120 | if (deviceBean.getValue().equals("无人")){ | 112 | if (deviceBean.getValue().equals("无人")){ |
121 | return; | 113 | return; |
122 | } | 114 | } |
123 | - log.info("温度是否达标:,关联设备:{}",cal.getAssDevice()); | ||
124 | -// //温度符合要求 | ||
125 | - boolean isok = false; | ||
126 | - //人感设备对应的关联联动设备 | 115 | + Integer tempear = null; |
127 | if (!StringUtils.isEmpty(cal.getAssDevice())) { | 116 | if (!StringUtils.isEmpty(cal.getAssDevice())) { |
128 | String[] devices = cal.getAssDevice().split(","); | 117 | String[] devices = cal.getAssDevice().split(","); |
129 | for (int i = 0; i < devices.length; i++) { | 118 | for (int i = 0; i < devices.length; i++) { |
130 | String device = devices[i]; | 119 | String device = devices[i]; |
131 | - //取出湿度传感器设备 | ||
132 | - List<CalDevContrl> calDevContrls = deviceDao.getTempCalWitdDevid(device); | ||
133 | - if(!CollectionUtils.isEmpty(calDevContrls)){ | ||
134 | - for (int j = 0; j < calDevContrls.size(); j++) { | ||
135 | - String tempDevId = calDevContrls.get(j).getDevid(); | ||
136 | - if (tempDevices.containsKey(tempDevId)) { | ||
137 | - //温度记录了 | ||
138 | - int tempear = tempDevices.get(tempDevId); | ||
139 | - log.info("有温度记录:"+tempear); | ||
140 | - isok = tempIsOk(tempear, calDevContrls.get(j)); | ||
141 | - } else { | ||
142 | - //沒有记录溫度按照28度比较 | ||
143 | - log.info("有温度记录:28"); | ||
144 | - isok =tempIsOk(28, calDevContrls.get(j)); | ||
145 | - } | ||
146 | - } | ||
147 | - } | ||
148 | - } | ||
149 | - if(isok){ | ||
150 | - startDevice(cal,deviceBean.getValue()); | ||
151 | - } | ||
152 | - } | ||
153 | - } | ||
154 | - | ||
155 | - /** | ||
156 | - * 计算温度是否达标 | ||
157 | - * | ||
158 | - * @param assDevice | ||
159 | - */ | ||
160 | - private synchronized boolean calTemp(String assDevice) { | ||
161 | - if (!StringUtils.isEmpty(assDevice)) { | ||
162 | - String[] devices = assDevice.split(","); | ||
163 | - for (int i = 0; i < devices.length; i++) { | ||
164 | - String device = devices[i]; | ||
165 | - //湿度传感器设备 | ||
166 | List<CalDevContrl> calDevContrls = deviceDao.getTempCalWitdDevid(device); | 120 | List<CalDevContrl> calDevContrls = deviceDao.getTempCalWitdDevid(device); |
167 | - if(!CollectionUtils.isEmpty(calDevContrls)){ | ||
168 | - for (int j = 0; j < calDevContrls.size(); j++) { | ||
169 | - String tempDevId = calDevContrls.get(j).getDevid(); | ||
170 | - if (tempDevices.containsKey(tempDevId)) { | ||
171 | - //温度记录了 | ||
172 | - int tempear = tempDevices.get(tempDevId); | ||
173 | - log.info("有温度记录:"+tempear); | ||
174 | - return tempIsOk(tempear, calDevContrls.get(j)); | ||
175 | - } else { | ||
176 | - //沒有记录溫度按照28度比较 | ||
177 | - log.info("有温度记录:28"); | ||
178 | - return tempIsOk(28, calDevContrls.get(j)); | ||
179 | - } | 121 | + if (!CollectionUtils.isEmpty(calDevContrls)) { |
122 | + String tempDevId = calDevContrls.get(0).getDevid(); | ||
123 | + tempear = deviceDao.getDeviceTemp(tempDevId); | ||
124 | + if (tempear != null) { | ||
125 | + tempIsOk(tempear.intValue(), calDevContrls.get(0), cal); | ||
126 | + log.info("有温度上报记录:{}", tempear); | ||
127 | + return; | ||
128 | + }else{ | ||
129 | + log.info("无温度上报记录:按默认26"); | ||
130 | + tempIsOk(26, calDevContrls.get(0), cal); | ||
131 | + return; | ||
180 | } | 132 | } |
181 | } | 133 | } |
182 | } | 134 | } |
183 | } | 135 | } |
184 | - return false; | ||
185 | } | 136 | } |
186 | 137 | ||
187 | /** | 138 | /** |
188 | - * 温度比较 | 139 | + * 温度比较, 根据条件开启 |
189 | * @param tempear | 140 | * @param tempear |
190 | - * @param calDevContrl | 141 | + * @param tempDev |
191 | * @return | 142 | * @return |
192 | */ | 143 | */ |
193 | - private boolean tempIsOk(int tempear, CalDevContrl calDevContrl) { | ||
194 | - log.info("温度比较,温感设备信息:"+ JSON.toJSONString(calDevContrl)); | ||
195 | - if(calDevContrl.getComPre() ==1){ | ||
196 | - if (tempear <= Integer.parseInt(calDevContrl.getThreValue())) { | ||
197 | - log.info("温度比较: 实际温度:{},小于制热临界值:{},准备开启制热。",tempear,calDevContrl.getThreValue()); | ||
198 | - return true; | 144 | + private void tempIsOk(int tempear, CalDevContrl tempDev,CalDevContrl preDev) { |
145 | + //制热 comPre=1 ;threValue 临界值 | ||
146 | + if(tempDev.getComPre() ==1){ | ||
147 | + if (tempear <= Integer.parseInt(tempDev.getThreValue())) { | ||
148 | + log.info("温度比较: 实际温度:{}, 小于制热临界值:{}, 准备开启制热。",tempear,tempDev.getThreValue()); | ||
149 | + startDevice(preDev,1); | ||
199 | } | 150 | } |
200 | } | 151 | } |
201 | - if(calDevContrl.getComPre() ==3){ | ||
202 | - if (tempear >= Integer.parseInt(calDevContrl.getThreValue())) { | ||
203 | - log.info("温度比较: 实际温度:{},大于制制冷临界值:{},准备开启制冷。",tempear,calDevContrl.getThreValue()); | ||
204 | - return true; | 152 | + //制冷 comPre=3 threValue 临界值 |
153 | + if(tempDev.getComPre() ==3){ | ||
154 | + if (tempear >= Integer.parseInt(tempDev.getThreValue())) { | ||
155 | + log.info("温度比较: 实际温度:{}, 大于制制冷临界值:{},准备开启制冷。",tempear,tempDev.getThreValue()); | ||
156 | + startDevice(preDev,0); | ||
205 | } | 157 | } |
206 | } | 158 | } |
207 | - return false; | ||
208 | - } | ||
209 | - | ||
210 | - /** | ||
211 | - * 移除设备 | ||
212 | - * | ||
213 | - * @param calDevContrl | ||
214 | - */ | ||
215 | - private void removeSet(CalDevContrl calDevContrl) { | ||
216 | - | ||
217 | - Iterator<CalDevContrl> calDevContrlIterator = deviceSet.iterator(); | ||
218 | - | ||
219 | - while (calDevContrlIterator.hasNext()) { | ||
220 | - | ||
221 | - CalDevContrl calDevContrl1 = calDevContrlIterator.next(); | ||
222 | - if (calDevContrl1.getDevid().equals(calDevContrl.getDevid()) && calDevContrl.getComPre() == calDevContrl1.getComPre()) { | ||
223 | - calDevContrlIterator.remove(); | ||
224 | - } | ||
225 | - } | ||
226 | - | ||
227 | } | 159 | } |
228 | 160 | ||
229 | /** | 161 | /** |
@@ -231,8 +163,7 @@ public class ControlUtils { | @@ -231,8 +163,7 @@ public class ControlUtils { | ||
231 | * | 163 | * |
232 | * @param cal | 164 | * @param cal |
233 | */ | 165 | */ |
234 | - private void startDevice(CalDevContrl cal,String value) { | ||
235 | -// deviceSet.add(cal); | 166 | + private void startDevice(CalDevContrl cal,int flag) { |
236 | //设备类型 10:人感;9温感 | 167 | //设备类型 10:人感;9温感 |
237 | int modelType = cal.getModelType(); | 168 | int modelType = cal.getModelType(); |
238 | //人感设备关联的遥控设备 | 169 | //人感设备关联的遥控设备 |
@@ -240,56 +171,161 @@ public class ControlUtils { | @@ -240,56 +171,161 @@ public class ControlUtils { | ||
240 | //取得红外遥控设备 | 171 | //取得红外遥控设备 |
241 | List<CalDevBeContrl> calDevBeContrlList = getCalDevBeCon(assDevice); | 172 | List<CalDevBeContrl> calDevBeContrlList = getCalDevBeCon(assDevice); |
242 | if(CollectionUtils.isEmpty(calDevBeContrlList)){ | 173 | if(CollectionUtils.isEmpty(calDevBeContrlList)){ |
243 | - log.info("未查询到控制红外遥控器"); | 174 | + log.error("未查询到控制红外遥控器"); |
244 | return; | 175 | return; |
245 | } | 176 | } |
177 | + //遍历红外遥控 | ||
246 | for (int i = 0; i < calDevBeContrlList.size(); i++) { | 178 | for (int i = 0; i < calDevBeContrlList.size(); i++) { |
247 | CalDevBeContrl calDevBeContrl = calDevBeContrlList.get(i); | 179 | CalDevBeContrl calDevBeContrl = calDevBeContrlList.get(i); |
248 | //红外遥控设备id | 180 | //红外遥控设备id |
249 | String conDevId = calDevBeContrl.getConDevId(); | 181 | String conDevId = calDevBeContrl.getConDevId(); |
250 | String conCodes = calDevBeContrl.getConCode(); | 182 | String conCodes = calDevBeContrl.getConCode(); |
183 | + //获取有效的模板 | ||
184 | + List<Wl_LinkModeBean> linkModes = deviceDao.getWL_LinkMode("1085"); | ||
185 | + Wl_LinkModeBean wl_linkModeBean = null; | ||
186 | + if(!CollectionUtils.isEmpty(linkModes)){ | ||
187 | + wl_linkModeBean= linkModes.get(0); | ||
188 | + } | ||
251 | //遥控设备,执行命令 | 189 | //遥控设备,执行命令 |
252 | - String conValue = calDevBeContrl.getConValue(); | ||
253 | - String[] conCodeStr = conCodes.split(","); | 190 | + String conValue = convert(wl_linkModeBean,calDevBeContrl.getConValue(),flag); |
191 | + if(StringUtils.isEmpty(conValue)){ | ||
192 | + log.error("开启指令解析失败"); | ||
193 | + return; | ||
194 | + } | ||
254 | //设备名 | 195 | //设备名 |
255 | String name = deviceDao.getWLName(conDevId); | 196 | String name = deviceDao.getWLName(conDevId); |
256 | - for (int j = 0; j < conCodeStr.length; j++) { | ||
257 | - String conCode = conCodeStr[j]; | ||
258 | - switch (modelType) { | ||
259 | - case 1://开关 | ||
260 | - HttpUtil.controlDev(conDevId, conCode, conValue); | ||
261 | - break; | ||
262 | - case 2://插座 | ||
263 | - HttpUtil.controlDev(conDevId, conCode, conValue); | ||
264 | - break; | ||
265 | - case 3://排插 | ||
266 | - HttpUtil.controlDev(conDevId, conCode, conValue); | ||
267 | - break; | ||
268 | - case 9://温度传感器 | ||
269 | - break; | ||
270 | - case 10://人体感应触发空调开关 | ||
271 | - log.info("设备类型:"+modelType+"设备集合"+ JSON.toJSONString(SchduledTasks.conDevMap)); | ||
272 | - if (!SchduledTasks.conDevMap.containsKey(conDevId)&&SchduledTasks.conDevMap.get(conDevId)==null) { | ||
273 | - //设备已开,更新时间 | ||
274 | - SchduledTasks.conDevMap.put(conDevId,new Date()); | ||
275 | - HttpUtil.addAirCode(conValue, conDevId, name); | ||
276 | - } | ||
277 | - case 12://万能遥控器 | ||
278 | - log.info("设备类型:"+modelType); | ||
279 | - if (!SchduledTasks.conDevMap.containsKey(conDevId)&&SchduledTasks.conDevMap.get(conDevId)==null) {//设备已开,更新时间 | ||
280 | - SchduledTasks.conDevMap.put(conDevId,new Date()); | ||
281 | - HttpUtil.addAirCode(conValue, conDevId, name); | ||
282 | - } | ||
283 | - break; | 197 | + switch (modelType) { |
198 | + case 1://开关 | ||
199 | + sendDeviceCommand(conCodes,conDevId,conValue); | ||
200 | + break; | ||
201 | + case 2://插座 | ||
202 | + sendDeviceCommand(conCodes,conDevId,conValue); | ||
203 | + break; | ||
204 | + case 3://排插 | ||
205 | + sendDeviceCommand(conCodes,conDevId,conValue); | ||
206 | + break; | ||
207 | + case 9://温度传感器 | ||
208 | + break; | ||
209 | + case 10://人体感应触发空调开关 | ||
210 | + log.info("设备类型:"+modelType+"设备集合"+ JSON.toJSONString(SchduledTasks.conDevMap)); | ||
211 | + if (!SchduledTasks.conDevMap.containsKey(conDevId) && SchduledTasks.conDevMap.get(conDevId)==null) { | ||
212 | + //设备已开,更新时间 | ||
213 | + SchduledTasks.conDevMap.put(conDevId,new Date()); | ||
214 | + HttpUtil.addAirCode(conValue, conDevId, name); | ||
215 | + } | ||
216 | + case 12://万能遥控器 | ||
217 | + log.info("设备类型:"+modelType); | ||
218 | + if (!SchduledTasks.conDevMap.containsKey(conDevId) && SchduledTasks.conDevMap.get(conDevId)==null) { | ||
219 | + SchduledTasks.conDevMap.put(conDevId,new Date()); | ||
220 | + HttpUtil.addAirCode(conValue, conDevId, name); | ||
221 | + } | ||
222 | + break; | ||
223 | + } | ||
224 | + | ||
225 | + } | ||
226 | + } | ||
227 | + | ||
228 | + /*** | ||
229 | + * @Description: 发送 开关、插座、排插命令 | ||
230 | + * @Param: [conCodes, conDevId, conValue] | ||
231 | + * @return: void | ||
232 | + * @Author: xuquan | ||
233 | + * @Date: 2021/4/28 | ||
234 | + */ | ||
235 | + private void sendDeviceCommand(String conCodes,String conDevId,String conValue){ | ||
236 | + String[] conCodeStr = conCodes.split(","); | ||
237 | + for (int j = 0; j < conCodeStr.length; j++) { | ||
238 | + String conCode = conCodeStr[j]; | ||
239 | + HttpUtil.controlDev(conDevId, conCode, conValue); | ||
240 | + } | ||
241 | + } | ||
242 | + | ||
243 | + private static String convert(Wl_LinkModeBean wl_linkModeBean,String conValue,int flag){ | ||
244 | + if(wl_linkModeBean == null){ | ||
245 | + return ""; | ||
246 | + } | ||
247 | + TuYaAirCondition condition = JsonUtils.nonDefaultMapper().fromJson(conValue,TuYaAirCondition.class); | ||
248 | + //联动设置 | ||
249 | + String para = wl_linkModeBean.getDevicePara(); | ||
250 | + List<AirLinkMode> list = JSON.parseObject(para, new TypeReference<List<AirLinkMode>>(){}); | ||
251 | + if(CollectionUtils.isEmpty(list)) { | ||
252 | + return ""; | ||
253 | + } | ||
254 | + for(AirLinkMode mode : list){ | ||
255 | + if(mode.getDeviceType().intValue() ==9){ | ||
256 | + List<AirCommand> commands = mode.getKVs(); | ||
257 | + for(AirCommand command : commands){ | ||
258 | + int key = command.getKey().intValue(); | ||
259 | + String temp = command.getValue(); | ||
260 | + //制冷 | ||
261 | + if(flag ==0 && key == flag){ | ||
262 | + condition.setMode("0"); | ||
263 | + condition.setPower("1"); | ||
264 | + condition.setTemp(temp); | ||
265 | + condition.setWind("0"); | ||
266 | + continue; | ||
267 | + } | ||
268 | + //制热 | ||
269 | + if(flag ==1 && key == flag){ | ||
270 | + condition.setMode("1"); | ||
271 | + condition.setPower("1"); | ||
272 | + //制热默认22 | ||
273 | + condition.setTemp("22"); | ||
274 | + condition.setWind("0"); | ||
275 | + } | ||
284 | } | 276 | } |
285 | } | 277 | } |
286 | } | 278 | } |
279 | + return JsonUtils.nonDefaultMapper().toJson(condition); | ||
287 | } | 280 | } |
288 | 281 | ||
289 | - /** | ||
290 | - * 获取红外遥控控制的设备 | ||
291 | - * @param assDevice | ||
292 | - * @return | 282 | +// private static String convert2(String s,String conValue,int flag) throws JSONException { |
283 | +// TuYaAirCondition condition = JsonUtils.nonDefaultMapper().fromJson(conValue,TuYaAirCondition.class); | ||
284 | +// List<AirLinkMode> list = JSON.parseObject(s, new TypeReference<List<AirLinkMode>>(){}); | ||
285 | +// if(CollectionUtils.isEmpty(list)) { | ||
286 | +// return ""; | ||
287 | +// } | ||
288 | +// for(AirLinkMode mode : list){ | ||
289 | +// if(mode.getDeviceType().intValue() ==9){ | ||
290 | +// List<AirCommand> commands = mode.getKVs(); | ||
291 | +// for(AirCommand command : commands){ | ||
292 | +// int key = command.getKey().intValue(); | ||
293 | +// String temp = command.getValue(); | ||
294 | +// //制冷 | ||
295 | +// if(flag ==0 && key == flag){ | ||
296 | +// condition.setMode("1"); | ||
297 | +// condition.setPower("1"); | ||
298 | +// condition.setTemp(temp); | ||
299 | +// condition.setWind("0"); | ||
300 | +// continue; | ||
301 | +// } | ||
302 | +// //制热 | ||
303 | +// if(flag ==1 && key == flag){ | ||
304 | +// condition.setMode("2"); | ||
305 | +// condition.setPower("1"); | ||
306 | +// condition.setTemp(temp); | ||
307 | +// condition.setWind("0"); | ||
308 | +// } | ||
309 | +// } | ||
310 | +// } | ||
311 | +// } | ||
312 | +// return JsonUtils.nonDefaultMapper().toJson(condition); | ||
313 | +// } | ||
314 | +// | ||
315 | +// public static void main(String[] args) throws JSONException { | ||
316 | +// String s = "[{\"DeviceId\":1,\"DeviceName\":\"温湿度传感器\",\"DeviceType\":9,\"KVs\":[{\"Key\":0,\"Value\":\"20\",\"Text\":\"空调制冷开\"},{\"Key\":1,\"Value\":\"12\",\"Text\":\"空调制热开\"}]},{\"DeviceId\":2,\"DeviceName\":\"人体感应器\",\"DeviceType\":10,\"KVs\":[{\"Key\":0,\"Value\":\"有人\",\"Text\":\"空调开\"},{\"Key\":1,\"Value\":\"无人\",\"Text\":\"空调关\"}]}]"; | ||
317 | +// List<AirLinkMode> list = JsonUtils.nonDefaultMapper().fromJson(s,List.class); | ||
318 | +// String s2 = "{\"mode\":2,\"power\":\"1\",\"remote_id\":\"6c1556ca44a7e5d2336nrr\",\"remote_index\":\"11272\",\"temp\":\"26\",\"wind\":\"0\"}"; | ||
319 | +// //获取有效的模板 | ||
320 | +// System.out.println(convert2(s,s2,1)); | ||
321 | +// } | ||
322 | + | ||
323 | + /*** | ||
324 | + * @Description: 获取红外设备含多台 | ||
325 | + * @Param: [assDevice] | ||
326 | + * @return: java.util.List<com.example.mypulsar.bean.CalDevBeContrl> | ||
327 | + * @Author: xuquan | ||
328 | + * @Date: 2021/4/28 | ||
293 | */ | 329 | */ |
294 | private List<CalDevBeContrl> getCalDevBeCon(String assDevice) { | 330 | private List<CalDevBeContrl> getCalDevBeCon(String assDevice) { |
295 | String[] assDeviceIds = assDevice.split(","); | 331 | String[] assDeviceIds = assDevice.split(","); |
@@ -315,7 +351,13 @@ public class ControlUtils { | @@ -315,7 +351,13 @@ public class ControlUtils { | ||
315 | } | 351 | } |
316 | } | 352 | } |
317 | } | 353 | } |
318 | - return devBeContrlList; | 354 | + if(devBeContrlList.size()>0){ |
355 | + //去重重复数据 | ||
356 | + List<CalDevBeContrl> hwList = devBeContrlList.stream().collect(Collectors.collectingAndThen( | ||
357 | + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CalDevBeContrl::getConDevId))), ArrayList::new)); | ||
358 | + return hwList; | ||
359 | + } | ||
360 | + return null; | ||
319 | } | 361 | } |
320 | 362 | ||
321 | 363 |
cloud/mypulsar/src/main/java/com/example/mypulsar/utils/DateFormatUtil.java
0 → 100644
@@ -0,0 +1,168 @@ | @@ -0,0 +1,168 @@ | ||
1 | +package com.example.mypulsar.utils; | ||
2 | + | ||
3 | + | ||
4 | +import java.text.ParseException; | ||
5 | +import java.text.SimpleDateFormat; | ||
6 | +import java.util.Calendar; | ||
7 | +import java.util.Date; | ||
8 | + | ||
9 | +/** | ||
10 | + * 日期公共计算工具类 | ||
11 | + * @Author: xuquan | ||
12 | + * @Date: 2020/8/2 10:24 | ||
13 | + */ | ||
14 | +public class DateFormatUtil { | ||
15 | + | ||
16 | + private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); | ||
17 | + | ||
18 | + | ||
19 | + /** | ||
20 | + * 日期叠加计算,以年为单位:整数 | ||
21 | + * @param length 叠加长度 | ||
22 | + * @param date 起始时间 | ||
23 | + * @return | ||
24 | + */ | ||
25 | + public static Date getDateByYearLength(int length, Date date) { | ||
26 | + Calendar cal = Calendar.getInstance(); | ||
27 | + cal.setTime(date);//设置起时间 | ||
28 | + cal.add(Calendar.YEAR, length);//增加一年 | ||
29 | + return cal.getTime(); | ||
30 | + } | ||
31 | + | ||
32 | + /** | ||
33 | + * 日期叠加计算,以月为单位:整数 | ||
34 | + * @param length 叠加长度 | ||
35 | + * @param date 起始时间 | ||
36 | + * @return | ||
37 | + */ | ||
38 | + public static Date getDateByMonthLength(int length, Date date) { | ||
39 | + Calendar cal = Calendar.getInstance(); | ||
40 | + cal.setTime(date);//设置起时间 | ||
41 | + cal.add(Calendar.MONTH, length);//增加一月 | ||
42 | + return cal.getTime(); | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * 日期叠加计算,以月为单位:整数 | ||
47 | + * @param date 起始时间 | ||
48 | + * @return | ||
49 | + */ | ||
50 | + public static String getDateAdd(String date) { | ||
51 | + Date date1 = stringFormatDate(date,"yyyy-MM-dd HH:mm:ss"); | ||
52 | + Calendar cal = Calendar.getInstance(); | ||
53 | + cal.setTime(date1);//设置起时间 | ||
54 | + cal.add(Calendar.SECOND, 2); | ||
55 | + String strDate = dateFormatString(cal.getTime(),"yyyy-MM-dd HH:mm:ss"); | ||
56 | + return strDate; | ||
57 | + } | ||
58 | + | ||
59 | + /** | ||
60 | + * 日期叠加计算,以天为单位:整数 | ||
61 | + * @param date 起始时间 | ||
62 | + * @return | ||
63 | + */ | ||
64 | + public static String getDateByTime(String date){ | ||
65 | + Date date1 = stringFormatDate(date,"yyyy-MM-dd HH:mm:ss"); | ||
66 | + Calendar cal = Calendar.getInstance(); | ||
67 | + cal.setTime(date1);//设置起时间 | ||
68 | + cal.add(Calendar.DATE,1);//把日期往后增加 | ||
69 | + String strDate = dateFormatString(cal.getTime(),"yyyy-MM-dd HH:mm:ss"); | ||
70 | + return strDate; | ||
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * Date转 String : 指定格式:pattern | ||
75 | + * @param date | ||
76 | + * @param pattern | ||
77 | + * @return | ||
78 | + */ | ||
79 | + public static String dateFormatString(Date date,String pattern) { | ||
80 | + SimpleDateFormat df = null; | ||
81 | + String returnValue = null; | ||
82 | + if (date != null) { | ||
83 | + df = new SimpleDateFormat(pattern); | ||
84 | + returnValue = df.format(date); | ||
85 | + } | ||
86 | + return returnValue; | ||
87 | + } | ||
88 | + | ||
89 | + /** | ||
90 | + * String 转 Date : 指定格式:pattern | ||
91 | + * @param date | ||
92 | + * @param pattern | ||
93 | + * @return | ||
94 | + */ | ||
95 | + public static Date stringFormatDate(String date, String pattern) { | ||
96 | + SimpleDateFormat simpleDateFormat = null; | ||
97 | + if (date != null) { | ||
98 | + try{ | ||
99 | + simpleDateFormat = new SimpleDateFormat(pattern); | ||
100 | + Date retultDate = simpleDateFormat.parse(date); | ||
101 | + return retultDate; | ||
102 | + }catch (ParseException e){ | ||
103 | + e.printStackTrace(); | ||
104 | + } | ||
105 | + } | ||
106 | + return null; | ||
107 | + } | ||
108 | + | ||
109 | + /** | ||
110 | + * 输出yyyy年MM月dd日 格式时间 | ||
111 | + * @param date | ||
112 | + * @param pattern | ||
113 | + * @return | ||
114 | + */ | ||
115 | + public static String formatDate(String date, String pattern) { | ||
116 | + SimpleDateFormat sf = new SimpleDateFormat(pattern); | ||
117 | + String resultTime =""; | ||
118 | + try{ | ||
119 | + Date datetime = simpleDateFormat.parse(date); | ||
120 | + resultTime = sf.format(datetime); | ||
121 | + }catch (ParseException e){ | ||
122 | + e.printStackTrace(); | ||
123 | + } | ||
124 | + return resultTime; | ||
125 | + } | ||
126 | + /** | ||
127 | + * 比较两时间大小 | ||
128 | + * @param t1 | ||
129 | + * @param t2 | ||
130 | + * @return | ||
131 | + */ | ||
132 | + public static int timeCompare(String t1,String t2){ | ||
133 | + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); | ||
134 | + Calendar c1=Calendar.getInstance(); | ||
135 | + Calendar c2=Calendar.getInstance(); | ||
136 | + try { | ||
137 | + c1.setTime(formatter.parse(t1)); | ||
138 | + c2.setTime(formatter.parse(t2)); | ||
139 | + } catch (ParseException e) { | ||
140 | + e.printStackTrace(); | ||
141 | + } | ||
142 | + int result=c1.compareTo(c2); | ||
143 | + return result; | ||
144 | + } | ||
145 | + | ||
146 | + private static byte[] lock = new byte[0]; | ||
147 | + // 位数,默认是8位 | ||
148 | + private final static long strNum = 100000000; | ||
149 | + | ||
150 | + /** | ||
151 | + * 创建以时间为唯一UUID | ||
152 | + * @return | ||
153 | + */ | ||
154 | + public static String createTimeId() { | ||
155 | + long r = 0; | ||
156 | + synchronized (lock) { | ||
157 | + r = (long) ((Math.random() + 1) * strNum); | ||
158 | + } | ||
159 | + return System.currentTimeMillis() + String.valueOf(r).substring(1); | ||
160 | + } | ||
161 | + | ||
162 | + public static void main(String[] args) { | ||
163 | + System.out.println(timeCompare("2021-04-29 23:32","2021-04-29 23:38")); | ||
164 | + System.out.println(timeCompare("2021-04-29 23:38","2021-04-29 23:38")); | ||
165 | + System.out.println(timeCompare("2021-04-29 23:42","2021-04-29 23:38")); | ||
166 | + } | ||
167 | + | ||
168 | +} |
cloud/mypulsar/src/main/java/com/example/mypulsar/utils/HttpUtil.java
@@ -7,22 +7,17 @@ import com.example.mypulsar.task.SchduledTasks; | @@ -7,22 +7,17 @@ import com.example.mypulsar.task.SchduledTasks; | ||
7 | import lombok.extern.slf4j.Slf4j; | 7 | import lombok.extern.slf4j.Slf4j; |
8 | import org.springframework.boot.configurationprocessor.json.JSONException; | 8 | import org.springframework.boot.configurationprocessor.json.JSONException; |
9 | import org.springframework.boot.configurationprocessor.json.JSONObject; | 9 | import org.springframework.boot.configurationprocessor.json.JSONObject; |
10 | -import org.springframework.core.io.FileSystemResource; | ||
11 | -import org.springframework.http.HttpEntity; | ||
12 | -import org.springframework.http.HttpHeaders; | ||
13 | -import org.springframework.http.MediaType; | ||
14 | -import org.springframework.http.ResponseEntity; | ||
15 | -import org.springframework.util.LinkedMultiValueMap; | ||
16 | -import org.springframework.util.MultiValueMap; | ||
17 | import org.springframework.web.client.RestTemplate; | 10 | import org.springframework.web.client.RestTemplate; |
18 | 11 | ||
19 | import java.io.BufferedReader; | 12 | import java.io.BufferedReader; |
20 | import java.io.DataOutputStream; | 13 | import java.io.DataOutputStream; |
21 | -import java.io.File; | ||
22 | import java.io.InputStreamReader; | 14 | import java.io.InputStreamReader; |
23 | import java.net.HttpURLConnection; | 15 | import java.net.HttpURLConnection; |
24 | import java.net.URL; | 16 | import java.net.URL; |
25 | -import java.util.*; | 17 | +import java.util.ArrayList; |
18 | +import java.util.HashMap; | ||
19 | +import java.util.List; | ||
20 | +import java.util.Map; | ||
26 | 21 | ||
27 | /** | 22 | /** |
28 | * http 工具类 | 23 | * http 工具类 |
@@ -141,24 +136,33 @@ public class HttpUtil { | @@ -141,24 +136,33 @@ public class HttpUtil { | ||
141 | * @param conDevName 设备名称 | 136 | * @param conDevName 设备名称 |
142 | * @return | 137 | * @return |
143 | */ | 138 | */ |
144 | - public static String addAirCode(String conValue, String conDevId, String conDevName) { | 139 | + public static String addAirCode(String conValue, String conDevId, String conDevName) { |
145 | try { | 140 | try { |
146 | String url = String.format("http://120.26.116.253:5555/TuYa/%s/addAirCode", conDevId); | 141 | String url = String.format("http://120.26.116.253:5555/TuYa/%s/addAirCode", conDevId); |
147 | -// String url = String.format("http://120.26.116.253:5555/TuYa/%s/airConditioners", conDevId); | ||
148 | RestTemplate restTemplate = new RestTemplate(); | 142 | RestTemplate restTemplate = new RestTemplate(); |
149 | TuYaAirCondition tuYaAirCondition = new TuYaAirCondition(); | 143 | TuYaAirCondition tuYaAirCondition = new TuYaAirCondition(); |
150 | - String power = ""; | ||
151 | try { | 144 | try { |
152 | JSONObject jsonObject = new JSONObject(conValue); | 145 | JSONObject jsonObject = new JSONObject(conValue); |
153 | - power = jsonObject.getString("power"); | ||
154 | - tuYaAirCondition.setMode(jsonObject.getString("mode")); | 146 | + //开关 |
147 | + String power = jsonObject.getString("power"); | ||
148 | + //模式 | ||
149 | + String mode = jsonObject.getString("mode"); | ||
150 | + //风速 | ||
151 | + String wind = jsonObject.getString("wind"); | ||
152 | + //温度 | ||
153 | + String temp = jsonObject.getString("temp"); | ||
154 | + //遥控器码值 | ||
155 | + String remoteIndex =jsonObject.getString("remote_index"); | ||
156 | + //遥控器ID | ||
157 | + String remoteId = jsonObject.getString("remote_id"); | ||
158 | + tuYaAirCondition.setMode(mode); | ||
155 | tuYaAirCondition.setPower(power); | 159 | tuYaAirCondition.setPower(power); |
156 | - tuYaAirCondition.setRemote_id(jsonObject.getString("remote_id")); | ||
157 | - tuYaAirCondition.setWind(jsonObject.getString("wind")); | ||
158 | - tuYaAirCondition.setTemp(jsonObject.getString("temp")); | ||
159 | - tuYaAirCondition.setRemote_index(jsonObject.getString("remote_index")); | 160 | + tuYaAirCondition.setRemote_id(remoteId); |
161 | + tuYaAirCondition.setWind(wind); | ||
162 | + tuYaAirCondition.setTemp(temp); | ||
163 | + tuYaAirCondition.setRemote_index(remoteIndex); | ||
160 | } catch (JSONException e) { | 164 | } catch (JSONException e) { |
161 | - log.info("控制失败:失败信息",e); | 165 | + log.error("解析指令失败:",e); |
162 | } | 166 | } |
163 | log.info("开始发送遥控命令至设备:请求地址: {},设备名称: {},设备ID: {},请求参数: {}",url,conDevName,conDevId,tuYaAirCondition.toString()); | 167 | log.info("开始发送遥控命令至设备:请求地址: {},设备名称: {},设备ID: {},请求参数: {}",url,conDevName,conDevId,tuYaAirCondition.toString()); |
164 | //轮询2次下发指令,防止偶然性第一次没启动 | 168 | //轮询2次下发指令,防止偶然性第一次没启动 |
@@ -170,11 +174,11 @@ public class HttpUtil { | @@ -170,11 +174,11 @@ public class HttpUtil { | ||
170 | log.info("返回结果:{}",response); | 174 | log.info("返回结果:{}",response); |
171 | return response; | 175 | return response; |
172 | }catch (Exception e){ | 176 | }catch (Exception e){ |
173 | - log.info("请求红外控制指令失败:{}",e); | 177 | + log.error("请求红外控制指令失败:{}",e); |
174 | if(SchduledTasks.conDevMap.containsKey(conDevId)){ | 178 | if(SchduledTasks.conDevMap.containsKey(conDevId)){ |
175 | SchduledTasks.conDevMap.remove(conDevId); | 179 | SchduledTasks.conDevMap.remove(conDevId); |
176 | } | 180 | } |
177 | } | 181 | } |
178 | - return null; | 182 | + return ""; |
179 | } | 183 | } |
180 | } | 184 | } |
cloud/mypulsar/src/main/resources/iotmapper/iotmapper.xml
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | </select>--> | 7 | </select>--> |
8 | <select id="getHWAttsWithRoomId" parameterType="java.lang.String" | 8 | <select id="getHWAttsWithRoomId" parameterType="java.lang.String" |
9 | resultType="com.example.mypulsar.bean.Wl_Attendace"> | 9 | resultType="com.example.mypulsar.bean.Wl_Attendace"> |
10 | - select clint_id from WL_Attendance where belongAreaId = ${belongAreaId} and state = 1 and clint_type = 12; | 10 | + select clint_id from WL_Attendance where belongAreaId = ${belongAreaId} and state = 1 and clint_type = 12 |
11 | </select> | 11 | </select> |
12 | 12 | ||
13 | <!-- 插入遥控器数据--> | 13 | <!-- 插入遥控器数据--> |
@@ -20,16 +20,25 @@ | @@ -20,16 +20,25 @@ | ||
20 | <!-- 新建联动模板--> | 20 | <!-- 新建联动模板--> |
21 | 21 | ||
22 | <select id="getWL_LinkMode" parameterType="java.lang.String" resultType="com.example.mypulsar.bean.Wl_LinkModeBean"> | 22 | <select id="getWL_LinkMode" parameterType="java.lang.String" resultType="com.example.mypulsar.bean.Wl_LinkModeBean"> |
23 | - select * from WL_LinkageMode where SchoolId = ${SchoolId} and State = 1; | 23 | + select * from WL_LinkageMode where SchoolId = ${SchoolId} and State = 1 |
24 | + </select> | ||
25 | + | ||
26 | + <select id="getIotDeviceAfterRecord" resultType="com.example.mypulsar.bean.IotDevice"> | ||
27 | + select top 1 devId,code,value,time,dev_status from Iot_Device where devId = #{devId} and [value] = #{value} | ||
28 | + and dev_status = 1 and code = 'pir' and time > #{openTime} ORDER BY time asc | ||
24 | </select> | 29 | </select> |
25 | 30 | ||
26 | <select id="getIotDeviceRecord" resultType="com.example.mypulsar.bean.IotDevice"> | 31 | <select id="getIotDeviceRecord" resultType="com.example.mypulsar.bean.IotDevice"> |
27 | select top 1 devId,code,value,time,dev_status from Iot_Device where devId = #{devId} and [value] = #{value} | 32 | select top 1 devId,code,value,time,dev_status from Iot_Device where devId = #{devId} and [value] = #{value} |
28 | - and dev_status = 1 and code = 'pir' and dev_type =3 and time > #{openTime} ORDER BY time asc | 33 | + and dev_status = 1 and code = 'pir' ORDER BY time desc |
29 | </select> | 34 | </select> |
30 | 35 | ||
31 | <select id="getHWAtts" parameterType="java.lang.String" resultType="com.example.mypulsar.bean.Wl_Attendace"> | 36 | <select id="getHWAtts" parameterType="java.lang.String" resultType="com.example.mypulsar.bean.Wl_Attendace"> |
32 | - select * from WL_Attendance where state = 1 and clint_type = 12 and school_id = 1085; | 37 | + select * from WL_Attendance where state = 1 and clint_type = 12 and school_id = 1085 |
38 | + </select> | ||
39 | + | ||
40 | + <select id="getTempDevice" parameterType="java.lang.String" resultType="com.example.mypulsar.bean.CalDevContrl"> | ||
41 | + select top 1 * from CalDevContrl where Status = 1 and ModelType = 9 and DevBeId like '%'+ #{beId} +'%' order by CreateTime desc | ||
33 | </select> | 42 | </select> |
34 | 43 | ||
35 | </mapper> | 44 | </mapper> |
36 | \ No newline at end of file | 45 | \ No newline at end of file |