2023年8月14日17:27:43

main
litao 2 years ago
parent b875362e79
commit 2d17fbd5e1
  1. 20
      pom.xml
  2. 24
      src/main/java/org/springblade/hospital/controller/AppDataController.java
  3. 44
      src/main/java/org/springblade/hospital/entity/JoysuchCoordinate.java
  4. 18
      src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java
  5. 2
      src/main/java/org/springblade/hospital/mapper/AlarmInformationMapper.xml
  6. 67
      src/main/java/org/springblade/hospital/utils/CornJobUtil.java
  7. 37
      src/main/java/org/springblade/hospital/websocket/WebSocketServer.java
  8. 4
      src/main/java/org/springblade/hospital/websocket/WebSoketConfig.java

@ -240,7 +240,8 @@
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId> <artifactId>spring-websocket</artifactId>
<version>5.2.8.RELEASE</version> <!-- <version>5.2.8.RELEASE</version>-->
<version>5.3.27</version>
</dependency> </dependency>
@ -260,6 +261,23 @@
<version>0.10.21</version> <version>0.10.21</version>
</dependency> </dependency>
<!--pdf转图片-->
<!-- <dependency>-->
<!-- <groupId>org.apache.pdfbox</groupId>-->
<!-- <artifactId>fontbox</artifactId>-->
<!-- <version>2.0.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.pdfbox</groupId>-->
<!-- <artifactId>pdfbox</artifactId>-->
<!-- <version>2.0.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>commons-logging</groupId>-->
<!-- <artifactId>commons-logging</artifactId>-->
<!-- <version>1.2</version>-->
<!-- </dependency>-->
</dependencies> </dependencies>
<build> <build>

@ -32,10 +32,7 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query; import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.hospital.entity.AlarmInformation; import org.springblade.hospital.entity.*;
import org.springblade.hospital.entity.Alarms;
import org.springblade.hospital.entity.AppData;
import org.springblade.hospital.entity.KeyAndSecret;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK; import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.hik.alarm.Alarm; import org.springblade.hospital.hik.alarm.Alarm;
import org.springblade.hospital.service.IAppDataService; import org.springblade.hospital.service.IAppDataService;
@ -73,10 +70,6 @@ public class AppDataController extends BladeController {
private final RestTemplate restTemplate; private final RestTemplate restTemplate;
private final WebSocketServer webSocket;
private final ExternalUtils externalUtils;
@GetMapping("/list") @GetMapping("/list")
public R<IPage<AppData>> list(AppData appData, Query query) { public R<IPage<AppData>> list(AppData appData, Query query) {
@ -290,8 +283,19 @@ public class AppDataController extends BladeController {
@GetMapping("/test") @GetMapping("/test")
public R test() { public R test() {
HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus(); // HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus();
// externalUtils.updateStatus(); // externalUtils.updateStatus();
return R.data(status); WebSocketServer.test();
return R.data(0);
}
@GetMapping("/coordinateToWGS84")
public JoysuchCoordinate coordinateToWGS84_2D(int x, int y, double minX, double maxY) {
double mX = minX + (double)x / 1000.0;
double mY = maxY - (double)y / 1000.0;
double lng = mX / 2.003750834E7 * 180.0;
double lat = mY / 2.003750834E7 * 180.0;
lat = 57.29577951308232 * (2.0 * Math.atan(Math.exp(lat * Math.PI / 180.0)) - 1.5707963267948966);
return new JoysuchCoordinate((double)x, (double)y, lng, lat);
} }
} }

@ -0,0 +1,44 @@
/*
* Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the dreamlu.net developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: Chill 庄骞 (smallchill@163.com)
*/
package org.springblade.hospital.entity;
import lombok.Data;
/**
* 布防撤防记录
* @author BladeX
*/
@Data
public class JoysuchCoordinate{
private static final long serialVersionUID = 1L;
public JoysuchCoordinate(double x, double y, double lng, double lat) {
this.x = x;
this.y = y;
this.lng = lng;
this.lat = lat;
}
private double x;
private double y;
private double lng;
private double lat;
}

@ -303,12 +303,18 @@ public class AlarmDataParse {
// 设备信息 // 设备信息
List<Map> list = new ArrayList<>(); List<Map> list = new ArrayList<>();
AlarmInformation alarmInformation = new AlarmInformation();
if (strCIDalarm.wDefenceNo != 0xff) { if (strCIDalarm.wDefenceNo != 0xff) {
System.out.println("防区号:" + Integer.sum(strCIDalarm.wDefenceNo, 1)); int sum = Integer.sum(strCIDalarm.wDefenceNo, 1);
System.out.println("防区号:" + sum);
if (externalUtils == null) { if (externalUtils == null) {
externalUtils = SpringUtil.getBean(ExternalUtils.class); externalUtils = SpringUtil.getBean(ExternalUtils.class);
} }
list = externalUtils.getList(1, 10, "sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1), null); if (sum > 0) {
list = externalUtils.getList(1, 10, "sector_" + sum, null);
} else {
list = externalUtils.getList(1, 10, "sys_" + bySubSysNo, null);
}
} }
System.out.println("【CID事件】" + "触发时间:" + TriggerTime + "CID事件号:" + sCIDCode + "CID事件名:" + sCIDDescribe + "子系统号:" + System.out.println("【CID事件】" + "触发时间:" + TriggerTime + "CID事件号:" + sCIDCode + "CID事件名:" + sCIDDescribe + "子系统号:" +
bySubSysNo); bySubSysNo);
@ -318,8 +324,7 @@ public class AlarmDataParse {
if (alarmInformationService == null) { if (alarmInformationService == null) {
alarmInformationService = SpringUtil.getBean(IAlarmInformationService.class); alarmInformationService = SpringUtil.getBean(IAlarmInformationService.class);
} }
AlarmInformation alarmInformation = new AlarmInformation();
alarmInformation.setDeviceId("sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1));
alarmInformation.setReportTime(format.parse(TriggerTime)); alarmInformation.setReportTime(format.parse(TriggerTime));
alarmInformation.setType(sCIDCode); alarmInformation.setType(sCIDCode);
alarmInformation.setContent(DictBizCache.getValue("alarm_message_type", sCIDCode)); alarmInformation.setContent(DictBizCache.getValue("alarm_message_type", sCIDCode));
@ -336,18 +341,17 @@ public class AlarmDataParse {
alarmInformation.setBuildId(tagsMap.get("buildingNo").toString()); alarmInformation.setBuildId(tagsMap.get("buildingNo").toString());
alarmInformation.setLatidute(tagsMap.get("lat").toString()); alarmInformation.setLatidute(tagsMap.get("lat").toString());
alarmInformation.setLongidute(tagsMap.get("lng").toString()); alarmInformation.setLongidute(tagsMap.get("lng").toString());
alarmInformation.setDeviceId(tagsMap.get("mac").toString());
Map bizProduct = JSONObject.parseObject(JSON.toJSONString(map.get("bizProduct")), Map.class); Map bizProduct = JSONObject.parseObject(JSON.toJSONString(map.get("bizProduct")), Map.class);
alarmInformation.setProductName(bizProduct.get("name").toString()); alarmInformation.setProductName(bizProduct.get("name").toString());
// 主动修改设备状态-物联网平台 // 主动修改设备状态-物联网平台
if ("3973".equals(sCIDCode)) { if ("3973".equals(sCIDCode)) {
externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 5); externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 5);
} else if ("1973".equals(sCIDCode)) { } else if ("1973".equals(sCIDCode) || "3570".equals(sCIDCode)) {
externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 6); externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 6);
} else if ("1570".equals(sCIDCode)) { } else if ("1570".equals(sCIDCode)) {
externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 7); externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 7);
} else if ("3570".equals(sCIDCode)) {
externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 6);
} }
} }
boolean save = alarmInformationService.save(alarmInformation); boolean save = alarmInformationService.save(alarmInformation);

