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