From 35580c78f44eb7a501181364fa2fe6bf5db5df8f Mon Sep 17 00:00:00 2001 From: GUO <1923636941@qq.com> Date: Sun, 19 May 2024 21:55:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E9=A1=B5=E5=BE=AA=E7=8E=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98bug=E8=A7=A3=E5=86=B3=E5=92=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/call/HikvisionCall.java | 97 ++++++++++--------- .../zhgd/xmgl/config/SafetyHatWSClient.java | 5 +- 2 files changed, 56 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index b776b67b2..228f01479 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -74,6 +74,7 @@ import java.util.concurrent.CompletableFuture; @RequestMapping("/xmgl/hikvision") public class HikvisionCall { private static final String FIXED_CAR_GROUP_NAME = "业主车辆"; + static String pageNo = "pageNo"; @Autowired XzHikvisionSyncServiceImpl xzHikvisionSyncService; @Lazy @@ -320,8 +321,17 @@ public class HikvisionCall { @Async("saveEventCallbackAiAsync") public void saveEventCallbackAiAsync(JSONObject dataEvent, String srcName, String eventType, String imageUrl, String deviceID, AiAnalyseHardWareRecord dev) { String happenTime = dataEvent.getString("happenTime"); + String createTime = DateUtil.formatDateTime(DateUtil.parse(happenTime)); + Integer count = aiAnalyseHardWareAlarmRecordMapper.selectCount(new LambdaQueryWrapper() + .eq(AiAnalyseHardWareAlarmRecord::getCreateTime, createTime) + .eq(AiAnalyseHardWareAlarmRecord::getHardwareId, deviceID) + ); + if (count > 0) { + log.info("重复的ai预警数据不保存,deviceID:{},createTime:{}", deviceID, createTime); + return; + } AiAnalyseHardWareAlarmRecord aiAnalyseHardWareAlarmRecord = new AiAnalyseHardWareAlarmRecord(); - aiAnalyseHardWareAlarmRecord.setCreateTime(DateUtil.formatDateTime(DateUtil.parse(happenTime))); + aiAnalyseHardWareAlarmRecord.setCreateTime(createTime); aiAnalyseHardWareAlarmRecord.setAlarmType(Integer.valueOf(eventType)); aiAnalyseHardWareAlarmRecord.setHardwareId(deviceID); aiAnalyseHardWareAlarmRecord.setHardwareName(dev.getHardwareName()); @@ -340,6 +350,14 @@ public class HikvisionCall { carPassRecord.setCarNumber(plateNo); carPassRecord.setType(getPassType(carCamera.getPassType())); carPassRecord.setPassTime(time); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(CarPassRecord::getCarNumber, plateNo) + .eq(CarPassRecord::getPassTime, time); + Integer count = carPassRecordMapper.selectCount(queryWrapper); + if (count != 0) { + log.info("重复的车辆通行的数据不保存,plateNo:{},time:{}", plateNo, time); + return; + } try { //车牌 JSONObject picUrlJo = dataJo.getJSONObject("picUrl"); @@ -371,15 +389,7 @@ public class HikvisionCall { } else { carPassRecord.setIsOpen(0); } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(CarPassRecord::getCarNumber, plateNo) - .eq(CarPassRecord::getPassTime, time); - Integer count = carPassRecordMapper.selectCount(queryWrapper); - if (count != 0) { - carPassRecordMapper.update(carPassRecord, queryWrapper); - } else { - carPassRecordMapper.insert(carPassRecord); - } + carPassRecordMapper.insert(carPassRecord); //车进场后,意味着绑定的司机走过了人脸机,统计为在场人员。车辆出场后,在场人员随之减少 if (carInfos.size() != 0 && carInfos.get(0) != null && StringUtils.isNotEmpty(carInfos.get(0).getDriverWorkerId())) { log.info("保存车辆绑定的司机的通行数据,车牌号:{}", carInfos.get(0).getCarNumber()); @@ -397,6 +407,14 @@ public class HikvisionCall { map.put("passType", 2); map.put("projectCode", workerInfo.getProjectSn()); map.put("devCode", srcIndex); + Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper() + .eq(WorkerAttendance::getCreateTime, time) + .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) + ); + if (count != 0) { + log.info("重复的人员通行的数据不保存,idCard:{},time:{}", idCard, time); + return; + } try { String extEventPictureURL = dataJo.getString("ExtEventPictureURL"); String svrIndexCode = dataJo.getString("svrIndexCode"); @@ -457,12 +475,13 @@ public class HikvisionCall { .eq(UfaceDev::getProjectSn, project.getProjectSn())); for (UfaceDev ufaceDev : ufaceDevs) { param.put("doorIndexCodes", Collections.singletonList(ufaceDev.getDevSn())); - param.put("pageNo", 1); + param.put(pageNo, 0); param.put("pageSize", 1000); Integer total = 0; JSONArray listJa = new JSONArray(); do { String rs = null; + param.put("pageNo", param.getIntValue("pageNo") + 1); try { rs = getDoorEventsForHttp(project, param); } catch (Exception e) { @@ -497,7 +516,14 @@ public class HikvisionCall { map.put("passType", 2); map.put("projectCode", workerInfo.getProjectSn()); map.put("devCode", doorIndexCode); - + Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper() + .eq(WorkerAttendance::getCreateTime, time) + .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) + ); + if (count != 0) { + log.info("重复的人员通行的数据不保存,idCard:{},time:{}", workerInfo.getIdCard(), time); + return; + } try { HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq(); rq.setPicUri(picUri); @@ -506,27 +532,11 @@ public class HikvisionCall { } catch (Exception e) { log.error("主动获取人脸图片失败>", e); } - try { - List workerAttendanceList = workerAttendanceMapper.selectList(new LambdaQueryWrapper() - .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) - .eq(WorkerAttendance::getCreateTime, time) - ); - if (CollUtil.isNotEmpty(workerAttendanceList)) { - for (WorkerAttendance workerAttendance : workerAttendanceList) { - workerAttendance.setImageUrl(MapUtils.getString(map, "faceUrl")); - workerAttendanceMapper.updateById(workerAttendance); - } - } else { - workerAttendanceService.saveExternalPassRecord(map); - } - } catch (Exception e) { - log.error("主动保存人员失败,time:{},>", time, e); - } + workerAttendanceService.saveExternalPassRecord(map); } - param.put("pageNo", param.getIntValue("pageNo") + 1); } } - } while (total > 0 && listJa.size() > 0); + } while (total > param.getInteger(pageNo) * 1000); } try { workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn); @@ -570,7 +580,6 @@ public class HikvisionCall { @Async("getCrossRecords") public void getCrossRecordsAsync(String startTime, String endTime, JSONObject param, List projects) { for (Project project : projects) { - param.put("pageNo", 1); String projectParkCode = null; try { projectParkCode = getProjectParkCode(project); @@ -584,8 +593,10 @@ public class HikvisionCall { param.put("parkSyscode", projectParkCode); Integer total = 0; JSONArray listJa = new JSONArray(); + param.put(pageNo, 0); do { String rs = null; + param.put(pageNo, param.getIntValue(pageNo) + 1); try { rs = getCrossRecordsForHttp(project, param); } catch (Exception e) { @@ -616,7 +627,14 @@ public class HikvisionCall { entity.setCarNumber(plateNo); entity.setType(getPassType(carCamera.getPassType())); entity.setPassTime(time); - + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(CarPassRecord::getCarNumber, plateNo) + .eq(CarPassRecord::getPassTime, time); + Integer count = carPassRecordMapper.selectCount(queryWrapper); + if (count != 0) { + log.info("重复的车辆通行的数据不保存,plateNo:{},time:{}", plateNo, time); + return; + } try { //车牌 entity.setImageUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(aswSyscode, plateNoPicUri), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()))); @@ -640,22 +658,11 @@ public class HikvisionCall { } else { entity.setIsOpen(0); } - Integer count1 = carPassRecordMapper.selectCount(new LambdaQueryWrapper() - .eq(CarPassRecord::getCarNumber, plateNo) - .eq(CarPassRecord::getPassTime, time) - ); - if (count1 != 0) { - carPassRecordMapper.update(entity, new LambdaQueryWrapper() - .eq(CarPassRecord::getCarNumber, plateNo) - .eq(CarPassRecord::getPassTime, time)); - } else { - carPassRecordMapper.insert(entity); - } + carPassRecordMapper.insert(entity); } - param.put("pageNo", param.getIntValue("pageNo") + 1); } } - } while (total > 0 && listJa.size() > 0); + } while (total > param.getInteger(pageNo) * 1000); } log.info("服务挂了主动获取车辆事件的车辆通行记录执行完成,startTime:{},endTime:{}", startTime, endTime); } diff --git a/src/main/java/com/zhgd/xmgl/config/SafetyHatWSClient.java b/src/main/java/com/zhgd/xmgl/config/SafetyHatWSClient.java index e7de362f4..158330ba6 100644 --- a/src/main/java/com/zhgd/xmgl/config/SafetyHatWSClient.java +++ b/src/main/java/com/zhgd/xmgl/config/SafetyHatWSClient.java @@ -133,7 +133,10 @@ public class SafetyHatWSClient { try { Project project = SpringContextUtils.getBean(ProjectMapper.class).selectOne(new LambdaQueryWrapper().eq(Project::getHelmetUser, id)); if (project != null) { - List devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper().eq(SafetyHatDev::getProjectSn, project.getProjectSn())); + List devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper() + .eq(SafetyHatDev::getProjectSn, project.getProjectSn()) + .eq(SafetyHatDev::getOnline, 1) + ); if (CollUtil.isNotEmpty(devList)) { for (SafetyHatDev dev : devList) { dev.setOnline(0);