@ -9,7 +9,7 @@
ho.report_time <![CDATA[ >= ]]> #{startTime} AND ho.report_time <![CDATA[ <= ]]> #{endTime} ho.report_time <![CDATA[ >= ]]> #{startTime} AND ho.report_time <![CDATA[ <= ]]> #{endTime}
</if> </if>
<if test="deviceType != null and deviceType != ''"> <if test="deviceType != null and deviceType != ''">
AND ho.device_type = #{deviceType} AND ho.type = #{deviceType}
</if> </if>
AND is_deleted = 0 AND is_deleted = 0
</where> </where>

@ -2,6 +2,7 @@ package org.springblade.hospital.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.hospital.entity.CornJob; import org.springblade.hospital.entity.CornJob;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK; import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
@ -41,33 +42,43 @@ public class CornJobUtil {
@Scheduled(initialDelay = 5000, fixedRate = 180000) @Scheduled(initialDelay = 5000, fixedRate = 180000)
public void task() { public void task() {
System.out.println("定时任务执行了2"); System.out.println("定时任务执行了2");
// List<CornJob> jobs = cornJobService.list(Wrappers.<CornJob>lambdaQuery().eq(CornJob::getStatus, 1)); List<CornJob> jobs = cornJobService.list(Wrappers.<CornJob>lambdaQuery().eq(CornJob::getStatus, 1));
// if (CollectionUtils.isNotEmpty(jobs)) { if (CollectionUtils.isNotEmpty(jobs)) {
// List<CornJob> jobList = new ArrayList<>(); List<CornJob> jobList = new ArrayList<>();
// for (CornJob job : jobs) { for (CornJob job : jobs) {
// Date nextExecuteTime = job.getNextExecuteTime(); Date nextExecuteTime = job.getNextExecuteTime();
// if (new Date().compareTo(nextExecuteTime) < 0) { if (new Date().compareTo(nextExecuteTime) < 0) {
// continue; continue;
// } }
// System.out.println("-----------------===================="); System.out.println("-----------------====================");
// // 布防 try {
// if (job.getType() == 1) { if (StringUtils.isNotBlank(job.getDeviceId())) {
// Alarm.fqbf(Integer.parseInt(job.getDeviceId()) - 1); String[] ids = job.getDeviceId().split(",");
// } // 布防
// // 撤防 if (job.getType() == 1) {
// else if (job.getType() == 2) { for (String id : ids) {
// Alarm.fqcf(Integer.parseInt(job.getDeviceId()) - 1); Alarm.fqbf(Integer.parseInt(id) - 1);
// } }
// }
// // 修改下次执行之间 // 撤防
// Calendar calendar = new GregorianCalendar(); else if (job.getType() == 2) {
// calendar.setTime(nextExecuteTime); for (String id : ids) {
// // 把日期往后增加一天,整数 往后推,负数往前移动 Alarm.fqcf(Integer.parseInt(id) - 1);
// calendar.add(Calendar.DATE, 1); }
// job.setNextExecuteTime(calendar.getTime()); }
// jobList.add(job); // 修改下次执行时间
// } Calendar calendar = new GregorianCalendar();
// cornJobService.updateBatchById(jobList); calendar.setTime(nextExecuteTime);
// } // 把日期往后增加一天,整数 往后推,负数往前移动
calendar.add(Calendar.DATE, 1);
job.setNextExecuteTime(calendar.getTime());
jobList.add(job);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
cornJobService.updateBatchById(jobList);
}
} }
} }

