|
@@ -0,0 +1,113 @@
|
|
|
|
+package com.rongwei.bscommon.sys.strategy.scoreCalculation;
|
|
|
|
+
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.rongwei.bscommon.sys.service.impl.JtKcsjxmServiceImpl;
|
|
|
|
+import com.rongwei.bsentity.domain.*;
|
|
|
|
+
|
|
|
|
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
|
+import com.rongwei.rwcommon.base.BaseDo;
|
|
|
|
+import com.rongwei.rwcommon.utils.StringUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+import static com.rongwei.bscommon.sys.utils.JXKHConstant.DefaultSource.*;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * ScoreCalculationServiceNum1 class
|
|
|
|
+ *
|
|
|
|
+ * @author XH
|
|
|
|
+ * @date 2024/12/09
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+public class ScoreCalculationServiceNum2 implements ScoreCalculationService {
|
|
|
|
+
|
|
|
|
+ public static final String ERRORMSG = "项目级: 以下项目名称%s的任务环节编号、任务环节名称、任务环节责任人、环节计划完成时间为空";
|
|
|
|
+ public static final String ERRORMSG_SECOND = "项目级: 以下项目名称%s的项目未编制工作清单完成时间为空";
|
|
|
|
+ @Autowired
|
|
|
|
+ private JtKcsjxmServiceImpl jtKcsjxmService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 勘察设计模板为空,扣4分。
|
|
|
|
+ * 发布证明为空,扣2分。
|
|
|
|
+ * 任务环节编号、任务环节名称、任务环节责任人、环节计划完成时间任一字段为空,扣1分/项。
|
|
|
|
+ * 项目未编制工作清单,扣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 = null;
|
|
|
|
+ if (StringUtils.isBlank(jtGsjtbsj.getKcsjmbbxzn())) {
|
|
|
|
+ finalScore = finalScore.subtract(FOUR_SOURCE);
|
|
|
|
+ errorMsg = "公司级:勘察设计模板为空";
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+ // 发布证明
|
|
|
|
+ if (StringUtils.isBlank(jtGsjtbsj.getKcsjmbbxznfbzm())) {
|
|
|
|
+ finalScore = finalScore.subtract(SECOND_SOURCE);
|
|
|
|
+ errorMsg = "公司级:发布证明为空";
|
|
|
|
+ }
|
|
|
|
+ // 无法获取考核部门直接 记录 信息
|
|
|
|
+ if (khbmList.isEmpty()) {
|
|
|
|
+ if (finalScore.equals(BigDecimal.ZERO)) {
|
|
|
|
+ finalScore = FOUR_SOURCE;
|
|
|
|
+ errorMsg = "";
|
|
|
|
+ }
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 勘察设计项目清单
|
|
|
|
+ List<JtKcsjxm> kcsjxmList = jtKcsjxmService.list(new LambdaQueryWrapper<JtKcsjxm>()
|
|
|
|
+ .eq(BaseDo::getDeleted, "0")
|
|
|
|
+ .in(JtKcsjxm::getMainid, khbmList.stream().map(JtXmkh::getId)));
|
|
|
|
+ if (kcsjxmList.isEmpty()) {
|
|
|
|
+ if (finalScore.equals(BigDecimal.ZERO)) {
|
|
|
|
+ finalScore = FOUR_SOURCE;
|
|
|
|
+ errorMsg = "";
|
|
|
|
+ }
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 从项目维度出发 若任务环节编号、任务环节名称、任务环节责任人、环节计划完成时间任一字段为空,扣1分/项。
|
|
|
|
+ int limitNum = BigDecimal.ZERO.subtract(finalScore).intValue() == 0 ? 4 : BigDecimal.ZERO.subtract(finalScore).intValue();
|
|
|
|
+ List<JtKcsjxm> list1 = kcsjxmList.stream()
|
|
|
|
+ .filter(info -> StringUtils.isBlank(info.getRwhjbh()) || StringUtils.isBlank(info.getRwhjmc()) ||
|
|
|
|
+ StringUtils.isBlank(info.getRwhjzrr()) || info.getHjjhwcsj() == null)
|
|
|
|
+ .limit(limitNum)
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ // 项目未编制工作清单,扣1分/项。
|
|
|
|
+ int limitNum2 = limitNum + list1.size() == 0 ? 4 : limitNum + list1.size();
|
|
|
|
+ List<JtKcsjxm> list2 = kcsjxmList.stream()
|
|
|
|
+ .filter(info -> StringUtils.isBlank(info.getQdbh()))
|
|
|
|
+ .limit(limitNum2)
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ if (!list1.isEmpty()) {
|
|
|
|
+ finalScore = finalScore.subtract(BigDecimal.valueOf(list1.size()));
|
|
|
|
+ errorMsg = errorMsg + "项目级:" + String.format(ERRORMSG, list1.stream().map(JtKcsjxm::getXmmc).collect(Collectors.joining()));
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+ if (!list2.isEmpty()) {
|
|
|
|
+ finalScore = finalScore.subtract(BigDecimal.valueOf(list2.size()));
|
|
|
|
+ errorMsg = errorMsg + "项目级:" + String.format(ERRORMSG_SECOND, list2.stream().map(JtKcsjxm::getXmmc).collect(Collectors.joining()));
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+ finalScore = FOUR_SOURCE;
|
|
|
|
+ errorMsg = "";
|
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|