|
@@ -0,0 +1,86 @@
|
|
|
|
+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.JtNdjhqdService;
|
|
|
|
+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.JXKHConstant.DefaultSource.FIVE_SOURCE;
|
|
|
|
+import static com.rongwei.bscommon.sys.utils.JXKHConstant.DefaultSource.THREE_SOURCE;
|
|
|
|
+import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ScoreCalculationServiceNum1 class
|
|
|
|
+ *
|
|
|
|
+ * @author XH
|
|
|
|
+ * @date 2024/12/09
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+public class ScoreCalculationServiceNum23 implements ScoreCalculationService {
|
|
|
|
+ @Autowired
|
|
|
|
+ private JtNdjhqdService jtNdjhqdService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * ()计算规则
|
|
|
|
+ * 计划执行率=实际时间在计划完成时间内数量/计划数量
|
|
|
|
+ * 实际时间在计划完成时间内数量:年度计划列表中实际完成时间小于等于计划完成时间的计划数量。
|
|
|
|
+ * 计划数量:年度计划列表中数量。
|
|
|
|
+ * 结果取小数点后一位。
|
|
|
|
+ * ()评分规则
|
|
|
|
+ * 计划执行率≥80%,不扣分。
|
|
|
|
+ * 其他数值线性计算得分,得分取小数点后三位。
|
|
|
|
+ *
|
|
|
|
+ * @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<JtNdjhqd> list = jtNdjhqdService.list(new LambdaQueryWrapper<JtNdjhqd>()
|
|
|
|
+ .eq(JtNdjhqd::getDeleted, "0")
|
|
|
|
+ .in(JtNdjhqd::getMainid, jtGsjtbsj.getId()));
|
|
|
|
+ //实际时间在计划完成时间内数量:年度计划列表中实际完成时间小于等于计划完成时间的计划数量。
|
|
|
|
+ long goodCount = list.stream().filter(item -> ObjectUtil.isNotNull(item.getSjwcsj())
|
|
|
|
+ && ObjectUtil.isNotNull(item.getJhwcsj())
|
|
|
|
+ && item.getSjwcsj().compareTo(item.getJhwcsj()) <= 0).count();
|
|
|
|
+ //计划数量:年度计划列表中数量。
|
|
|
|
+ long totalCount = list.size();
|
|
|
|
+ //计划执行率=实际时间在计划完成时间内数量/计划数量 结果取小数点后一位。
|
|
|
|
+ BigDecimal planExecutionRate = new BigDecimal(goodCount).divide(new BigDecimal(totalCount), 1, RoundingMode.HALF_UP);
|
|
|
|
+ //计划执行率≥80%,不扣分。
|
|
|
|
+ //其他数值线性计算得分,得分取小数点后三位。
|
|
|
|
+ if (planExecutionRate.compareTo(new BigDecimal("0.8")) >= 0) {
|
|
|
|
+ //不扣分
|
|
|
|
+ errorMsg = "公司级:计划执行率≥80%";
|
|
|
|
+ } else {
|
|
|
|
+ //扣分
|
|
|
|
+ finalScore = finalScore.subtract(CALCULATE_Y3(BigDecimal.valueOf(0), jkAssessmentRules.getWeight(), BigDecimal.valueOf(0.8), BigDecimal.ZERO, planExecutionRate));
|
|
|
|
+ errorMsg = "公司级:计划执行率<80%";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+}
|