Browse Source

websocket推送报警消息

定时主动查询设备状态并且修改数据库
master
yangzongjia 2 years ago
parent
commit
c2c51cb8dc
  1. 4
      yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java
  2. 7
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/CallRest.java
  3. 10
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java
  4. 115
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java
  5. 11
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java

4
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("信息状态")

7
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<String,Object> param = new HashMap<>();
String result = HttpUtils.sendGet(url, "35ad3e80-1de4-4477-827e-0473320cf644");
return result;
}

10
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java

@ -92,6 +92,7 @@ public class YDeviceService extends ServiceImpl<YDeviceMapper, Device> {
}
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<YDeviceMapper, Device> {
wrapper.eq("type", searchVo.get("type"));
}
wrapper.eq("serialNumber", deviceSerial);
notIds += deviceSerial;
notIds += deviceSerial + ",";
List<Device> 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<YDeviceMapper, Device> {
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<Device> notList = this.list(wrapper2);
for(Device device : notList){
device.setStatus("1"); //默认在线
for (Device device : notList) {
list.add(device);
}
iPage.setRecords(list);

115
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<YMessageInfoMapper, Message
@Resource
YMessageInfoMapper yMessageInfoMapper;
@Autowired
private SimpMessagingTemplate messagingTemplate;
public List<CallPolice> saveMessageInfo() {
String url = "https://api2.hik-cloud.com/api/v1/mq/consumer/messages";
@ -65,6 +69,7 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
for (MessageVo messageVo : messageList) {
// 根据设备序列号查找本地数据库里面的设备ID
String deviceId = "";
String deviceName = "";
JSONObject deviceIdJson = JSONObject.parseObject(messageVo.getContent());
String devSerial = deviceIdJson.get("devSerial").toString();
QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
@ -72,6 +77,7 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
List<Device> devices = yDeviceMapper.selectList(deviceQueryWrapper);
if (devices.size() > 0) {
deviceId = devices.get(0).getId().toString();
deviceName = devices.get(0).getName();
}
QueryWrapper<MessageInfo> wrapper = new QueryWrapper<>();
@ -109,6 +115,9 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
callPolice.setContent(messageVo.getContent());
callPolice.setCreateTime(new Date());
callPolice.setDeviceId(deviceId);
callPolice.setCallType(deviceName + "设备报警信息");
messagingTemplate.convertAndSend("/topic/subscribe", callPolice);
yCallPoliceMapper.insert(callPolice);
}
}
@ -151,42 +160,86 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
}
public void getCallMessage() {
String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/list?groupNo=A1181&pageNo=1&pageSize=500";
public void refreshDeviceStatus() {
String result = "";
try {
result = HttpUtils.sendGet(url, SyncService.haiKangToken);
} catch (Exception e) {
System.out.println(e);
}
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject dataJson = (JSONObject) jsonObject.get("data");
JSONArray jsonArray = (JSONArray) dataJson.get("rows");
String deviceSerial = "";
String deviceStatus = "";
IPage<Device> iPage = new Page<>();
List<CallPolice> 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<Device> wrapper = new QueryWrapper<>();
wrapper.eq("serialNumber", deviceSerial);
List<Device> listSmall = yDeviceService.list(wrapper);
if (listSmall.size() > 0) {
callPolice.setDeviceId(listSmall.get(0).getId().toString());
list.add(callPolice);
// 刷新设备状态
// 刷新nvr下的设备状态(摄像头类)
List<Device> 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<Device> wrapper = new QueryWrapper<>();
int channelNo = Integer.valueOf(jsonObject.get("channelNo").toString()) + 1;
wrapper.eq("channelNo", channelNo);
wrapper.eq("nvrSerial", device.getSerialNumber());
List<Device> 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<Device> 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<Device> wrapper = new QueryWrapper<>();
wrapper.eq("channelNo", jsonObject.get("channelNo").toString());
wrapper.eq("bjzjId", device.getId());
List<Device> 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);
}
}
}
}

11
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();
}

Loading…
Cancel
Save