From 70f7f9d6f3a431662722f76e4da93cd3b4823857 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期四, 22 八月 2024 18:51:00 +0800 Subject: [PATCH] 不定期抽检图片和录像完整 --- ycl-server/src/main/java/com/ycl/task/ContractTask.java | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 167 insertions(+), 9 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 654000d..ac7cb70 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mongodb.client.result.DeleteResult; import com.ycl.platform.domain.entity.*; +import com.ycl.platform.domain.result.HK.PicAccessResult; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; +import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; import com.ycl.platform.domain.result.UY.VideoOnlineResult; import com.ycl.platform.domain.vo.CalculateRuleVO; import com.ycl.platform.domain.vo.ContractVO; @@ -60,6 +62,7 @@ private static final Integer Offline = -1; private static final String AuditStatus_Pass = "1"; private static final String Remark = "绯荤粺鐢熸垚"; + private static final Integer randomSize = 50; /** * 鍚堝悓鑰冩牳 鍦ㄧ嚎鐜囨瘡鏃ヤ换鍔℃娴� @@ -208,11 +211,11 @@ } /** - * 妫�娴嬪伐鍗曡〃 杩涜鍚堝悓绉垎鎵i櫎 - * 鏌ュ嚭宸ュ崟闇�瑕佹墸鍒嗙殑鎵�鏈夎鍒� - * 鏌ュ嚭鏈墸鍒嗕笖宸茬粡瀹℃牳瀹屾垚浜嗙殑宸ュ崟缁勬垚map<unitId,List<WorkOrder>> 宸ュ崟闇�瑕佽繛宸ュ崟鏁呴殰琛ㄦ煡鍑哄涓晠闅滅被鍨� - * 寰幆宸ュ崟map锛屾瘡涓伐鍗曟晠闅滅被鍨嬫煡瀵瑰簲鐨勮鍒欙紝鏍规嵁瑙勫垯鍜屽伐鍗曞垱寤烘椂闂村拰瀹℃牳閫氳繃鏃堕棿杩涜鎵e垎 - * 鎻掑叆鍚堝悓绉垎琛紝淇敼宸ュ崟鐘舵�佷负宸叉墸鍒� + * 妫�娴嬪伐鍗曡〃 杩涜鍚堝悓绉垎鎵i櫎 + * 鏌ュ嚭宸ュ崟闇�瑕佹墸鍒嗙殑鎵�鏈夎鍒� + * 鏌ュ嚭鏈墸鍒嗕笖宸茬粡瀹℃牳瀹屾垚浜嗙殑宸ュ崟缁勬垚map<unitId,List<WorkOrder>> 宸ュ崟闇�瑕佽繛宸ュ崟鏁呴殰琛ㄦ煡鍑哄涓晠闅滅被鍨� + * 寰幆宸ュ崟map锛屾瘡涓伐鍗曟晠闅滅被鍨嬫煡瀵瑰簲鐨勮鍒欙紝鏍规嵁瑙勫垯鍜屽伐鍗曞垱寤烘椂闂村拰瀹℃牳閫氳繃鏃堕棿杩涜鎵e垎 + * 鎻掑叆鍚堝悓绉垎琛紝淇敼宸ュ崟鐘舵�佷负宸叉墸鍒� */ public void workOrderDeduct() { //鏌ヨ鐢熸晥鍚堝悓瀵瑰簲鎵�鏈夌殑瑙勫垯 @@ -232,11 +235,166 @@ Map<Integer, List<CalculateRuleVO>> siteRuleMap = ruleMap.get(ContractRule.CONTRACT_RULE_Site.getName()); } - /** - * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 - */ - public void randomDeduct() { + /** + * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 + * 姣忓ぉ涓�娆¢殢鏈烘暟鍒ゆ柇鎴愬姛灏辨墽琛� + * 娴峰悍鍙栦汉鑴歌溅杈� + */ + public void randomDeductPic() { + Random random = new Random(); + //缁欏畾闅忔満鑼冨洿 + int number = random.nextInt(randomSize); + if (number == 0) { + log.info("寮�濮嬫娊鏌ュ浘鐗囧畬鏁寸姸鎬�"); + //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� + List<ContractScore> contractScoreList = new ArrayList<>(); + + Date date = DateUtils.getDay(2024, 7, 13); + //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map + Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() + .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_PicComplete.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<PicAccessResult> picAccessResults = mongoTemplate.find(query, PicAccessResult.class); + List<String> serialNumbers = picAccessResults.stream().map(PicAccessResult::getExternalIndexCode).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() + .collect(Collectors.groupingBy(YwPoint::getUnitId, + Collectors.mapping( + YwPoint::getSerialNumber, + Collectors.toList()))); + contractMap.forEach((contractId, ruleList) -> { + boolean deduct = false; + String serialNumber = null; + //姝よ鍒欏搴旂殑unitId鍧囩浉绛� + CalculateRuleVO ruleVO = ruleList.get(0); + Integer unitId = ruleVO.getUnitId(); + List<String> monitorList = unitMonitorMap.get(Long.parseLong(unitId + "")); + for (PicAccessResult picAccessResult : picAccessResults) { + //鍒ゆ柇鏄惁鏄鍏徃杩愮淮 + if (monitorList.contains(picAccessResult.getExternalIndexCode())) { + //瀛樺湪澶у浘涓嶅彲鐢ㄦ暟鎹噺锛岄渶瑕佹墸鍑� + if (picAccessResult.getBigDisableCount() > 0) { + deduct = true; + serialNumber = picAccessResult.getExternalIndexCode(); + break; + } + } + } + if (deduct) { + //闇�瑕佹墸闄ょ殑鍒嗘暟锛屾瑙勫垯鍙湁涓�鏉′笉闇�瑕佸垽鏂寖鍥� + Double deductScore = ruleVO.getCalcFraction(); + ContractScore contractScore = new ContractScore(); + contractScore.setContractId(Long.parseLong(contractId + "")); + contractScore.setAuditingStatus(AuditingStatus.PASS); + contractScore.setAuditingTime(new Date()); + contractScore.setAuditingUser(Remark); + contractScore.setUnitId(Long.parseLong(ruleVO.getUnitId() + "")); + contractScore.setRuleId(Long.parseLong(ruleVO.getId() + "")); + contractScore.setRuleIds("0," + ruleVO.getId()); + contractScore.setNum(1 + ""); + contractScore.setDeductCategory(ruleVO.getDeductCategory().getDesc()); + contractScore.setScore(new BigDecimal(deductScore)); + contractScore.setRuleName(ruleVO.getRuleName() + "/" + ruleVO.getRuleCondition()); + contractScore.setCreateTime(new Date()); + contractScore.setUpdateTime(new Date()); + contractScore.setRemark(Remark + "鍥芥爣鐮佷负:" + serialNumber + "鏃堕棿锛�" + new Date() + "瀛樺湪澶у浘涓嶅彲鐢ㄦ暟鎹�"); + contractScoreList.add(contractScore); + } + }); + contractScoreService.saveBatch(contractScoreList); + log.info("缁撴潫鎶芥煡鍥剧墖瀹屾暣鐘舵��"); + } } + + /** + * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 + * 姣忓ぉ涓�娆¢殢鏈烘暟鍒ゆ柇鎴愬姛灏辨墽琛� + * 浼樹簯鍙栧綍鍍� + */ + public void randomDeductVideo() { + Random random = new Random(); + //缁欏畾闅忔満鑼冨洿 + int number = random.nextInt(randomSize); + if (number == 0) { + log.info("寮�濮嬫娊鏌ュ綍鍍忓畬鏁寸姸鎬�"); + //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� + List<ContractScore> contractScoreList = new ArrayList<>(); + + Date date = DateUtils.getDay(2024, 7, 13); + //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇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() + .collect(Collectors.groupingBy(YwPoint::getUnitId, + Collectors.mapping( + YwPoint::getSerialNumber, + Collectors.toList()))); + 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 (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()))) { + if(calculateRuleVO.getNum() == null){ + calculateRuleVO.setNum(1); + }else { + calculateRuleVO.setNum(calculateRuleVO.getNum()+1); + } + } + } + } + } + } + for (CalculateRuleVO calculateRuleVO : ruleList) { + //闇�瑕佹墸闄ょ殑鍒嗘暟锛屾瑙勫垯鍙湁涓�鏉′笉闇�瑕佸垽鏂寖鍥� + double deductScore = calculateRuleVO.getCalcFraction()*calculateRuleVO.getNum(); + ContractScore contractScore = new ContractScore(); + contractScore.setContractId(Long.parseLong(contractId + "")); + contractScore.setAuditingStatus(AuditingStatus.PASS); + contractScore.setAuditingTime(new Date()); + contractScore.setAuditingUser(Remark); + contractScore.setUnitId(Long.parseLong(calculateRuleVO.getUnitId() + "")); + contractScore.setRuleId(Long.parseLong(calculateRuleVO.getId() + "")); + contractScore.setRuleIds("0," + calculateRuleVO.getId()); + contractScore.setNum(calculateRuleVO.getNum() + ""); + contractScore.setDeductCategory(calculateRuleVO.getDeductCategory().getDesc()); + contractScore.setScore(new BigDecimal(deductScore)); + contractScore.setRuleName(calculateRuleVO.getRuleName() + "/" + calculateRuleVO.getRuleCondition()); + contractScore.setCreateTime(new Date()); + contractScore.setUpdateTime(new Date()); + contractScore.setRemark(Remark+calculateRuleVO.getNum()+"璺澶囪繚鍙嶈鍒�"); + contractScoreList.add(contractScore); + } + }); + contractScoreService.saveBatch(contractScoreList); + log.info("缁撴潫鎶芥煡鍥剧墖瀹屾暣鐘舵��"); + } + } } -- Gitblit v1.8.0