ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
New file @@ -0,0 +1,16 @@ package com.ycl.platform.domain.param.HK; import lombok.Data; @Data public class ScoreParam extends BaseParam{ //yyyy-MM-dd private String startDate; private String endDate; //重点点位标注 非必填 1重点 0全量 默认全量 private Integer focusFlag; //人脸业务树编码 private String faceTree; //车辆业务树编码 private String carTree; } ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
@@ -35,4 +35,9 @@ * 考核标签1/2 省厅/公安部 */ private Integer examineTag; /** * 数据类型1/2 累计数据/每日数据 */ private Integer category; } ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKScoreResult.java
New file @@ -0,0 +1,32 @@ package com.ycl.platform.domain.result.HK; import com.ycl.platform.domain.result.BaseResult; import lombok.Data; import java.util.Date; import java.util.List; //考核成绩 @Data public class HKScoreResult extends BaseResult { private List<HkScore> list; /** * 考核成绩 */ @Data public static class HkScore { //区域名 private String areaName; //区域编码 private String areaCode; //排名 private Integer ranking; //总分 private String totalScore; //focusFlag为0涉及到的全量指标 private String downCarDataUploadScoreString; private Date dCreateTime; } } ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java
@@ -108,31 +108,31 @@ public static MonitorQualifyResultVO getVO(MonitorQualifyResult result) { MonitorQualifyResultVO vo = new MonitorQualifyResultVO(); vo.setCivilCode(result.getCivilCode().getShowValue()); vo.setCivilCodeError(result.getCivilCode().getError()); vo.setIp(result.getIp().getShowValue()); vo.setIpError(result.getIp().getError()); vo.setIntegratedDevice(result.getIntegrated_device().getShowValue()); vo.setIntegratedDeviceError(result.getIntegrated_device().getError()); vo.setJkdwlx(result.getJkdwlx().getShowValue()); vo.setJkdwlxError(result.getJkdwlx().getError()); vo.setLatitude(result.getLatitude().getShowValue()); vo.setLatitudeError(result.getLatitude().getError()); vo.setLongitude(result.getLongitude().getShowValue()); vo.setLongitudeError(result.getLongitude().getError()); vo.setMacdz(result.getMacdz().getShowValue()); vo.setMacdzError(result.getMacdz().getError()); vo.setName(result.getName().getShowValue()); vo.setNameError(result.getName().getError()); vo.setSbzt(result.getSbzt().getShowValue()); vo.setSbztError(result.getSbzt().getError()); vo.setSerialNumber(result.getSerialNumber().getShowValue()); vo.setSerialNumberError(result.getSerialNumber().getError()); vo.setSxjcjqy(result.getSxjcjqy().getShowValue()); vo.setSxjcjqyError(result.getSxjcjqy().getError()); vo.setSxjgnlx(result.getSxjgnlx().getShowValue()); vo.setSxjgnlxError(result.getSxjgnlx().getError()); if (result.getNewDevice()) { vo.setCivilCode(result.getCivilCode()!=null?result.getCivilCode().getShowValue():""); vo.setCivilCodeError(result.getCivilCode()!=null?result.getCivilCode().getError():Boolean.FALSE); vo.setIp(result.getIp()!=null?result.getIp().getShowValue():""); vo.setIpError(result.getIp()!=null?result.getIp().getError():Boolean.FALSE); vo.setIntegratedDevice(result.getIntegrated_device()!=null?result.getIntegrated_device().getShowValue():""); vo.setIntegratedDeviceError(result.getIntegrated_device()!=null?result.getIntegrated_device().getError():Boolean.FALSE); vo.setJkdwlx(result.getJkdwlx()!=null?result.getJkdwlx().getShowValue():""); vo.setJkdwlxError(result.getJkdwlx()!=null?result.getJkdwlx().getError():Boolean.FALSE); vo.setLatitude(result.getLatitude()!=null?result.getLatitude().getShowValue():""); vo.setLatitudeError(result.getLatitude()!=null?result.getLatitude().getError():Boolean.FALSE); vo.setLongitude(result.getLongitude()!=null?result.getLongitude().getShowValue():""); vo.setLongitudeError(result.getLongitude()!=null?result.getLongitude().getError():Boolean.FALSE); vo.setMacdz(result.getMacdz()!=null?result.getMacdz().getShowValue():""); vo.setMacdzError(result.getMacdz()!=null?result.getMacdz().getError():Boolean.FALSE); vo.setName(result.getName()!=null?result.getName().getShowValue():""); vo.setNameError(result.getName()!=null?result.getName().getError():Boolean.FALSE); vo.setSbzt(result.getSbzt()!=null?result.getSbzt().getShowValue():""); vo.setSbztError(result.getSbzt()!=null?result.getSbzt().getError():Boolean.FALSE); vo.setSerialNumber(result.getSerialNumber()!=null?result.getSerialNumber().getShowValue():""); vo.setSerialNumberError(result.getSerialNumber()!=null?result.getSerialNumber().getError():Boolean.FALSE); vo.setSxjcjqy(result.getSxjcjqy()!=null?result.getSxjcjqy().getShowValue():""); vo.setSxjcjqyError(result.getSxjcjqy()!=null?result.getSxjcjqy().getError():Boolean.FALSE); vo.setSxjgnlx(result.getSxjgnlx()!=null?result.getSxjgnlx().getShowValue():""); vo.setSxjgnlxError(result.getSxjgnlx()!=null?result.getSxjgnlx().getError():Boolean.FALSE); if (result.getNewDevice()!=null && result.getNewDevice()) { vo.setNewDevice("是"); } else { vo.setNewDevice("否"); ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java
@@ -58,6 +58,7 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date setTime; /** * osd通道名 */ @@ -91,7 +92,7 @@ /** * osdTimeCorrect时间是否正确 */ private String osdTimeCorrectText; private Boolean osdTimeError; /** * osd通道名是否正确 1正确 0未知 -1错 @@ -99,9 +100,9 @@ private Integer osdNameCorrect; /** * osd通道名是否正确 1正确 0未知 -1错 * osd通道名是否正确 */ private String osdNameCorrectText; private Boolean osdNameError; /** * osd省是否正确 @@ -111,7 +112,7 @@ /** * osd省是否正确 */ private String osdProvinceCorrectText; private Boolean osdProvinceError; /** * osd市是否正确 @@ -121,7 +122,7 @@ /** * osd市是否正确 */ private String osdCityCorrectText; private Boolean osdCityError; /** * osd区是否正确 @@ -131,7 +132,7 @@ /** * osd区是否正确 */ private String osdPartCorrectText; private Boolean osdPartError; /** * osd左下角是否正确 */ @@ -150,26 +151,21 @@ return ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect()); } public static void getText(OsdCheckResult result) { if(ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect())) result.setOsdTimeCorrectText("正确"); else if(ApiConstants.OSD_Error.equals(result.getOsdTimeCorrect())) result.setOsdTimeCorrectText("错误"); else { result.setOsdTimeCorrectText("未知"); } public static void getError(OsdCheckResult result) { if(ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect())) result.setOsdTimeError(Boolean.FALSE); else {result.setOsdTimeError(Boolean.TRUE); } if(ApiConstants.OSD_Correct.equals(result.getOsdNameCorrect())) result.setOsdNameCorrectText("正确"); else if(ApiConstants.OSD_Error.equals(result.getOsdNameCorrect())) result.setOsdNameCorrectText("错误"); else { result.setOsdNameCorrectText("未知"); } if(ApiConstants.OSD_Correct.equals(result.getOsdNameCorrect())) result.setOsdNameError(Boolean.FALSE); else { result.setOsdNameError(Boolean.TRUE); } if(ApiConstants.OSD_Correct.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceCorrectText("正确"); else if(ApiConstants.OSD_Error.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceCorrectText("错误"); else { result.setOsdProvinceCorrectText("未知"); } if(ApiConstants.OSD_Correct.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceError(Boolean.FALSE); else { result.setOsdProvinceError(Boolean.TRUE); } if(ApiConstants.OSD_Correct.equals(result.getOsdCityCorrect())) result.setOsdCityCorrectText("正确"); else if(ApiConstants.OSD_Error.equals(result.getOsdCityCorrect())) result.setOsdCityCorrectText("错误"); else { result.setOsdCityCorrectText("未知"); } if(ApiConstants.OSD_Correct.equals(result.getOsdCityCorrect())) result.setOsdCityError(Boolean.FALSE); else { result.setOsdCityError(Boolean.TRUE); } if(ApiConstants.OSD_Correct.equals(result.getOsdPartCorrect())) result.setOsdPartCorrectText("正确"); else if(ApiConstants.OSD_Error.equals(result.getOsdPartCorrect())) result.setOsdPartCorrectText("错误"); else { result.setOsdPartCorrectText("未知"); } if(ApiConstants.OSD_Correct.equals(result.getOsdPartCorrect())) result.setOsdPartError(Boolean.FALSE); else { result.setOsdPartError(Boolean.TRUE); } if(DeviceType.DH.getType().equals(result.getDeviceBrand())) result.setDeviceBrandStr(DeviceType.DH.getDesc()); else if(DeviceType.HK.getType().equals(result.getDeviceBrand())) result.setDeviceBrandStr(DeviceType.HK.getDesc()); ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java
@@ -73,7 +73,7 @@ AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; //时钟准确率大于90%为合格设备 if (result.getSnapClock().getClockPercent() >= 0.9) { if (result.getSnapClock()!=null && result.getSnapClock().getClockPercent()!=null && result.getSnapClock().getClockPercent() >= 0.9) { stats.accuracySites++; } } ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java
@@ -48,7 +48,7 @@ @Override public void calculate(List<DataIntegrityMonitoringResult> list) { //获取分区域的指标数量 Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list,Boolean.FALSE); Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list, Boolean.FALSE); if (areaStatsMap == null) return; // 查询是否index表已经存在今日数据 @@ -75,13 +75,13 @@ AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; //90%及以上数据合格则此车辆卡口设备被视为抓拍数据完整 if (result.getMainNoIntegrityPercent() <= 0.1) { if (result.getMainNoIntegrityPercent() != null && result.getMainNoIntegrityPercent() <= 0.1) { stats.integritySites++; } //重点点位为六项属性完整 if (result.getImportantTag()!=null && result.getImportantTag()) { if (result.getImportantTag() != null && result.getImportantTag()) { stats.importantTotalSites++; if (result.getNoIntegrityPercent() <= 0.1) { if (result.getNoIntegrityPercent()!=null && result.getNoIntegrityPercent() <= 0.1) { stats.importantIntegritySites++; } } ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java
@@ -77,7 +77,7 @@ AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; //时钟准确率大于90%为合格设备 if (result.getSnapClock().getClockPercent() >= 0.9) { if (result.getSnapClock()!=null && result.getSnapClock().getClockPercent()!=null && result.getSnapClock().getClockPercent() >= 0.9) { stats.accuracySites++; } } ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
@@ -162,7 +162,7 @@ } /** * 视频:校时正确率 * 视频:校时正确率 (新规则已经弃用) * * @param query * @return ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -553,7 +553,7 @@ } //填充各个区县数据 for (CheckScore checkScore : dashboard) { Map<String, Object> map = new HashMap<>(); Map<String, Object> map = resultMap.get(checkScore.getDeptName()); if (CheckConstants.Rule_Category_Video.equals(checkScore.getExamineCategory())) { map.put("video", checkScore.getScore().setScale(1, RoundingMode.HALF_UP)); } else if (CheckConstants.Rule_Category_Car.equals(checkScore.getExamineCategory())) { ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -227,6 +227,7 @@ // 添加固定条件 criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*")); criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime())); criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE)); // 根据dataType动态添加条件 if (params.getDataType() == 1) { criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE)); @@ -1060,7 +1061,7 @@ MongoUtil.setPage(query, params, "checkTime"); List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class); for (OsdCheckResult osdCheckResult : resultList) { OsdCheckResult.getText(osdCheckResult); OsdCheckResult.getError(osdCheckResult); } // 统计数量 MongoDatabase database = mongoTemplate.getDb(); @@ -1182,7 +1183,7 @@ @Override public Result videoImportantPointCheckTimeAccuracy(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("deviceNo", "osdName"); Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, 3); Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, null); //下拉框标注正确查询条件 if (params.getOption() != null) { if(params.getOption()==1) { @@ -1199,7 +1200,7 @@ List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class); for (OsdCheckResult osdCheckResult : resultList) { OsdCheckResult.getText(osdCheckResult); OsdCheckResult.getError(osdCheckResult); } // 统计数量 MongoDatabase database = mongoTemplate.getDb(); ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -780,7 +780,7 @@ MongoDatabase database = mongoTemplate.getDb(); MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum"); Integer examineTag = monitorQuery.getExamineTag(); Document matchConditions = new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate)); Document matchConditions = new Document("statTime", new Document("$gte", startDate).append("$lte", endDate)); // 根据examineTag的值动态添加额外的条件 if (examineTag != null && examineTag.equals(1)) { matchConditions.append("provinceTag", true); @@ -790,7 +790,7 @@ // 构建聚合管道 List<Document> pipeline = Arrays.asList( new Document("$match", matchConditions), new Document("$group", new Document("_id", "$mongoCreateTime") new Document("$group", new Document("_id", "$statTime") .append("normalCount", new Document("$sum", new Document("$cond", Arrays.asList( new Document("$eq", Arrays.asList("$recordStatus", 1)), @@ -976,7 +976,6 @@ results.add(homecarVO); } //TODO:在线修改,需要把检测海康优云检测的结果存入mongo,mongo查点位在线 MongoCollection<Document> onlineCollection = database.getCollection("t_monitor_online"); // 构建基本的$match条件 List<Document> onlineMatch = new ArrayList<>(); @@ -1007,30 +1006,33 @@ Map<String, Object> resultMap = new HashMap<>(); //按时间排序 results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); int snapCount = 0; for (HomeCarVO vo : results) { if (vo.getSnapCount() != null) { snapCount += vo.getSnapCount(); //如果是默认或累和则进行累和以及获取基准线 if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) { int snapCount = 0; for (HomeCarVO vo : results) { if (vo.getSnapCount() != null) { snapCount += vo.getSnapCount(); } vo.setSnapCount(snapCount); } vo.setSnapCount(snapCount); //从字典获取基准线 List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); String condition; if (examineTag != null && examineTag == 1) { condition = "car_province_baseLine"; } else if (examineTag != null && examineTag == 2) { condition = "car_dept_baseLine"; } else { condition = "car_all_baseLine"; } Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); if (first.isPresent()) { SysDictData sysDictData = first.get(); resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); } } resultMap.put("list", results); //从字典获取基准线 List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); String condition; if (examineTag != null && examineTag == 1) { condition = "car_province_baseLine"; } else if (examineTag != null && examineTag == 2) { condition = "car_dept_baseLine"; } else { condition = "car_all_baseLine"; } Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); if (first.isPresent()) { SysDictData sysDictData = first.get(); resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); } return resultMap; } @@ -1115,32 +1117,35 @@ HomeFaceVO vo = findOrCreateVO(doc, results, HomeFaceVO.class); vo.setOnline(doc.getInteger("onlineCount")); } Map<String, Object> resultMap = new HashMap<>(); //按时间排序 results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); int snapCount = 0; for (HomeFaceVO vo : results) { if (vo.getSnapCount() != null) { snapCount += vo.getSnapCount(); //如果是默认或累和则进行累和以及获取基准线 if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) { int snapCount = 0; for (HomeFaceVO vo : results) { if (vo.getSnapCount() != null) { snapCount += vo.getSnapCount(); } vo.setSnapCount(snapCount); } vo.setSnapCount(snapCount); //从字典获取基准线 List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); String condition; if (examineTag != null && examineTag == 1) { condition = "face_province_baseLine"; } else if (examineTag != null && examineTag == 2) { condition = "face_dept_baseLine"; } else { condition = "face_all_baseLine"; } Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); if (first.isPresent()) { SysDictData sysDictData = first.get(); resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); } } Map<String, Object> resultMap = new HashMap<>(); resultMap.put("list", results); //从字典获取基准线 List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); String condition; if (examineTag != null && examineTag == 1) { condition = "face_province_baseLine"; } else if (examineTag != null && examineTag == 2) { condition = "face_dept_baseLine"; } else { condition = "face_all_baseLine"; } Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); if (first.isPresent()) { SysDictData sysDictData = first.get(); resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); } return resultMap; } ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
@@ -183,7 +183,7 @@ // } long checkTime = item.getCheckTime().getTime(); long osdTime = item.getSetTime().getTime(); Long timeDiff = (checkTime - osdTime) / 1000; Long timeDiff = Math.abs((checkTime - osdTime) / 1000); ywThresholdService.check(YwThreadConstants.Video_DiffTime, timeDiff, item.getDeviceNo(), ywThresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.CLOCK_SKEW.getValue()); return workOrder; }).collect(Collectors.toList()); ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -201,6 +201,7 @@ if (!CollectionUtils.isEmpty(reportNumbers)) { if (reportNumbers.contains(workOrder.getSerialNumber())) continue; } if(!WorkOrderStatusEnum.AUDITING_SUCCESS.equals(workOrder.getStatus())) continue; String errorType = workOrder.getErrorType(); //存储故障 录像或图片访问异常 (改成手动打分了) // if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) { ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -168,6 +168,8 @@ Map<String, TMonitor> map = monitorMapper.selectList(new QueryWrapper<TMonitor>().in("serial_number", numbers)) .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); Date now = new Date(); //过滤 totalResult = totalResult.stream().filter(item -> map.get(item.getExternalIndexCode()) != null).collect(Collectors.toList()); totalResult.forEach(item->{ TMonitor monitor = map.get(item.getExternalIndexCode()); item.setIp(monitor.getIp()); @@ -465,6 +467,30 @@ log.info("结束业务树数据"); } //考核成绩 public void HkScoreTask() { log.info("开始执行海康考核成绩数据"); ScoreParam param = new ScoreParam(); param.setStartDate("2024-12-06"); param.setEndDate("2024-12-06"); List<HKScoreResult> dataList = HkApiUtil.sendGetAPI(host,appKey,appSecret,"/api/third/score/get", param, HKScoreResult.class); // if (!CollectionUtils.isEmpty(faceList)) { // //如果今天存在之前的数据先删除 // Query query = new Query(Criteria // .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); // DeleteResult result = mongoTemplate.remove(query, FaceDeviceSamplingResult.class); // faceList.stream().forEach(item -> { // if (Objects.nonNull(item.getExternalIndexCode())) { // item.setNo(item.getExternalIndexCode()); // } // }); // pointService.setDeviceTagByGB(faceList,CheckConstants.Rule_Category_Face); // //存放在mongo中 // mongoTemplate.insertAll(faceList); // } log.info("结束海康考核成绩数据"); } //解析数据 private <T> List<T> getDataList(JSONObject jsonObject, Class<T> resultClass, String message) { if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) { ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -160,7 +160,7 @@ if (osdResult.getCheckTime() != null && osdResult.getOsdTime() != null) { long checkTime = osdResult.getCheckTime().getTime(); long osdTime = osdResult.getOsdTime().getTime(); long timeDiff = (checkTime - osdTime) / 1000; long timeDiff = Math.abs((checkTime - osdTime) / 1000); if (timeDiff <= 60) { osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct); } else { ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -247,10 +247,9 @@ List<String> offLineList = new ArrayList<>(); List<String> onLineList = new ArrayList<>(); //查出数据库纯车辆或纯人脸设备 List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList()); // List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList()); dataList.forEach(item->{ //更新纯车辆或纯人脸的设备的在线状态(这部分设备不会拉流检测) if(item.getPingOnline() && !CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(item.getNo())) { if(item.getPingOnline()) { onLineList.add(item.getIp()); } else if(!item.getPingOnline()) { //筛选出ping离线的设备,更改数据库为离线 ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -168,7 +168,7 @@ imageResourceSecurities.add(imageResourceSecurity); //获取最近一次数据手动打分 ImageResourceSecurity latest = imageResourceSecurityMapper.getLatest(checkIndexVideo.getDeptId(),new Date()); imageResourceSecurity.setBoundaryIntegrity(latest.getBoundaryIntegrity()); imageResourceSecurity.setBoundaryIntegrity(latest ==null?BigDecimal.ONE:latest.getBoundaryIntegrity()); // 更新指标数据 checkIndexVideo.setImageResourceSecurity( imageResourceSecurity.getPlatformOnline() ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -48,13 +48,13 @@ private final DeviceInfoMapper deviceInfoMapper; private final WorkOrderCheckImgMapper workOrderCheckImgMapper; // private static final ExecutorService executorService = new ThreadPoolExecutor(8, // 10, // 5000, // TimeUnit.SECONDS, // new ArrayBlockingQueue<>(1024), // new ThreadPoolExecutor.CallerRunsPolicy() // ); private static final ExecutorService executorService = new ThreadPoolExecutor(16, 128, 5000, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000), new ThreadPoolExecutor.CallerRunsPolicy() ); public void run() throws FFmpegFrameGrabber.Exception { // 查出最近一周的故障的设备 @@ -76,22 +76,24 @@ return; } for (DeviceInfoVO deviceInfo : deviceList) { // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id String frameImg = null; try { frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo()); } catch (Exception e) { e.printStackTrace(); continue; } if (StringUtils.hasText(frameImg)) { WorkOrderCheckImg img = new WorkOrderCheckImg(); img.setWorkOrderNo(deviceInfo.getWorkOrderNo()); img.setImgUrl(frameImg); img.setCreateTime(new Date()); workOrderCheckImgMapper.insert(img); } executorService.submit(() -> { // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id String frameImg = null; try { frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo()); } catch (Exception e) { e.printStackTrace(); } if (StringUtils.hasText(frameImg)) { WorkOrderCheckImg img = new WorkOrderCheckImg(); img.setWorkOrderNo(deviceInfo.getWorkOrderNo()); img.setImgUrl(frameImg); img.setCreateTime(new Date()); workOrderCheckImgMapper.insert(img); } }); } log.info("工单检测图片结束"); } } ycl-server/src/main/resources/logback.xml
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志存放路径 --> <property name="log.path" value="/home/java/logs" /> <property name="log.path" value="/opt/zgyw/logs" /> <!-- 日志输出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml
@@ -102,8 +102,9 @@ </foreach> </delete> <select id="getLatest" resultType="com.ycl.platform.domain.entity.ImageResourceSecurity"> select * from t_image_resource_security where dept_id = #{deptId} where date_format(create_time,'%Y-%m') = date_format(#{date}, '%Y-%m') select * from t_image_resource_security where dept_id = #{deptId} and date_format(create_time,'%Y-%m') = date_format(#{date}, '%Y-%m') order by create_time desc limit 1 </select> ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -111,7 +111,7 @@ left join ( WITH cte AS ( SELECT *,row_number() OVER(PARTITION BY serial_number ORDER BY create_time DESC) rn FROM t_work_order WHERE deleted = 0 AND status = 'AUDITING_SUCCESS' WHERE deleted = 0 AND status != 'AUDITING_SUCCESS' ) SELECT * FROM cte WHERE rn=1 ) w on m.serial_number = w.serial_number and w.deleted = 0 left join t_yw_unit u on p.unit_id = u.id and u.deleted = 0 @@ -141,9 +141,9 @@ #{cameraCaptureArea} </if> <if test="time !=null and time !=''">and TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <![CDATA[<=]]> #{time}</if> <if test="onState != null and onState = 1">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="onState != null and onState = -1">and (p.online = #{onState} or p.ping_online = #{onState})</if> <if test="onState != null and onState = 0">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="onState != null and onState == 1">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if> <if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="civilCode != null and civilCode != ''">and civil_code = #{civilCode}</if> <if test="integratedDevice != null ">and integrated_device = #{integratedDevice}</if> <if test="cameraBrand != null ">and camera_brand = #{cameraBrand}</if> @@ -197,9 +197,9 @@ <if test="cameraFunType != null and cameraFunType != ''">and camera_fun_type like concat('%', #{cameraFunType}, '%') </if> <if test="onState != null and onState = 1">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="onState != null and onState = -1">and (p.online = #{onState} or p.ping_online = #{onState})</if> <if test="onState != null and onState = 0">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="onState != null and onState == 1">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if> <if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if> <if test="civilCode != null and civilCode != ''">and civil_code = #{civilCode}</if> </where> </select> @@ -210,7 +210,7 @@ , monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format, camera_dept, hybm, lxbm,d.dept_id, d.dept_name, CASE WHEN p.provnce_tag_video = 1 OR p.provnce_tag_car = 1 OR p.provnce_tag_face = 1 THEN 1 WHEN p.province_tag_video = 1 OR p.province_tag_car = 1 OR p.province_tag_face = 1 THEN 1 ELSE 0 END AS province_tag,p.dept_tag from t_monitor m ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -211,10 +211,10 @@ </select> <select id="getOfflineWorkOrder" resultType="java.lang.String"> select tm.ip FROM t_work_order wo INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number where (EXISTS ( FROM t_work_order wo INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number where wo.status != 'AUDITING_SUCCESS' and wo.deleted = 0 AND (EXISTS( SELECT 1 FROM t_work_order_error_type twoet WHERE twoet.work_order_no = wo.work_order_no @@ -331,7 +331,7 @@ FROM t_work_order wo WHERE wo.status = 'YW_HANDLE' (wo.status = 'YW_HANDLE' or wo.status ='DISTRIBUTED' ) AND wo.deleted = 0 </select>