From 9da24a8dfa3766cec565b092fc105f7f006de070 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期三, 21 八月 2024 11:52:25 +0800 Subject: [PATCH] 合同考核点位在线率记录 --- ycl-server/src/main/java/com/ycl/task/ContractTask.java | 102 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 97 insertions(+), 5 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 bb95a81..a07570c 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -1,12 +1,36 @@ package com.ycl.task; -import com.ycl.platform.mapper.TContractMapper; -import com.ycl.platform.mapper.TMonitorMapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mongodb.client.result.DeleteResult; +import com.ycl.platform.domain.entity.ContractRuleRecord; +import com.ycl.platform.domain.entity.Report; +import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.entity.YwPoint; +import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; +import com.ycl.platform.domain.result.UY.VideoOnlineResult; +import com.ycl.platform.domain.vo.CalculateRuleVO; +import com.ycl.platform.domain.vo.ContractVO; +import com.ycl.platform.domain.vo.ReportVO; +import com.ycl.platform.mapper.*; +import com.ycl.utils.DateUtils; +import constant.ApiConstants; +import constant.RedisConstant; +import enumeration.ContractRule; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.management.monitor.Monitor; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; /** * 鍚堝悓鑰冩牳瀹氭椂浠诲姟 @@ -17,20 +41,88 @@ @Autowired private MongoTemplate mongoTemplate; @Autowired + private RedisTemplate redisTemplate; + @Autowired private TMonitorMapper monitorMapper; @Autowired private TContractMapper contractMapper; + @Autowired + private YwPointMapper ywPointMapper; + @Autowired + private ReportMapper reportMapper; + @Autowired + private ContractRuleRecordMapper recordMapper; + + private static final Integer Online = 1; + private static final Integer Offline = -1; + private static final String AuditStatus_Pass = "1"; /** * 鍚堝悓鑰冩牳 鍦ㄧ嚎鐜囨瘡鏃ヤ换鍔℃娴� * 鏌ョ敓鏁堢殑鍚堝悓鍏宠仈鐨勫叕鍙革紝鑾峰彇unitId闆嗗悎 * 鏍规嵁unitId鏌ヨ瀵瑰簲鐐逛綅鑾峰彇鍚勪釜鍏徃绠$悊鐨勮澶嘔ds * 鏌ヨ涓夌璁惧鍦ㄧ嚎涓嶅湪绾挎儏鍐碉紝灏佽涓轰竴涓猰ap<鍥芥爣鐮�,鍦ㄧ嚎鐘舵��> - * 璁$畻姣忔棩姣忓鍏徃鐨勫湪绾跨巼瀛樺叆redis + * 璁$畻姣忔棩姣忓鍏徃鐨勫湪绾跨巼瀛樺叆mysql * 鏈堝簳璁$畻骞冲潎鍊硷紝鏍规嵁鍦ㄧ嚎鐜囧拰鍚堝悓鏍囧噯鎵e噺鍒嗘暟 */ public void onlineCheck() { -// contractMapper.selectByRuleName(); + List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date()); + List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList()); + List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unitId", unitIds)); + //key鏄痷nitId value鏄澶囩紪鐮侀泦鍚� + Map<Long, List<String>> unitMap = ywPoints.stream() + .collect(Collectors.groupingBy( + YwPoint::getUnitId, + Collectors.mapping( + YwPoint::getSerialNumber, + Collectors.toList() + ) + )); + Map<String, Integer> onlineStatusMap = new HashMap<>(); + //鏌ongo鑾峰彇璁惧鍦ㄧ嚎鎯呭喌 + Date date = DateUtils.getDay(2024, 7, 13); + //杞﹁締銆佷汉鑴� + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); + List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); + for (SnapshotDataMonitorResult result : results) { + if (ApiConstants.HK_SnapCount_ResultType_Null != result.getResultType()) { + onlineStatusMap.put(result.getExternalIndexCode(), Online); + } else { + onlineStatusMap.put(result.getExternalIndexCode(), Offline); + } + } + //瑙嗛 + Query videoQuery = new Query(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))); + List<VideoOnlineResult> videoOnlineResults = mongoTemplate.find(videoQuery, VideoOnlineResult.class); + for (VideoOnlineResult videoOnlineResult : videoOnlineResults) { + onlineStatusMap.put(videoOnlineResult.getDeviceId(), videoOnlineResult.getStatus()); + } + //鏌ヨ鎶ュ鍒楄〃 + List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate()); + //璁$畻姣忎釜鍏徃鐨勭偣浣嶅湪绾跨巼 + List<ContractRuleRecord> ruleRecordList = new ArrayList<>(); + unitMap.forEach((unitId, serialNumberList) -> { + int totalSite = 0; + int onlineSite = 0; + for (String number : serialNumberList) { + //鎶ュ杩囦笉绾冲叆璁$畻 + if (!CollectionUtils.isEmpty(reportNumbers) && reportNumbers.contains(number)) continue; + Integer status = onlineStatusMap.get(number); + totalSite++; + if (Online.equals(status)) { + onlineSite++; + } + } + ContractRuleRecord contractRuleRecord = new ContractRuleRecord(); + contractRuleRecord.setSiteOnline( onlineSite / totalSite); + contractRuleRecord.setCreateTime(new Date()); + contractRuleRecord.setUnitId(unitId); + ruleRecordList.add(contractRuleRecord); + }); + //瀛樺偍缁撴灉 + recordMapper.insertBatch(ruleRecordList); } - } -- Gitblit v1.8.0