@ -2,11 +2,8 @@ package org.springblade.hospital.websocket;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import javax.websocket.*; import javax.websocket.*;
import javax.websocket.server.PathParam; import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpoint;
@ -15,12 +12,13 @@ import java.util.concurrent.CopyOnWriteArraySet;
/** /**
* 开启webSocket服务 * 开启webSocket服务
*
* @author DELL * @author DELL
* @date * @date
*/ */
@Slf4j
@ServerEndpoint("/websocket/{sid}")
@Component @Component
@ServerEndpoint("/websocket/{sid}")
@Slf4j
public class WebSocketServer { public class WebSocketServer {
/** /**
* 静态变量用来记录当前在线连接数 * 静态变量用来记录当前在线连接数
@ -43,11 +41,28 @@ public class WebSocketServer {
/** /**
* 连接建立成功调用的方法 * 连接建立成功调用的方法
*
* @param session * @param session
* @param sid * @param sid
*/ */
@OnOpen @OnOpen
public void onOpen(Session session, @PathParam("sid") String sid) { public void onOpen(Session session, @PathParam("sid") String sid) {
// 如果有重复sid连接,拒绝
for (WebSocketServer webSocketServer : webSocketSet) {
if (sid.equals(webSocketServer.sid)) {
System.out.println(sid + "已存在,拒绝连接!");
// try {
// session.getBasicRemote().sendText(sid + "已存在,拒绝连接!");
// System.out.println("当前连接:" + session);
// session.close();
// System.out.println("当前连接:" + session);
// } catch (IOException e) {
// e.printStackTrace();
// }
return;
}
}
this.session = session; this.session = session;
//加入set中 //加入set中
webSocketSet.add(this); webSocketSet.add(this);
@ -69,11 +84,12 @@ public class WebSocketServer {
@OnClose @OnClose
public void onClose() { public void onClose() {
//从set中删除 //从set中删除
webSocketSet.remove(this); if (webSocketSet.remove(this)) {
//在线数减1 //在线数减1
subOnlineCount(); subOnlineCount();
log.info("有一连接关闭,当前在线人数为:{}", getOnlineCount()); log.info("有一连接关闭,当前在线人数为:{}", getOnlineCount());
} }
}
/** /**
* 收到客户端消息后调用的方法 * 收到客户端消息后调用的方法
@ -121,8 +137,10 @@ public class WebSocketServer {
String message = json.get("message").toString(); String message = json.get("message").toString();
log.info("推送内容:" + message); log.info("推送内容:" + message);
System.out.println("webSocketSet连接数量:" + webSocketSet.size());
for (WebSocketServer item : webSocketSet) { for (WebSocketServer item : webSocketSet) {
try { try {
System.out.println(item.sid + "===" + item.session);
item.sendMessage(message); item.sendMessage(message);
} catch (Exception e) { } catch (Exception e) {
continue; continue;
@ -130,6 +148,13 @@ public class WebSocketServer {
} }
} }
public static void test() {
System.out.println("webSocketSet连接数量:" + webSocketSet.size());
for (WebSocketServer item : webSocketSet) {
System.out.println(item.sid + "===" + item.session);
}
}
/** /**
* 获取当前在线人数 * 获取当前在线人数
* *

@ -1,10 +1,10 @@
package org.springblade.hospital.websocket; package org.springblade.hospital.websocket;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter; import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration @Component
public class WebSoketConfig { public class WebSoketConfig {
@Bean @Bean

Loading…
Cancel
Save