2024-02-27 12:53:37 +08:00
|
|
|
|
package com.zhgd.xmgl.call;
|
|
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
2024-02-28 14:02:07 +08:00
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
|
import com.google.gson.JsonArray;
|
|
|
|
|
|
import com.google.gson.JsonObject;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
|
|
|
|
|
|
import com.hikvision.artemis.sdk.config.ArtemisConfig;
|
2024-02-28 14:02:07 +08:00
|
|
|
|
import com.zhgd.xmgl.base.HikvisionCarInfo;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.car.entity.CarInfo;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.project.entity.Project;
|
|
|
|
|
|
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
|
|
|
|
|
|
import com.zhgd.xmgl.util.Base64Util;
|
|
|
|
|
|
import com.zhgd.xmgl.util.HikvisionUtil;
|
|
|
|
|
|
import com.zhgd.xmgl.util.PathUtil;
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
2024-02-28 14:02:07 +08:00
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
import java.util.*;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
@Component
|
|
|
|
|
|
public class HikvisionCall {
|
|
|
|
|
|
@Value("${upload.image.url.prefix:}")
|
|
|
|
|
|
private String imageUrlPrefix;
|
|
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
@Autowired
|
|
|
|
|
|
private ProjectMapper projectMapper;
|
|
|
|
|
|
|
2024-02-27 12:53:37 +08:00
|
|
|
|
public static String GetCameraPreviewURL() {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
|
|
|
|
|
|
*/
|
|
|
|
|
|
ArtemisConfig.host = "127.0.0.1:443"; // 平台的ip端口
|
|
|
|
|
|
ArtemisConfig.appKey = "29180881"; // 密钥appkey
|
|
|
|
|
|
ArtemisConfig.appSecret = "XO0wCAYGi4KV70ybjznx";// 密钥appSecret
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* STEP2:设置OpenAPI接口的上下文
|
|
|
|
|
|
*/
|
|
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* STEP3:设置接口的URI地址
|
|
|
|
|
|
*/
|
|
|
|
|
|
final String previewURLsApi = ARTEMIS_PATH + "/api/video/v1/cameras/previewURLs";
|
|
|
|
|
|
Map<String, String> path = new HashMap<String, String>(2) {
|
|
|
|
|
|
{
|
|
|
|
|
|
put("https://", previewURLsApi);//根据现场环境部署确认是http还是https
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* STEP4:设置参数提交方式
|
|
|
|
|
|
*/
|
|
|
|
|
|
String contentType = "application/json";
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* STEP5:组装请求参数
|
|
|
|
|
|
*/
|
|
|
|
|
|
JSONObject jsonBody = new JSONObject();
|
|
|
|
|
|
jsonBody.put("cameraIndexCode", "748d84750e3a4a5bbad3cd4af9ed5101");
|
|
|
|
|
|
jsonBody.put("streamType", 0);
|
|
|
|
|
|
jsonBody.put("protocol", "rtsp");
|
|
|
|
|
|
jsonBody.put("transmode", 1);
|
|
|
|
|
|
jsonBody.put("expand", "streamform=ps");
|
|
|
|
|
|
String body = jsonBody.toJSONString();
|
|
|
|
|
|
/**
|
|
|
|
|
|
* STEP6:调用接口
|
|
|
|
|
|
*/
|
|
|
|
|
|
String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void addWorkerForHikvision(WorkerInfo workerInfo) {
|
2024-02-28 14:02:07 +08:00
|
|
|
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
|
|
|
|
|
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
2024-02-28 14:02:07 +08:00
|
|
|
|
final String path = ARTEMIS_PATH + "/api/resource/v2/person/single/add";
|
|
|
|
|
|
String host = "https://" + project.getArtemisConfigHost();
|
|
|
|
|
|
String body = getWorkerJson(workerInfo);
|
|
|
|
|
|
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
private String getWorkerJson(WorkerInfo workerInfo) {
|
2024-02-27 12:53:37 +08:00
|
|
|
|
JSONObject jsonBody = new JSONObject();
|
|
|
|
|
|
jsonBody.put("personId", workerInfo.getId());
|
|
|
|
|
|
jsonBody.put("personName", workerInfo.getWorkerName());
|
|
|
|
|
|
jsonBody.put("gender", workerInfo.getSex());
|
|
|
|
|
|
jsonBody.put("orgIndexCode", "todo");//todo
|
|
|
|
|
|
jsonBody.put("birthday", workerInfo.getBirthday());
|
|
|
|
|
|
jsonBody.put("phoneNo", workerInfo.getPhoneNumber());
|
|
|
|
|
|
jsonBody.put("email", workerInfo.getPersonMail());
|
|
|
|
|
|
jsonBody.put("certificateType", "111");
|
|
|
|
|
|
jsonBody.put("certificateNo", workerInfo.getIdCard());
|
|
|
|
|
|
jsonBody.put("jobNo", workerInfo.getPersonSn());
|
|
|
|
|
|
ArrayList<HashMap<String, String>> faceList = new ArrayList<>();
|
|
|
|
|
|
HashMap<String, String> faceMap = new HashMap<>();
|
|
|
|
|
|
faceMap.put("faceData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(imageUrlPrefix + "/" + workerInfo.getFieldAcquisitionUrl())));
|
|
|
|
|
|
faceList.add(faceMap);
|
|
|
|
|
|
jsonBody.put("faces", faceList);
|
|
|
|
|
|
String body = jsonBody.toJSONString();
|
2024-02-28 14:02:07 +08:00
|
|
|
|
return body;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
public void editWorkerForHikvision(WorkerInfo workerInfo) {
|
|
|
|
|
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
|
|
|
|
|
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
2024-02-28 14:02:07 +08:00
|
|
|
|
final String path = ARTEMIS_PATH + "/api/resource/v1/person/single/update";
|
|
|
|
|
|
String host = "https://" + project.getArtemisConfigHost();
|
|
|
|
|
|
String body = getWorkerJson(workerInfo);
|
|
|
|
|
|
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
public void deleteWorkerForHikvision(WorkerInfo workerInfo) {
|
|
|
|
|
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
|
|
|
|
|
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
|
|
|
|
|
final String path = ARTEMIS_PATH + "/api/resource/v1/person/batch/delete";
|
|
|
|
|
|
String host = "https://" + project.getArtemisConfigHost();
|
2024-02-27 12:53:37 +08:00
|
|
|
|
JSONObject jsonBody = new JSONObject();
|
2024-02-28 14:02:07 +08:00
|
|
|
|
jsonBody.put("personIds", Arrays.asList(workerInfo.getId()));
|
2024-02-27 12:53:37 +08:00
|
|
|
|
String body = jsonBody.toJSONString();
|
2024-02-28 14:02:07 +08:00
|
|
|
|
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void addCarInfoForHikvision(CarInfo carInfo) {
|
|
|
|
|
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, carInfo.getProjectSn()));
|
|
|
|
|
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
|
|
|
|
|
final String path = ARTEMIS_PATH + "/api/resource/v1/vehicle/batch/add";
|
|
|
|
|
|
String host = "https://" + project.getArtemisConfigHost();
|
|
|
|
|
|
HikvisionCarInfo hikvisionCarInfo = getHikvisionCarInfo(carInfo);
|
|
|
|
|
|
JsonArray array = new JsonArray();
|
|
|
|
|
|
array.add(BeanUtil.toBean(hikvisionCarInfo, JsonObject.class));
|
|
|
|
|
|
String body = array.toString();
|
|
|
|
|
|
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
private HikvisionCarInfo getHikvisionCarInfo(CarInfo carInfo) {
|
|
|
|
|
|
HikvisionCarInfo hikvisionCarInfo = new HikvisionCarInfo();
|
|
|
|
|
|
hikvisionCarInfo.setClientId(carInfo.getId());
|
|
|
|
|
|
hikvisionCarInfo.setPlateNo(carInfo.getCarNumber());
|
|
|
|
|
|
hikvisionCarInfo.setPersonId(carInfo.getDriverName());
|
|
|
|
|
|
hikvisionCarInfo.setPlateType(null);
|
|
|
|
|
|
hikvisionCarInfo.setPlateColor(null);
|
|
|
|
|
|
hikvisionCarInfo.setVehicleType(null);
|
|
|
|
|
|
hikvisionCarInfo.setVehicleColor(getVehicleColor(carInfo.getCarColor()));
|
|
|
|
|
|
hikvisionCarInfo.setDescription(null);
|
|
|
|
|
|
return hikvisionCarInfo;
|
2024-02-27 12:53:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
private String getVehicleColor(String carColor) {
|
|
|
|
|
|
if (StringUtils.isBlank(carColor)) {
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
switch (carColor) {
|
|
|
|
|
|
case "其他颜色":
|
|
|
|
|
|
return "0";
|
|
|
|
|
|
case "白色":
|
|
|
|
|
|
return "1";
|
|
|
|
|
|
case "银色":
|
|
|
|
|
|
return "2";
|
|
|
|
|
|
case "灰色":
|
|
|
|
|
|
return "3";
|
|
|
|
|
|
case "黑色":
|
|
|
|
|
|
return "4";
|
|
|
|
|
|
case "红色":
|
|
|
|
|
|
return "5";
|
|
|
|
|
|
case "深蓝色":
|
|
|
|
|
|
return "6";
|
|
|
|
|
|
case "蓝色":
|
|
|
|
|
|
return "7";
|
|
|
|
|
|
case "黄色":
|
|
|
|
|
|
return "8";
|
|
|
|
|
|
case "绿色":
|
|
|
|
|
|
return "9";
|
|
|
|
|
|
case "棕色":
|
|
|
|
|
|
return "10";
|
|
|
|
|
|
case "粉色":
|
|
|
|
|
|
return "11";
|
|
|
|
|
|
case "紫色":
|
|
|
|
|
|
return "12";
|
|
|
|
|
|
case "深灰":
|
|
|
|
|
|
return "13";
|
|
|
|
|
|
case "杏色":
|
|
|
|
|
|
return "14";
|
|
|
|
|
|
case "未识别的车辆颜色":
|
|
|
|
|
|
return "255";
|
|
|
|
|
|
default:
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
|
2024-02-28 14:02:07 +08:00
|
|
|
|
public void editCarInfoForHikvision(CarInfo carInfo) {
|
|
|
|
|
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, carInfo.getProjectSn()));
|
|
|
|
|
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
|
|
|
|
|
final String path = ARTEMIS_PATH + "/api/resource/v1/vehicle/single/update";
|
|
|
|
|
|
String host = "https://" + project.getArtemisConfigHost();
|
|
|
|
|
|
HikvisionCarInfo hikvisionCarInfo = getHikvisionCarInfo(carInfo);
|
|
|
|
|
|
JsonArray array = new JsonArray();
|
|
|
|
|
|
array.add(BeanUtil.toBean(hikvisionCarInfo, JsonObject.class));
|
|
|
|
|
|
String body = array.toString();
|
|
|
|
|
|
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void deleteCarInfoForHikvision(CarInfo carInfo) {
|
|
|
|
|
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, carInfo.getProjectSn()));
|
|
|
|
|
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
final String ARTEMIS_PATH = "/artemis";
|
|
|
|
|
|
final String path = ARTEMIS_PATH + "/api/resource/v1/vehicle/single/update";
|
|
|
|
|
|
String host = "https://" + project.getArtemisConfigHost();
|
|
|
|
|
|
JSONObject jo = new JSONObject();
|
|
|
|
|
|
JsonArray array = new JsonArray();
|
|
|
|
|
|
String body = array.toString();
|
|
|
|
|
|
array.add(carInfo.getId());
|
|
|
|
|
|
jo.put("vehicleIds", array);
|
|
|
|
|
|
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
|
|
|
|
|
}
|
2024-02-27 12:53:37 +08:00
|
|
|
|
}
|