|
@@ -0,0 +1,122 @@
|
|
|
|
+package com.rongwei.bscommon.sys.strategy.scoreCalculation;
|
|
|
|
+
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.rongwei.bscommon.sys.service.impl.JtFjglxmServiceImpl;
|
|
|
|
+import com.rongwei.bscommon.sys.service.impl.JtKcsjxmServiceImpl;
|
|
|
|
+import com.rongwei.bscommon.sys.service.impl.JtScsdlServiceImpl;
|
|
|
|
+import com.rongwei.bsentity.domain.*;
|
|
|
|
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
|
+import com.rongwei.rwcommon.base.BaseDo;
|
|
|
|
+import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.sql.Date;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+import static com.rongwei.bscommon.sys.utils.JXKHConstant.DefaultSource.*;
|
|
|
|
+import static com.rongwei.bscommon.sys.utils.JXKHUtils.CALCULATE_Y3;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ScoreCalculationServiceNum1 class
|
|
|
|
+ * EPC-审查审定率
|
|
|
|
+ * @author XH
|
|
|
|
+ * @date 2024/12/09
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+public class ScoreCalculationServiceNum15 implements ScoreCalculationService {
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private JtFjglxmServiceImpl jtFjglxmService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private JtScsdlServiceImpl jtScsdlService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private JtKcsjxmServiceImpl jtKcsjxmService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 考核范围:“计划开始时间”在考核区间内且中标主体为二级单位以上的项目。
|
|
|
|
+ * 审查审定率=已批准的EPC项目数量/EPC项目数量
|
|
|
|
+ * 已批准的EPC项目数量:最终节点审定责任人(审查审定-审查审定率)、批准时间(审查审定-审查审定率)不为空且是否涉及施工管理为是(分级管理-项目清单)的项目数量。
|
|
|
|
+ * EPC项目数量:项目清单中,是否涉及施工管理为是且在勘察设计项目工作清单的项目数量。
|
|
|
|
+ * 结果取小数点后一位。
|
|
|
|
+ * (3)评分规则
|
|
|
|
+ * 审查审定率≥100%,不扣分。
|
|
|
|
+ * 审查审定率≤60%,扣3分。
|
|
|
|
+ * 其他数值线性计算得分,得分取小数点后三位。
|
|
|
|
+ *
|
|
|
|
+ * @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 = null;
|
|
|
|
+ // 考核范围:“计划开始时间”在考核区间内且中标主体为二级单位以上的项目。
|
|
|
|
+ List<JtFjglxm> jtFjglxmList = jtFjglxmService.list(new LambdaQueryWrapper<JtFjglxm>().eq(BaseDo::getDeleted, "0")
|
|
|
|
+ .eq(JtFjglxm::getZbztdj, "0")
|
|
|
|
+ .in(JtFjglxm::getMainid, khbmList.stream().map(JtXmkh::getId))
|
|
|
|
+ .eq(JtFjglxm::getSfsjsggl, "0")
|
|
|
|
+ .between(JtFjglxm::getJhkssj, jtGsjtbsj.getAssessmentstarttime(),
|
|
|
|
+ jtGsjtbsj.getAssessmentendtime()));
|
|
|
|
+ // EPC项目数量:项目清单中,是否涉及施工管理为是且在勘察设计项目工作清单的项目数量。
|
|
|
|
+ if(jtFjglxmList.isEmpty()){
|
|
|
|
+ errorMsg="项目级:无法获取到分级管理项目清单";
|
|
|
|
+ finalScore= BigDecimal.ZERO;
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+ List<JtKcsjxm> list = jtKcsjxmService.list(new LambdaQueryWrapper<JtKcsjxm>().eq(BaseDo::getDeleted, "0")
|
|
|
|
+ .in(JtKcsjxm::getMainid, khbmList.stream().map(JtXmkh::getId))
|
|
|
|
+ .in(JtKcsjxm::getXmmc, jtFjglxmList.stream().map(JtFjglxm::getXmmc)));
|
|
|
|
+ List<String> denominator = list.stream().map(JtKcsjxm::getXmmc).distinct().collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ //已批准的EPC项目数量:最终节点审定责任人(审查审定-审查审定率)、批准时间(审查审定-审查审定率)不为空且是否涉及施工管理为是(分级管理-项目清单)的项目数量。
|
|
|
|
+ List<JtScsdl> jtScsdls = jtScsdlService.list(new LambdaQueryWrapper<JtScsdl>()
|
|
|
|
+ .eq(BaseDo::getDeleted, "0")
|
|
|
|
+ .in(JtScsdl::getMainid, khbmList.stream().map(JtXmkh::getId))
|
|
|
|
+ .in(JtScsdl::getXmmc, jtFjglxmList.stream().map(JtFjglxm::getXmmc)));
|
|
|
|
+ List<String> numerator = jtScsdls.stream().filter(data -> StringUtils.isNotBlank(data.getZzjdsdzrr()) && data.getPzsj() != null)
|
|
|
|
+ .map(JtScsdl::getXmmc)
|
|
|
|
+ .distinct()
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ // 审查审定率=已批准的EPC项目数量/EPC项目数量
|
|
|
|
+ BigDecimal rate = calculateApprovalRate(denominator.size(), numerator.size());
|
|
|
|
+ return calculateFinalSource(finalScore, rate, jtYcpfhz, jkAssessmentRules, currentUser);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 计算最终得分
|
|
|
|
+ * 审查审定率≥100%,不扣分。
|
|
|
|
+ * 审查审定率≤60%,扣3分。
|
|
|
|
+ * 其他数值线性计算得分,得分取小数点后三位。
|
|
|
|
+ * @param rete
|
|
|
|
+ */
|
|
|
|
+ public JtYcpfhzDetail calculateFinalSource(BigDecimal finalScore, BigDecimal rate, JtYcpfhz jtYcpfhz, JkAssessmentRules jkAssessmentRules,
|
|
|
|
+ SysUserVo currentUser) {
|
|
|
|
+ String errorMsg = "审查审定率为:" + rate.toString() + "%";
|
|
|
|
+ if (rate.compareTo(BigDecimal.valueOf(100)) >= 0) {
|
|
|
|
+ // 不扣分
|
|
|
|
+ } else if (rate.compareTo(BigDecimal.valueOf(60)) <= 0) {
|
|
|
|
+ finalScore = BigDecimal.ZERO.subtract(THREE_SOURCE);
|
|
|
|
+ } else {
|
|
|
|
+ finalScore = finalScore.subtract(CALCULATE_Y3(BigDecimal.valueOf(100), BigDecimal.valueOf(3), BigDecimal.valueOf(60), BigDecimal.ZERO, rate));
|
|
|
|
+ }
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 计算审查审定率
|
|
|
|
+ * @param denominator
|
|
|
|
+ * @param numerator
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public BigDecimal calculateApprovalRate(int denominator, int numerator) {
|
|
|
|
+ return BigDecimal.valueOf(numerator).divide(BigDecimal.valueOf(denominator), 6, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")).setScale(3, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ }
|
|
|
|
+}
|