package com.zhgd.xmgl.call; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hikvision.artemis.sdk.config.ArtemisConfig; 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; 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; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.*; @Slf4j @Component public class HikvisionCall { @Value("${upload.image.url.prefix:}") private String imageUrlPrefix; @Autowired private ProjectMapper projectMapper; 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 path = new HashMap(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) { Project project = projectMapper.selectOne(new LambdaQueryWrapper().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/v2/person/single/add"; String host = "https://" + project.getArtemisConfigHost(); String body = getWorkerJson(workerInfo); HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); } private String getWorkerJson(WorkerInfo workerInfo) { 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> faceList = new ArrayList<>(); HashMap faceMap = new HashMap<>(); faceMap.put("faceData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(imageUrlPrefix + "/" + workerInfo.getFieldAcquisitionUrl()))); faceList.add(faceMap); jsonBody.put("faces", faceList); String body = jsonBody.toJSONString(); return body; } public void editWorkerForHikvision(WorkerInfo workerInfo) { Project project = projectMapper.selectOne(new LambdaQueryWrapper().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/single/update"; String host = "https://" + project.getArtemisConfigHost(); String body = getWorkerJson(workerInfo); HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); } public void deleteWorkerForHikvision(WorkerInfo workerInfo) { Project project = projectMapper.selectOne(new LambdaQueryWrapper().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(); JSONObject jsonBody = new JSONObject(); jsonBody.put("personIds", Arrays.asList(workerInfo.getId())); String body = jsonBody.toJSONString(); HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); } public void addCarInfoForHikvision(CarInfo carInfo) { Project project = projectMapper.selectOne(new LambdaQueryWrapper().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()); } 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; } 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; } } public void editCarInfoForHikvision(CarInfo carInfo) { Project project = projectMapper.selectOne(new LambdaQueryWrapper().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().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()); } }