diff --git a/pom.xml b/pom.xml index 45a392b..39c524c 100644 --- a/pom.xml +++ b/pom.xml @@ -240,7 +240,8 @@ org.springframework spring-websocket - 5.2.8.RELEASE + + 5.3.27 @@ -260,6 +261,23 @@ 0.10.21 + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/springblade/hospital/controller/AppDataController.java b/src/main/java/org/springblade/hospital/controller/AppDataController.java index 7f5ea0a..a1ebe78 100644 --- a/src/main/java/org/springblade/hospital/controller/AppDataController.java +++ b/src/main/java/org/springblade/hospital/controller/AppDataController.java @@ -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> 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); } } diff --git a/src/main/java/org/springblade/hospital/entity/JoysuchCoordinate.java b/src/main/java/org/springblade/hospital/entity/JoysuchCoordinate.java new file mode 100644 index 0000000..ac21be7 --- /dev/null +++ b/src/main/java/org/springblade/hospital/entity/JoysuchCoordinate.java @@ -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; +} diff --git a/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java b/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java index 56cfcf0..a332353 100644 --- a/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java +++ b/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java @@ -303,12 +303,18 @@ public class AlarmDataParse { // 设备信息 List 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); diff --git a/src/main/java/org/springblade/hospital/mapper/AlarmInformationMapper.xml b/src/main/java/org/springblade/hospital/mapper/AlarmInformationMapper.xml index 636afdd..b9422d4 100644 --- a/src/main/java/org/springblade/hospital/mapper/AlarmInformationMapper.xml +++ b/src/main/java/org/springblade/hospital/mapper/AlarmInformationMapper.xml @@ -9,7 +9,7 @@ ho.report_time = ]]> #{startTime} AND ho.report_time #{endTime} - AND ho.device_type = #{deviceType} + AND ho.type = #{deviceType} AND is_deleted = 0 diff --git a/src/main/java/org/springblade/hospital/utils/CornJobUtil.java b/src/main/java/org/springblade/hospital/utils/CornJobUtil.java index f9f3b4b..3b98598 100644 --- a/src/main/java/org/springblade/hospital/utils/CornJobUtil.java +++ b/src/main/java/org/springblade/hospital/utils/CornJobUtil.java @@ -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 jobs = cornJobService.list(Wrappers.lambdaQuery().eq(CornJob::getStatus, 1)); -// if (CollectionUtils.isNotEmpty(jobs)) { -// List 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 jobs = cornJobService.list(Wrappers.lambdaQuery().eq(CornJob::getStatus, 1)); + if (CollectionUtils.isNotEmpty(jobs)) { + List 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); + } } } diff --git a/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java b/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java index 1335682..d305457 100644 --- a/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java +++ b/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java @@ -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); + } + } + /** * 获取当前在线人数 * diff --git a/src/main/java/org/springblade/hospital/websocket/WebSoketConfig.java b/src/main/java/org/springblade/hospital/websocket/WebSoketConfig.java index 9649c61..70c4240 100644 --- a/src/main/java/org/springblade/hospital/websocket/WebSoketConfig.java +++ b/src/main/java/org/springblade/hospital/websocket/WebSoketConfig.java @@ -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