diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java index fad0294bc..f63e7d1e2 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java @@ -55,7 +55,7 @@ public class AsyncHikvision { @Async public void addCarInfoForHikvision(CarInfo carInfo) { try { - hikvisionCall.addCarInfoForHikvision(carInfo); + hikvisionCall.addCarInfoFromHttp(carInfo); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index 7f8c6a206..63f39b9e6 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -48,6 +48,8 @@ import java.util.concurrent.CompletableFuture; @RestController @RequestMapping("/xmgl/hikvision") public class HikvisionCall { + private static String FIXED_CAR_GROUP_NAME = "固定车永久通行"; + @Value("${upload.image.url.prefix:}") private String imageUrlPrefix; @Value("${basePath:}") @@ -77,6 +79,7 @@ public class HikvisionCall { @Lazy private CarInfoMapper carInfoMapper; + @ApiOperation(value = "海康事件回调", notes = "海康事件回调", httpMethod = "POST") @PostMapping(value = "/eventCallback") public Result eventCallback(@ApiIgnore @RequestBody JSONObject jsonObject) { @@ -284,6 +287,20 @@ public class HikvisionCall { return null; } + /** + * 查询车辆分类 + * + * @return + */ + @GetMapping("/categorySearch") + public Result categorySearch() { + Project project = projectMapper.selectOne(new LambdaQueryWrapper().eq(Project::getProjectSn, "B717CB992D054A878FDAFB4A5C169947")); + String svrIndex = null; + String platePicUrl = null; + categorySearch(project); + return null; + } + /** * 获取车辆颜色 * @@ -385,6 +402,10 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } + addWorkerFromHttp(workerInfo, project); + } + + private void addWorkerFromHttp(WorkerInfo workerInfo, Project project) { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v2/person/single/add"; String host = "https://" + project.getArtemisConfigHost(); @@ -441,11 +462,7 @@ public class HikvisionCall { } JSONObject wiJo = getWorkerInfo(workerInfo, project); if (wiJo != null) { - 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()); + editWorkerFromHttp(workerInfo, project); editWorkerFace(workerInfo, project); } else { @@ -453,6 +470,14 @@ public class HikvisionCall { } } + private void editWorkerFromHttp(WorkerInfo workerInfo, Project project) { + 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()); + } + /** * 添加人脸 * @@ -506,6 +531,10 @@ public class HikvisionCall { } deleteWorkerFace(workerInfo, project); + deleteWorkerFromHttp(workerInfo, project); + } + + private void deleteWorkerFromHttp(WorkerInfo workerInfo, Project project) { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v1/person/batch/delete"; String host = "https://" + project.getArtemisConfigHost(); @@ -596,11 +625,27 @@ public class HikvisionCall { * * @param carInfo */ - public void addCarInfoForHikvision(CarInfo carInfo) { + public void addCarInfoFromHttp(CarInfo carInfo) { Project project = projectMapper.selectOne(new LambdaQueryWrapper().eq(Project::getProjectSn, carInfo.getProjectSn())); if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } + if (Objects.equals(carInfo.getCarModuleType(), 1)) { + //固定车 + addCarInfoFromHttp(carInfo, project); + + //绑定固定的群组 + JSONArray ja = categorySearch(project); + String categoryCode = getFixedCarGroupName(ja); + if (StringUtils.isNotBlank(categoryCode)) { + carCategoryBind(project, 1, categoryCode, String.valueOf(carInfo.getId())); + } + } + + ifReservationCar(project, carInfo); + } + + private void addCarInfoFromHttp(CarInfo carInfo, Project project) { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v1/vehicle/batch/add"; String host = "https://" + project.getArtemisConfigHost(); @@ -608,8 +653,6 @@ public class HikvisionCall { ArrayList list = new ArrayList<>(); list.add(hikvisionCarInfo); HikvisionUtil.doPost(host, path, JSON.toJSONString(list), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - - reservationCar(project, carInfo); } private HikvisionCarInfo getHikvisionCarInfo(CarInfo carInfo) { @@ -719,14 +762,56 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } + if (Objects.equals(carInfo.getCarModuleType(), 1)) { + addCarInfoFromHttp(carInfo, project); + + //固定车,需要添加群组 + editCarInfoFromHttp(carInfo, project); + + //绑定车辆群组 + ifBindGroup(project, 1, carInfo); + } else if (Objects.equals(carInfo.getCarModuleType(), 2)) { + //解绑车辆群组 + ifBindGroup(project, 2, carInfo); + + deleteCarInfoForHikvision(carInfo, project); + } + //预约车辆 + ifReservationCar(project, carInfo); + } + + private void editCarInfoFromHttp(CarInfo carInfo, Project project) { 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); HikvisionUtil.doPost(host, path, JSON.toJSONString(hikvisionCarInfo), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + } - //预约车辆 - reservationCar(project, carInfo); + private void ifBindGroup(Project project, int operation, CarInfo carInfo) { + JSONArray ja = categorySearch(project); + String categoryCode = getFixedCarGroupName(ja); + if (StringUtils.isBlank(categoryCode)) { + carCategoryBind(project, operation, categoryCode, String.valueOf(carInfo.getId())); + } + } + + /** + * 获取固定车的categoryCode + * + * @param ja + */ + private String getFixedCarGroupName(JSONArray ja) { + if (ja != null) { + for (int i = 0; i < ja.size(); i++) { + JSONObject jo = ja.getJSONObject(i); + String categoryName = jo.getString("categoryName"); + if (Objects.equals(categoryName, FIXED_CAR_GROUP_NAME)) { + return jo.getString("categoryCode"); + } + } + } + return null; } /** @@ -739,6 +824,12 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } + deleteCarInfoForHikvision(carInfo, project); + + deleteReservationCarInfo(carInfo, project); + } + + private void deleteCarInfoForHikvision(CarInfo carInfo, Project project) { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v1/vehicle/batch/delete"; String host = "https://" + project.getArtemisConfigHost(); @@ -747,8 +838,6 @@ public class HikvisionCall { list.add(String.valueOf(carInfo.getId())); jo.put("vehicleIds", list); HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - - deleteReservationCarInfo(carInfo, project); } /** @@ -1121,31 +1210,33 @@ public class HikvisionCall { * @param project * @param carInfo */ - public void reservationCar(Project project, CarInfo carInfo) { + public void ifReservationCar(Project project, CarInfo carInfo) { try { + //删除预约车辆 + deleteReservationCarInfo(carInfo, project); + //临时车辆预约 if (Objects.equals(carInfo.getCarModuleType(), 2)) { - final String ARTEMIS_PATH = "/artemis"; - final String path = ARTEMIS_PATH + "/api/pms/v2/parkingSpace/reservations/addition"; - String host = "https://" + project.getArtemisConfigHost(); - ParkReservation parkReservation = getParkReservation(project, carInfo); - if (parkReservation != null) { - HikvisionUtil.doPost(host, path, JSON.toJSONString(parkReservation), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - } - } else { - //删除预约车辆 - deleteReservationCarInfo(carInfo, project); + reservationCarFromHttp(project, carInfo); } } catch (Exception e) { e.printStackTrace(); } } + private void reservationCarFromHttp(Project project, CarInfo carInfo) { + final String ARTEMIS_PATH = "/artemis"; + final String path = ARTEMIS_PATH + "/api/pms/v2/parkingSpace/reservations/addition"; + String host = "https://" + project.getArtemisConfigHost(); + ParkReservation parkReservation = getParkReservation(project, carInfo); + if (parkReservation != null) { + HikvisionUtil.doPost(host, path, JSON.toJSONString(parkReservation), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + } + } + private ParkReservation getParkReservation(Project project, CarInfo carInfo) { - JSONArray parkList = getParkList(project); - if (parkList != null && parkList.size() > 0) { - JSONObject jo = parkList.getJSONObject(0); - String parkIndexCode = jo.getString("parkIndexCode"); + String parkIndexCode = getProjectParkCode(project); + if (StringUtils.isNotBlank(parkIndexCode)) { WorkerInfo workerInfo = workerInfoMapper.selectById(carInfo.getDriverWorkerId()); ParkReservation parkReservation = new ParkReservation(); parkReservation.setParkSyscode(parkIndexCode); @@ -1163,6 +1254,23 @@ public class HikvisionCall { return null; } + /** + * 获取项目名称的停车场的parkIndexCode + * + * @param project + * @return + */ + public String getProjectParkCode(Project project) { + JSONArray parkList = getParkList(project); + if (parkList != null && parkList.size() > 0) { + JSONObject jo = parkList.getJSONObject(0); + if (Objects.equals(jo.getString("parkName"), project.getProjectName())) { + return jo.getString("parkIndexCode"); + } + } + return null; + } + public static void main(String[] args) { System.out.println(DateUtil.format(new Date(), "yyyy-MM-dd'T'HH:mm:ss+'Z'")); } @@ -1200,4 +1308,40 @@ public class HikvisionCall { }); return fileName; } + + /** + * 车辆群组管理 + * + * @param project + * @param operation 绑定操作类型,1绑定、2解绑 + * @param categoryCode 车辆分类标识 + * @param vehicleIds + */ + public void carCategoryBind(Project project, Integer operation, String categoryCode, String vehicleIds) { + if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { + return; + } + final String ARTEMIS_PATH = "/artemis"; + final String path = ARTEMIS_PATH + "/api/pms/v1/car/categoryBind"; + String host = "https://" + project.getArtemisConfigHost(); + JSONObject jo = new JSONObject(); + jo.put("vehicleIds", vehicleIds); + jo.put("operation", operation); + jo.put("categoryCode", categoryCode); + HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + } + + /** + * 查询车辆分类 + */ + public JSONArray categorySearch(Project project) { + final String ARTEMIS_PATH = "/artemis"; + final String path = ARTEMIS_PATH + "/api/pms/v1/car/category/search"; + String host = "https://" + project.getArtemisConfigHost(); + JSONObject jo = new JSONObject(); + String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + return HikvisionUtil.getJSONArrayData(rs); + } + + }