From c2c51cb8dce85aec944c7269948d38827faf0034 Mon Sep 17 00:00:00 2001 From: yangzongjia Date: Mon, 12 Jun 2023 17:43:07 +0800 Subject: [PATCH] =?UTF-8?q?websocket=E6=8E=A8=E9=80=81=E6=8A=A5=E8=AD=A6?= =?UTF-8?q?=E6=B6=88=E6=81=AF=20=E5=AE=9A=E6=97=B6=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AE=BE=E5=A4=87=E7=8A=B6=E6=80=81=E5=B9=B6?= =?UTF-8?q?=E4=B8=94=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervise/monitor/api/entity/Device.java | 4 +- .../monitor/biz/callpolice/CallRest.java | 7 +- .../monitor/biz/device/YDeviceService.java | 10 +- .../biz/messageInfo/YMessageInfoService.java | 115 +++++++++++++----- .../monitor/biz/scheduled/SyncService.java | 11 +- 5 files changed, 105 insertions(+), 42 deletions(-) diff --git a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java index a2adb70..aeb8859 100644 --- a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java +++ b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java @@ -26,10 +26,10 @@ public class Device extends EntityWithId { @ApiModelProperty("名称") private String name; // 名称 - @ApiModelProperty("设备类型(1摄像头 2电子围栏 3门禁 4机器人 5nvr)") + @ApiModelProperty("设备类型(1摄像头 2电子围栏 3门禁 4报警主机 5nvr)") private String type; - @ApiModelProperty("状态") + @ApiModelProperty("状态0:离线,1:在线,-1:设备未上报。") private String status; @ApiModelProperty("信息状态") diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/CallRest.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/CallRest.java index 677042c..a7bd8ca 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/CallRest.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/CallRest.java @@ -2,6 +2,7 @@ package com.yxt.supervise.monitor.biz.callpolice; import com.alibaba.fastjson.JSONObject; import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.monitor.api.entity.Device; import com.yxt.supervise.monitor.biz.demobaseentity.DemoBaseentityService; import com.yxt.supervise.monitor.biz.scheduled.SyncService; import com.yxt.supervise.monitor.biz.util.HttpUtils; @@ -172,9 +173,9 @@ public class CallRest { @ApiOperation("临时测试") @GetMapping("/callTempFunc") public String callTempFunc() throws NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException { - String errorMessage = "这是一条新的报警消息。"; - messagingTemplate.convertAndSend("/topic/subscribe", "您收到了新的系统消息"); - String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/get?deviceSerial=L20560109"; + //Q16362484 + String url = "https://api2.hik-cloud.com/api/v1/open/basic/channels/list?deviceSerial=Q16362484&pageNo=1&pageSize=50"; + Map param = new HashMap<>(); String result = HttpUtils.sendGet(url, "35ad3e80-1de4-4477-827e-0473320cf644"); return result; } diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java index ea36a69..41b7704 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java @@ -92,6 +92,7 @@ public class YDeviceService extends ServiceImpl { } queryWrapper.eq("isDelete", 0); queryWrapper.isNotNull("status"); + queryWrapper.notIn("type", "4,5".split(",")); queryWrapper.select("status", "count(status) as total"); queryWrapper.groupBy("status"); @@ -173,7 +174,7 @@ public class YDeviceService extends ServiceImpl { wrapper.eq("type", searchVo.get("type")); } wrapper.eq("serialNumber", deviceSerial); - notIds += deviceSerial; + notIds += deviceSerial + ","; List listSmall = this.list(wrapper); if (listSmall.size() > 0) { listSmall.get(0).setStatus(objJson.get("deviceStatus").toString()); // 设备状态 0:离线 1:在线 @@ -185,11 +186,10 @@ public class YDeviceService extends ServiceImpl { if (StrUtil.isNotBlank(searchVo.get("type"))) { wrapper2.eq("type", searchVo.get("type")); } - notIds += deviceSerial; - wrapper2.notIn("serialNumber", notIds); + String[] str = notIds.split(","); + wrapper2.notIn("serialNumber", str); List notList = this.list(wrapper2); - for(Device device : notList){ - device.setStatus("1"); //默认在线 + for (Device device : notList) { list.add(device); } iPage.setRecords(list); diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java index e2151a5..29574f8 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java @@ -21,6 +21,7 @@ import com.yxt.supervise.monitor.biz.devicelog.YDeviceLogMapper; import com.yxt.supervise.monitor.biz.scheduled.SyncService; import com.yxt.supervise.monitor.biz.util.HttpUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -44,6 +45,9 @@ public class YMessageInfoService extends ServiceImpl saveMessageInfo() { String url = "https://api2.hik-cloud.com/api/v1/mq/consumer/messages"; @@ -65,6 +69,7 @@ public class YMessageInfoService extends ServiceImpl deviceQueryWrapper = new QueryWrapper<>(); @@ -72,6 +77,7 @@ public class YMessageInfoService extends ServiceImpl devices = yDeviceMapper.selectList(deviceQueryWrapper); if (devices.size() > 0) { deviceId = devices.get(0).getId().toString(); + deviceName = devices.get(0).getName(); } QueryWrapper wrapper = new QueryWrapper<>(); @@ -109,6 +115,9 @@ public class YMessageInfoService extends ServiceImpl iPage = new Page<>(); - List list = new ArrayList<>(); - for (Object obj : jsonArray) { - JSONObject objJson = (JSONObject) obj; - deviceSerial = objJson.get("deviceSerial").toString(); - deviceStatus = objJson.get("deviceStatus").toString(); - if ("0".equals(deviceStatus)) { // 报警 - CallPolice callPolice = new CallPolice(); - callPolice.setCreateTime(new Date()); - callPolice.setMsgType("handAdd"); - callPolice.setContent("设备离线报警"); - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("serialNumber", deviceSerial); - List listSmall = yDeviceService.list(wrapper); - if (listSmall.size() > 0) { - callPolice.setDeviceId(listSmall.get(0).getId().toString()); - list.add(callPolice); + // 刷新设备状态 + // 刷新nvr下的设备状态(摄像头类) + List sxtDevices = yDeviceService.getOtherList("5", null); + for (Device device : sxtDevices) { + String url = "https://api2.hik-cloud.com/api/v1/open/basic/channels/list?deviceSerial=" + device.getSerialNumber() + "&pageNo=1&pageSize=50"; + try { + result = HttpUtils.sendGet(url, SyncService.haiKangToken); + JSONObject resJson = JSONObject.parseObject(result); + JSONObject dataJson = (JSONObject) resJson.get("data"); + JSONArray rowsJsonArr = (JSONArray) dataJson.get("rows"); + for (Object obj : rowsJsonArr) { + JSONObject jsonObject = (JSONObject) obj; + // 只看正在使用的通道。 + if ("1".equals(jsonObject.get("isUse").toString())) { + QueryWrapper wrapper = new QueryWrapper<>(); + int channelNo = Integer.valueOf(jsonObject.get("channelNo").toString()) + 1; + wrapper.eq("channelNo", channelNo); + wrapper.eq("nvrSerial", device.getSerialNumber()); + List devices = yDeviceService.list(wrapper); + // 通道状态,0:离线,1:在线,-1:设备未上报。 + if (devices.size() > 0) { + Device deviceTemp = devices.get(0); + if ("0".equals(jsonObject.get("channelStatus").toString())) { + if (!deviceTemp.getStatus().equals("0")) { + deviceTemp.setStatus("0"); + yDeviceService.updateById(deviceTemp); + } + } else if ("1".equals(jsonObject.get("channelStatus").toString())) { + if (!deviceTemp.getStatus().equals("1")) { + deviceTemp.setStatus("1"); + yDeviceService.updateById(deviceTemp); + } + } + } + } } + } catch (Exception e) { + System.out.println(e); } } - for (CallPolice cl : list) { - yCallPoliceMapper.insert(cl); + // 刷新nvr下的设备状态(电子围栏类) + List dzwlDevices = yDeviceService.getOtherList("4", null); + for (Device device : dzwlDevices) { + String url = "https://api2.hik-cloud.com/api/v1/open/basic/channels/list?deviceSerial=" + device.getSerialNumber() + "&pageNo=1&pageSize=50"; + try { + result = HttpUtils.sendGet(url, SyncService.haiKangToken); + JSONObject resJson = JSONObject.parseObject(result); + JSONObject dataJson = (JSONObject) resJson.get("data"); + JSONArray rowsJsonArr = (JSONArray) dataJson.get("rows"); + for (Object obj : rowsJsonArr) { + JSONObject jsonObject = (JSONObject) obj; + // 只看正在使用的通道。 + if ("1".equals(jsonObject.get("isUse").toString())) { + // 通道状态,0:离线,1:在线,-1:设备未上报。 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("channelNo", jsonObject.get("channelNo").toString()); + wrapper.eq("bjzjId", device.getId()); + List devices = yDeviceService.list(wrapper); + if (devices.size() > 0) { + Device deviceTemp = devices.get(0); + if ("0".equals(jsonObject.get("channelStatus").toString())) { + if (!deviceTemp.getStatus().equals("0")) { + deviceTemp.setStatus("0"); + yDeviceService.updateById(deviceTemp); + } + } else if ("1".equals(jsonObject.get("channelStatus").toString())) { + if (!deviceTemp.getStatus().equals("1")) { + deviceTemp.setStatus("1"); + yDeviceService.updateById(deviceTemp); + } + } + } + } + } + } catch (Exception e) { + System.out.println(e); + } } } } diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java index d7f81d8..524700d 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java @@ -79,7 +79,16 @@ public class SyncService { public void pushEmail() { try { yMessageInfoService.saveMessageInfo(); - yMessageInfoService.getCallMessage(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + @Async + @Scheduled(fixedDelay = 1000 * 60) //一分钟更新一次设备状态 + public void refreshDeviceStatus() { + try { + yMessageInfoService.refreshDeviceStatus(); } catch (Exception ex) { ex.printStackTrace(); }