diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java index 75363a3cf..0f0ec344c 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java @@ -92,7 +92,7 @@ public class AsyncHikvision { @Async public void addCarInfoForHikvision(CarInfo carInfo) { try { - hikvisionCall.addCarInfoFromHttp(carInfo); + hikvisionCall.addCarInfoFromHikvision(carInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForCar(carInfo, e, "添加"); @@ -109,9 +109,9 @@ public class AsyncHikvision { } @Async - public void editCarInfoForHikvision(CarInfo carInfo) { + public void editCarInfoForHikvision(CarInfo carInfo, CarInfo old) { try { - hikvisionCall.editCarInfoForHikvision(carInfo); + hikvisionCall.editCarInfoForHikvision(carInfo, old); } catch (Exception e) { log.error("海康:", e); sendNoticeForCar(carInfo, e, "编辑"); diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index 0dc056631..71cca9c32 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -1005,27 +1005,34 @@ public class HikvisionCall { * * @param carInfo */ - public void addCarInfoFromHttp(CarInfo carInfo) throws Exception { + public void addCarInfoFromHikvision(CarInfo carInfo) throws Exception { 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()), carInfo); - } + addFixedCar(carInfo, project); + } else if (Objects.equals(carInfo.getCarModuleType(), 2)) { + reservationCar(project, carInfo); } - - ifReservationCar(project, carInfo); } - private void addCarInfoFromHttp(CarInfo carInfo, Project project) throws Exception { + private void addFixedCar(CarInfo carInfo, Project project) throws Exception { + //固定车 + addCarInfoFromHikvision(carInfo, project); + + //绑定固定的群组 + JSONArray ja = categorySearch(project); + String categoryCode = getFixedCarGroupName(ja); + if (StringUtils.isBlank(categoryCode)) { + throw new OpenAlertException("获取固定车的categoryCode失败"); + } + if (StringUtils.isNotBlank(categoryCode)) { + carCategoryBindOrNot(project, 1, categoryCode, String.valueOf(carInfo.getId()), carInfo); + } + } + + private void addCarInfoFromHikvision(CarInfo carInfo, Project project) throws Exception { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v1/vehicle/batch/add"; String host = "https://" + project.getArtemisConfigHost(); @@ -1149,35 +1156,16 @@ public class HikvisionCall { * 编辑车辆 * * @param carInfo + * @param old */ - public void editCarInfoForHikvision(CarInfo carInfo) throws Exception { + public void editCarInfoForHikvision(CarInfo carInfo, CarInfo old) throws Exception { 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)) { - //固定车,需要添加群组 - String rs = getCarInfoListFromHttp(carInfo.getCarNumber(), project); - JSONObject dJo = HikvisionUtil.getJSONObjectData(rs); - if (dJo != null) { - Integer total = dJo.getInteger("total"); - if (total > 0) { - editCarInfoFromHttp(carInfo, project); - } else { - addCarInfoFromHttp(carInfo, project); - } - } - - //绑定车辆群组 - ifBindGroup(project, 1, carInfo); - } else if (Objects.equals(carInfo.getCarModuleType(), 2)) { - //解绑车辆群组 - ifBindGroup(project, 2, carInfo); - - deleteCarInfoForHikvision(carInfo, project); - } - //预约车辆 - ifReservationCar(project, carInfo); + //先删除再新增 + deleteCarInfoForHikvision(old); + addCarInfoFromHikvision(carInfo); } private void editCarInfoFromHttp(CarInfo carInfo, Project project) throws Exception { @@ -1189,12 +1177,13 @@ public class HikvisionCall { sendNoticeForCarInfo("更新车辆白名单到海康isc", rs, carInfo); } - private void ifBindGroup(Project project, int operation, CarInfo carInfo) throws Exception { + private void bindCarOrNot(Project project, int operation, CarInfo carInfo) throws Exception { JSONArray ja = categorySearch(project); String categoryCode = getFixedCarGroupName(ja); if (StringUtils.isBlank(categoryCode)) { - carCategoryBind(project, operation, categoryCode, String.valueOf(carInfo.getId()), carInfo); + throw new OpenAlertException("获取固定车的categoryCode失败"); } + carCategoryBindOrNot(project, operation, categoryCode, String.valueOf(carInfo.getId()), carInfo); } /** @@ -1225,8 +1214,8 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } + bindCarOrNot(project, 2, carInfo); deleteCarInfoForHikvision(carInfo, project); - deleteReservationCarInfo(carInfo, project); } @@ -1260,6 +1249,12 @@ public class HikvisionCall { JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("reserveOrderNo", reserveOrderNo); String rs = HikvisionUtil.doPost(host, path, jsonObject1.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + JSONObject rsJo = JSON.parseObject(rs); + String code = rsJo.getString("code"); + if (Objects.equals(code, "0x02e33900")) { + //reservation record not existed or overdued + return; + } sendNoticeForCarInfo("取消车位预约到海康isc", rs, carInfo); } } @@ -1642,14 +1637,11 @@ public class HikvisionCall { * @param project * @param carInfo */ - public void ifReservationCar(Project project, CarInfo carInfo) throws Exception { + public void reservationCar(Project project, CarInfo carInfo) throws Exception { //删除预约车辆 deleteReservationCarInfo(carInfo, project); - //临时车辆预约 - if (Objects.equals(carInfo.getCarModuleType(), 2)) { - reservationCarFromHttp(project, carInfo); - } + reservationCarFromHttp(project, carInfo); } private void reservationCarFromHttp(Project project, CarInfo carInfo) throws Exception { @@ -1743,7 +1735,7 @@ public class HikvisionCall { * @param vehicleIds * @param carInfo */ - public void carCategoryBind(Project project, Integer operation, String categoryCode, String vehicleIds, CarInfo carInfo) throws Exception { + public void carCategoryBindOrNot(Project project, Integer operation, String categoryCode, String vehicleIds, CarInfo carInfo) throws Exception { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } @@ -1756,9 +1748,9 @@ public class HikvisionCall { jo.put("categoryCode", categoryCode); String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); if (Objects.equals(operation, 1)) { - sendNoticeForCarInfo("绑定固定车辆群组到海康isc", rs, carInfo); + sendNoticeForCarInfo("绑定" + FIXED_CAR_GROUP_NAME + "到海康isc", rs, carInfo); } else if (Objects.equals(operation, 2)) { - sendNoticeForCarInfo("解绑固定车辆群组到海康isc", rs, carInfo); + sendNoticeForCarInfo("解绑" + FIXED_CAR_GROUP_NAME + "到海康isc", rs, carInfo); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java index aac5ec5a4..89253efd6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java @@ -105,10 +105,11 @@ public class CarInfoServiceImpl extends ServiceImpl impl if (count > 0) { throw new OpenAlertException(MessageUtil.get("carNumberExistErr")); } + CarInfo old = carInfoMapper.selectById(carInfo.getId()); carInfoMapper.updateById(carInfo); //同步海康 - asyncHikvision.editCarInfoForHikvision(carInfo); + asyncHikvision.editCarInfoForHikvision(carInfo, old); } @Override