From 9bc1a5870ad0f3ac62bbc5c72e871c36d2ff7623 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 5 Jul 2024 19:31:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E8=BE=86bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/HikvisionReservationCarInfo.java | 4 +- .../com/zhgd/xmgl/call/HikvisionCall.java | 2 +- .../XzHikvisionCompareDataServiceImpl.java | 2 +- .../com/zhgd/xmgl/task/HikvisionTask.java | 8 ++- .../com/zhgd/xmgl/util/HikvisionUtil.java | 65 ++++++++++++++++--- 5 files changed, 66 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/base/HikvisionReservationCarInfo.java b/src/main/java/com/zhgd/xmgl/base/HikvisionReservationCarInfo.java index f0b766965..4f8af4211 100644 --- a/src/main/java/com/zhgd/xmgl/base/HikvisionReservationCarInfo.java +++ b/src/main/java/com/zhgd/xmgl/base/HikvisionReservationCarInfo.java @@ -11,7 +11,7 @@ public class HikvisionReservationCarInfo { @JsonProperty("plateNo") private String plateNo; @JsonProperty("resvState") - private Long resvState; + private Integer resvState; @JsonProperty("resvWay") private Long resvWay; @JsonProperty("allowTimes") @@ -23,7 +23,7 @@ public class HikvisionReservationCarInfo { @JsonProperty("endTime") private String endTime; @JsonProperty("pageNo") - private Long pageNo; + private Integer pageNo; @JsonProperty("pageSize") private Long pageSize; diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index 55707cbd6..b0f2dcf8b 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -2062,7 +2062,7 @@ public class HikvisionCall { final String artemisPath = "/artemis"; final String path = artemisPath + "/api/pms/v1/parkingSpace/reservations/deletion"; String host = "https://" + project.getArtemisConfigHost(); - JSONArray reservationCarInfoList = HikvisionUtil.getReservationCarInfoDataList(carInfo.getCarNumber(), project); + JSONArray reservationCarInfoList = HikvisionUtil.getIscActiveReservationCarList(carInfo.getCarNumber(), project); if (CollUtil.isNotEmpty(reservationCarInfoList)) { for (int i = 0; i < reservationCarInfoList.size(); i++) { JSONObject jsonObject = reservationCarInfoList.getJSONObject(i); diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionCompareDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionCompareDataServiceImpl.java index 430a8766e..462f6d274 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionCompareDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionCompareDataServiceImpl.java @@ -392,7 +392,7 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl enterpriseInfos = BeanUtil.copyToList(enterpriseInfoService.getEnterpriseInfoList(new MapBuilder().put(Cts.PROJECT_SN, project.getProjectSn()).build()), EnterpriseInfo.class); + log.info("数据校验我们平台的企业列表:{}", JSON.toJSONString(enterpriseInfos)); JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo); JSONArray listJa = dataJo.getJSONArray("list"); if (CollUtil.isEmpty(listJa)) { @@ -251,8 +253,10 @@ public class HikvisionTask { JSONObject rtJo = HikvisionUtil.getSubOrgListByParentOrg(project, param); List teamList = teamInfoService.getProjectTeamList(new MapBuilder() .put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseId).build()); + log.info("数据校验我们平台的班组列表:{}", JSON.toJSONString(teamList)); List departmentInfoList = departmentInfoMapper.getDepartmentInfoList(new MapBuilder() .put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseId).build()); + log.info("数据校验我们平台的部门列表:{}", JSON.toJSONString(departmentInfoList)); JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo); JSONArray listJa = dataJo.getJSONArray("list"); if (CollUtil.isEmpty(listJa)) { @@ -323,6 +327,7 @@ public class HikvisionTask { .put(type == 2, Cts.DEPARTMENT_ID, orgIndex) .build()); List workerInfoList = workerPage.getRecords(); + log.info("数据校验我们平台的人员列表:{}", JSON.toJSONString(workerInfoList)); JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo); JSONArray listJa = dataJo.getJSONArray("list"); if (CollUtil.isEmpty(listJa)) { @@ -395,12 +400,13 @@ public class HikvisionTask { public void compareHikvisionForReservationCar(Project project) throws Exception { JSONObject param = new JSONObject(); HikvisionUtil.addPageParamIfAbsent(param); - JSONArray listJa = HikvisionUtil.getReservationCarInfoDataList(null, project); + JSONArray listJa = HikvisionUtil.getIscActiveReservationCarList(null, project); List carInfoList = carInfoService.selectCarList(new MapBuilder() .put(Cts.PROJECT_SN, project.getProjectSn()) .put(Cts.RESERVATION_TYPE, 1) .put("isBlack", 0) .build()); + log.info("数据校验我们平台的临时车列表:{}", JSON.toJSONString(carInfoList)); compareAndAddData(project, listJa, carInfoList, 2); } diff --git a/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java b/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java index 57e1de908..a6f8a2c42 100644 --- a/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java @@ -1,5 +1,7 @@ package com.zhgd.xmgl.util; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -20,6 +22,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; /** * 海康接口 @@ -358,24 +364,61 @@ public class HikvisionUtil { * * @param carNumber * @param project + * @param pageNo + * @param resvState */ - public static JSONObject getReservationCarInfoList(String carNumber, Project project) throws Exception { + public static JSONObject getReservationCarInfoList(String carNumber, Project project, int pageNo, int resvState) throws Exception { final String artemisPath = "/artemis"; final String path = artemisPath + "/api/pms/v2/reserveRecord/page"; String host = "https://" + project.getArtemisConfigHost(); - HikvisionReservationCarInfo info = getHikvisionReservationCarInfoObj(carNumber, project); + HikvisionReservationCarInfo info = getHikvisionReservationCarInfoObj(carNumber, project, pageNo, resvState); return doPostRtObj(host, path, JSON.toJSONString(info), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); } /** - * 查询预约记录v2 + * 获取isc中预约状态为:0已预约3已进场并且车辆在有效期内的预约车,查询预约记录v2 * * @param carNumber * @param project */ - public static JSONArray getReservationCarInfoDataList(String carNumber, Project project) throws Exception { - JSONObject jo = getReservationCarInfoList(carNumber, project); - return getJsonObjectData(jo).getJSONArray("list"); + public static JSONArray getIscActiveReservationCarList(String carNumber, Project project) throws Exception { + long total = 0; + int pageNo = 0; + JSONArray rt = new JSONArray(); + do { + pageNo++; + JSONObject rsJo = getReservationCarInfoList(carNumber, project, pageNo, 0); + JSONObject dataJo = getJsonObjectData(rsJo); + total = dataJo.getInteger("total"); + if (CollUtil.isNotEmpty(dataJo.getJSONArray("list"))) { + rt.addAll(dataJo.getJSONArray("list")); + } + } while (total > pageNo * 1000L); + total = 0; + pageNo = 0; + do { + pageNo++; + JSONObject rsJo = getReservationCarInfoList(carNumber, project, pageNo, 3); + JSONObject dataJo = getJsonObjectData(rsJo); + total = dataJo.getInteger("total"); + if (CollUtil.isNotEmpty(dataJo.getJSONArray("list"))) { + rt.addAll(dataJo.getJSONArray("list")); + } + } while (total > pageNo * 1000L); + + Date date = new Date(); + //取有效时间内的车辆并去重车牌号 + List list = rt.stream().filter(o -> { + String startTime = ((JSONObject) o).getString("startTime"); + String endTime = ((JSONObject) o).getString("endTime"); + return DateUtil.compare(DateUtil.parse(endTime), date) >= 0; + }).filter(distinctByKey(o1 -> ((JSONObject) o1).getString("plateNo"))).collect(Collectors.toList()); + return JSONArray.parseArray(JSON.toJSONString(list)); + } + + private static Predicate distinctByKey(Function keyExtractor) { + Map seen = new ConcurrentHashMap<>(); + return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } /** @@ -383,22 +426,24 @@ public class HikvisionUtil { * * @param carNumber * @param project + * @param pageNo + * @param resvState * @return * @throws Exception */ - private static HikvisionReservationCarInfo getHikvisionReservationCarInfoObj(String carNumber, Project project) throws Exception { + private static HikvisionReservationCarInfo getHikvisionReservationCarInfoObj(String carNumber, Project project, int pageNo, int resvState) throws Exception { String projectParkCode = HikvisionUtil.getProjectParkCode(project); HikvisionReservationCarInfo hikvisionReservationCarInfo = new HikvisionReservationCarInfo(); hikvisionReservationCarInfo.setParkSyscode(projectParkCode); hikvisionReservationCarInfo.setPlateNo(carNumber); - hikvisionReservationCarInfo.setResvState(0L); + hikvisionReservationCarInfo.setResvState(resvState); //hikvisionReservationCarInfo.setResvWay(); //hikvisionReservationCarInfo.setAllowTimes(); //hikvisionReservationCarInfo.setIsCharge(); //hikvisionReservationCarInfo.setStartTime(); //hikvisionReservationCarInfo.setEndTime(); - hikvisionReservationCarInfo.setPageNo(1L); - hikvisionReservationCarInfo.setPageSize(999L); + hikvisionReservationCarInfo.setPageNo(pageNo); + hikvisionReservationCarInfo.setPageSize(1000L); return hikvisionReservationCarInfo; }