From 1901a22a3b2d7a2a076b69ecd78d24ec55d5a3e8 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 22 八月 2024 18:26:25 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-server/src/main/java/com/ycl/task/ContractTask.java | 128 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 121 insertions(+), 7 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 a07570c..654000d 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -3,20 +3,20 @@ 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.entity.*; 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.platform.service.IContractScoreService; import com.ycl.utils.DateUtils; import constant.ApiConstants; import constant.RedisConstant; import enumeration.ContractRule; +import enumeration.general.AuditingStatus; +import enumeration.general.RuleDeductCategoryEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; @@ -31,6 +31,7 @@ import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; + /** * 鍚堝悓鑰冩牳瀹氭椂浠诲姟 @@ -52,10 +53,13 @@ private ReportMapper reportMapper; @Autowired private ContractRuleRecordMapper recordMapper; + @Autowired + private IContractScoreService contractScoreService; private static final Integer Online = 1; private static final Integer Offline = -1; private static final String AuditStatus_Pass = "1"; + private static final String Remark = "绯荤粺鐢熸垚"; /** * 鍚堝悓鑰冩牳 鍦ㄧ嚎鐜囨瘡鏃ヤ换鍔℃娴� @@ -66,9 +70,12 @@ * 鏈堝簳璁$畻骞冲潎鍊硷紝鏍规嵁鍦ㄧ嚎鐜囧拰鍚堝悓鏍囧噯鎵e噺鍒嗘暟 */ public void onlineCheck() { - List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date()); + log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼"); + List<CalculateRuleVO> ruleVos = contractMapper.getCalculateRule(new Date()).stream() + .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("unitId", unitIds)); + List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds)); //key鏄痷nitId value鏄澶囩紪鐮侀泦鍚� Map<Long, List<String>> unitMap = ywPoints.stream() .collect(Collectors.groupingBy( @@ -116,13 +123,120 @@ onlineSite++; } } + BigDecimal online = new BigDecimal(onlineSite).divide(new BigDecimal(totalSite), 2, RoundingMode.DOWN); ContractRuleRecord contractRuleRecord = new ContractRuleRecord(); - contractRuleRecord.setSiteOnline( onlineSite / totalSite); + contractRuleRecord.setSiteOnline(online); contractRuleRecord.setCreateTime(new Date()); contractRuleRecord.setUnitId(unitId); ruleRecordList.add(contractRuleRecord); }); //瀛樺偍缁撴灉 recordMapper.insertBatch(ruleRecordList); + log.info("缁撴潫璁$畻鍚堝悓鐐逛綅鍦ㄧ嚎鐜�"); } + + //鏈堝簳璁$畻鍦ㄧ嚎鐜囧垎鏁� + public void calculateOnlineScore() { + log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼鍒嗘暟"); + //濡傛灉鏄湀搴曪紝闇�瑕佺粺璁″钩鍧囧湪绾跨巼鐒跺悗杩涜绉垎鎵i櫎 +// String now = DateUtils.getDate(); + String mouthStart = DateUtils.getMouthStart(new Date()); + String mouthEnd = DateUtils.getMouthEnd(new Date()); +// if (now.equals(mouthEnd)) { + //鏌ヤ竴涓湀鐨勮褰� + List<ContractRuleRecord> ruleMonthRecords = recordMapper.selectMonth(mouthStart, mouthEnd); + //閫氳繃unitId鍒嗗崟浣� + Map<Long, List<ContractRuleRecord>> unitMap = ruleMonthRecords.stream().collect(Collectors.groupingBy(ContractRuleRecord::getUnitId)); + //鏌ュ湪绾跨巼瑙勫垯 鑾峰彇key涓哄悎鍚宨d锛寁alue涓哄湪绾跨巼瑙勫垯鐨刴ap + Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream() + .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_Online.getName().equals(calculateRuleVO.getRuleName())) + .collect(Collectors.groupingBy(CalculateRuleVO::getContractId)); + + //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� + List<ContractScore> contractScoreList = new ArrayList<>(); + contractMap.forEach((contractId, ruleList) -> { + //涓�涓悎鍚屽搴斾竴涓崟浣嶏紝鍥犳unitId閮界浉鍚� + CalculateRuleVO calculateRuleVO = ruleList.get(0); + Integer unitId = calculateRuleVO.getUnitId(); + List<ContractRuleRecord> ruleRecordList = unitMap.get(Long.parseLong(unitId + "")); + if (!CollectionUtils.isEmpty(ruleMonthRecords)) { + BigDecimal siteOnlineTotal = ruleRecordList.stream().map(ContractRuleRecord::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal siteOnline = siteOnlineTotal.divide(new BigDecimal(ruleRecordList.size()), 2, RoundingMode.DOWN); + for (CalculateRuleVO ruleVO : ruleList) { + Double max = ruleVO.getMax(); + Double min = ruleVO.getMin(); + //鍒ゆ柇鑼冨洿鍦ㄥ摢涓尯闂� + if (checkRange(min, max, siteOnline.multiply(new BigDecimal(100)))) { + //闇�瑕佹墸闄ょ殑鍒嗘暟 + 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(unitId + "")); + contractScore.setRuleId(Long.parseLong(ruleVO.getId() + "")); + contractScore.setRuleIds("0," + ruleVO.getId()); + contractScore.setNum(siteOnline + ""); + 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); + contractScoreList.add(contractScore); + } + } + } + }); +// } + contractScoreService.saveBatch(contractScoreList); + log.info("缁撴潫璁$畻鍚堝悓鐐逛綅鍦ㄧ嚎鐜囧垎鏁�"); + } + + private boolean checkRange(Double min, Double max, BigDecimal siteOnline) { + if (siteOnline == null) { + return false; + } + if (max != null && siteOnline.compareTo(new BigDecimal(max)) > 0) { + return false; + } + if (min != null && siteOnline.compareTo(new BigDecimal(min)) < 0) { + return false; + } + return true; + } + + /** + * 妫�娴嬪伐鍗曡〃 杩涜鍚堝悓绉垎鎵i櫎 + * 鏌ュ嚭宸ュ崟闇�瑕佹墸鍒嗙殑鎵�鏈夎鍒� + * 鏌ュ嚭鏈墸鍒嗕笖宸茬粡瀹℃牳瀹屾垚浜嗙殑宸ュ崟缁勬垚map<unitId,List<WorkOrder>> 宸ュ崟闇�瑕佽繛宸ュ崟鏁呴殰琛ㄦ煡鍑哄涓晠闅滅被鍨� + * 寰幆宸ュ崟map锛屾瘡涓伐鍗曟晠闅滅被鍨嬫煡瀵瑰簲鐨勮鍒欙紝鏍规嵁瑙勫垯鍜屽伐鍗曞垱寤烘椂闂村拰瀹℃牳閫氳繃鏃堕棿杩涜鎵e垎 + * 鎻掑叆鍚堝悓绉垎琛紝淇敼宸ュ崟鐘舵�佷负宸叉墸鍒� + */ + public void workOrderDeduct() { + //鏌ヨ鐢熸晥鍚堝悓瀵瑰簲鎵�鏈夌殑瑙勫垯 + List<CalculateRuleVO> calculateRules = contractMapper.getCalculateRule(new Date()); + Map<String, Map<Integer, List<CalculateRuleVO>>> ruleMap = calculateRules.stream() + .collect(Collectors.groupingBy( + CalculateRuleVO::getRuleName, // 鎸夎鍒欏悕绉板垎缁� + Collectors.groupingBy( + CalculateRuleVO::getContractId // 姣忎釜瑙勫垯鍚嶇О鍐呴儴鍐嶆寜鍚堝悓ID鍒嗙粍,value涓鸿鍒欓泦鍚� + ) + )); + //鍓嶇鎰熺煡婧愭不鐞嗗伐浣滐紙鏃堕挓鍚屾瑙勫垯銆丱SD瑙勫垯銆佷竴鏈轰竴妗h鍒欙級 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map + Map<Integer, List<CalculateRuleVO>> monitorRuleMap = ruleMap.get(ContractRule.CONTRACT_RULE_Monitor.getName()); + //瀛樺偍鏁呴殰锛�24灏忔椂浠ュ唴锛�48灏忔椂浠ュ唴锛� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map + Map<Integer, List<CalculateRuleVO>> storeRuleMap = ruleMap.get(ContractRule.CONTRACT_RULE_Store.getName()); + //鐐逛綅寮傚父鎯呭喌澶勭悊 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map + Map<Integer, List<CalculateRuleVO>> siteRuleMap = ruleMap.get(ContractRule.CONTRACT_RULE_Site.getName()); + + } + /** + * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 + */ + public void randomDeduct() { + + } + } -- Gitblit v1.8.0