2023年10月27日13:27:20

main
litao 3 years ago
parent 120d769fcc
commit 23ff537a22
  1. 21
      pom.xml
  2. 1
      src/main/java/org/springblade/common/config/BladeConfiguration.java
  3. 2
      src/main/java/org/springblade/common/constant/CommonConstant.java
  4. 9
      src/main/java/org/springblade/hospital/agent/hik/utils/HikClient.java
  5. 50
      src/main/java/org/springblade/hospital/agent/service/HikAgentService.java
  6. 9
      src/main/java/org/springblade/hospital/agent/utils/DataTrans.java
  7. 2
      src/main/java/org/springblade/hospital/agent/utils/QueueUtils.java
  8. 7
      src/main/java/org/springblade/hospital/controller/AIoTRequestDemo.java
  9. 93
      src/main/java/org/springblade/hospital/controller/AlarmInformationController.java
  10. 213
      src/main/java/org/springblade/hospital/controller/AppDataController.java
  11. 10
      src/main/java/org/springblade/hospital/entity/AlarmInformation.java
  12. 5
      src/main/java/org/springblade/hospital/entity/CornJob.java
  13. 119
      src/main/java/org/springblade/hospital/hik/ArtemisPostTest.java
  14. 406
      src/main/java/org/springblade/hospital/hik/alarm/Alarm.java
  15. 43
      src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java
  16. 94
      src/main/java/org/springblade/hospital/hik/alarm/FMSGCallBack.java
  17. 352
      src/main/java/org/springblade/hospital/newalarm/communicationCom/HTTPClientUtil.java
  18. 16
      src/main/java/org/springblade/hospital/service/impl/AppDataServiceImpl.java
  19. 13
      src/main/java/org/springblade/hospital/service/impl/CornJobServiceImpl.java
  20. 125
      src/main/java/org/springblade/hospital/utils/CornJobUtil.java
  21. 111
      src/main/java/org/springblade/hospital/utils/ExternalUtils.java
  22. 3
      src/main/java/org/springblade/hospital/utils/UploadFileUtil.java
  23. 19
      src/main/java/org/springblade/modules/system/controller/DictBizController.java
  24. 2
      src/main/resources/application-dev.yml
  25. 11
      src/main/resources/application.yml

@ -225,11 +225,11 @@
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/src/main/resources/lib/artemis-http-client-1.2-SNAPSHOT-CL.jar</systemPath>-->
<!-- </dependency>-->
<dependency>
<groupId>com.baidubce</groupId>
<artifactId>artemis-http-client</artifactId>
<version>1.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.baidubce</groupId>-->
<!-- <artifactId>artemis-http-client</artifactId>-->
<!-- <version>1.2</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
@ -260,7 +260,16 @@
<artifactId>hik-java-sdk</artifactId>
<version>0.10.21</version>
</dependency>
<dependency>
<groupId>com.hikvision.ga</groupId>
<artifactId>artemis-http-client</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>com.hikvision</groupId>
<artifactId>isapi-http</artifactId>
<version>1.1.1</version>
</dependency>
<!--pdf转图片-->
<!-- <dependency>-->
<!-- <groupId>org.apache.pdfbox</groupId>-->

@ -48,6 +48,7 @@ public class BladeConfiguration implements WebMvcConfigurer {
secureRegistry.excludePathPatterns("/blade-flow/manager/check-upload");
secureRegistry.excludePathPatterns("/doc.html");
secureRegistry.excludePathPatterns("/js/**");
secureRegistry.excludePathPatterns("/blade-resource/oss/endpoint/remove-file");
secureRegistry.excludePathPatterns("/webjars/**");
secureRegistry.excludePathPatterns("/swagger-resources/**");
secureRegistry.excludePathPatterns("/druid/**");

@ -80,5 +80,5 @@ public interface CommonConstant {
*/
Integer API_SCOPE_CATEGORY = 2;
String IOT_PLATFORM_URL = "iot_platform_url";
}

@ -113,9 +113,9 @@ public class HikClient {
@PostConstruct
public void init() {
ArtemisConfig.host = hikHost;
ArtemisConfig.appKey = hikAppKey;
ArtemisConfig.appSecret = hikAppSecret;
// ArtemisConfig.host = hikHost;
// ArtemisConfig.appKey = hikAppKey;
// ArtemisConfig.appSecret = hikAppSecret;
log.info("init :::{}{}{}", hikHost, hikAppKey, hikAppSecret);
}
@ -476,7 +476,8 @@ public class HikClient {
try {
//ArtemisConfig artemisConfig = new ArtemisConfig(hikHost, hikAppKey, hikAppSecret);
String resp = ArtemisHttpUtil.doPostStringArtemis(path, bodyText, (Map) null, (String) null, contentType.getMimeType(), headers);
// String resp = ArtemisHttpUtil.doPostStringArtemis(path, bodyText, (Map) null, (String) null, contentType.getMimeType(), headers);
String resp = "";
log.info("Got response from HIK " + resp);
if (StringUtils.isNotEmpty(resp)) {
JSONObject responseResultJSON = JSONObject.parseObject(resp);

@ -95,13 +95,12 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
@Override
public void run() {
log.info("init 去执行execGetDataFromDevice 当前线程:" + Thread.currentThread().getId());
// execGetDataFromDevice();
execGetDataFromDevice();
}
});
}
methodInitFlag.set(true);
}
private void sendHeartBeat(int agentId) {
@ -194,7 +193,7 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
String s = JSON.toJSONString(map.get("tags")).replace("\\", "");
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
String macId = tagsMap.get("mac").toString();
String macId = tagsMap.get("pmac").toString();
Item item = Item.newBuilder().setId(macId).setName(map.get("name").toString())
.putAllExtField(new HashMap<>()).build();
@ -346,12 +345,14 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
@Override
public void command(CommandRequest request, StreamObserver<CommonResult> responseObserver) {
//根据具体指令下发到具体设备
log.info("HikAgentService_command来到了grpc服务端{}", request);
// responseObserver.onNext(CommonResult.newBuilder().setCode(0).build());
// responseObserver.onCompleted();
// System.out.println("zhixingwancgenfg.............");
try {
ByteString data = request.getPoint().getData();
int value = DataTrans.bytesToIntBigEndian(data.toByteArray());
int value = DataTrans.bytesToShortBigEndian(data.toByteArray());
int pntType = request.getPoint().getPntType();
String roadwaySyscode = request.getPoint().getId();
String[] spId = roadwaySyscode.split("_");
@ -363,25 +364,25 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
// 防区控制
if (pntType == 8) {
// 布防
if (value == 1) {
System.out.println("shebeikongzhi:fqbf");
result = Alarm.fqbf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
}
// 撤防
else if (value == 0) {
System.out.println("shebeikongzhi:fqcf");
result = Alarm.fqcf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
}
// // 布防
// if (value == 1) {
// System.out.println("shebeikongzhi:fqbf");
// result = Alarm.fqbf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
// }
// // 撤防
// else if (value == 0) {
// System.out.println("shebeikongzhi:fqcf");
// result = Alarm.fqcf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
// }
// 旁路
else if (value == 2) {
if (value == 1) {
System.out.println("shebeikongzhi:fqpl");
result = Alarm.fqpl(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
result = Alarm.fqpl(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1]) - 1);
}
// 撤销旁路
else if (value == 3) {
else if (value == 0) {
System.out.println("shebeikongzhi:fqqxpl");
result = Alarm.fqcxpl(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1);
result = Alarm.fqcxpl(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1]) - 1);
}
}
// 子系统控制
@ -389,25 +390,26 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
// 布防
if (value == 1) {
System.out.println("shebeikongzhi:zxtbf");
result = Alarm.zibufang(spId[0], Integer.parseInt(spId[spId.length - 1]));
result = Alarm.zibufang(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1]));
}
// 撤防
else if (value == 0) {
System.out.println("shebeikongzhi:zxtcf");
result = Alarm.zichefang(spId[0], Integer.parseInt(spId[spId.length - 1]));
result = Alarm.zichefang(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1]));
}
} else if (pntType == 11) {
// 消警
if (value == 1) {
System.out.println("shebeikongzhi:zxtxj");
result = Alarm.xiaojing(spId[0], Integer.parseInt(spId[spId.length - 1]));
result = Alarm.xiaojing(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1]));
}
}
System.out.println("result:" + result);
responseObserver.onNext(CommonResult.newBuilder().setCode(result ? 0 : 1).build());
responseObserver.onNext(CommonResult.newBuilder().setCode(0).build());
} catch (Exception e) {
e.printStackTrace();
responseObserver.onNext(CommonResult.newBuilder().setCode(1).build());
System.out.println("zhixingle.........");
responseObserver.onNext(CommonResult.newBuilder().setCode(0).build());
}
responseObserver.onCompleted();

@ -66,6 +66,15 @@ byte数据顺序与内存地址高低的关系
return bytes;
}
public static byte[] shortToBytesBigEndian(short value) {
byte[] bytes = new byte[Short.BYTES];
bytes[1] = (byte) (value & 0xff);
bytes[0] = (byte) ((value >> Byte.SIZE) & 0xff);
return bytes;
}
public static short bytesToShortBigEndian(byte[] bytes) {
return (short) (bytes[1] & 0xFF | (bytes[0] & 0xFF) << 8);
}
}

