多个报警主机方案修改

main
litao 2 years ago
parent 2d17fbd5e1
commit 120d769fcc
  1. 65
      src/main/java/org/springblade/hospital/agent/service/HikAgentService.java
  2. 2
      src/main/java/org/springblade/hospital/controller/AlarmInformationController.java
  3. 28
      src/main/java/org/springblade/hospital/controller/AppDataController.java
  4. 10
      src/main/java/org/springblade/hospital/entity/AlarmInformation.java
  5. 10
      src/main/java/org/springblade/hospital/entity/CornJob.java
  6. 1
      src/main/java/org/springblade/hospital/hik/NetSDKDemo/HCNetSDK.java
  7. 73
      src/main/java/org/springblade/hospital/hik/alarm/Alarm.java
  8. 47
      src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java
  9. 95
      src/main/java/org/springblade/hospital/utils/CornJobUtil.java
  10. 115
      src/main/java/org/springblade/hospital/utils/ExternalUtils.java
  11. 1
      src/main/java/org/springblade/hospital/websocket/WebSocketServer.java

@ -180,7 +180,7 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
int pagesize = request.getPagesize();
int devType = request.getDevType();
List<Map> list = externalUtils.getList(page, pagesize, null, String.valueOf(devType));
List<Map> list = externalUtils.getList(page, pagesize, null, String.valueOf(devType), "100", null);
System.out.println("list======" + list);
// List<RoadwayVo> roadwayVoList = hikService.getTheDeviceInfo();
@ -351,15 +351,11 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
try {
ByteString data = request.getPoint().getData();
int dataType = request.getPoint().getDataType();
int value = DataTrans.bytesToIntBigEndian(data.toByteArray());
int pntType = request.getPoint().getPntType();
int pntTypeValue = request.getPoint().getPntTypeValue();
String roadwaySyscode = request.getPoint().getId();
String[] spId = roadwaySyscode.split("_");
Integer value = null;
if (dataType == 14) {
value = DataTrans.bytesToIntBigEndian(data.toByteArray());
}
log.info("command +++++++++++ {} ", value);
@ -368,54 +364,47 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
// 防区控制
if (pntType == 8) {
// 布防
if (pntTypeValue == 1) {
result = Alarm.fqbf(Integer.parseInt(roadwaySyscode) - 1);
if (value == 1) {
System.out.println("shebeikongzhi:fqbf");
result = Alarm.fqbf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
}
// 撤防
else if (pntTypeValue == 2) {
result = Alarm.fqcf(Integer.parseInt(roadwaySyscode) - 1);
else if (value == 0) {
System.out.println("shebeikongzhi:fqcf");
result = Alarm.fqcf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
}
// 旁路
else if (pntTypeValue == 3) {
result = Alarm.fqpl(Integer.parseInt(roadwaySyscode) - 1);
else if (value == 2) {
System.out.println("shebeikongzhi:fqpl");
result = Alarm.fqpl(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
}
// 撤销旁路
else if (pntTypeValue == 4) {
result = Alarm.fqcxpl(Integer.parseInt(roadwaySyscode) - 1);
else if (value == 3) {
System.out.println("shebeikongzhi:fqqxpl");
result = Alarm.fqcxpl(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
}
}
// 子系统控制
else if (pntType == 10) {
// 布防
if (pntTypeValue == 1) {
result = Alarm.zibufang(Integer.parseInt(roadwaySyscode));
if (value == 1) {
System.out.println("shebeikongzhi:zxtbf");
result = Alarm.zibufang(spId[0], Integer.parseInt(spId[spId.length - 1]));
}
// 撤防
else if (pntTypeValue == 2) {
result = Alarm.zichefang(Integer.parseInt(roadwaySyscode));
else if (value == 0) {
System.out.println("shebeikongzhi:zxtcf");
result = Alarm.zichefang(spId[0], Integer.parseInt(spId[spId.length - 1]));
}
} else if (pntType == 11) {
// 消警
else if (pntTypeValue == 3) {
result = Alarm.xiaojing(Integer.parseInt(roadwaySyscode));
if (value == 1) {
System.out.println("shebeikongzhi:zxtxj");
result = Alarm.xiaojing(spId[0], Integer.parseInt(spId[spId.length - 1]));
}
}
if (result) {
responseObserver.onNext(CommonResult.newBuilder().setCode(0).build());
} else {
responseObserver.onNext(CommonResult.newBuilder().setCode(1).build());
}
// if (null != value) {
// if (value == 0 || value == 1 || value == 3) {
// if (result) {
// responseObserver.onNext(CommonResult.newBuilder().setCode(0).build());
// } else {
// responseObserver.onNext(CommonResult.newBuilder().setCode(1).build());
// }
// }
// } else {
// responseObserver.onNext(CommonResult.newBuilder().setCode(1).build());
// }
System.out.println("result:" + result);
responseObserver.onNext(CommonResult.newBuilder().setCode(result ? 0 : 1).build());
} catch (Exception e) {
e.printStackTrace();
responseObserver.onNext(CommonResult.newBuilder().setCode(1).build());

@ -132,7 +132,7 @@ public class AlarmInformationController extends BladeController {
*/
@PostMapping("/clear")
public R clear(@RequestBody AlarmInformation alarmInformation) {
Alarm.xiaojing(alarmInformation.getSystemNum());
Alarm.xiaojing(alarmInformation.getHostSerialNumber(), alarmInformation.getSystemNum());
alarmInformation.setIsClear(1);
return R.status(alarmInformationService.updateById(alarmInformation));
}

@ -237,48 +237,48 @@ public class AppDataController extends BladeController {
* 子系统布防
*/
@PostMapping("/setup")
public R setup(@RequestParam String num) {
return R.status(Alarm.zibufang(Integer.parseInt(num)));
public R setup(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.zibufang(hostSerialNumber, Integer.parseInt(num)));
}
/**
* 子系统撤防
*/
@PostMapping("/close")
public R close(@RequestParam String num) {
return R.status(Alarm.zichefang(Integer.parseInt(num)));
public R close(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.zichefang(hostSerialNumber, Integer.parseInt(num)));
}
/**
* 防区布防
*/
@PostMapping("/setupAlarm")
public R setupAlarm(@RequestParam String num) {
return R.status(Alarm.fqbf(Integer.parseInt(num) - 1));
public R setupAlarm(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.fqbf(hostSerialNumber, Integer.parseInt(num) - 1));
}
/**
* 防区撤防
*/
@PostMapping("/closeAlarm")
public R closeAlarm(@RequestParam String num) {
return R.status(Alarm.fqcf(Integer.parseInt(num) - 1));
public R closeAlarm(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.fqcf(hostSerialNumber, Integer.parseInt(num) - 1));
}
/**
* 防区旁路
*/
@PostMapping("/bypass")
public R bypass(@RequestParam String num) {
return R.status(Alarm.fqpl(Integer.parseInt(num) - 1));
public R bypass(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.fqpl(hostSerialNumber, Integer.parseInt(num) - 1));
}
/**
* 防区撤销旁路
*/
@PostMapping("/unBypass")
public R unBypass(@RequestParam String num) {
return R.status(Alarm.fqcxpl(Integer.parseInt(num) - 1));
public R unBypass(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.fqcxpl(hostSerialNumber, Integer.parseInt(num) - 1));
}
@GetMapping("/test")
@ -290,12 +290,12 @@ public class AppDataController extends BladeController {
}
@GetMapping("/coordinateToWGS84")
public JoysuchCoordinate coordinateToWGS84_2D(int x, int y, double minX, double maxY) {
public R 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);
return R.data(new JoysuchCoordinate((double) x, (double) y, lng, lat));
}
}

@ -135,6 +135,16 @@ public class AlarmInformation extends BaseEntity {
*/
private Integer isClear;
/**
* 报警主机序列号
*/
private String hostSerialNumber;
/**
* 报警主机IP
*/
private String hostIp;
// @TableField(exist = false)
// private List<StatusDetail> statusDetailList;

@ -69,4 +69,14 @@ public class CornJob extends BaseEntity {
* 下次执行时间
*/
private Date nextExecuteTime;
/**
* 报警主机序列号
*/
private String hostSerialNumber;
/**
* 报警主机IP
*/
private String hostIp;
}

@ -4074,7 +4074,6 @@ DVR实现巡航数据结构
public byte byIpProtocol; /* Ip协议 0-IPV4, 1-IPV6 */
public byte[] byRes2 = new byte[11];
}
//硬解码显示区域参数(子结构)

@ -1,5 +1,8 @@
package org.springblade.hospital.hik.alarm;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
@ -10,11 +13,15 @@ import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.mapper.AlarmInformationMapper;
import org.springblade.hospital.service.IAlarmInformationService;
import org.springblade.hospital.service.impl.AlarmInformationServiceImpl;
import org.springblade.hospital.utils.ExternalUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
@Component
@ -27,7 +34,10 @@ public class Alarm implements CommandLineRunner {
static int lListenHandle = -1;//报警监听句柄
static FMSGCallBack_V31 fMSFCallBack_V31 = null;
static FMSGCallBack fMSFCallBack;
static Map<String, Integer> numMap;
@Autowired
ExternalUtils externalUtils;
/**
* 动态库加载
@ -45,7 +55,8 @@ public class Alarm implements CommandLineRunner {
// strDllPath = "C:\\Users\\Administrator\\Desktop\\grpc-jar\\lib\\HCNetSDK.dll";
else if (osSelect.isLinux())
//Linux系统加载库路径
strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so";
// strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so";
strDllPath = "/home/hospital/project/lib/libhcnetsdk.so";
hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
} catch (Exception ex) {
System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
@ -92,7 +103,8 @@ public class Alarm implements CommandLineRunner {
System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError());
return;
} else {
System.out.println(ip + ":设备登录成功!");
numMap.put(new String(m_strDeviceInfo.struDeviceV30.sSerialNumber).trim(), lUserID);
System.out.println(ip + ":设备登录成功!" + "设备序列号:" + new String(m_strDeviceInfo.struDeviceV30.sSerialNumber).trim());
return;
}
}
@ -127,7 +139,7 @@ public class Alarm implements CommandLineRunner {
*/
// 每天22点10分30秒执行一次
// @Scheduled(cron = "30 10 22 * * ?")
public static void setAlarm() {
public static void setAlarm(int userId) {
if (lAlarmHandle < 0)//尚未布防,需要布防
{
//报警布防参数设置
@ -137,14 +149,13 @@ public class Alarm implements CommandLineRunner {
m_strAlarmInfo.byAlarmInfoType = 1; // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT)
m_strAlarmInfo.byDeployType = 1; //布防类型:0-客户端布防,1-实时布防
m_strAlarmInfo.write();
lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo);
System.out.println("lAlarmHandle: " + lAlarmHandle);
if (lAlarmHandle == -1) {
System.out.println("布防失败,错误码为" + hCNetSDK.NET_DVR_GetLastError());
return;
} else {
System.out.println("布防成功");
}
} else {
System.out.println("设备已经布防,请先撤防!");
@ -191,14 +202,13 @@ public class Alarm implements CommandLineRunner {
/**
* 获取设备状态信息
*/
public static HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 getStatus() {
public static HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 getStatus(String number) {
IntByReference ibrBytesReturned = new IntByReference(0);
HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 statusV40 = new HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40();
statusV40.write();
Pointer pointer = statusV40.getPointer();
boolean status = hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40, 0Xffffffff, pointer, statusV40.size(), ibrBytesReturned);
boolean status = hCNetSDK.NET_DVR_GetDVRConfig(numMap.get(number), HCNetSDK.NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40, 0Xffffffff, pointer, statusV40.size(), ibrBytesReturned);
// boolean status = hCNetSDK.NET_DVR_RemoteControl(lUserID, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
if (status) {
System.out.println("设备在线");
statusV40.read();
@ -271,8 +281,8 @@ public class Alarm implements CommandLineRunner {
/**
* 消警
*/
public static boolean xiaojing(int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(lUserID, num);
public static boolean xiaojing(String hostSerialNumber, int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num);
if (b) {
System.out.println("消警成功");
} else {
@ -284,8 +294,8 @@ public class Alarm implements CommandLineRunner {
/**
* 子系统布防
*/
public static boolean zibufang(int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(lUserID, num);
public static boolean zibufang(String hostSerialNumber, int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num);
if (b) {
System.out.println("布防成功");
} else {
@ -297,8 +307,8 @@ public class Alarm implements CommandLineRunner {
/**
* 子系统撤防
*/
public static boolean zichefang(int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(lUserID, num);
public static boolean zichefang(String hostSerialNumber, int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num);
if (b) {
System.out.println("撤防成功");
} else {
@ -310,11 +320,11 @@ public class Alarm implements CommandLineRunner {
/**
* 防区布防
*/
public static boolean fqbf(int num) {
public static boolean fqbf(String hostSerialNumber, int num) {
HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
setup.byAssiciateAlarmIn[num] = 1;
setup.write();
boolean b = hCNetSDK.NET_DVR_AlarmHostSetupAlarmChan(lUserID, setup);
boolean b = hCNetSDK.NET_DVR_AlarmHostSetupAlarmChan(numMap.get(hostSerialNumber), setup);
if (b) {
System.out.println("布防成功");
} else {
@ -326,11 +336,11 @@ public class Alarm implements CommandLineRunner {
/**
* 防区撤防
*/
public static boolean fqcf(int num) {
public static boolean fqcf(String hostSerialNumber, int num) {
HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
setup.byAssiciateAlarmIn[num] = 1;
setup.write();
boolean b = hCNetSDK.NET_DVR_AlarmHostCloseAlarmChan(lUserID, setup);
boolean b = hCNetSDK.NET_DVR_AlarmHostCloseAlarmChan(numMap.get(hostSerialNumber), setup);
if (b) {
System.out.println("撤防成功");
} else {
@ -342,11 +352,11 @@ public class Alarm implements CommandLineRunner {
/**
* 防区旁路
*/
public static boolean fqpl(int num) {
public static boolean fqpl(String hostSerialNumber, int num) {
HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
setup.byAssiciateAlarmIn[num] = 1;
setup.write();
boolean b = hCNetSDK.NET_DVR_BypassAlarmChan(lUserID, setup);
boolean b = hCNetSDK.NET_DVR_BypassAlarmChan(numMap.get(hostSerialNumber), setup);
if (b) {
System.out.println("旁路成功");
} else {
@ -358,11 +368,11 @@ public class Alarm implements CommandLineRunner {
/**
* 防区撤销旁路
*/
public static boolean fqcxpl(int num) {
public static boolean fqcxpl(String hostSerialNumber, int num) {
HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
setup.byAssiciateAlarmIn[num] = 1;
setup.write();
boolean b = hCNetSDK.NET_DVR_UnBypassAlarmChan(lUserID, setup);
boolean b = hCNetSDK.NET_DVR_UnBypassAlarmChan(numMap.get(hostSerialNumber), setup);
if (b) {
System.out.println("撤销旁路成功");
} else {
@ -437,9 +447,22 @@ public class Alarm implements CommandLineRunner {
Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer();
hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG);
Alarm.login_V40("192.168.1.64", (short) 7200, "admin", "asd0514.."); //登录设备
Alarm.setAlarm();//报警布防,和报警监听二选一即可
if (numMap == null) {
numMap = new HashMap<>();
}
List<Map> list = externalUtils.getList(0, 0, null, null, "105", null);
if (CollectionUtils.isNotEmpty(list)) {
for (Map map : list) {
String s = JSON.toJSONString(map.get("tags")).replace("\\", "");
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
String number = tagsMap.get("hostNumber").toString();
Alarm.login_V40(tagsMap.get("ip").toString(), Short.parseShort(tagsMap.get("port").toString()), "admin", "asd0514.."); //登录设备
if (numMap.get(number) != null) {
Alarm.setAlarm(numMap.get(number));//报警布防,和报警监听二选一即可
}
}
}
// Alarm.startListen("192.168.1.100", (short) 7200);//报警监听,不需要登陆设备
while (true) {

@ -285,6 +285,9 @@ public class AlarmDataParse {
}
break;
case HCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报告报警上传
String sSerialNumber = new String(pAlarmer.sSerialNumber).trim();
String ip = new String(pAlarmer.sDeviceIP).trim();
System.out.println("序列号:" + sSerialNumber + "设备IP:" + ip);
HCNetSDK.NET_DVR_CID_ALARM strCIDalarm = new HCNetSDK.NET_DVR_CID_ALARM();
strCIDalarm.write();
Pointer pstrCIDalarm = strCIDalarm.getPointer();
@ -311,9 +314,9 @@ public class AlarmDataParse {
externalUtils = SpringUtil.getBean(ExternalUtils.class);
}
if (sum > 0) {
list = externalUtils.getList(1, 10, "sector_" + sum, null);
list = externalUtils.getList(0, 0, "sector_" + sum, null, "100", sSerialNumber);
} else {
list = externalUtils.getList(1, 10, "sys_" + bySubSysNo, null);
list = externalUtils.getList(0, 0, "sys_" + bySubSysNo, null, "100", sSerialNumber);
}
}
System.out.println("【CID事件】" + "触发时间:" + TriggerTime + "CID事件号:" + sCIDCode + "CID事件名:" + sCIDDescribe + "子系统号:" +
@ -329,6 +332,8 @@ public class AlarmDataParse {
alarmInformation.setType(sCIDCode);
alarmInformation.setContent(DictBizCache.getValue("alarm_message_type", sCIDCode));
alarmInformation.setSystemNum((int) bySubSysNo);
alarmInformation.setHostSerialNumber(sSerialNumber);
alarmInformation.setHostIp(ip);
if (CollectionUtils.isNotEmpty(list)) {
Map map = list.get(0);
@ -360,21 +365,27 @@ public class AlarmDataParse {
// 只保留“即时报警”、“设备防拆报警”
if ("1103".equals(sCIDCode) || "1137".equals(sCIDCode)) {
// 上报海信iot平台
// if (queueUtils == null) {
// queueUtils = SpringUtil.getBean(QueueUtils.class);
// }
// byte[] byteValue = DataTrans.intToBytesBigEndian(1);
// ByteString byteString = ByteString.copyFrom(byteValue);
// Point point = Point.newBuilder()
// .setData(byteString)
// .setId("sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1))
// .setDevType(2)
// .setPntType(7)
//// .setPntTypeValue(1)
// .build();
// boolean b = queueUtils.saveQueueDataStatus(point);
// queueUtils.saveQueueDataAlarm(point);
// System.out.println("===" + b);
if (queueUtils == null) {
queueUtils = SpringUtil.getBean(QueueUtils.class);
}
List<Map> hostList = externalUtils.getList(0, 0, null, null, "105", sSerialNumber);
Map hostMap = hostList.get(0);
String s = JSON.toJSONString(hostMap.get("tags")).replace("\\", "");
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
byte[] byteValue = DataTrans.intToBytesBigEndian(1);
ByteString byteString = ByteString.copyFrom(byteValue);
Point point = Point.newBuilder()
.setData(byteString)
.setId(tagsMap.get("mac").toString() + "_sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1))
.setDevType(2)
.setPntType(7)
.build();
boolean b = queueUtils.saveQueueDataStatus(point);
queueUtils.saveQueueDataAlarm(point);
System.out.println("===" + b);
// 报警信息发送到远程服务器
if (restTemplate == null) {
@ -385,7 +396,7 @@ public class AlarmDataParse {
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
Map<String, Object> map = new HashMap<>();
map.put("id_", "sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1));
map.put("id_", tagsMap.get("mac").toString() + "_sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1));
map.put("devType_", 2);
map.put("pntType_", 7);
map.put("pntTypeValue_", 1);

@ -1,13 +1,16 @@
package org.springblade.hospital.utils;
import com.alibaba.fastjson.JSONObject;
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.AlarmInformation;
import org.springblade.hospital.entity.CornJob;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.hik.alarm.Alarm;
import org.springblade.hospital.service.ICornJobService;
import org.springblade.hospital.websocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
@ -39,46 +42,60 @@ public class CornJobUtil {
* 定时布撤防每3分钟执行一次
*/
@Async
@Scheduled(initialDelay = 5000, fixedRate = 180000)
@Scheduled(initialDelay = 6000, 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("-----------------====================");
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);
}
// 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(job.getHostSerialNumber(), Integer.parseInt(id) - 1);
// }
// }
// // 撤防
// else if (job.getType() == 2) {
// for (String id : ids) {
// Alarm.fqcf(job.getHostSerialNumber(), 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);
// }
}
@Async
@Scheduled(initialDelay = 7000, fixedRate = 3600000)
public void testWebSocket(){
System.out.println("定时任务执行了3");
AlarmInformation alarmInformation = new AlarmInformation();
alarmInformation.setReportTime(new Date());
alarmInformation.setBuildId("2");
alarmInformation.setFloorNo("2");
alarmInformation.setContent("测试报警信息");
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", JSONObject.toJSONString(alarmInformation));
WebSocketServer.sendInfo(jsonObject);
}
}

@ -66,17 +66,16 @@ public class ExternalUtils {
/**
* 获取物联网平台设备列表
*/
public List<Map> getList(int page, int pageSize, String id, String type) {
public List<Map> getList(int page, int pageSize, String id, String type, String pid, String number) {
String token = CacheUtil.get(SYS_CACHE, "token:id:", "wlwtoken", String.class);
Map map = getMap(token, page, pageSize, id, type);
Map map = getMap(token, page, pageSize, id, type, pid, number);
int code = Integer.parseInt(map.get("code").toString());
if (code == 401) {
token = getToken("Arf7bd4f26", "kb207044c8");
CacheUtil.put(SYS_CACHE, "token:id:", "wlwtoken", token);
map = getMap(token, page, pageSize, id, type);
map = getMap(token, page, pageSize, id, type, pid, number);
}
@ -89,21 +88,23 @@ public class ExternalUtils {
return mapList;
}
private Map getMap(String token, int page, int pageSize, String id, String type) {
String url = "http://182.139.182.190:60032/prod-api/api/bizDevice/list?";
String pid = "pid=100";
private Map getMap(String token, int page, int pageSize, String id, String type, String pid, String number) {
String url = "http://182.139.182.190:60032/prod-api/api/bizDevice/list?pid=";
// String pid = "pid=100";
if (StringUtils.isNotBlank(type)) {
if ("4".equals(type)) {
pid = "pid=98";
pid = "98";
url += pid;
} else {
url += pid + "&params[type]=" + type;
}
}else {
} else {
url += pid;
}
if (StringUtils.isNotBlank(number)) {
url += "&params[hostNumber]=" + number;
}
// 分页参数
if (page > 0 && pageSize > 0) {
url += "&pageNum=" + page + "&pageSize=" + pageSize;
@ -131,33 +132,45 @@ public class ExternalUtils {
*/
public void updateStatus() {
// 设备列表信息
List<Map> list = getList(0, 0, null, null);
List<Map> hosts = getList(0, 0, null, null, "105", null);
List<Map> mapList = getList(0, 0, null, null, "100", null);
// 遍历设备列表更新设备状态信息
if (CollectionUtils.isNotEmpty(list)) {
if (CollectionUtils.isNotEmpty(hosts)) {
// 报警主机在线状态:true在线 false离线
// boolean presence = Alarm.presence();
for (Map hostMap : hosts) {
String tags = JSON.toJSONString(hostMap.get("tags")).replace("\\", "");
tags = tags.substring(1, tags.length() - 1);
Map tagMap = JSONObject.parseObject(tags, Map.class);
String number = tagMap.get("hostNumber").toString();
String mac = tagMap.get("mac").toString();
// 设备状态信息
HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus(number);
// 如果查不到该报警主机的状态信息
if (status == null) {
continue;
}
// 设备状态信息
HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus();
for (Map map : list) {
// 物联网设备状态
int state = Integer.parseInt(String.valueOf(map.get("status")));
List<Map> list = mapList.stream().filter(map -> JSON.toJSONString(map.get("tags")).contains(number)).collect(Collectors.toList());
for (Map map : list) {
// 物联网设备状态
int state = Integer.parseInt(String.valueOf(map.get("status")));
String s = JSON.toJSONString(map.get("tags")).replace("\\", "");
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
String id = tagsMap.get("mac").toString();
String type = tagsMap.get("type").toString();
String s = JSON.toJSONString(map.get("tags")).replace("\\", "");
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
String id = mac + "_" + tagsMap.get("mac").toString();
String type = tagsMap.get("type").toString();
// 防区号/子系统号
int sCIDCode = Integer.parseInt(tagsMap.get("buildingNo").toString());
// 防区号/子系统号
int sCIDCode = Integer.parseInt(tagsMap.get("buildingNo").toString());
// 设备真实状态
int fqStatus = 0;
int presence = 0;
// 设备真实状态
int fqStatus = 0;
int presence = 0;
if (status != null) {
if ("2".equals(type)) {
presence = 1;
// 防区布防状态 0-对应防区处于撤防状态,1-对应防区处于布防状态
@ -166,7 +179,14 @@ public class ExternalUtils {
byte byBypassStatus = status.byBypassStatus[sCIDCode - 1];
// 防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态
byte byAlarmInFaultStatus = status.byAlarmInFaultStatus[sCIDCode - 1];
// 防区报警状态,0-对应防区当前无报警,1-对应防区当前有报警
byte byAlarmInStatus = status.byAlarmInFaultStatus[sCIDCode - 1];
// 上报防区报警状态
// updateById(id, 7, byAlarmInStatus, 2);
// test1(id, 7, byAlarmInStatus, 2);
test1(id, 7, 1, 2);
// 撤防-6 布防-5 旁路-7
if (byAlarmInFaultStatus == 0) {
if (bySetupAlarmStatus == 1) {
fqStatus = 5;
@ -188,18 +208,18 @@ public class ExternalUtils {
fqStatus = 5;
}
}
}
// 海信iot
// 海信iot
// updateById(id, fqStatus,presence,type);
test(id, fqStatus, presence, type);
test(id, fqStatus, presence, type);
if (fqStatus == state) {
continue;
}
if (fqStatus == state) {
continue;
}
// 物联网平台
bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), fqStatus);
// 物联网平台
bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), fqStatus);
}
}
}
}
@ -242,7 +262,13 @@ public class ExternalUtils {
queue(id, pntType, pntTypeValue, 2);
pntType = 8;
pntTypeValue = byBypassStatus == 7 ? 1 : 0;
if (byBypassStatus == 5) {
pntTypeValue = 1;
} else if (byBypassStatus == 6) {
pntTypeValue = 0;
} else if (byBypassStatus == 7) {
pntTypeValue = 2;
}
queue(id, pntType, pntTypeValue, 2);
}
}
@ -261,7 +287,8 @@ public class ExternalUtils {
}
byte[] byteValue = DataTrans.intToBytesBigEndian(pntTypeValue);
ByteString byteString = ByteString.copyFrom(byteValue);
Point point = Point.newBuilder().setData(byteString)
Point point = Point.newBuilder()
.setData(byteString)
.setId(id)
.setDevType(devType)
.setPntType(pntType)
@ -333,7 +360,7 @@ public class ExternalUtils {
pntTypeValue = byBypassStatus == 5 ? 0 : 1;
test1(id, pntType, pntTypeValue, 3);
}
// 防区
// 防区 撤防-6 布防-5 旁路-7
else {
pntTypeValue = 1;
test1(id, pntType, pntTypeValue, 2);
@ -350,7 +377,13 @@ public class ExternalUtils {
test1(id, pntType, pntTypeValue, 2);
pntType = 8;
pntTypeValue = byBypassStatus == 7 ? 1 : 0;
if (byBypassStatus == 5) {
pntTypeValue = 1;
} else if (byBypassStatus == 6) {
pntTypeValue = 0;
} else if (byBypassStatus == 7) {
pntTypeValue = 2;
}
test1(id, pntType, pntTypeValue, 2);
}
}

@ -157,7 +157,6 @@ public class WebSocketServer {
/**
* 获取当前在线人数
*
* @return
*/
public static synchronized int getOnlineCount() {

Loading…
Cancel
Save