sucheng 7 місяців тому
батько
коміт
8bef2d640d

+ 78 - 0
jsglkh-common/src/main/java/com/rongwei/bscommon/sys/strategy/scoreCalculation/ScoreCalculationServiceNum26.java

@@ -0,0 +1,78 @@
+package com.rongwei.bscommon.sys.strategy.scoreCalculation;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.bscommon.sys.service.JtFjglxmService;
+import com.rongwei.bscommon.sys.service.JtXcjhqdService;
+import com.rongwei.bscommon.sys.service.JtZdxmszmnService;
+import com.rongwei.bsentity.domain.*;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.LinkedList;
+import java.util.List;
+
+import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
+
+
+/**
+ * ScoreCalculationServiceNum1 class
+ *
+ * @author XH
+ * @date 2024/12/09
+ */
+@Service
+public class ScoreCalculationServiceNum26 implements ScoreCalculationService {
+    @Autowired
+    private JtFjglxmService jtFjglxmService;
+    @Autowired
+    private JtZdxmszmnService jtZdxmszmnService;
+
+    /**
+     * 若“是否重点项目”=是(分级管理-项目清单),数值模拟材料为空扣1分/项。
+     *
+     * @param khbmList
+     * @param jtKhxmList
+     * @param jtGsjtbsj
+     * @param jkAssessmentRules
+     * @return
+     */
+    @Override
+    public JtYcpfhzDetail soreCalculation(JtYcpfhz jtYcpfhz, List<JtXmkh> khbmList, List<JtKhxm> jtKhxmList, JtGsjtbsj jtGsjtbsj,
+                                          JkAssessmentRules jkAssessmentRules,
+                                          SysUserVo currentUser) {
+        // 考核得分
+        BigDecimal finalScore = jkAssessmentRules.getWeight();
+        // 扣分细则
+        String errorMsg = "";
+
+        List<JtFjglxm> list = jtFjglxmService.list(new LambdaQueryWrapper<JtFjglxm>()
+                .eq(JtFjglxm::getDeleted, "0")
+                .eq(JtFjglxm::getSfzdxm, "0")
+                .in(JtFjglxm::getMainid, khbmList.stream().map(JtXmkh::getId)));
+        if (!list.isEmpty()) {
+            List<JtZdxmszmn> list2 = jtZdxmszmnService.list(new LambdaQueryWrapper<JtZdxmszmn>()
+                    .eq(JtZdxmszmn::getDeleted, "0")
+                    .in(JtZdxmszmn::getMainid, khbmList.stream().map(JtXmkh::getId)));
+            List<String> xmcmList = new LinkedList<>();
+            for (JtZdxmszmn jtZdxmszmn : list2) {
+                if (xmcmList.contains(jtZdxmszmn.getXmmc())) {
+                    continue;
+                }
+                xmcmList.add(jtZdxmszmn.getXmmc());
+                if (ObjectUtil.isEmpty(jtZdxmszmn.getSzmncl())) {
+                    finalScore = finalScore.subtract(BigDecimal.ONE);
+                    errorMsg += "项目级:" + jtZdxmszmn.getXmmc() + ",数值模拟材料为空。";
+                }
+            }
+        }
+
+        if (finalScore.compareTo(BigDecimal.ZERO) < 0) {
+            finalScore = BigDecimal.ZERO;
+        }
+        return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
+    }
+}

+ 82 - 0
jsglkh-common/src/main/java/com/rongwei/bscommon/sys/strategy/scoreCalculation/ScoreCalculationServiceNum27.java

@@ -0,0 +1,82 @@
+package com.rongwei.bscommon.sys.strategy.scoreCalculation;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.bscommon.sys.service.JtXcjhqdService;
+import com.rongwei.bsentity.domain.*;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
+
+
+/**
+ * ScoreCalculationServiceNum1 class
+ *
+ * @author XH
+ * @date 2024/12/09
+ */
+@Service
+public class ScoreCalculationServiceNum27 implements ScoreCalculationService {
+    @Autowired
+    private JtXcjhqdService jtXcjhqdService;
+
+    /**
+     * ()计算规则
+     * 覆盖率=计划被巡查单位数量/所属单位数量
+     * 计划被巡查单位数量:巡查清单中被巡查单位的数量。
+     * 所属单位数量:“所属单位/分院”字段值。
+     * 结果取小数点后一位。
+     * ()评分规则
+     * 计划被巡查单位数量与所属单位/分院数量对比,少一个或者没有对应的巡查计划时间扣2分。
+     * 覆盖率≥90%,不扣分。
+     * 覆盖率≤60%,扣2分。
+     * 其他数值线性计算得分,得分取小数点后三位。
+     * 若项目符合“是否属于新兴业务项目”=是(分级管理-项目清单),巡查计划清单中不存在记录扣1分。
+     *TODO: 未完成,待确认覆盖率和计划被巡查单位数量
+     * @param khbmList
+     * @param jtKhxmList
+     * @param jtGsjtbsj
+     * @param jkAssessmentRules
+     * @return
+     */
+    @Override
+    public JtYcpfhzDetail soreCalculation(JtYcpfhz jtYcpfhz, List<JtXmkh> khbmList, List<JtKhxm> jtKhxmList, JtGsjtbsj jtGsjtbsj,
+                                          JkAssessmentRules jkAssessmentRules,
+                                          SysUserVo currentUser) {
+        // 考核得分
+        BigDecimal finalScore = jkAssessmentRules.getWeight();
+        // 扣分细则
+        String errorMsg = "";
+
+        List<JtXcjhqd> list = jtXcjhqdService.list(new LambdaQueryWrapper<JtXcjhqd>()
+                .eq(JtXcjhqd::getDeleted, "0")
+                .in(JtXcjhqd::getMainid, khbmList.stream().map(JtXmkh::getId)));
+        //已巡查项目数量:问题整改日期非空的项目数量。
+        long checkedCount = list.stream().filter(info -> ObjectUtil.isNotEmpty(info.getWtzgrq())).count();
+        //计划巡查数量:巡查清单的项目数量。
+        long planCount = list.size();
+        //计划执行率=已巡查项目数量/计划巡查数量 结果取小数点后一位。
+        BigDecimal planExecutionRate = new BigDecimal(checkedCount).divide(new BigDecimal(planCount), 1, RoundingMode.HALF_UP);
+        if (planExecutionRate.compareTo(new BigDecimal("0.9")) >= 0) {
+            //不扣分
+        } else if (planExecutionRate.compareTo(new BigDecimal("0.6")) <= 0) {
+            //扣3分
+            finalScore = finalScore.subtract(new BigDecimal(3));
+            errorMsg = "公司级:计划执行率小于60%";
+        } else {
+            //线性计算得分,得分取小数点后三位。
+            finalScore = finalScore.subtract(CALCULATE_Y3(BigDecimal.valueOf(1), BigDecimal.valueOf(3), BigDecimal.valueOf(0.6), BigDecimal.ZERO, planExecutionRate));
+        }
+
+        if (finalScore.compareTo(BigDecimal.ZERO) < 0) {
+            finalScore = BigDecimal.ZERO;
+        }
+        return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
+    }
+}

+ 1 - 1
jsglkh-common/src/main/java/com/rongwei/bscommon/sys/strategy/scoreCalculation/ScoreCalculationServiceNum31.java

@@ -40,7 +40,7 @@ public class ScoreCalculationServiceNum31 implements ScoreCalculationService {
         BigDecimal finalScore = jkAssessmentRules.getWeight();
         // 扣分细则
         String errorMsg = "";
-
+        //TODO:未完成,待确认覆盖率和计划被巡查单位数量
         return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
     }