@ -71,7 +71,7 @@ public class QueueUtils {
Point point = blockingQueue_alarm.take();
// Point point = ItcAgentService.POINT_MAP.get("123456789");
// Integer t = point.getData();
byte[] byteValue= DataTrans.intToBytesBigEndian(1);
byte[] byteValue= DataTrans.shortToBytesBigEndian((short) 1);
ByteString byteString=ByteString.copyFrom(byteValue);
List list = Arrays.asList(Point.newBuilder().setData(point.getData())
.setDataType(point.getDataType())

@ -74,8 +74,8 @@ public class AIoTRequestDemo {
return signature(uri, parameters, nonce, timestamp, requestBody, appKey, appSecret);
}
private static String signature(String requestURI, LinkedHashMap<String, List<String>> parameters, String
nonce, long timestamp, String requestBody, String appKey, String appSecret) throws NoSuchAlgorithmException,
private static String signature(String requestURI, LinkedHashMap<String, List<String>> parameters, String nonce,
long timestamp, String requestBody, String appKey, String appSecret) throws NoSuchAlgorithmException,
InvalidKeyException, UnsupportedEncodingException {
parameters = parametersRank(parameters);
StringBuilder builder = new StringBuilder(requestURI);
@ -105,8 +105,7 @@ public class AIoTRequestDemo {
return sign;
}
private static LinkedHashMap<String, List<String>> parametersRank(LinkedHashMap<String, List<String>>
parameters) {
private static LinkedHashMap<String, List<String>> parametersRank(LinkedHashMap<String, List<String>> parameters) {
LinkedHashMap<String, List<String>> rankedParameters = new LinkedHashMap<>(parameters.size());
if (parameters.size() != 0) {
List<String> keys = new ArrayList<>(parameters.keySet());

@ -17,6 +17,7 @@
package org.springblade.hospital.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -24,6 +25,8 @@ import com.google.gson.Gson;
import com.google.protobuf.ByteString;
import com.hisense.device.agent.grpc.Point;
import lombok.AllArgsConstructor;
import org.json.JSONException;
import org.springblade.common.cache.DictBizCache;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
@ -35,15 +38,16 @@ import org.springblade.hospital.agent.utils.DataTrans;
import org.springblade.hospital.agent.utils.QueueUtils;
import org.springblade.hospital.entity.AlarmInformation;
import org.springblade.hospital.excel.AlarmInformationExcel;
import org.springblade.hospital.hik.ArtemisPostTest;
import org.springblade.hospital.hik.alarm.Alarm;
import org.springblade.hospital.service.IAlarmInformationService;
import org.springblade.hospital.websocket.WebSocketServer;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.*;
/**
* 接口权限控制器
@ -68,7 +72,7 @@ public class AlarmInformationController extends BladeController {
// Point point = new Gson().fromJson(JSON.toJSONString(params), Point.class);
int status = Integer.parseInt(String.valueOf(params.get("pntTypeValue_")));
byte[] byteValue = DataTrans.intToBytesBigEndian(status);
byte[] byteValue = DataTrans.shortToBytesBigEndian((short)status);
ByteString byteString = ByteString.copyFrom(byteValue);
Point point = Point.newBuilder()
.setData(byteString)
@ -137,4 +141,83 @@ public class AlarmInformationController extends BladeController {
return R.status(alarmInformationService.updateById(alarmInformation));
}
/**
* 实时监控
*/
@GetMapping("/preview")
public R preview(String cameraIndexCode) throws Exception {
String result = ArtemisPostTest.callPostApiGetOrgList(cameraIndexCode);
Map map = JSON.parseObject(result, Map.class);
if ("0".equals(map.get("code"))) {
Map url = (Map) map.get("data");
return R.data(url.get("url"));
}
return R.data("");
}
/**
* 回放
*/
@GetMapping("/playback")
public R playback(String cameraIndexCode, String beginTime, String endTime) throws Exception {
String result = ArtemisPostTest.callPostApiGetRegions(cameraIndexCode, beginTime, endTime);
System.out.println("res:" + result);
Map map = JSON.parseObject(result, Map.class);
if ("0".equals(map.get("code"))) {
Map url = (Map) map.get("data");
return R.data(url.get("url"));
}
return R.data("");
}
/**
* 物联网报警信息订阅
*/
@PostMapping("/alarm")
public void alarm(@RequestBody JSONObject json) {
// System.out.println("接收到的数据:" + json);
Map map = JSON.parseObject(json.toString(), Map.class);
Map map2 = JSON.parseObject(map.get("data").toString(), Map.class);
if (map2.get("type") != null && "device_event".equals(map2.get("type").toString())) {
Map map3 = JSON.parseObject(map2.get("data").toString(), Map.class);
System.out.println("map3:" + map3);
// 报警信息数据过滤
if (map3.get("eventList") != null) {
List eventList = JSON.parseObject(map3.get("eventList").toString(), List.class);
if ("manualAlarm".equals(eventList.get(0))) {
System.out.println("ruku:--------------");
AlarmInformation alarmInformation = new AlarmInformation();
alarmInformation.setType("device_event");
alarmInformation.setReportTime(new Date(Long.parseLong(map.get("time").toString())));
alarmInformation.setContent("测试工卡报警");
alarmInformation.setHostSerialNumber(map3.get("sn").toString());
alarmInformation.setDeviceId(map3.get("mac").toString());
alarmInformation.setAlarmType(2);
alarmInformation.setDeviceName("product");
alarmInformationService.save(alarmInformation);
RestTemplate restTemplate = new RestTemplate();
String url = "http://171.16.8.58:8080/prod-api/api/safeCare/callBack/getDeviceCamera?sn=" + map3.get("sn").toString();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
HttpEntity request = new HttpEntity(headers);
// 发送get请求,并输出结果
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
// 返回数据
Map cameraMap = JSONObject.parseObject(exchange.getBody(), Map.class);
// websocket推送报警信息
JSONObject jsonObject = new JSONObject();
alarmInformation.setBuildId("22");
alarmInformation.setFloorNo("11");
jsonObject.put("message", JSONObject.toJSONString(alarmInformation));
WebSocketServer.sendInfo(jsonObject);
}
}
}
}
}

@ -16,16 +16,14 @@
*/
package org.springblade.hospital.controller;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.lang3.RandomStringUtils;
import org.springblade.common.cache.ParamCache;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.mp.support.Condition;
@ -33,26 +31,32 @@ 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.*;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.hik.alarm.Alarm;
import org.springblade.hospital.newalarm.communicationCom.HTTPClientUtil;
import org.springblade.hospital.service.IAppDataService;
import org.springblade.hospital.utils.ExternalUtils;
import org.springblade.hospital.websocket.WebSocketServer;
import org.springblade.modules.system.service.IParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
import java.util.*;
import static org.springblade.common.constant.CommonConstant.IOT_PLATFORM_URL;
import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
/**
@ -70,9 +74,11 @@ public class AppDataController extends BladeController {
private final RestTemplate restTemplate;
@Autowired
ExternalUtils externalUtils;
@GetMapping("/list")
public R<IPage<AppData>> list(AppData appData, Query query) {
return R.data(appDataService.getPage(Condition.getPage(query), appData));
}
@ -83,7 +89,6 @@ public class AppDataController extends BladeController {
@PostMapping("/putFile")
public R putFile(AppData appData, HttpServletRequest request) {
List<MultipartFile> resultList = new ArrayList<>();
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
commonsMultipartResolver.setDefaultEncoding("utf-8");
if (commonsMultipartResolver.isMultipart(request)) {
@ -103,7 +108,7 @@ public class AppDataController extends BladeController {
*/
@CrossOrigin
@PostMapping("/escalation")
public R escalation(@RequestBody Map<String,Object> alarm) {
public R escalation(@RequestBody Map<String, Object> alarm) {
String uuid = UUID.randomUUID().toString();
alarm.put("regionId", uuid);
alarm.put("sourceId", uuid);
@ -158,8 +163,6 @@ public class AppDataController extends BladeController {
System.out.println("signature:" + signature);
System.out.println("fhxx:" + response);
return R.data(response);
// AlarmInformation result = restTemplate.postForObject(url, alarmInformation, AlarmInformation.class);
// System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
@ -170,7 +173,7 @@ public class AppDataController extends BladeController {
* 获取物联网平台token
*/
private String getToken(String appKey, String appSecret) {
String url = "http://182.139.182.190:60032/prod-api/api/Login";
String url = ParamCache.getValue(IOT_PLATFORM_URL) + "Login";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
@ -217,8 +220,7 @@ public class AppDataController extends BladeController {
}
private Map getMap(String token) {
String url = "http://182.139.182.190:60032/prod-api/api/bizDevice/list?name=a";
String url = ParamCache.getValue(IOT_PLATFORM_URL) + "bizDevice/list?name=a";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
@ -238,7 +240,18 @@ public class AppDataController extends BladeController {
*/
@PostMapping("/setup")
public R setup(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.zibufang(hostSerialNumber, Integer.parseInt(num)));
String[] splitHost = hostSerialNumber.split(",");
String[] splitNum = num.split(",");
String status = "";
for (int i = 0; i < splitHost.length; i++) {
String[] split = splitNum[i].split("_");
if (Alarm.zibufang(splitHost[i], Integer.parseInt(split[split.length - 1]))) {
status += "主机:" + splitHost[i] + "的子系统" + num + "布防成功!";
} else {
status += "主机:" + splitHost[i] + "的子系统" + num + "布防失败!";
}
}
return R.success(status);
}
/**
@ -246,7 +259,18 @@ public class AppDataController extends BladeController {
*/
@PostMapping("/close")
public R close(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.zichefang(hostSerialNumber, Integer.parseInt(num)));
String[] splitHost = hostSerialNumber.split(",");
String[] splitNum = num.split(",");
String status = "";
for (int i = 0; i < splitHost.length; i++) {
String[] split = splitNum[i].split("_");
if (Alarm.zichefang(splitHost[i], Integer.parseInt(split[split.length - 1]))) {
status += "主机:" + splitHost[i] + "的子系统" + num + "撤防成功!";
} else {
status += "主机:" + splitHost[i] + "的子系统" + num + "撤防失败!";
}
}
return R.success(status);
}
/**
@ -279,23 +303,158 @@ public class AppDataController extends BladeController {
@PostMapping("/unBypass")
public R unBypass(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.fqcxpl(hostSerialNumber, Integer.parseInt(num) - 1));
}
@GetMapping("/test")
public R test() {
// HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus();
// externalUtils.updateStatus();
WebSocketServer.test();
return R.data(0);
// return R.status(Alarm.xiaojing(hostSerialNumber, Integer.parseInt(num) - 1));
}
@GetMapping("/coordinateToWGS84")
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 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 R.data(new JoysuchCoordinate((double) x, (double) y, lng, lat));
}
@GetMapping("/test")
public R test(String number) {
// HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus(number);
//
// Alarm.xiaojing(number, 0);
externalUtils.updateStatus();
// JSONObject jsonObject = new JSONObject();
// AlarmInformation alarmInformation = new AlarmInformation();
// alarmInformation.setReportTime(new Date());
// alarmInformation.setBuildId("111222333");
// alarmInformation.setFloorNo("11");
// alarmInformation.setContent("22");
// jsonObject.put("message", JSONObject.toJSONString(alarmInformation));
// WebSocketServer.sendInfo(jsonObject);
// WebSocketServer.test();
return R.data(0);
}
@GetMapping("/test001")
public void test001() {
// JSONObject jsonObject = new JSONObject();
// AlarmInformation alarmInformation = new AlarmInformation();
// alarmInformation.setReportTime(new Date());
// alarmInformation.setBuildId("111222333");
// alarmInformation.setFloorNo("11");
// alarmInformation.setContent("22");
// alarmInformation.setCameraCode("a639bb55c237414f8c487c409d5789c7-e99031e13c754bee900f50245488896a");
// jsonObject.put("message", JSONObject.toJSONString(alarmInformation));
// WebSocketServer.sendInfo(jsonObject);
WebSocketServer.test();
}
@GetMapping("/test1")
public void test1(String number) {
try {
HttpClient client = new HttpClient();
String ip = "171.16.206.139";
String port = "80";
// 登录认证
String rzUrl = "http://" + ip + ":" + port + "/ISAPI/System/deviceInfo";
System.out.println("shuchu:" + HTTPClientUtil.renzheng(rzUrl, client));
// 获取设备系统能力集
String jtUrl = "http://" + ip + ":" + port + "/ISAPI/System/capabilities";
System.out.println("jt:" + HTTPClientUtil.doGet(jtUrl, client));
// 获取布防订阅能力
String strUrl = "http://" + ip + ":" + port + "/ISAPI/Event/notification/subscribeEventCap";
System.out.println("shuchu:" + HTTPClientUtil.doGet(strUrl, client));
// 建立布防订阅连接
String jlUrl = "http://" + ip + ":" + port + "/ISAPI/Event/notification/subscribeEvent?deployID=1";
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"\n" +
"<SubscribeEvent xmlns=\"http://www.isapi.org/ver20/XMLSchema\" version=\"2.0\">\n" +
" <heartbeat>1</heartbeat>\n" +
" <eventMode>all</eventMode>\n" +
"</SubscribeEvent>";
// System.out.println("jl:" + HTTPClientUtil.doPost(jlUrl, xml, number, client));
} catch (Exception e) {
e.printStackTrace();
}
}
//
public static void main(String[] args) {
try {
RestTemplate restTemplate = new RestTemplate();
String url = "http://171.16.8.58:8080/prod-api/api/safeCare/callBack/getDeviceCamera?sn=1918FC32532E";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
HttpEntity request = new HttpEntity(headers);
// 发送get请求,并输出结果
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
// 返回数据
Map cameraMap = JSONObject.parseObject(exchange.getBody(), Map.class);
// String rzUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/System/deviceInfo";
// String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
// System.out.println(renzheng.contains("DS-PWA32-H20230524AACHQ25788522WU1"));
// System.out.println("shuchu:" + HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client));
// String jtUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/System/capabilities";
// System.out.println("jt:" + HTTPClientUtil.doGet(jtUrl, HTTPClientUtil.client));
//
// String strUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/Event/notification/subscribeEventCap";
// System.out.println("shuchu:" + HTTPClientUtil.doGet(strUrl, HTTPClientUtil.client));
//
// String jlUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/Event/notification/subscribeEvent?deployID=1";
// String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
// "\n" +
// "<SubscribeEvent xmlns=\"http://www.isapi.org/ver20/XMLSchema\" version=\"2.0\">\n" +
// " <heartbeat>1</heartbeat>\n" +
// " <eventMode>all</eventMode>\n" +
// "</SubscribeEvent>";
// System.out.println("jl:" + HTTPClientUtil.doPost(jlUrl, xml));
// String bfUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/control/arm/1?ways=away&format=json";
// System.out.println("xj:" + HTTPClientUtil.doPut(bfUrl, "", HTTPClientUtil.client));
// String cfUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/control/disarm/1";
// System.out.println("xj:" + HTTPClientUtil.doPut(cfUrl, "", HTTPClientUtil.client));
// String xjUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/control/clearAlarm/1";
// System.out.println("xj:" + HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client));
// String plUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/control/bypass/1";
// System.out.println("xj:" + HTTPClientUtil.doPut(plUrl, "", HTTPClientUtil.client));
// String qxplUrl = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/control/bypassRecover/1";
// System.out.println("xj:" + HTTPClientUtil.doPut(qxplUrl, "", HTTPClientUtil.client));
// String status = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/status/communication?format=json";
// System.out.println("防区状态:" + HTTPClientUtil.doGet(status, HTTPClientUtil.client));
// String status = "http://" + HTTPClientUtil.strIP + ":" + HTTPClientUtil.iPort + "/ISAPI/SecurityCP/status/host?format=json";
// String statusData = HTTPClientUtil.doGet(status, HTTPClientUtil.client);
//
// Map tagsMap = JSONObject.parseObject(statusData, Map.class);
// Map alarmHostStatus = JSONObject.parseObject(tagsMap.get("AlarmHostStatus").toString(), Map.class);
// Map CommuniStatus = JSONObject.parseObject(alarmHostStatus.get("CommuniStatus").toString(), Map.class);
//// System.out.println("CommuniStatus" + CommuniStatus);
// List<Map> ZoneList = JSONObject.parseObject(alarmHostStatus.get("ZoneList").toString(), List.class);
// System.out.println("ZoneList" + ZoneList);
// for (Map map : ZoneList) {
// Map zone = JSONObject.parseObject(map.get("Zone").toString(), Map.class);
// boolean isArming = (boolean) zone.get("isArming");
// System.out.println(isArming);
// }
//
// List<Map> SubSysList = JSONObject.parseObject(alarmHostStatus.get("SubSysList").toString(), List.class);
// System.out.println("SubSysList" + SubSysList);
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -145,6 +145,16 @@ public class AlarmInformation extends BaseEntity {
*/
private String hostIp;
/**
* 报警类型
*/
private Integer alarmType;
/**
* 摄像头编号
*/
private String cameraCode;
// @TableField(exist = false)
// private List<StatusDetail> statusDetailList;

@ -79,4 +79,9 @@ public class CornJob extends BaseEntity {
* 报警主机IP
*/
private String hostIp;
/**
* 是否定时布/撤防0一键布撤防 1定时布撤防
*/
private Integer isRegular;
}

@ -0,0 +1,119 @@
package org.springblade.hospital.hik;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.springframework.web.bind.annotation.RequestParam;
import static com.hikvision.artemis.sdk.util.HttpUtil.wrapClient;
public class ArtemisPostTest {
/**
* 请根据技术支持提供的实际的平台IP/端口和API网关中的合作方信息更换static静态块中的三个参数.
* [1 host]
* host格式为IPPort如10.0.0.1:443
* 当使用https协议调用接口时IP是平台nginxIPPort是https协议的端口
* 当使用http协议调用接口时IP是artemis服务的IPPort是artemis服务的端口默认9016
* [2 appKey和appSecret]
* 请按照技术支持提供的合作方Key和合作方Secret修改
* appKey合作方Key
* appSecret合作方Secret
* 调用前看清接口传入的是什么是传入json就用doPostStringArtemis方法是表单提交就用doPostFromArtemis方法
*
*/
/**
* API网关的后端服务上下文为/artemis
*/
private static final String ARTEMIS_PATH = "/artemis";
/**
* 调用POST请求类型接口这里以获取组织列表为例
* 接口实际url:https://ip:port/artemis/api/resource/v1/org/orgList
*
* @return
*/
public static String callPostApiGetOrgList(String cameraIndexCode) throws Exception {
/**
* https://ip:port/artemis/api/resource/v1/org/orgList
* 通过查阅AI Cloud开放平台文档或网关门户的文档可以看到获取组织列表的接口定义,该接口为POST请求的Rest接口, 入参为JSON字符串接口协议为https
* ArtemisHttpUtil工具类提供了doPostStringArtemis调用POST请求的方法入参可传JSON字符串, 请阅读开发指南了解方法入参没有的参数可传null
*/
ArtemisConfig config = new ArtemisConfig();
config.setHost("171.16.8.60"); // 代理API网关nginx服务器ip端口
config.setAppKey("26284697"); // 秘钥appkey
config.setAppSecret("gd3x1yJqwtCY1eekk4v7");// 秘钥appSecret
final String getCamsApi = ARTEMIS_PATH + "/api/video/v2/cameras/previewURLs";
Map<String, Object> paramMap = new HashMap<String, Object>();// post请求Form表单参数
// paramMap.put("pageNo", "1");
// paramMap.put("pageSize", "2");
// paramMap.put("cameraIndexCode", "8fa9cf4bf79d4f239b335a0c4e77c3dd");
paramMap.put("cameraIndexCode", cameraIndexCode); //监控点唯一标识
paramMap.put("streamType", 1); // 码流类型:0主码流 1子码流 2第三码流
paramMap.put("protocol", "ws");// 取流协议:“ws”:Websocket协议,“hls”:HLS协议,“hik”:HIK私有协议,“rtsp”:RTSP协议,“rtmp”:RTMP协议
paramMap.put("transmode", 1);// 传输协议:0UDP 1TCP
String body = JSON.toJSON(paramMap).toString();
Map<String, String> path = new HashMap<String, String>(2) {
{
put("https://", getCamsApi);
}
};
return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
}
/**
* 调用POST请求类型接口这里以分页获取区域列表为例
* 接口实际urlhttps://ip:port/artemis/api/api/resource/v1/regions
*
* @return
*/
public static String callPostApiGetRegions(String cameraIndexCode, String beginTime, String endTime) throws Exception {
/**
* https://ip:port/artemis/api/resource/v1/regions
* 过查阅AI Cloud开放平台文档或网关门户的文档可以看到分页获取区域列表的定义,这是一个POST请求的Rest接口, 入参为JSON字符串接口协议为https
* ArtemisHttpUtil工具类提供了doPostStringArtemis调用POST请求的方法入参可传JSON字符串, 请阅读开发指南了解方法入参没有的参数可传null
*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date begin = format.parse(beginTime + ".111");
Date end = format.parse(endTime + ".111");
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime beginDate = LocalDateTime.ofInstant(begin.toInstant(), zoneId);
LocalDateTime endDate = LocalDateTime.ofInstant(end.toInstant(), zoneId);
ArtemisConfig config = new ArtemisConfig();
config.setHost("171.16.8.60"); // 代理API网关nginx服务器ip端口
config.setAppKey("26284697"); // 秘钥appkey
config.setAppSecret("gd3x1yJqwtCY1eekk4v7");// 秘钥appSecret
final String getCamsApi = ARTEMIS_PATH + "/api/video/v2/cameras/playbackURLs";
Map<String, Object> paramMap = new HashMap<String, Object>();// post请求Form表单参数
// paramMap.put("cameraIndexCode", "8fa9cf4bf79d4f239b335a0c4e77c3dd");
// paramMap.put("beginTime", "2017-06-15T00:00:00.000+08:00");
// paramMap.put("endTime", "2017-06-18T00:00:00.000+08:00");
paramMap.put("cameraIndexCode", cameraIndexCode);
paramMap.put("beginTime", beginDate + "+08:00");
paramMap.put("endTime", endDate + "+08:00");
paramMap.put("protocol", "ws");
paramMap.put("streamType", 1);
String body = JSON.toJSON(paramMap).toString();
Map<String, String> path = new HashMap<String, String>(2) {
{
put("https://", getCamsApi);
}
};
return ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json");
}
}

@ -4,19 +4,17 @@ 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;
import com.sun.jna.ptr.IntByReference;
import org.springblade.hospital.agent.utils.QueueUtils;
import org.apache.commons.httpclient.HttpClient;
import org.springblade.hospital.hik.CommonMethod.osSelect;
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.newalarm.communicationCom.HTTPClientUtil;
import org.springblade.hospital.utils.CornJobUtil;
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.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@ -24,6 +22,9 @@ import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
* @author AAA
*/
@Component
public class Alarm implements CommandLineRunner {
@ -35,6 +36,10 @@ public class Alarm implements CommandLineRunner {
static FMSGCallBack_V31 fMSFCallBack_V31 = null;
static FMSGCallBack fMSFCallBack;
static Map<String, Integer> numMap;
static Map<String, HttpClient> clientMap = new HashMap<>();
public static Map<String, String> ipMap;
public static Map<String, String> portMap;
public static Map<String, String> macMap;
@Autowired
ExternalUtils externalUtils;
@ -52,7 +57,7 @@ public class Alarm implements CommandLineRunner {
if (osSelect.isWindows())
//win系统加载库路径
strDllPath = System.getProperty("user.dir") + "\\src\\main\\resources\\lib\\HCNetSDK.dll";
// strDllPath = "C:\\Users\\Administrator\\Desktop\\grpc-jar\\lib\\HCNetSDK.dll";
// strDllPath = "C:\\Users\\zpy\\Desktop\\hospital\\lib\\HCNetSDK.dll";
else if (osSelect.isLinux())
//Linux系统加载库路径
// strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so";
@ -208,6 +213,8 @@ public class Alarm implements CommandLineRunner {
statusV40.write();
Pointer pointer = statusV40.getPointer();
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_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40, 0Xffffffff, pointer, statusV40.size(), ibrBytesReturned);
statusV40.read();
if (status) {
System.out.println("设备在线");
@ -215,6 +222,7 @@ public class Alarm implements CommandLineRunner {
return statusV40;
} else {
System.out.println("设备通讯失败");
System.out.println("监听失败" + hCNetSDK.NET_DVR_GetLastError());
return null;
}
}
@ -230,7 +238,6 @@ public class Alarm implements CommandLineRunner {
return status;
}
/**
* 开启监听
*
@ -251,7 +258,6 @@ public class Alarm implements CommandLineRunner {
}
}
/**
* 设备撤防设备注销
*
@ -282,40 +288,94 @@ public class Alarm implements CommandLineRunner {
* 消警
*/
public static boolean xiaojing(String hostSerialNumber, int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num);
if (b) {
System.out.println("消警成功");
} else {
System.out.println("消警失败" + hCNetSDK.NET_DVR_GetLastError());
try {
String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(hostSerialNumber)) {
String xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/clearAlarm/" + num;
String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client);
System.out.println(respx);
return true;
}
return b;
} catch (Exception e) {
e.printStackTrace();
}
return false;
// boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num);
// if (b) {
// System.out.println("消警成功");
// } else {
// System.out.println("消警失败" + hCNetSDK.NET_DVR_GetLastError());
// }
// return b;
}
/**
* 子系统布防
*/
public static boolean zibufang(String hostSerialNumber, int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num);
if (b) {
System.out.println("布防成功");
} else {
System.out.println("布防失败" + hCNetSDK.NET_DVR_GetLastError());
try {
String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(hostSerialNumber)) {
String xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/arm/" + num + "?ways=away&format=json";
String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client);
System.out.println(respx);
return true;
}
return b;
} catch (Exception e) {
e.printStackTrace();
}
return false;
// boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num);
// if (b) {
// System.out.println("布防成功");
// } else {
// System.out.println("布防失败" + hCNetSDK.NET_DVR_GetLastError());
// }
// return b;
}
/**
* 子系统撤防
*/
public static boolean zichefang(String hostSerialNumber, int num) {
boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num);
if (b) {
System.out.println("撤防成功");
} else {
System.out.println("撤防失败" + hCNetSDK.NET_DVR_GetLastError());
try {
String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(hostSerialNumber)) {
String xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/disarm/" + num;
String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client);
System.out.println(respx);
return true;
}
return b;
} catch (Exception e) {
e.printStackTrace();
}
return false;
// boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num);
// if (b) {
// System.out.println("撤防成功");
// } else {
// System.out.println("撤防失败" + hCNetSDK.NET_DVR_GetLastError());
// }
// return b;
}
// private static void jianting(String hostSerialNumber) {
// try {
// String jlUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/Event/notification/subscribeEvent?deployID=1";
// String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
// "\n" +
// "<SubscribeEvent xmlns=\"http://www.isapi.org/ver20/XMLSchema\" version=\"2.0\">\n" +
// " <heartbeat>1</heartbeat>\n" +
// " <eventMode>all</eventMode>\n" +
// "</SubscribeEvent>";
// System.out.println("jl:" + HTTPClientUtil.doPost(jlUrl, xml, hostSerialNumber, clientMap.get(hostSerialNumber)));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
/**
* 防区布防
@ -353,132 +413,226 @@ public class Alarm implements CommandLineRunner {
* 防区旁路
*/
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(numMap.get(hostSerialNumber), setup);
if (b) {
System.out.println("旁路成功");
} else {
System.out.println("旁路失败" + hCNetSDK.NET_DVR_GetLastError());
try {
String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(hostSerialNumber)) {
String xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/bypass/" + num;
String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client);
System.out.println(respx);
return true;
}
return b;
} catch (Exception e) {
e.printStackTrace();
}
return false;
// HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
// setup.byAssiciateAlarmIn[num] = 1;
// setup.write();
// boolean b = hCNetSDK.NET_DVR_BypassAlarmChan(numMap.get(hostSerialNumber), setup);
// if (b) {
// System.out.println("旁路成功");
// } else {
// System.out.println("旁路失败" + hCNetSDK.NET_DVR_GetLastError());
// }
// return b;
}
/**
* 防区撤销旁路
*/
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(numMap.get(hostSerialNumber), setup);
if (b) {
System.out.println("撤销旁路成功");
} else {
System.out.println("撤销旁路失败" + hCNetSDK.NET_DVR_GetLastError());
try {
String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(hostSerialNumber)) {
String xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/bypassRecover/" + num;
String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client);
System.out.println(respx);
return true;
}
return b;
} catch (Exception e) {
e.printStackTrace();
}
return false;
// HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
// setup.byAssiciateAlarmIn[num] = 1;
// setup.write();
// boolean b = hCNetSDK.NET_DVR_UnBypassAlarmChan(numMap.get(hostSerialNumber), setup);
// if (b) {
// System.out.println("撤销旁路成功");
// } else {
// System.out.println("撤销旁路失败" + hCNetSDK.NET_DVR_GetLastError());
// }
// return b;
}
@Override
public void run(String... args) {
new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (hCNetSDK == null) {
if (!createSDKInstance()) {
System.out.println("Load SDK fail");
return;
if (clientMap == null) {
clientMap = new HashMap<>();
}
if (ipMap == null) {
ipMap = new HashMap<>();
}
//linux系统建议调用以下接口加载组件库
if (osSelect.isLinux()) {
HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
//这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限
String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1";
String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1";
System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
ptrByteArray1.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
ptrByteArray2.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
String strPathCom = System.getProperty("user.dir") + "/lib/";
HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
struComPath.write();
hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
}
/**初始化*/
hCNetSDK.NET_DVR_Init();
/**加载日志*/
hCNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false);
//设置报警回调函数
if (fMSFCallBack_V31 == null) {
fMSFCallBack_V31 = new FMSGCallBack_V31();
Pointer pUser = null;
if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) {
System.out.println("设置回调函数失败!");
return;
} else {
System.out.println("设置回调函数成功!");
if (portMap == null) {
portMap = new HashMap<>();
}
if (macMap == null) {
macMap = new HashMap<>();
}
/** 设备上传的报警信息是COMM_VCA_ALARM(0x4993)类型
在SDK初始化之后增加调用NET_DVR_SetSDKLocalCfg(enumType为NET_DVR_LOCAL_CFG_TYPE_GENERAL)
设置通用参数NET_DVR_LOCAL_GENERAL_CFG的byAlarmJsonPictureSeparate为1
将Json数据和图片数据分离上传这样设置之后报警布防回调函数里面接收到的报警信息类型为COMM_ISAPI_ALARM(0x6009)
报警信息结构体为NET_DVR_ALARM_ISAPI_INFO与设备无关SDK封装的数据结构更便于解析*/
HCNetSDK.NET_DVR_LOCAL_GENERAL_CFG struNET_DVR_LOCAL_GENERAL_CFG = new HCNetSDK.NET_DVR_LOCAL_GENERAL_CFG();
struNET_DVR_LOCAL_GENERAL_CFG.byAlarmJsonPictureSeparate = 1; //设置JSON透传报警数据和图片分离
struNET_DVR_LOCAL_GENERAL_CFG.write();
Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer();
hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG);
if (numMap == null) {
numMap = new HashMap<>();
}
// 物联网平台获取报警主机设备信息
List<Map> list = externalUtils.getList(0, 0, null, null, "105", null);
// 物联网平台获取的报警主机列表
if (CollectionUtils.isNotEmpty(list)) {
HTTPClientUtil clientUtil = new HTTPClientUtil();
for (Map map : list) {
// System.out.println(map.get("tags"));
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));//报警布防,和报警监听二选一即可
}
// 报警主机信息
String number = tagsMap.get("hostNumber").toString();//序列号
String ip = tagsMap.get("ip").toString();
String port = tagsMap.get("port").toString();
String mac = tagsMap.get("mac").toString();
HttpClient client = new HttpClient();
clientMap.put(number, client);
ipMap.put(number, ip);
portMap.put(number, port);
macMap.put(mac, number);
new Thread(() -> {
// 登录认证
String rzUrl = "http://" + ip + ":" + port + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, client);
System.out.println("登录信息:" + renzheng);
if (renzheng.contains(number)) {
// 获取设备系统能力集
String jtUrl = "http://" + ip + ":" + port + "/ISAPI/System/capabilities";
HTTPClientUtil.doGet(jtUrl, client);
// 获取布防订阅能力
String strUrl = "http://" + ip + ":" + port + "/ISAPI/Event/notification/subscribeEventCap";
HTTPClientUtil.doGet(strUrl, client);
// 建立布防订阅连接
String jlUrl = "http://" + ip + ":" + port + "/ISAPI/Event/notification/subscribeEvent?deployID=1";
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"\n" +
"<SubscribeEvent xmlns=\"http://www.isapi.org/ver20/XMLSchema\" version=\"2.0\">\n" +
" <heartbeat>1</heartbeat>\n" +
" <eventMode>all</eventMode>\n" +
"</SubscribeEvent>";
System.out.println("jl:" + clientUtil.doPost(jlUrl, xml, number, client, mac));
}
}).start();
}
// Alarm.startListen("192.168.1.100", (short) 7200);//报警监听,不需要登陆设备
while (true) {
//这里加入控制台输入控制,是为了保持连接状态,当输入Y表示布防结束
System.out.print("请选择是否撤出布防(Y/N):\n");
Scanner input = new Scanner(System.in);
String str = input.next();
if ("Y".equals(str)) {
break;
}
} catch (Exception e) {
e.printStackTrace();
}
Alarm.logout();
//释放SDK
hCNetSDK.NET_DVR_Cleanup();
return;
}).start();
// if (hCNetSDK == null) {
// if (!createSDKInstance()) {
// System.out.println("Load SDK fail");
// return;
// }
// }
// //linux系统建议调用以下接口加载组件库
// if (osSelect.isLinux()) {
// HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
// HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
// //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限
// String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1";
// String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1";
//
// System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
// ptrByteArray1.write();
// hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
//
// System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
// ptrByteArray2.write();
// hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
//
// String strPathCom = System.getProperty("user.dir") + "/lib/";
// HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
// System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
// struComPath.write();
// hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
// }
//
// /**初始化*/
// hCNetSDK.NET_DVR_Init();
// /**加载日志*/
// hCNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false);
// //设置报警回调函数
// if (fMSFCallBack_V31 == null) {
// fMSFCallBack_V31 = new FMSGCallBack_V31();
//
// Pointer pUser = null;
// if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) {
// System.out.println("设置回调函数失败!");
// return;
// } else {
// System.out.println("设置回调函数成功!");
// }
// }
// /** 设备上传的报警信息是COMM_VCA_ALARM(0x4993)类型,
// 在SDK初始化之后增加调用NET_DVR_SetSDKLocalCfg(enumType为NET_DVR_LOCAL_CFG_TYPE_GENERAL)
// 设置通用参数NET_DVR_LOCAL_GENERAL_CFG的byAlarmJsonPictureSeparate为1,
// 将Json数据和图片数据分离上传,这样设置之后,报警布防回调函数里面接收到的报警信息类型为COMM_ISAPI_ALARM(0x6009),
// 报警信息结构体为NET_DVR_ALARM_ISAPI_INFO(与设备无关,SDK封装的数据结构),更便于解析。*/
//
// HCNetSDK.NET_DVR_LOCAL_GENERAL_CFG struNET_DVR_LOCAL_GENERAL_CFG = new HCNetSDK.NET_DVR_LOCAL_GENERAL_CFG();
// struNET_DVR_LOCAL_GENERAL_CFG.byAlarmJsonPictureSeparate = 1; //设置JSON透传报警数据和图片分离
// struNET_DVR_LOCAL_GENERAL_CFG.write();
// Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer();
// hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG);
//
// if (numMap == null) {
// numMap = new HashMap<>();
// }
//
// List<Map> list = null;
// try {
// list = externalUtils.getList(0, 0, null, null, "105", null);
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// 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", "hao12345"); //登录设备
// if (numMap.get(number) != null) {
// Alarm.setAlarm(numMap.get(number));//报警布防,和报警监听二选一即可
// }
// }
// }
//
//// Alarm.login_V40("171.16.207.20", (short) 80, "admin", "hao12345"); //登录设备
//// Alarm.setAlarm(1);//报警布防,和报警监听二选一即可
//// Alarm.startListen("192.168.1.100", (short) 7200);//报警监听,不需要登陆设备
// while (true) {
// //这里加入控制台输入控制,是为了保持连接状态,当输入Y表示布防结束1
// System.out.print("请选择是否撤出布防(Y/N):\n");
// Scanner input = new Scanner(System.in);
// String str = input.next();
// if ("Y".equals(str)) {
// break;
// }
// }
// Alarm.logout();
// //释放SDK
// hCNetSDK.NET_DVR_Cleanup();
}
}

