Parcourir la source

Merge remote-tracking branch 'origin/master'

xiahan il y a 7 mois
Parent
commit
b987db1d96

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

@@ -0,0 +1,105 @@
+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.JtNdjhqdService;
+import com.rongwei.bscommon.sys.service.JtXysjyqService;
+import com.rongwei.bsentity.domain.*;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.BaseDo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.LinkedList;
+import java.util.List;
+
+import static com.rongwei.bscommon.sys.utils.JXKHConstant.DefaultSource.THREE_SOURCE;
+
+
+/**
+ * ScoreCalculationServiceNum1 class
+ *
+ * @author XH
+ * @date 2024/12/09
+ */
+@Service
+public class ScoreCalculationServiceNum21 implements ScoreCalculationService {
+    @Autowired
+    private JtXysjyqService jtXysjyqService;
+
+    /**
+     * 按实施方案要求组织开展了技术方案标准化实施行动得1分;开展了国际标准制修订能力提升行动方案得1分。
+     * 未按文件要求组织申报标准立项申报或结题总结、优秀技术成果和集团工法申报,每项扣0.5分,包括迟报漏报等
+     * 集团组织开展的优秀总工程师培训班、优秀工程部长培训班等培训汇总获优秀个人的得0.5分/人,最高得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 = BigDecimal.ZERO;
+        // 扣分细则
+        String errorMsg = "";
+
+        List<JtXysjyq> list = jtXysjyqService.list(new LambdaQueryWrapper<JtXysjyq>()
+                .eq(JtXysjyq::getDeleted, "0")
+                .eq(JtXysjyq::getMainid, jtGsjtbsj.getId()));
+        //按实施方案要求组织开展了技术方案标准化实施行动得1分
+        long jsfabzhssxd = list.stream().filter(item -> ObjectUtil.isNotEmpty(item.getJsfabzhsscl())).count();
+        if (jsfabzhssxd > 0) {
+            finalScore = finalScore.add(BigDecimal.ONE);
+            errorMsg = "公司级:按实施方案要求组织开展了技术方案标准化实施行动";
+        }
+        //开展了国际标准制修订能力提升行动方案得1分。
+        long gjbzxdnltsxdfa = list.stream().filter(item -> ObjectUtil.isNotEmpty(item.getGjbzxdnltsxdfa())).count();
+        if (gjbzxdnltsxdfa > 0) {
+            finalScore = finalScore.add(BigDecimal.ONE);
+            errorMsg = "公司级:开展了国际标准制修订能力提升行动方案";
+        }
+        //未按文件要求组织申报标准立项申报或结题总结、优秀技术成果和集团工法申报,每项扣0.5分,包括迟报漏报等
+        for (JtXysjyq jtXysjyq : list) {
+            if (ObjectUtil.isEmpty(jtXysjyq.getLxsbhjtzjcl())) {
+                finalScore = finalScore.subtract(new BigDecimal("0.5"));
+                errorMsg = "公司级:未按文件要求组织申报标准立项申报或结题总结";
+            }
+            if (ObjectUtil.isEmpty(jtXysjyq.getYxjscgsbcl())) {
+                finalScore = finalScore.subtract(new BigDecimal("0.5"));
+                errorMsg = "公司级:未按文件要求组织申报优秀技术成果";
+            }
+            if (ObjectUtil.isEmpty(jtXysjyq.getJtgfsbcl())) {
+                finalScore = finalScore.subtract(new BigDecimal("0.5"));
+                errorMsg = "公司级:未按文件要求组织申报集团工法";
+            }
+        }
+        //集团组织开展的优秀总工程师培训班、优秀工程部长培训班等培训汇总获优秀个人的得0.5分/人,最高得1分。
+        int total = 0;
+        for (JtXysjyq jtXysjyq : list) {
+            if (ObjectUtil.isNotEmpty(jtXysjyq.getYxzgcspxbyxgcbzpxbdpxhzhyxgrsl())) {
+                total += jtXysjyq.getYxzgcspxbyxgcbzpxbdpxhzhyxgrsl();
+            }
+        }
+        if (total >= 2) {
+            finalScore = finalScore.add(new BigDecimal("1"));
+            errorMsg = "公司级:集团组织开展的优秀总工程师培训班、优秀工程部长培训班等培训汇总获优秀个人的得0.5分/人,最高得1分。";
+        } else if (total == 1) {
+            finalScore = finalScore.add(new BigDecimal("0.5"));
+            errorMsg = "公司级:集团组织开展的优秀总工程师培训班、优秀工程部长培训班等培训汇总获优秀个人的得0.5分/人,最高得1分。";
+        }
+
+        if (finalScore.compareTo(BigDecimal.ZERO) < 0) {
+            finalScore = BigDecimal.ZERO;
+        }
+        if (finalScore.compareTo(jkAssessmentRules.getWeight()) > 0) {
+            finalScore = jkAssessmentRules.getWeight();
+        }
+        return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
+    }
+}

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

@@ -2,6 +2,7 @@ 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.bsentity.domain.*;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
@@ -12,6 +13,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
 
+import static com.rongwei.bscommon.sys.utils.JXKHConstant.DefaultSource.TWO_SOURCE;
 import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
 
 
@@ -25,6 +27,8 @@ import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
 public class ScoreCalculationServiceNum27 implements ScoreCalculationService {
     @Autowired
     private JtXcjhqdService jtXcjhqdService;
+    @Autowired
+    private JtFjglxmService jtFjglxmService;
 
     /**
      * ()计算规则
@@ -38,7 +42,7 @@ public class ScoreCalculationServiceNum27 implements ScoreCalculationService {
      * 覆盖率≤60%,扣2分。
      * 其他数值线性计算得分,得分取小数点后三位。
      * 若项目符合“是否属于新兴业务项目”=是(分级管理-项目清单),巡查计划清单中不存在记录扣1分。
-     *TODO: 未完成,待确认覆盖率和计划被巡查单位数量
+     *
      * @param khbmList
      * @param jtKhxmList
      * @param jtGsjtbsj
@@ -53,25 +57,47 @@ public class ScoreCalculationServiceNum27 implements ScoreCalculationService {
         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) {
+        //计划被巡查单位数量:巡查清单中被巡查单位的数量。
+        long count = list.stream().filter(item -> ObjectUtil.isNotEmpty(item.getBxcdw())).distinct().count();
+        Integer planCount = Math.toIntExact(count);
+        //二级单位下属单位数量
+        Integer ssdwfysl = jtGsjtbsj.getSsdwfysl();
+        //覆盖率=本年度考核三级单位数量/二级单位下属单位数量(巡查计划中所属单位/分院数量) 结果取小数点后一位。
+        BigDecimal fgl = new BigDecimal(planCount).divide(new BigDecimal(ssdwfysl), 1, RoundingMode.HALF_UP);
+
+        //计划被巡查单位数量与所属单位/分院数量对比,少一个或者没有对应的巡查计划时间扣2分。
+        long noPlanDateCount = list.stream().filter(item -> ObjectUtil.isEmpty(item.getJhkzsj())).count();
+        if (!planCount.equals(ssdwfysl) || noPlanDateCount > 0) {
+            finalScore = finalScore.subtract(TWO_SOURCE);
+            errorMsg = errorMsg + "公司级:计划被巡查单位数量与所属单位/分院数量对比,少一个或者没有对应的巡查计划时间";
+            return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
+        }
+
+        //覆盖率≥90%,不扣分。
+        if (fgl.compareTo(new BigDecimal("0.9")) >= 0) {
             //不扣分
-        } else if (planExecutionRate.compareTo(new BigDecimal("0.6")) <= 0) {
+            errorMsg = errorMsg + "公司级:覆盖率≥90%";
+        } else if (fgl.compareTo(new BigDecimal("0.6")) <= 0) {
             //扣3分
-            finalScore = finalScore.subtract(new BigDecimal(3));
-            errorMsg = "公司级:计划执行率小于60%";
+            finalScore = finalScore.subtract(TWO_SOURCE);
+            errorMsg = errorMsg + "公司级:覆盖率≤60%";
         } else {
             //线性计算得分,得分取小数点后三位。
-            finalScore = finalScore.subtract(CALCULATE_Y3(BigDecimal.valueOf(1), BigDecimal.valueOf(3), BigDecimal.valueOf(0.6), BigDecimal.ZERO, planExecutionRate));
+            finalScore = finalScore.subtract(CALCULATE_Y3(BigDecimal.valueOf(0.9), BigDecimal.valueOf(0), BigDecimal.valueOf(0.6), TWO_SOURCE, fgl));
+            errorMsg = errorMsg + "公司级:覆盖率>60%,<90%";
+        }
+
+        //若项目符合“是否属于新兴业务项目”=是(分级管理-项目清单),巡查计划清单中不存在记录扣1分。
+        int xxywxmCount = jtFjglxmService.count(new LambdaQueryWrapper<JtFjglxm>()
+                .eq(JtFjglxm::getDeleted, "0")
+                .eq(JtFjglxm::getSfxxyw, "0")
+                .in(JtFjglxm::getMainid, khbmList.stream().map(JtXmkh::getId)));
+        if (xxywxmCount > 0 && list.isEmpty()) {
+            finalScore = finalScore.subtract(BigDecimal.ONE);
+            errorMsg = errorMsg + "公司级:项目符合“是否属于新兴业务项目”=是(分级管理-项目清单),巡查计划清单中不存在记录";
         }
 
         if (finalScore.compareTo(BigDecimal.ZERO) < 0) {

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

@@ -5,8 +5,12 @@ import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 
+import static com.rongwei.bscommon.sys.utils.JXKHConstant.DefaultSource.TWO_SOURCE;
+import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
+
 
 /**
  * ScoreCalculationServiceNum1 class
@@ -40,7 +44,31 @@ public class ScoreCalculationServiceNum31 implements ScoreCalculationService {
         BigDecimal finalScore = jkAssessmentRules.getWeight();
         // 扣分细则
         String errorMsg = "";
-        //TODO:未完成,待确认覆盖率和计划被巡查单位数量
+        //本年度考核三级单位数量
+        Integer bndkhsjdwsl = jtGsjtbsj.getBndkhsjdwsl();
+        //二级单位下属单位数量
+        Integer ssdwfysl = jtGsjtbsj.getSsdwfysl();
+        //覆盖率=本年度考核三级单位数量/二级单位下属单位数量(巡查计划中所属单位/分院数量) 结果取小数点后一位。
+        BigDecimal fgl = new BigDecimal(bndkhsjdwsl).divide(new BigDecimal(ssdwfysl), 1, RoundingMode.HALF_UP);
+        if (fgl.compareTo(new BigDecimal("0.9")) >= 0) {
+            //不扣分
+            errorMsg = "公司级:覆盖率≥90%";
+        } else if (fgl.compareTo(new BigDecimal("0.6")) <= 0) {
+            //扣2分
+            finalScore = finalScore.subtract(TWO_SOURCE);
+            errorMsg = "公司级:覆盖率≤60%";
+        } else {
+            //线性计算得分,得分取小数点后三位。
+            finalScore = finalScore.subtract(CALCULATE_Y3(BigDecimal.valueOf(0.9), BigDecimal.valueOf(0), BigDecimal.valueOf(0.6), TWO_SOURCE, fgl));
+            errorMsg = "公司级:覆盖率>60%,<90%";
+        }
+
+        if (finalScore.compareTo(BigDecimal.ZERO) < 0) {
+            finalScore = BigDecimal.ZERO;
+        }
+        if (finalScore.compareTo(jkAssessmentRules.getWeight()) > 0) {
+            finalScore = jkAssessmentRules.getWeight();
+        }
         return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
     }
 

+ 2 - 49
jsglkh-entity/src/main/java/com/rongwei/bsentity/domain/JtNdjhqd.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
 
+import com.rongwei.rwcommon.base.BaseDo;
 import lombok.Data;
 
 /**
@@ -14,7 +15,7 @@ import lombok.Data;
  */
 @TableName(value = "jt_ndjhqd")
 @Data
-public class JtNdjhqd implements Serializable {
+public class JtNdjhqd extends BaseDo implements Serializable {
     /**
      * 主键ID
      */
@@ -45,54 +46,6 @@ public class JtNdjhqd implements Serializable {
     @TableField(value = "ROPTION")
     private String roption;
 
-    /**
-     * 是否删除Y/N
-     */
-    @TableField(value = "DELETED")
-    private String deleted;
-
-    /**
-     * 备注
-     */
-    @TableField(value = "REMARK")
-    private String remark;
-
-    /**
-     * 创建时间
-     */
-    @TableField(value = "CREATEDATE")
-    private Date createdate;
-
-    /**
-     * 创建用户ID
-     */
-    @TableField(value = "CREATEUSERID")
-    private String createuserid;
-
-    /**
-     * 修改日期
-     */
-    @TableField(value = "MODIFYDATE")
-    private Date modifydate;
-
-    /**
-     * 修改用户ID
-     */
-    @TableField(value = "MODIFYUSERID")
-    private String modifyuserid;
-
-    /**
-     * 创建人
-     */
-    @TableField(value = "CREATEUSERNAME")
-    private String createusername;
-
-    /**
-     * 修改人
-     */
-    @TableField(value = "MODIFYUSERNAME")
-    private String modifyusername;
-
     /**
      * 计划编号
      */

+ 19 - 3
jsglkh-entity/src/main/java/com/rongwei/bsentity/domain/JtXysjyq.java

@@ -1,5 +1,4 @@
 package com.rongwei.bsentity.domain;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -87,7 +86,7 @@ public class JtXysjyq extends BaseDo implements Serializable {
      * 优秀总工程师培训班、优秀工程部长培训班等培训汇总获优秀个人数量
      */
     @TableField(value = "YXZGCSPXBYXGCBZPXBDPXHZHYXGRSL")
-    private String yxzgcspxbyxgcbzpxbdpxhzhyxgrsl;
+    private Integer yxzgcspxbyxgcbzpxbdpxhzhyxgrsl;
 
     /**
      * 同步状态
@@ -95,7 +94,24 @@ public class JtXysjyq extends BaseDo implements Serializable {
     @TableField(value = "SYNCSTATE")
     private String syncstate;
 
+    /**
+     * 年份
+     */
+    @TableField(value = "YEAR")
+    private String year;
+
+    /**
+     * 公司考核管理ID
+     */
+    @TableField(value = "MAINID")
+    private String mainid;
+
+    /**
+     * 管理单位
+     */
+    @TableField(value = "GLDW")
+    private String gldw;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
-}
+}

+ 3 - 49
jsglkh-entity/src/main/java/com/rongwei/bsentity/domain/JtZjfjflqd.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
+
+import com.rongwei.rwcommon.base.BaseDo;
 import lombok.Data;
 
 /**
@@ -14,7 +16,7 @@ import lombok.Data;
  */
 @TableName(value ="jt_zjfjflqd")
 @Data
-public class JtZjfjflqd implements Serializable {
+public class JtZjfjflqd extends BaseDo implements Serializable {
     /**
      * 主键ID
      */
@@ -45,54 +47,6 @@ public class JtZjfjflqd implements Serializable {
     @TableField(value = "ROPTION")
     private String roption;
 
-    /**
-     * 是否删除Y/N
-     */
-    @TableField(value = "DELETED")
-    private String deleted;
-
-    /**
-     * 备注
-     */
-    @TableField(value = "REMARK")
-    private String remark;
-
-    /**
-     * 创建时间
-     */
-    @TableField(value = "CREATEDATE")
-    private Date createdate;
-
-    /**
-     * 创建用户ID
-     */
-    @TableField(value = "CREATEUSERID")
-    private String createuserid;
-
-    /**
-     * 修改日期
-     */
-    @TableField(value = "MODIFYDATE")
-    private Date modifydate;
-
-    /**
-     * 修改用户ID
-     */
-    @TableField(value = "MODIFYUSERID")
-    private String modifyuserid;
-
-    /**
-     * 创建人
-     */
-    @TableField(value = "CREATEUSERNAME")
-    private String createusername;
-
-    /**
-     * 修改人
-     */
-    @TableField(value = "MODIFYUSERNAME")
-    private String modifyusername;
-
     /**
      * 专家姓名
      */