From db86411bb09d9a3450d14a91125adb26a53cc191 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 21 八月 2024 17:50:54 +0800
Subject: [PATCH] 合同在线率 打分

---
 ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java       |    8 +-
 ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml                        |    6 +-
 ycl-server/src/main/java/com/ycl/task/ContractTask.java                              |   88 +++++++++++++++++++++++++++--
 ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml               |    7 ++
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java        |    3 
 ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java            |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java |    3 +
 ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java                   |   17 +++++
 8 files changed, 118 insertions(+), 16 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java
index 96d83e9..c0451dc 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java
@@ -5,6 +5,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -27,7 +28,7 @@
 
     /** 鐐逛綅鍦ㄧ嚎鐜� */
     @Excel(name = "鐐逛綅鍦ㄧ嚎鐜�")
-    private Integer siteOnline;
+    private BigDecimal siteOnline;
 
     /** 鍒涘缓鏃堕棿 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java
index 27a2ae8..e1e8ca8 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java
@@ -11,8 +11,11 @@
  * @author ruoyi
  * @date 2024-08-21
  */
-public interface ContractRuleRecordMapper
-{
+public interface ContractRuleRecordMapper {
+    public void insertBatch(@Param("list") List<ContractRuleRecord> list);
+
+    public List<ContractRuleRecord> selectMonth(@Param("startTime") String startTime, @Param("endTime") String endTime);
+
     /**
      * 鏌ヨ鍚堝悓瑙勫垯璁板綍
      *
@@ -37,7 +40,6 @@
      */
     public int insertContractRuleRecord(ContractRuleRecord contractRuleRecord);
 
-    public void insertBatch(@Param("list") List<ContractRuleRecord> list);
 
     /**
      * 淇敼鍚堝悓瑙勫垯璁板綍
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java
index df7532b..be18ea7 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ycl.platform.domain.entity.ContractScore;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -13,6 +14,7 @@
  */
 public interface ContractScoreMapper extends BaseMapper<ContractScore>
 {
+
     /**
      * 鏌ヨ鍚堝悓鎵撳垎
      *
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
index 33d47fe..9972655 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
@@ -16,6 +16,7 @@
 
 import java.io.Serializable;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -62,12 +63,14 @@
         contractScore.setAuditingStatus(AuditingStatus.WAIT);
         contractScore.setRuleIds(Arrays.stream(contractScore.getRuleIdsArray()).map(String::valueOf).collect(Collectors.joining(",")));
         contractScore.setRuleIdsArray(Arrays.stream(contractScore.getRuleIds().split(",")).map(Long::parseLong).toArray(Long[]::new));
+        contractScore.setUpdateTime(new Date());
         return super.save(contractScore);
     }
 
     @Override
     public boolean updateById(ContractScore contractScore) {
         contractScore.setRuleIds(Arrays.stream(contractScore.getRuleIdsArray()).map(String::valueOf).collect(Collectors.joining(",")));
+        contractScore.setUpdateTime(new Date());
         return super.updateById(contractScore);
     }
 
diff --git a/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java b/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java
index 263aabc..fa341e8 100644
--- a/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java
+++ b/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.ycl.utils.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.stereotype.Component;
 
@@ -14,6 +15,7 @@
  * @date 2024/3/4
  */
 @Component
+@Slf4j
 public class CustomMetaObjectHandler implements MetaObjectHandler {
 
     /**
@@ -23,7 +25,13 @@
      */
     @Override
     public void insertFill(MetaObject metaObject) {
-        String username = SecurityUtils.getLoginUser().getUsername();
+
+        String username = null;
+        try {
+            username = SecurityUtils.getLoginUser().getUsername();
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
         this.setFieldValByName("updateTime", new Date(), metaObject);
         this.setFieldValByName("createTime", new Date(), metaObject);
         this.setFieldValByName("createUser", username, metaObject);
@@ -38,7 +46,12 @@
      */
     @Override
     public void updateFill(MetaObject metaObject) {
-        String username = SecurityUtils.getLoginUser().getUsername();
+        String username = null;
+        try {
+            username = SecurityUtils.getLoginUser().getUsername();
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
         this.setFieldValByName("updateTime", new Date(), metaObject);
         this.setFieldValByName("updateBy",username,metaObject);
         this.setFieldValByName("updateUser",username,metaObject);
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..4fc6abd 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,85 @@
                     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.WAIT);
+                            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;
+    }
+
 }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml
index 5ba17a2..ee4c49d 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml
@@ -17,6 +17,11 @@
         from t_contract_rule_record
     </sql>
 
+    <select id="selectMonth" resultMap="ContractRuleRecordResult">
+        select id, unit_id, site_online, create_time, deleted
+        from t_contract_rule_record
+        where DATE(create_time) between #{startTime} and #{endTime}
+    </select>
     <select id="selectContractRuleRecordList" resultMap="ContractRuleRecordResult">
         <include refid="selectContractRuleRecordVo"/>
         <where>
@@ -48,7 +53,7 @@
     </insert>
 
     <insert id="insertBatch">
-        inner into t_contract_rule_record (unit_id,site_online,create_time)
+        insert into t_contract_rule_record (unit_id,site_online,create_time)
         values
         <foreach collection="list" item="item" separator=",">
             (#{item.unitId},#{item.siteOnline},#{item.createTime})
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
index 7c796e6..b2ff105 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
@@ -41,12 +41,12 @@
         from t_contract tc
         left join t_calculate_rule tcr on tc.id = tcr.contract_id
         <where>
-            tc.deleted =0 and #{time} between tc.start_time and tc.end_time
+            tc.deleted =0 and #{date} between tc.start_time and tc.end_time
             <if test="ruleName !=null and ruleName!=''">
-                tcr.rule_name = #{ruleName}
+                and tcr.rule_name = #{ruleName}
             </if>
             <if test="ruleCondition !=null and ruleCondition!=''">
-                tcr.rule_condition = #{ruleCondition}
+                and tcr.rule_condition = #{ruleCondition}
             </if>
         </where>
 

--
Gitblit v1.8.0