From cb7d99d810f2356096b67fbccd3fac556e638d83 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期四, 22 八月 2024 11:22:56 +0800
Subject: [PATCH] feat:查询条件优化
---
ycl-server/src/main/java/com/ycl/task/ContractTask.java | 90 ++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 84 insertions(+), 6 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..c7e3875 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;
@@ -52,10 +52,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 +69,10 @@
* 鏈堝簳璁$畻骞冲潎鍊硷紝鏍规嵁鍦ㄧ嚎鐜囧拰鍚堝悓鏍囧噯鎵e噺鍒嗘暟
*/
public void onlineCheck() {
+ log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼");
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));
+ 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 +120,87 @@
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));
+ //鏌ュ湪绾跨巼瑙勫垯
+ List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date());
+ //鑾峰彇key涓哄悎鍚宨d锛寁alue涓哄湪绾跨巼瑙勫垯鐨刴ap
+ Map<Integer, List<CalculateRuleVO>> contractMap = ruleVos.stream().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;
+ }
+
}
--
Gitblit v1.8.0