@ -334,6 +334,7 @@ public class AlarmDataParse {
alarmInformation.setSystemNum((int) bySubSysNo);
alarmInformation.setHostSerialNumber(sSerialNumber);
alarmInformation.setHostIp(ip);
alarmInformation.setAlarmType(1);
if (CollectionUtils.isNotEmpty(list)) {
Map map = list.get(0);
@ -375,7 +376,7 @@ public class AlarmDataParse {
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
byte[] byteValue = DataTrans.intToBytesBigEndian(1);
byte[] byteValue = DataTrans.shortToBytesBigEndian((short) 1);
ByteString byteString = ByteString.copyFrom(byteValue);
Point point = Point.newBuilder()
.setData(byteString)
@ -384,29 +385,29 @@ public class AlarmDataParse {
.setPntType(7)
.build();
boolean b = queueUtils.saveQueueDataStatus(point);
queueUtils.saveQueueDataAlarm(point);
// queueUtils.saveQueueDataAlarm(point);
System.out.println("===" + b);
// 报警信息发送到远程服务器
if (restTemplate == null) {
restTemplate = SpringUtil.getBean(RestTemplate.class);
}
String url = "http://152.136.119.150:81/alarmInformation/hikRemote";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
Map<String, Object> map = new HashMap<>();
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);
String content = JSON.toJSONString(map);
HttpEntity<String> httpEntity = new HttpEntity<>(content, headers);
// 发送post请求,并输出结果
R r = restTemplate.postForObject(url, httpEntity, R.class);
System.out.println("调用远程服务器接口成功!!:" + r);
// if (restTemplate == null) {
// restTemplate = SpringUtil.getBean(RestTemplate.class);
// }
// String url = "http://152.136.119.150:81/alarmInformation/hikRemote";
// HttpHeaders headers = new HttpHeaders();
// headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
//
// Map<String, Object> map = new HashMap<>();
// 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);
// String content = JSON.toJSONString(map);
//
// HttpEntity<String> httpEntity = new HttpEntity<>(content, headers);
//
// // 发送post请求,并输出结果
// R r = restTemplate.postForObject(url, httpEntity, R.class);
// System.out.println("调用远程服务器接口成功!!:" + r);
// webSocket推送给客户端消息
JSONObject jsonObject = new JSONObject();

@ -1,110 +1,16 @@
package org.springblade.hospital.hik.alarm;
import com.google.protobuf.ByteString;
import com.hisense.device.agent.grpc.Point;
import com.sun.jna.Pointer;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.hospital.agent.utils.DataTrans;
import org.springblade.hospital.agent.utils.QueueUtils;
import org.springblade.hospital.entity.AlarmInformation;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
/**
* @author jiangxin
* @create 2022-08-15-17:26
*/
public class FMSGCallBack implements HCNetSDK.FMSGCallBack {
// QueueUtils queueUtils;
//
// IAlarmInformationService alarmInformationService;
//
// public FMSGCallBack(QueueUtils queueUtils) {
// this.queueUtils = queueUtils;
// }
//报警信息回调函数
public void invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
AlarmDataParse.alarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser);
// HCNetSDK.NET_DVR_CID_ALARM strCIDalarm = new HCNetSDK.NET_DVR_CID_ALARM();
// strCIDalarm.write();
// Pointer pstrCIDalarm = strCIDalarm.getPointer();
// pstrCIDalarm.write(0, pAlarmInfo.getByteArray(0, strCIDalarm.size()), 0, strCIDalarm.size());
// strCIDalarm.read();
// try {
// String TriggerTime = "" + String.format("%04d", strCIDalarm.struTriggerTime.wYear) + "-" +
// String.format("%02d", strCIDalarm.struTriggerTime.byMonth) + "-" +
// String.format("%02d", strCIDalarm.struTriggerTime.byDay) + " " +
// String.format("%02d", strCIDalarm.struTriggerTime.byHour) + ":" +
// String.format("%02d", strCIDalarm.struTriggerTime.byMinute) + ":" +
// String.format("%02d", strCIDalarm.struTriggerTime.bySecond); //触发报警时间
// String sCIDCode = new String(strCIDalarm.sCIDCode, "GBK"); //CID事件号
// String sCIDDescribe = new String(strCIDalarm.sCIDDescribe, "UTF-8"); //CID事件名
// byte bySubSysNo = strCIDalarm.bySubSysNo; //子系统号
// if (strCIDalarm.wDefenceNo != 0xff) {
// System.out.println("防区号:" + Integer.sum(strCIDalarm.wDefenceNo, 1));
// }
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// System.out.println("【CID事件】" + "触发时间:" + format.parse(TriggerTime) + "CID事件号:" + sCIDCode + "CID事件名:" + sCIDDescribe + "子系统号:" +
// bySubSysNo);
//// System.out.println(strCIDalarm.struUploadTime);
//// System.out.println(Arrays.toString(strCIDalarm.sCenterAccount));
//// System.out.println(strCIDalarm.byUserType);
//// System.out.println(strCIDalarm.byReportType);
//// System.out.println(strCIDalarm.wKeyUserNo);
//// System.out.println(strCIDalarm.byKeypadNo);
//// System.out.println(strCIDalarm.byVideoChanNo);
//// System.out.println(strCIDalarm.byDiskNo);
//// System.out.println(strCIDalarm.wModuleAddr);
//// System.out.println(strCIDalarm.byCenterType);
//// System.out.println(strCIDalarm.byRes1);
//// System.out.println(strCIDalarm.byRepeaterNo);
//// System.out.println(Arrays.toString(strCIDalarm.byDevSerialNo));
//// System.out.println(strCIDalarm.byRepeaterNo);
//// System.out.println(strCIDalarm.wRemoteCtrllerUserNo);
//// System.out.println(strCIDalarm.dwIOTChannelNo);
//
// // 存本地
// alarmInformationService = SpringUtil.getBean(IAlarmInformationService.class);
// AlarmInformation alarmInformation = new AlarmInformation();
// alarmInformation.setDeviceId(String.valueOf(Integer.sum(strCIDalarm.wDefenceNo, 1)));
// alarmInformation.setReportTime(format.parse(TriggerTime));
// alarmInformation.setContent(sCIDCode + ":" + sCIDDescribe);
// alarmInformation.setType(Integer.toHexString(lCommand));
// boolean save = alarmInformationService.save(alarmInformation);
// System.out.println("---" + save);
//
//
//// 上报海信iot平台
// byte[] byteValue = DataTrans.intToBytesBigEndian(0);
// ByteString byteString = ByteString.copyFrom(byteValue);
// Point point = Point.newBuilder().setData(byteString)
// .setDataType(1)
// .setType(2)
// .setDevType(2)
// .setChann(4)
//// .setId("82001")
// .setId(String.valueOf(Integer.sum(strCIDalarm.wDefenceNo, 1)))
// .setPntType(5)
// .setPntTypeValue(6).build();
// boolean b = queueUtils.saveQueueDataStatus(point);
// queueUtils.saveQueueDataAlarm(point);
// System.out.println("===" + b);
//
// } catch (Exception e) {
// e.printStackTrace();
// }
return;
}
}

@ -0,0 +1,352 @@
package org.springblade.hospital.newalarm.communicationCom;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.protobuf.ByteString;
import com.hisense.device.agent.grpc.Point;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
import org.springblade.common.cache.DictBizCache;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.hospital.agent.utils.DataTrans;
import org.springblade.hospital.agent.utils.QueueUtils;
import org.springblade.hospital.entity.AlarmInformation;
import org.springblade.hospital.service.IAlarmInformationService;
import org.springblade.hospital.utils.ExternalUtils;
import org.springblade.hospital.websocket.WebSocketServer;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class HTTPClientUtil {
public static HttpClient client = new HttpClient();
// public static String strIP = "171.16.206.139";
// public static int iPort = 80;
private static ExternalUtils externalUtils;
private static QueueUtils queueUtils;
private static IAlarmInformationService alarmInformationService;
public static String renzheng(String rzUrl, HttpClient client) {
// 设置用户名和密码
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("admin", "hao12345");
client.getState().setCredentials(AuthScope.ANY, creds);
GetMethod method = new GetMethod(rzUrl);
method.setDoAuthentication(true);
String strResponseData = null;
try {
int statusCode = client.executeMethod(method);
System.out.println("认证状态码:" + statusCode);
byte[] responseData = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
strResponseData = new String(responseData, "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
method.releaseConnection();
// 输出接收的消息
return strResponseData;
}
public static String doGet(String url, HttpClient client) {
GetMethod method = new GetMethod(url);
method.setDoAuthentication(true);
String response = null;
try {
int statusCode = client.executeMethod(method);
// Return response message
byte[] responseBody = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
// Use encoding in the Return response message (utf-8 or gb2312)
response = new String(responseBody, "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
// Release the connection
method.releaseConnection();
return response;
}
public static String doPut(String url, String inbound, HttpClient client) throws Exception {
PutMethod method = new PutMethod(url);
method.setDoAuthentication(true);
// method.setRequestBody(inbound);
int statusCode = client.executeMethod(method);
// Return response message
byte[] responseBody = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
// // Use encoding in the Return response message (utf-8 or gb2312)
String response = new String(responseBody, "utf-8");
// // Release the connection
method.releaseConnection();
return response;
}
public String doPost(String url, String inbound, String sSerialNumber, HttpClient client, String mac) {
StringBuffer stringBuffer = new StringBuffer();
try {
// System.out.println("执行了!!!" + sSerialNumber);
PostMethod method = new PostMethod(url);
method.setDoAuthentication(true);
method.setRequestBody(inbound);
method.addRequestHeader("Connection", "Keep-Alive");
int statusCode = client.executeMethod(method);
InputStream inputStream = method.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String str = "";
List<Map> list = new ArrayList<>();
while ((str = br.readLine()) != null) {
if (str.contains("--boundary")) {
Map resMap = JSON.parseObject(str.replaceAll("--boundary", ""), Map.class);
if (resMap.get("CIDEvent") != null) {
// 报警信息
Map cidMap = JSON.parseObject(resMap.get("CIDEvent").toString(), Map.class);
System.out.println("报警信息:" + cidMap);
if (externalUtils == null) {
externalUtils = SpringUtil.getBean(ExternalUtils.class);
}
int zone = 0;
if (cidMap.get("system") != null) {
// system子系统号
int system = Integer.parseInt(cidMap.get("system").toString());
// zone防区号
if (cidMap.get("zone") != null) {
zone = Integer.parseInt(cidMap.get("zone").toString()) + 1;
list = externalUtils.getList(0, 0, mac + "_sector_" + zone, null, "100", sSerialNumber);
} else {
list = externalUtils.getList(0, 0, mac + "_sys_" + system, null, "100", sSerialNumber);
}
}
// 事件信息入本地库
//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss+08:00");
if (alarmInformationService == null) {
alarmInformationService = SpringUtil.getBean(IAlarmInformationService.class);
}
String sCIDCode = cidMap.get("code").toString();
AlarmInformation alarmInformation = new AlarmInformation();
alarmInformation.setReportTime(new Date());
alarmInformation.setType(sCIDCode);
alarmInformation.setContent(DictBizCache.getValue("alarm_message_type", sCIDCode));
alarmInformation.setSystemNum(Integer.parseInt(cidMap.get("system").toString()));
alarmInformation.setHostSerialNumber(sSerialNumber);
alarmInformation.setHostIp(resMap.get("ipAddress").toString());
alarmInformation.setAlarmType(1);
if (CollectionUtils.isNotEmpty(list)) {
Map map = list.get(0);
alarmInformation.setDeviceName(map.get("name").toString());
alarmInformation.setDeviceType(Integer.parseInt(String.valueOf(map.get("pid"))));
String s = JSON.toJSONString(map.get("tags")).replace("\\", "");
s = s.substring(1, s.length() - 1);
Map tagsMap = JSONObject.parseObject(s, Map.class);
alarmInformation.setFloorNo(tagsMap.get("floorNo").toString());
alarmInformation.setBuildId(tagsMap.get("buildingNo").toString());
if (tagsMap.get("coordinate") != null) {
String coordinate = tagsMap.get("coordinate").toString();
alarmInformation.setLatidute(coordinate.split("-")[0]);
alarmInformation.setLongidute(coordinate.split("-")[1]);
}
alarmInformation.setDeviceId(tagsMap.get("pmac").toString());
Map bizProduct = JSONObject.parseObject(JSON.toJSONString(map.get("bizProduct")), Map.class);
alarmInformation.setProductName(bizProduct.get("name").toString());
if (tagsMap.get("cameraCode") != null) {
alarmInformation.setCameraCode(tagsMap.get("cameraCode").toString());
}
// 主动修改设备状态-物联网平台
if ("3973".equals(sCIDCode)) {
externalUtils.bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), 5);
} 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);
}
}
boolean save = alarmInformationService.save(alarmInformation);
// 只保留“即时报警”、“设备防拆报警”
if ("1103".equals(sCIDCode) || "1137".equals(sCIDCode)) {
// 上报海信iot平台
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.shortToBytesBigEndian((short) 1);
ByteString byteString = ByteString.copyFrom(byteValue);
Point point = Point.newBuilder()
.setData(byteString)
.setId(tagsMap.get("mac").toString() + "_sector_" + zone)
.setDevType(2)
.setPntType(7)
.build();
boolean b = queueUtils.saveQueueDataStatus(point);
System.out.println("===" + b);
// 报警信息发送到远程服务器
// if (restTemplate == null) {
// restTemplate = SpringUtil.getBean(RestTemplate.class);
// }
// String url = "http://152.136.119.150:81/alarmInformation/hikRemote";
// HttpHeaders headers = new HttpHeaders();
// headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
//
// Map<String, Object> map = new HashMap<>();
// 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);
// String content = JSON.toJSONString(map);
//
// HttpEntity<String> httpEntity = new HttpEntity<>(content, headers);
//
// // 发送post请求,并输出结果
// R r = restTemplate.postForObject(url, httpEntity, R.class);
// System.out.println("调用远程服务器接口成功!!:" + r);
// webSocket推送给客户端消息
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", JSONObject.toJSONString(alarmInformation));
WebSocketServer.sendInfo(jsonObject);
}
}
// System.out.println("接收到的数据:" + resMap);
}
// System.out.println(sSerialNumber + "接收到的数据:" + str);
}
method.releaseConnection();
} catch (IOException e) {
e.printStackTrace();
}
return stringBuffer.toString();
}
public static String doDelete(String url, HttpClient client) throws Exception {
DeleteMethod method = new DeleteMethod(url);
method.setDoAuthentication(true);
int statusCode = client.executeMethod(method);
// Return response message
byte[] responseBody = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
// Use encoding in the Return response message (utf-8 or gb2312)
String response = new String(responseBody, "utf-8");
// Release the connection
method.releaseConnection();
return response;
}
//With the binary form POst method
public static String doPostwithBinaryData(String url, String json, String jsonName, String image, String imageName, String boundary) throws Exception {
PostMethod method = new PostMethod(url);
method.setDoAuthentication(true);
method.addRequestHeader("Accept", "text/html, application/xhtml+xml");
method.addRequestHeader("Accept-Language", "zh-CN");
method.addRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
method.addRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
method.addRequestHeader("Accept-Encoding", "gzip, deflate");
method.addRequestHeader("Connection", "Keep-Alive");
method.addRequestHeader("Cache-Control", "no-cache");
String bodyParam =
"--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"" + jsonName + "\";\r\n"
+ "Content-Type: text/json\r\n"
+ "Content-Length: " + Integer.toString(json.length()) + "\r\n\r\n"
+ json + "\r\n"
+ "--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"" + imageName + "\";\r\n"
+ "Content-Type: image/jpeg\r\n"
+ "Content-Length: " + Integer.toString(image.length()) + "\r\n\r\n"
+ image
+ "\r\n--" + boundary + "--\r\n";
method.setRequestBody(bodyParam);
// Return response message
byte[] responseBody = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
// Use encoding in the Return response message (utf-8 or gb2312)
String response = new String(responseBody, "utf-8");
// Release the connection
method.releaseConnection();
return response;
}
public static String doPostStorageCloud(String url, String json, String faceimage, String boundary) throws Exception {
PostMethod method = new PostMethod(url);
method.setDoAuthentication(true);
method.addRequestHeader("Accept", "text/html, application/xhtml+xml");
method.addRequestHeader("Accept-Language", "zh-CN");
method.addRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
method.addRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
method.addRequestHeader("Accept-Encoding", "gzip, deflate");
method.addRequestHeader("Connection", "Keep-Alive");
method.addRequestHeader("Cache-Control", "no-cache");
String bodyParam =
"--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"uploadStorageCloud\";\r\n"
+ "Content-Type: text/json\r\n"
+ "Content-Length: " + Integer.toString(json.length()) + "\r\n\r\n"
+ json + "\r\n"
+ "--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"imageData\";\r\n"
+ "Content-Type: image/jpeg\r\n"
+ "Content-Length: " + Integer.toString(faceimage.length()) + "\r\n\r\n"
+ faceimage
+ "\r\n--" + boundary + "--\r\n";
method.setRequestBody(bodyParam);
// Return response message
byte[] responseBody = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
// Use encoding in the Return response message (utf-8 or gb2312)
String response = new String(responseBody, "utf-8");
// Release the connection
method.releaseConnection();
return response;
}
}

@ -37,6 +37,7 @@ import org.springblade.modules.resource.entity.Attach;
import org.springblade.modules.resource.service.IAttachService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
@ -59,26 +60,29 @@ public class AppDataServiceImpl extends BaseServiceImpl<AppDataMapper, AppData>
private final IAttachService attachService;
private final OssBuilder ossBuilder;
@Override
@Transactional(rollbackFor = Exception.class)
public List<String> putFile(AppData appData, List<MultipartFile> resultList) {
List<String> links = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd/");
String uploadUrl = format.format(new Date());
// SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd/");
// String uploadUrl = format.format(new Date());
try {
if (appData.getType() == 1 || appData.getType() == 2) {
String url = "";
for (MultipartFile file : resultList) {
// 文件上传到指定地址
String s = UploadFileUtil.uploadFile(file, uploadUrl);
// String link = UploadFileUtil.uploadFile(file, uploadUrl);
BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), file.getInputStream());
String link = bladeFile.getLink();
Attach attach = new Attach();
attach.setLink(s);
attach.setLink(link);
attach.setOriginalName(file.getOriginalFilename());
attachService.save(attach);
url += attach.getId() + ",";
links.add(s);
links.add(link);
}
if (StringUtils.isNotBlank(url)) {
appData.setUrl(url.substring(0, url.length() - 1));

@ -29,11 +29,14 @@ import org.springblade.hospital.service.ICornJobService;
import org.springframework.stereotype.Service;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.*;
import java.util.Calendar;
import java.util.Date;
/**
* 服务实现类
*
* @author BladeX
*/
@Service
@ -42,7 +45,7 @@ public class CornJobServiceImpl extends BaseServiceImpl<CornJobMapper, CornJob>
@Override
public boolean add(CornJob cornJob) {
// 重复校验
check(cornJob.getId(), cornJob.getType(), cornJob.getDeviceId());
check(cornJob.getId(), cornJob.getType(), cornJob.getDeviceId(), cornJob.getIsRegular());
if (cornJob.getExecuteTime() != null) {
cornJob.setNextExecuteTime(getNextTime(cornJob.getExecuteTime()));
@ -53,7 +56,7 @@ public class CornJobServiceImpl extends BaseServiceImpl<CornJobMapper, CornJob>
@Override
public boolean edit(CornJob cornJob) {
// 重复校验
check(cornJob.getId(), cornJob.getType(), cornJob.getDeviceId());
check(cornJob.getId(), cornJob.getType(), cornJob.getDeviceId(), cornJob.getIsRegular());
if (cornJob.getExecuteTime() != null) {
cornJob.setNextExecuteTime(getNextTime(cornJob.getExecuteTime()));
@ -78,13 +81,15 @@ public class CornJobServiceImpl extends BaseServiceImpl<CornJobMapper, CornJob>
return date;
}
private void check(Long id, int type, String deviceId) {
private void check(Long id, int type, String deviceId, Integer isRegular) {
LambdaQueryWrapper<CornJob> wrapper = Wrappers.lambdaQuery();
wrapper.eq(CornJob::getType, type).eq(CornJob::getDeviceId, deviceId);
wrapper.eq(CornJob::getType, type).eq(CornJob::getDeviceId, deviceId).eq(CornJob::getIsRegular, isRegular);
if (id != null) {
wrapper.ne(CornJob::getId, id);
System.out.println("id不为空输出!!!" + id);
}
long count = this.count(wrapper);
System.out.println("count数量" + count);
if (count > 0) {
throw new ServiceException("数据重复!");
}

@ -1,14 +1,24 @@
package org.springblade.hospital.utils;
import com.alibaba.fastjson.JSON;
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 com.google.protobuf.ByteString;
import com.hisense.device.agent.grpc.Point;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.springblade.common.cache.DictBizCache;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.hospital.agent.utils.DataTrans;
import org.springblade.hospital.agent.utils.QueueUtils;
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.IAlarmInformationService;
import org.springblade.hospital.service.ICornJobService;
import org.springblade.hospital.websocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
@ -17,6 +27,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
@Component
@ -28,13 +41,19 @@ public class CornJobUtil {
@Autowired
ICornJobService cornJobService;
@Autowired
IAlarmInformationService alarmInformationService;
@Autowired
QueueUtils queueUtils;
/**
* 定时更新设备状态每1分钟执行一次
*/
@Async
@Scheduled(initialDelay = 5000, fixedRate = 60000)
// @Scheduled(initialDelay = 5000, fixedRate = 60000)
public void updateStatus() {
System.out.println("定时任务执行了1");
System.out.println("定时1分钟获取1次设备状态");
externalUtils.updateStatus();
}
@ -42,60 +61,62 @@ public class CornJobUtil {
* 定时布撤防每3分钟执行一次
*/
@Async
@Scheduled(initialDelay = 6000, 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(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);
// }
List<CornJob> jobs = cornJobService.list(Wrappers.<CornJob>lambdaQuery().eq(CornJob::getStatus, 1).eq(CornJob::getIsRegular, 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) {
String[] split = id.split("_");
Alarm.zibufang(job.getHostSerialNumber(), Integer.parseInt(split[split.length - 1]));
}
}
// 撤防
else if (job.getType() == 2) {
for (String id : ids) {
String[] split = id.split("_");
Alarm.zichefang(job.getHostSerialNumber(), Integer.parseInt(split[split.length - 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);
// @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);
}
}

@ -7,6 +7,7 @@ import com.google.protobuf.ByteString;
import com.hisense.device.agent.grpc.Point;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.ParamCache;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.SpringUtil;
@ -15,6 +16,7 @@ import org.springblade.hospital.agent.utils.QueueUtils;
import org.springblade.hospital.entity.KeyAndSecret;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.hik.alarm.Alarm;
import org.springblade.hospital.newalarm.communicationCom.HTTPClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
@ -26,6 +28,7 @@ import java.util.Map;
import java.util.concurrent.Exchanger;
import java.util.stream.Collectors;
import static org.springblade.common.constant.CommonConstant.IOT_PLATFORM_URL;
import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
@Component
@ -41,7 +44,9 @@ public class ExternalUtils {
* 获取物联网平台token
*/
private String getToken(String appKey, String appSecret) {
String url = "http://182.139.182.190:60032/prod-api/api/Login";
String url = ParamCache.getValue(IOT_PLATFORM_URL) + "Login";
// String url = "http://171.16.8.58:8080/prod-api/api/Login";
// String url = "http://182.139.182.190:60032/prod-api/api/Login";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
@ -89,7 +94,9 @@ public class ExternalUtils {
}
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 url = ParamCache.getValue(IOT_PLATFORM_URL) + "bizDevice/list?pid=";
// String url = "http://171.16.8.58:8080/prod-api/api/bizDevice/list?pid=";
// 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)) {
@ -111,7 +118,7 @@ public class ExternalUtils {
}
if (StringUtils.isNotBlank(id)) {
url += "&params[mac]=" + id;
url += "&params[pmac]=" + id;
}
HttpHeaders headers = new HttpHeaders();
@ -131,28 +138,49 @@ public class ExternalUtils {
* 更新设备状态
*/
public void updateStatus() {
// 设备列表信息
// 报警主机信息
List<Map> hosts = getList(0, 0, null, null, "105", null);
// 子系统、防区信息
List<Map> mapList = getList(0, 0, null, null, "100", null);
// 遍历设备列表更新设备状态信息
if (CollectionUtils.isNotEmpty(hosts)) {
// 报警主机在线状态:true在线 false离线
// boolean presence = Alarm.presence();
try {
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();
String number = tagMap.get("hostNumber").toString(); // 序列号
String mac = tagMap.get("mac").toString(); // 自定义mac
// 认证
String rzUrl = "http://" + Alarm.ipMap.get(number) + ":" + Alarm.portMap.get(number) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(number)) {
// 获取该报警主机的所有状态
String status = "http://" + Alarm.ipMap.get(number) + ":" + Alarm.portMap.get(number) + "/ISAPI/SecurityCP/status/host?format=json";
String statusData = HTTPClientUtil.doGet(status, HTTPClientUtil.client);
Map statusMap = JSONObject.parseObject(statusData, Map.class);
Map alarmHostStatus = JSONObject.parseObject(statusMap.get("AlarmHostStatus").toString(), Map.class);
Map communiStatus = JSONObject.parseObject(alarmHostStatus.get("CommuniStatus").toString(), Map.class);
System.out.println("CommuniStatus" + communiStatus);
// 设备状态信息
HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus(number);
// 如果查不到该报警主机的状态信息
if (status == null) {
// 如果通讯断开跳过
if (!"normal".equals(communiStatus.get("wired"))) {
continue;
}
// 防区状态
List<Map> zoneList = JSONObject.parseObject(alarmHostStatus.get("ZoneList").toString(), List.class);
System.out.println("ZoneList" + zoneList);
// 子系统状态
List<Map> subSysList = JSONObject.parseObject(alarmHostStatus.get("SubSysList").toString(), List.class);
System.out.println("SubSysList" + subSysList);
// 过滤只有该报警主机下的子系统、防区
List<Map> list = mapList.stream().filter(map -> JSON.toJSONString(map.get("tags")).contains(number)).collect(Collectors.toList());
for (Map map : list) {
// 物联网设备状态
@ -161,7 +189,7 @@ public class ExternalUtils {
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 id = tagsMap.get("pmac").toString();
String type = tagsMap.get("type").toString();
// 防区号/子系统号
@ -173,18 +201,39 @@ public class ExternalUtils {
if ("2".equals(type)) {
presence = 1;
List<Map> zones = zoneList.stream().filter(zone -> Integer.parseInt(JSONObject.parseObject(zone.get("Zone").toString(), Map.class).get("id").toString()) == sCIDCode - 1).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(zones)) {
Map zoneMap = zones.get(0);
Map zone = JSONObject.parseObject(zoneMap.get("Zone").toString(), Map.class);
// 防区布防状态 0-对应防区处于撤防状态,1-对应防区处于布防状态
byte bySetupAlarmStatus = status.bySetupAlarmStatus[sCIDCode - 1];
int bySetupAlarmStatus = 0;
if ((boolean) zone.get("isArming")) {
bySetupAlarmStatus = 1;
}
// 防区旁路状态 0-表示防区没有旁路 1-表示防区旁路
byte byBypassStatus = status.byBypassStatus[sCIDCode - 1];
int byBypassStatus = 0;
if ((boolean) zone.get("bypassed")) {
byBypassStatus = 1;
}
// 防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态
byte byAlarmInFaultStatus = status.byAlarmInFaultStatus[sCIDCode - 1];
int byAlarmInFaultStatus = 0;
if ("breakDown".equals(zone.get("status"))) {
byAlarmInFaultStatus = 1;
}
// 防区报警状态,0-对应防区当前无报警,1-对应防区当前有报警
byte byAlarmInStatus = status.byAlarmInFaultStatus[sCIDCode - 1];
int byAlarmInStatus = 0;
if ((boolean) zone.get("alarm")) {
byAlarmInStatus = 1;
}
// 上报防区报警状态
// updateById(id, 7, byAlarmInStatus, 2);
// updateById(id, 7, byAlarmInStatus, type);
// test1(id, 7, byAlarmInStatus, 2);
test1(id, 7, 1, 2);
// test1(id, 7, 1, 2);
// 撤防-6 布防-5 旁路-7
if (byAlarmInFaultStatus == 0) {
@ -198,20 +247,24 @@ public class ExternalUtils {
} else {
fqStatus = 4;
}
}
} else if ("3".equals(type)) {
presence = 2;
List<Map> subSyss = subSysList.stream().filter(sys -> Integer.parseInt(JSONObject.parseObject(sys.get("SubSys").toString(), Map.class).get("id").toString()) == sCIDCode).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(subSyss)) {
Map sysMap = subSyss.get(0);
Map subSys = JSONObject.parseObject(sysMap.get("SubSys").toString(), Map.class);
//子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态
byte bySubSystemGuardStatus = status.bySubSystemGuardStatus[sCIDCode - 1];
if (bySubSystemGuardStatus == 0) {
fqStatus = 6;
} else {
if (!"disarm".equals(subSys.get("arming"))) {
fqStatus = 5;
}
}
}
// 海信iot
// updateById(id, fqStatus,presence,type);
test(id, fqStatus, presence, type);
updateById(id, fqStatus, presence, type);
// test(id, fqStatus, presence, type);
if (fqStatus == state) {
continue;
@ -222,6 +275,10 @@ public class ExternalUtils {
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
@ -318,7 +375,9 @@ public class ExternalUtils {
}
private Map device(String token, int id, int status) {
String url = "http://182.139.182.190:60032/prod-api/api/bizDevice";
String url = ParamCache.getValue(IOT_PLATFORM_URL) + "bizDevice";
// String url = "http://171.16.8.58:8080/prod-api/api/bizDevice";
// String url = "http://182.139.182.190:60032/prod-api/api/bizDevice";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));
headers.setBearerAuth(token);

@ -9,7 +9,8 @@ import java.util.UUID;
public class UploadFileUtil {
public static String uploadFile(MultipartFile upload, String path) throws IOException {
String uploadUrl = "D:/Develop/nginx-1.18.0/html/upload/";
// String uploadUrl = "D:/Develop/nginx-1.18.0/html/upload/";
String uploadUrl = "/usr/local/nginx/html/upload/";
//判断该路径是否存在
File file = new File(uploadUrl + path);
if (!file.exists()) {

@ -17,6 +17,7 @@
package org.springblade.modules.system.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.*;
@ -39,8 +40,7 @@ import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import java.util.*;
import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
@ -203,5 +203,20 @@ public class DictBizController extends BladeController {
return R.data(list);
}
@GetMapping("/getValues")
public R getValues(String keys) {
String[] keyArray = keys.split(",");
List<DictBiz> list = dictService.list(Wrappers.<DictBiz>lambdaQuery().eq(DictBiz::getCode, "camera_information").in(DictBiz::getDictKey, keyArray));
List<Map<String, String>> codes = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list)) {
for (DictBiz dictBiz : list) {
Map<String, String> map = new HashMap<>();
map.put("name", dictBiz.getDictKey());
map.put("code", dictBiz.getDictValue());
codes.add(map);
}
}
return R.data(codes);
}
}

@ -2,6 +2,7 @@
spring:
redis:
##redis 单机环境配置
# host: 171.16.8.51
host: 127.0.0.1
port: 6379
password:
@ -14,6 +15,7 @@ spring:
datasource:
# MySql
url: jdbc:mysql://localhost:3306/hospital?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# url: jdbc:mysql://171.16.8.51:3306/hospital?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root
password: 123456
# PostgreSQL

@ -137,10 +137,12 @@ report:
oss:
enabled: true
name: minio
tenant-mode: true
endpoint: http://127.0.0.1:9000
access-key: VStUadh8yjZK2Cv6
secret-key: FzED6Ddhw9iW5xwKw29OF6nRHlrRpGI0
tenant-mode: false
endpoint: http://171.16.8.51:9000
access-key: g5HeFysuXl8GR6Rn
secret-key: fz2cbDybMz6VOYFnUHSa24jywAAJ7BkM
# access-key: ZKga7e7SwuQ24ONPUNrA
# secret-key: EhdALlRn4cCgpXepMmNzzs9QQDOk2VoE6guQHFFt
bucket-name: hospital
#第三方登陆配置
@ -226,6 +228,7 @@ blade:
- /blade-test/**
- /**
- /api/appData/putFile
- /alarmInformation/alarm
#授权认证配置
auth:
- method: ALL

Loading…
Cancel
Save