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 |