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. 43
      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>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>5.2.8.RELEASE</version>
<!-- <version>5.2.8.RELEASE</version>-->
<version>5.3.27</version>
</dependency>
@ -260,6 +261,23 @@
<version>0.10.21</version>
</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>
<build>

@ -32,10 +32,7 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.hospital.entity.AlarmInformation;
import org.springblade.hospital.entity.Alarms;
import org.springblade.hospital.entity.AppData;
import org.springblade.hospital.entity.KeyAndSecret;
import org.springblade.hospital.entity.*;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.hik.alarm.Alarm;
import org.springblade.hospital.service.IAppDataService;
@ -73,10 +70,6 @@ public class AppDataController extends BladeController {
private final RestTemplate restTemplate;
private final WebSocketServer webSocket;
private final ExternalUtils externalUtils;
@GetMapping("/list")
public R<IPage<AppData>> list(AppData appData, Query query) {
@ -290,8 +283,19 @@ public class AppDataController extends BladeController {
@GetMapping("/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();
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<>();
AlarmInformation alarmInformation = new AlarmInformation();
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) {
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 + "子系统号:" +
bySubSysNo);
@ -318,8 +324,7 @@ public class AlarmDataParse {
if (alarmInformationService == null) {
alarmInformationService = SpringUtil.getBean(IAlarmInformationService.class);
}
AlarmInformation alarmInformation = new AlarmInformation();
alarmInformation.setDeviceId("sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1));
alarmInformation.setReportTime(format.parse(TriggerTime));
alarmInformation.setType(sCIDCode);
alarmInformation.setContent(DictBizCache.getValue("alarm_message_type", sCIDCode));
@ -336,18 +341,17 @@ public class AlarmDataParse {
alarmInformation.setBuildId(tagsMap.get("buildingNo").toString());
alarmInformation.setLatidute(tagsMap.get("lat").toString());
alarmInformation.setLongidute(tagsMap.get("lng").toString());
alarmInformation.setDeviceId(tagsMap.get("mac").toString());
Map bizProduct = JSONObject.parseObject(JSON.toJSONString(map.get("bizProduct")), Map.class);
alarmInformation.setProductName(bizProduct.get("name").toString());
// 主动修改设备状态-物联网平台
if ("3973".equals(sCIDCode)) {
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);
} else if ("1570".equals(sCIDCode)) {
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);

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

@ -2,6 +2,7 @@ package org.springblade.hospital.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.hospital.entity.CornJob;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
@ -41,33 +42,43 @@ public class CornJobUtil {
@Scheduled(initialDelay = 5000, fixedRate = 180000)
public void task() {
System.out.println("定时任务执行了2");
// List<CornJob> jobs = cornJobService.list(Wrappers.<CornJob>lambdaQuery().eq(CornJob::getStatus, 1));
// if (CollectionUtils.isNotEmpty(jobs)) {
// List<CornJob> jobList = new ArrayList<>();
// for (CornJob job : jobs) {
// Date nextExecuteTime = job.getNextExecuteTime();
// if (new Date().compareTo(nextExecuteTime) < 0) {
// continue;
// }
// System.out.println("-----------------====================");
// // 布防
// if (job.getType() == 1) {
// Alarm.fqbf(Integer.parseInt(job.getDeviceId()) - 1);
// }
// // 撤防
// else if (job.getType() == 2) {
// Alarm.fqcf(Integer.parseInt(job.getDeviceId()) - 1);
// }
//
// // 修改下次执行之间
// Calendar calendar = new GregorianCalendar();
// calendar.setTime(nextExecuteTime);
// // 把日期往后增加一天,整数 往后推,负数往前移动
// calendar.add(Calendar.DATE, 1);
// job.setNextExecuteTime(calendar.getTime());
// jobList.add(job);
// }
// cornJobService.updateBatchById(jobList);
// }
List<CornJob> jobs = cornJobService.list(Wrappers.<CornJob>lambdaQuery().eq(CornJob::getStatus, 1));
if (CollectionUtils.isNotEmpty(jobs)) {
List<CornJob> jobList = new ArrayList<>();
for (CornJob job : jobs) {
Date nextExecuteTime = job.getNextExecuteTime();
if (new Date().compareTo(nextExecuteTime) < 0) {
continue;
}
System.out.println("-----------------====================");
try {
if (StringUtils.isNotBlank(job.getDeviceId())) {
String[] ids = job.getDeviceId().split(",");
// 布防
if (job.getType() == 1) {
for (String id : ids) {
Alarm.fqbf(Integer.parseInt(id) - 1);
}
}
// 撤防
else if (job.getType() == 2) {
for (String id : ids) {
Alarm.fqcf(Integer.parseInt(id) - 1);
}
}
// 修改下次执行时间
Calendar calendar = new GregorianCalendar();
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
@ -15,12 +12,13 @@ import java.util.concurrent.CopyOnWriteArraySet;
/**
* 开启webSocket服务
*
* @author DELL
* @date
*/
@Slf4j
@ServerEndpoint("/websocket/{sid}")
@Component
@ServerEndpoint("/websocket/{sid}")
@Slf4j
public class WebSocketServer {
/**
* 静态变量用来记录当前在线连接数
@ -43,11 +41,28 @@ public class WebSocketServer {
/**
* 连接建立成功调用的方法
*
* @param session
* @param sid
*/
@OnOpen
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;
//加入set中
webSocketSet.add(this);
@ -69,10 +84,11 @@ public class WebSocketServer {
@OnClose
public void onClose() {
//从set中删除
webSocketSet.remove(this);
//在线数减1
subOnlineCount();
log.info("有一连接关闭,当前在线人数为:{}", getOnlineCount());
if (webSocketSet.remove(this)) {
//在线数减1
subOnlineCount();
log.info("有一连接关闭,当前在线人数为:{}", getOnlineCount());
}
}
/**
@ -121,8 +137,10 @@ public class WebSocketServer {
String message = json.get("message").toString();
log.info("推送内容:" + message);
System.out.println("webSocketSet连接数量:" + webSocketSet.size());
for (WebSocketServer item : webSocketSet) {
try {
System.out.println(item.sid + "===" + item.session);
item.sendMessage(message);
} catch (Exception e) {
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;
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;
@Configuration
@Component
public class WebSoketConfig {
@Bean

Loading…
Cancel
Save