分页循环问题bug解决和优化

This commit is contained in:
GUO 2024-05-19 21:55:26 +08:00
parent 3607292880
commit 35580c78f4
2 changed files with 56 additions and 46 deletions

View File

@ -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<AiAnalyseHardWareAlarmRecord>()
.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<CarPassRecord> queryWrapper = new LambdaQueryWrapper<CarPassRecord>()
.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<CarPassRecord> queryWrapper = new LambdaQueryWrapper<CarPassRecord>()
.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<WorkerAttendance>()
.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<WorkerAttendance>()
.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<WorkerAttendance> workerAttendanceList = workerAttendanceMapper.selectList(new LambdaQueryWrapper<WorkerAttendance>()
.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<Project> 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<CarPassRecord> queryWrapper = new LambdaQueryWrapper<CarPassRecord>()
.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<CarPassRecord>()
.eq(CarPassRecord::getCarNumber, plateNo)
.eq(CarPassRecord::getPassTime, time)
);
if (count1 != 0) {
carPassRecordMapper.update(entity, new LambdaQueryWrapper<CarPassRecord>()
.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);
}

View File

@ -133,7 +133,10 @@ public class SafetyHatWSClient {
try {
Project project = SpringContextUtils.getBean(ProjectMapper.class).selectOne(new LambdaQueryWrapper<Project>().eq(Project::getHelmetUser, id));
if (project != null) {
List<SafetyHatDev> devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper<SafetyHatDev>().eq(SafetyHatDev::getProjectSn, project.getProjectSn()));
List<SafetyHatDev> devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getProjectSn, project.getProjectSn())
.eq(SafetyHatDev::getOnline, 1)
);
if (CollUtil.isNotEmpty(devList)) {
for (SafetyHatDev dev : devList) {
dev.setOnline(0);