From 29d3c47cc6c903c09b386649fabaebc81cbeca27 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期四, 05 六月 2025 10:43:39 +0800 Subject: [PATCH] 报错日志添加 --- ycl-server/src/main/java/com/ycl/task/ContractTask.java | 248 +++++++++++++++++++++++++++++-------------------- 1 files changed, 146 insertions(+), 102 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/task/ContractTask.java b/ycl-server/src/main/java/com/ycl/task/ContractTask.java index b54211c..8e898c8 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -24,6 +24,7 @@ import enumeration.general.WorkOrderStatusEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -32,6 +33,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; @@ -65,7 +67,6 @@ private static final Integer Offline = -1; private static final String AuditStatus_Pass = "1"; private static final String Remark = "绯荤粺鐢熸垚"; - private static final Integer randomSize = 30; /** * 鍚堝悓鑰冩牳 鍦ㄧ嚎鐜囨瘡鏃ヤ换鍔℃娴� @@ -80,11 +81,11 @@ .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_Online.getName().equals(calculateRuleVO.getRuleName())) .collect(Collectors.toList()); List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList()); - List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds).eq("examine_status",1)); + List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds).eq("examine_status", 1)); //key鏄痷nitId value鏄澶囩紪鐮侀泦鍚� Map<Long, List<YwPoint>> unitMap = ywPoints.stream().filter(point -> point.getUnitId() != null) .collect(Collectors.groupingBy( - YwPoint::getUnitId + YwPoint::getUnitId ) ); //鏌ヨ鎶ュ鍒楄〃 @@ -200,7 +201,7 @@ deductErrorType.add(ErrorType.ABNORMAL_PIC.getValue()); deductErrorType.add(ErrorType.POINT_INFO_ERROR.getValue()); deductErrorType.add(ErrorType.CLOCK_SKEW.getValue()); - List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(),deductErrorType); + List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(), deductErrorType, "瀹℃牳閫氳繃"); //瀛樺湪鏈変袱绉嶆墸鍒嗙殑鏁呴殰 鍙墸鍑忕涓�涓晠闅� Map<String, WorkOrderVO> map = workOrders.stream() .collect(Collectors.toMap( @@ -270,12 +271,12 @@ double diffTime = (double) (passTime.getTime() - createTime.getTime() - auditDuration) / (1000 * 60 * 60); //鎵惧埌瀵瑰簲瑙勫垯銆侀�夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯 for (CalculateRuleVO rule : rules) { - if(ErrorType.OSD_ERROR.getValue().equals(errorType)){ - if(!rule.getRuleCondition().equals("OSD鏍囪瘑")) continue; - }else if(ErrorType.CLOCK_SKEW.getValue().equals(errorType)){ - if(!rule.getRuleCondition().equals("鏃堕挓鍚屾")) continue; - }else if( ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)){ - if(!rule.getRuleCondition().equals("涓�鏈轰竴妗�")) continue; + if (ErrorType.OSD_ERROR.getValue().equals(errorType)) { + if (!rule.getRuleCondition().equals("OSD鏍囪瘑")) continue; + } else if (ErrorType.CLOCK_SKEW.getValue().equals(errorType)) { + if (!rule.getRuleCondition().equals("鏃堕挓鍚屾")) continue; + } else if (ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)) { + if (!rule.getRuleCondition().equals("涓�鏈轰竴妗�")) continue; } if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { @@ -304,7 +305,7 @@ long auditDuration = getAuditDuration(auditTimes, handleTimes); //瀹℃牳閫氳繃鏃堕棿 Date passTime = Collections.max(auditTimes); - double diffTime = (double) (passTime.getTime() - createTime.getTime() -auditDuration) / (1000 * 60 * 60); + double diffTime = (double) (passTime.getTime() - createTime.getTime() - auditDuration) / (1000 * 60 * 60); //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯 for (CalculateRuleVO rule : rules) { if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { @@ -346,7 +347,7 @@ Date nearestHandleTime = null; long minDifference = Long.MAX_VALUE; for (Date handleTime : handleTimes) { - if(handleTime.before(auditTime)) { + if (handleTime.before(auditTime)) { long difference = Math.abs(auditTime.getTime() - handleTime.getTime()); if (difference < minDifference) { minDifference = difference; @@ -354,7 +355,7 @@ } } } - auditDuration += auditTime.getTime()-nearestHandleTime.getTime(); + auditDuration += auditTime.getTime() - nearestHandleTime.getTime(); } return auditDuration; } @@ -362,28 +363,28 @@ /** * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 - * 姣忓ぉ涓�娆¢殢鏈烘暟鍒ゆ柇鎴愬姛灏辨墽琛� * 娴峰悍鍙栦汉鑴歌溅杈� */ public void randomDeductPic() { - Random random = new Random(); - Integer num = randomSize; - //缁欏畾闅忔満鑼冨洿 - String count = sysConfigMapper.checkConfigKeyUnique("check.contract.sample").getConfigValue(); - if (!StringUtils.isEmpty(count)) { - Integer temp = Integer.valueOf(count); - if (temp > 0) { - num = temp; - } - } - int number = random.nextInt(num); - if (number == 0) { + try { log.info("寮�濮嬫娊鏌ュ浘鐗囧畬鏁寸姸鎬�"); + //杩欎釜鏈堥殢鏈烘娊鍙栦竴澶� +// Date date = getRandomDate(); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -1); // 涓婁釜鏈� + calendar.set(Calendar.DAY_OF_MONTH, 1); // 璁剧疆涓�1鍙� + + int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + Random random = new Random(); + int randomDay = random.nextInt(lastDay) + 1; + + calendar.set(Calendar.DAY_OF_MONTH, randomDay); + Date date = calendar.getTime(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� List<ContractScore> contractScoreList = new ArrayList<>(); - //鏌ヨ鎶ュ鍒楄〃 + //鏌ヨ鎶ュ鍒楄〃 閫氳繃瀹℃牳骞朵笖鍒涘缓鏃堕棿鍦ㄥ綋鍓嶆棩鏈熺殑鎶ュid鍒楄〃 List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); - Date date = new Date(); //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_PicComplete.getName().equals(calculateRuleVO.getRuleName())) @@ -428,103 +429,146 @@ if (deduct) { //闇�瑕佹墸闄ょ殑鍒嗘暟锛屾瑙勫垯鍙湁涓�鏉′笉闇�瑕佸垽鏂寖鍥� Double deductScore = ruleVO.getCalcFraction(); - ContractScore contractScore = getContractScore(ruleVO, deductScore, "1", Remark + "鍥芥爣鐮佷负:" + serialNumber + "鏃堕棿锛�" + new Date() + "瀛樺湪澶у浘涓嶅彲鐢ㄦ暟鎹�"); + ContractScore contractScore = getContractScore(ruleVO, deductScore, "1", Remark + "鍥芥爣鐮佷负:" + serialNumber + "鏃堕棿锛�" + format.format(date) + "瀛樺湪澶у浘涓嶅彲鐢ㄦ暟鎹�"); contractScoreList.add(contractScore); } }); } contractScoreService.saveBatch(contractScoreList); log.info("缁撴潫鎶芥煡鍥剧墖瀹屾暣鐘舵��"); + }catch (NullPointerException e) { + log.error("绌烘寚閽堝紓甯革紝鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�: {}", e.getMessage(), e); + } catch (DataAccessException e) { + log.error("鏁版嵁搴撹闂紓甯革紝鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�: {}", e.getMessage(), e); + } catch (IllegalArgumentException e) { + log.error("鍙傛暟涓嶅悎娉曞紓甯革紝鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�: {}", e.getMessage(), e); + } catch (Exception e) { + log.error("鏈煡寮傚父锛屾娊鏌ュ浘鐗囧畬鏁寸姸鎬佸け璐�: ", e); // 娉ㄦ剰杩欓噷浣跨敤閫楀彿鑰屼笉鏄�+锛屽彲浠ユ墦鍗板畬鏁村爢鏍� + // 濡傛灉闇�瑕佸彲浠ユ姏鍑鸿繍琛屾椂寮傚父 + throw new RuntimeException("鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�", e); } } /** * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 - * 姣忓ぉ涓�娆¢殢鏈烘暟鍒ゆ柇鎴愬姛灏辨墽琛� * 浼樹簯鍙栧綍鍍� */ public void randomDeductVideo() { - Random random = new Random(); - //缁欏畾闅忔満鑼冨洿 - Integer num = randomSize; - //缁欏畾闅忔満鑼冨洿 - String count = sysConfigMapper.checkConfigKeyUnique("check.contract.sample").getConfigValue(); - if (!StringUtils.isEmpty(count)) { - Integer temp = Integer.valueOf(count); - if (temp > 0) { - num = temp; - } - } - int number = random.nextInt(num); - if (number == 0) { - log.info("寮�濮嬫娊鏌ュ綍鍍忓畬鏁寸姸鎬�"); - //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� - List<ContractScore> contractScoreList = new ArrayList<>(); - //鏌ヨ鎶ュ鍒楄〃 - List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); - Date date = new Date(); - //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map - Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() - .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_VideoRecord.getName().equals(calculateRuleVO.getRuleName())) - .collect(Collectors.groupingBy(CalculateRuleVO::getContractId)); + try{ + log.info("寮�濮嬫娊鏌ュ綍鍍忓畬鏁寸姸鎬�"); + //杩欎釜鏈堥殢鏈烘娊鍙栦竴澶� + Date date = getRandomDate(); +// Calendar instance = Calendar.getInstance(); +// // 璁惧畾骞淬�佹湀銆佹棩锛堟敞鎰忔湀浠戒粠0寮�濮嬶紝鍗�0浠h〃1鏈堬紝11浠h〃12鏈堬級 +// instance.set(2024, 10, 1); +// Date date = instance.getTime(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� + List<ContractScore> contractScoreList = new ArrayList<>(); + //鏌ヨ鎶ュ鍒楄〃 + List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); + //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map + Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() + .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_VideoRecord.getName().equals(calculateRuleVO.getRuleName())) + .collect(Collectors.groupingBy(CalculateRuleVO::getContractId)); - //鍙栧綍鍍忔暟鎹� - Query query = new Query(Criteria - .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); - List<RecordMetaDSumResult> recordMetaDSumResults = mongoTemplate.find(query, RecordMetaDSumResult.class); - List<String> serialNumbers = recordMetaDSumResults.stream().map(RecordMetaDSumResult::getDeviceId).collect(Collectors.toList()); - QueryWrapper<YwPoint> queryWrapper = new QueryWrapper<>(); - queryWrapper.in("serial_number", serialNumbers); - //鑾峰彇鍏徃鎵�杩愮淮鐨勮澶囬泦鍚堬紝key涓簎nitId value涓鸿澶囧浗鏍囩爜闆嗗悎 - Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() - .filter(ywPoint -> ywPoint.getUnitId() != null).collect(Collectors.groupingBy(YwPoint::getUnitId, - Collectors.mapping( - YwPoint::getSerialNumber, - Collectors.toList()))); - if (!CollectionUtils.isEmpty(contractMap)) { - contractMap.forEach((contractId, ruleList) -> { - //姝よ鍒欏搴旂殑unitId鍧囩浉绛� - CalculateRuleVO ruleVO = ruleList.get(0); - Integer unitId = ruleVO.getUnitId(); - List<String> monitorList = unitMonitorMap.get(Long.parseLong(unitId + "")); - for (RecordMetaDSumResult result : recordMetaDSumResults) { - //鍒ゆ柇鏄惁鎶ュ杩� - if (!CollectionUtils.isEmpty(reportNumbers)) { - if (reportNumbers.contains(result.getDeviceId())) continue; - } - //鍒ゆ柇鏄惁鏄鍏徃杩愮淮 - if (monitorList.contains(result.getDeviceId())) { - //褰曞儚鐘舵�佷笉瀹屾暣 - if (!Objects.equals(result.getRecordStatus(), ApiConstants.UY_RecordStatus_Integrity)) { - for (CalculateRuleVO calculateRuleVO : ruleList) { - Double max = calculateRuleVO.getMax(); - Double min = calculateRuleVO.getMin(); - //鍒ゆ柇鑼冨洿鍦ㄥ摢涓尯闂� 鍗曚綅鏄皬鏃惰浆鎹负鍒嗛挓 - if (checkRange(min, max, BigDecimal.valueOf(result.getMissDuration() * 60))) { - if (calculateRuleVO.getNum() == null) { - calculateRuleVO.setNum(1); - } else { - calculateRuleVO.setNum(calculateRuleVO.getNum() + 1); - } + //鍙栧綍鍍忔暟鎹� + Query query = new Query(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); + List<RecordMetaDSumResult> recordMetaDSumResults = mongoTemplate.find(query, RecordMetaDSumResult.class); + List<String> serialNumbers = recordMetaDSumResults.stream().map(RecordMetaDSumResult::getDeviceId).collect(Collectors.toList()); + QueryWrapper<YwPoint> queryWrapper = new QueryWrapper<>(); + queryWrapper.in("serial_number", serialNumbers); + //鑾峰彇鍏徃鎵�杩愮淮鐨勮澶囬泦鍚堬紝key涓簎nitId value涓鸿澶囧浗鏍囩爜闆嗗悎 + Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() + .filter(ywPoint -> ywPoint.getUnitId() != null).collect(Collectors.groupingBy(YwPoint::getUnitId, + Collectors.mapping( + YwPoint::getSerialNumber, + Collectors.toList()))); + if (!CollectionUtils.isEmpty(contractMap)) { + contractMap.forEach((contractId, ruleList) -> { + //姝よ鍒欏搴旂殑unitId鍧囩浉绛� + CalculateRuleVO ruleVO = ruleList.get(0); + Integer unitId = ruleVO.getUnitId(); + List<String> monitorList = unitMonitorMap.get(Long.parseLong(unitId + "")); + for (RecordMetaDSumResult result : recordMetaDSumResults) { + //鍒ゆ柇鏄惁鎶ュ杩� + if (!CollectionUtils.isEmpty(reportNumbers)) { + if (reportNumbers.contains(result.getDeviceId())) continue; + } + //鍒ゆ柇鏄惁鏄鍏徃杩愮淮 + if (monitorList.contains(result.getDeviceId())) { + //褰曞儚鐘舵�佷笉瀹屾暣 + if (!Objects.equals(result.getRecordStatus(), ApiConstants.UY_RecordStatus_Integrity)) { + for (CalculateRuleVO calculateRuleVO : ruleList) { + Double max = calculateRuleVO.getMax(); + Double min = calculateRuleVO.getMin(); + //鍒ゆ柇鑼冨洿鍦ㄥ摢涓尯闂� 鍗曚綅鏄皬鏃惰浆鎹负鍒嗛挓 + if (checkRange(min, max, BigDecimal.valueOf(result.getMissDuration() * 60))) { + if (calculateRuleVO.getNum() == null) { + calculateRuleVO.setNum(1); + } else { + calculateRuleVO.setNum(calculateRuleVO.getNum() + 1); } } } } } - for (CalculateRuleVO calculateRuleVO : ruleList) { - if (calculateRuleVO.getNum() != null && calculateRuleVO.getNum() > 0) { - //闇�瑕佹墸闄ょ殑鍒嗘暟锛屾瑙勫垯鍙湁涓�鏉′笉闇�瑕佸垽鏂寖鍥� - double deductScore = calculateRuleVO.getCalcFraction() * calculateRuleVO.getNum(); - ContractScore contractScore = getContractScore(calculateRuleVO, deductScore, calculateRuleVO.getNum() + "", Remark + calculateRuleVO.getNum() + "璺澶囪繚鍙嶈鍒�"); - contractScoreList.add(contractScore); - } + } + for (CalculateRuleVO calculateRuleVO : ruleList) { + if (calculateRuleVO.getNum() != null && calculateRuleVO.getNum() > 0) { + //闇�瑕佹墸闄ょ殑鍒嗘暟锛屾瑙勫垯鍙湁涓�鏉′笉闇�瑕佸垽鏂寖鍥� + double deductScore = calculateRuleVO.getCalcFraction() * calculateRuleVO.getNum(); + ContractScore contractScore = getContractScore(calculateRuleVO, deductScore, calculateRuleVO.getNum() + "", Remark +"鎶芥煡鏃堕棿"+format.format(date)+"瀛樺湪"+ calculateRuleVO.getNum() + "璺澶囪繚鍙嶈鍒�"); + contractScoreList.add(contractScore); } - }); - } - contractScoreService.saveBatch(contractScoreList); - log.info("缁撴潫鎶芥煡褰曞儚瀹屾暣鐘舵��"); + } + }); } + contractScoreService.saveBatch(contractScoreList); + }catch (NullPointerException e) { + log.error("绌烘寚閽堝紓甯革紝鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�: {}", e.getMessage(), e); + } catch (DataAccessException e) { + log.error("鏁版嵁搴撹闂紓甯革紝鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�: {}", e.getMessage(), e); + } catch (IllegalArgumentException e) { + log.error("鍙傛暟涓嶅悎娉曞紓甯革紝鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�: {}", e.getMessage(), e); + } catch (Exception e) { + log.error("鏈煡寮傚父锛屾娊鏌ュ浘鐗囧畬鏁寸姸鎬佸け璐�: ", e); // 娉ㄦ剰杩欓噷浣跨敤閫楀彿鑰屼笉鏄�+锛屽彲浠ユ墦鍗板畬鏁村爢鏍� + // 濡傛灉闇�瑕佸彲浠ユ姏鍑鸿繍琛屾椂寮傚父 + throw new RuntimeException("鎶芥煡鍥剧墖瀹屾暣鐘舵�佸け璐�", e); + } + } + + private Date getRandomDate() { + // 鑾峰彇褰撳墠鏃ュ巻瀹炰緥 + Calendar calendar = Calendar.getInstance(); + + // 鑾峰彇褰撳墠鏃ユ湡 + Date now = calendar.getTime(); + + // 璁剧疆涓哄綋鍓嶆湀浠界殑绗竴澶� + calendar.setTime(now); + calendar.set(Calendar.DAY_OF_MONTH, 1); + Date firstDayOfMonth = calendar.getTime(); + + // 璁剧疆涓哄綋鍓嶆湀浠界殑鏈�鍚庝竴澶╋紙涓嬩釜鏈堢殑绗竴澶╁噺涓�锛� + calendar.add(Calendar.MONTH, 1); + calendar.set(Calendar.DAY_OF_MONTH, 0); // Calendar.DAY_OF_MONTH璁句负0琛ㄧず涓婁釜鏈堟渶鍚庝竴澶╋紝浣嗚繖閲屾槸涓轰簡寰楀埌鏈湀鏈�鍚庝竴澶╋紝鎵�浠ュ厛鍔犱竴鏈� + Date lastDayOfMonth = calendar.getTime(); + log.info("鏈�鍚庝竴澶�" + lastDayOfMonth); + // 璁$畻澶╂暟宸紙鍔�1鍥犱负鍖呭惈璧峰鍜岀粨鏉熸棩鏈燂級 + long daysBetween = (lastDayOfMonth.getTime() - firstDayOfMonth.getTime()) / (1000 * 60 * 60 * 24) + 1; + + // 鐢熸垚闅忔満鏁� + Random random = new Random(); + int randomDayIndex = random.nextInt((int) daysBetween); + + // 鑾峰彇闅忔満鏃ユ湡 + calendar.setTime(firstDayOfMonth); + calendar.add(Calendar.DAY_OF_MONTH, randomDayIndex); + Date randomDate = calendar.getTime(); + return randomDate; } private boolean checkRange(Double min, Double max, BigDecimal index) { -- Gitblit v1.8.0