|
@@ -52,7 +52,7 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
// 考核得分
|
|
|
BigDecimal finalScore = jkAssessmentRules.getWeight();
|
|
|
// 扣分细则
|
|
|
- String errorMsg="";
|
|
|
+ String errorMsg = "";
|
|
|
if (StringUtils.isBlank(jtGsjtbsj.getGzdgzdsmbbxzn())) {
|
|
|
finalScore = finalScore.subtract(THREE_SOURCE);
|
|
|
errorMsg = "公司级:工作大纲/指导书模板(编写指南)为空";
|
|
@@ -62,6 +62,15 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
finalScore = finalScore.subtract(TWO_SOURCE);
|
|
|
errorMsg = "公司级:工作大纲/指导书模板(编写指南)发布证明为空 ";
|
|
|
}
|
|
|
+ // 获取勘察设计指导书
|
|
|
+ List<JtGzdg> gzdgList = jtGzdgService.list(new LambdaQueryWrapper<JtGzdg>().eq(BaseDo::getDeleted, "0")
|
|
|
+ .in(JtGzdg::getMainid, khbmList.stream().map(JtXmkh::getId).collect(Collectors.toList())));
|
|
|
+
|
|
|
+ if (gzdgList.isEmpty()) {
|
|
|
+ finalScore = BigDecimal.ZERO;
|
|
|
+ errorMsg = errorMsg + "项目级: 无法获取到勘察设计指导书";
|
|
|
+ return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
+ }
|
|
|
// 获取考核项目信息
|
|
|
List<JtFjglxm> khxmList = jtFjglxmService.list(new LambdaQueryWrapper<JtFjglxm>()
|
|
|
.eq(BaseDo::getDeleted, "0")
|
|
@@ -69,28 +78,26 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
.in(JtFjglxm::getMainid, khbmList.stream().map(JtXmkh::getId).collect(Collectors.toList()))
|
|
|
.between(JtFjglxm::getJhkssj, jtGsjtbsj.getAssessmentstarttime(), jtGsjtbsj.getAssessmentendtime())
|
|
|
);
|
|
|
+
|
|
|
if (khxmList.isEmpty()) {
|
|
|
finalScore = BigDecimal.ZERO;
|
|
|
- errorMsg = errorMsg + "无法获取到项目信息";
|
|
|
+ errorMsg = errorMsg + "考核区间内不存在项目";
|
|
|
return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
}
|
|
|
- // 获取勘察工作大纲
|
|
|
- List<JtGzdg> gzdgList = jtGzdgService.list(new LambdaQueryWrapper<JtGzdg>().eq(BaseDo::getDeleted, "0")
|
|
|
- .eq(JtGzdg::getType, "1") //勘察设计指导书
|
|
|
- //.in(JtGzdg::getXmmc, khxmList.stream().map(JtFjglxm::getXmmc).collect(Collectors.toList()))
|
|
|
- .in(JtGzdg::getMainid, khbmList.stream().map(JtXmkh::getId).collect(Collectors.toList())));
|
|
|
- if (gzdgList.isEmpty()) {
|
|
|
- finalScore = BigDecimal.ZERO;
|
|
|
- errorMsg = errorMsg + "项目级: 无法获取到勘察工作大纲";
|
|
|
- return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
- }
|
|
|
- // 获取已审定的项目数量
|
|
|
- List<JtGzdg> authorizeDatas = gzdgList.stream()
|
|
|
- .filter(data -> StringUtils.isNotBlank(data.getSdzrr()) && data.getSdsj() != null)
|
|
|
+ /*************获取已审定的项目数量 分子******************/
|
|
|
+ List<String> authorizeDatas = gzdgList.stream()
|
|
|
+ .filter(data -> "2".equals(data.getType()) && StringUtils.isNotBlank(data.getSdzrr()) && data.getSdsj() != null)
|
|
|
+ .map(JtGzdg::getXmmc)
|
|
|
+ .distinct()
|
|
|
.collect(Collectors.toList());
|
|
|
- BigDecimal approvalRate = calculateApprovalRate(khxmList, authorizeDatas);
|
|
|
- errorMsg = errorMsg +"公司级:审查审定率为:" + approvalRate + "% ";
|
|
|
- if (approvalRate.compareTo(BigDecimal.valueOf(90)) >= 0) {
|
|
|
+ /*************分母 勘察设计指导书*************/
|
|
|
+ List<String> xmmcs = gzdgList.stream().filter(data -> "2".equals(data.getType())).map(JtGzdg::getXmmc).distinct().collect(Collectors.toList());
|
|
|
+ List<String> collect = khxmList.stream().map(JtFjglxm::getXmmc).filter(xmmcs::contains).distinct().collect(Collectors.toList());
|
|
|
+ /*******审查审定率为***********/
|
|
|
+ BigDecimal approvalRate = calculateApprovalRate(collect, authorizeDatas);
|
|
|
+ errorMsg = errorMsg + "公司级:审查审定率为:" + approvalRate + "% ";
|
|
|
+ // modify at [ 2024-12-26 11:01:45 ] by xh: 文斌要求特殊处理
|
|
|
+ if (approvalRate.compareTo(BigDecimal.valueOf(90)) >= 0 || approvalRate.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
// return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
} else if (approvalRate.compareTo(BigDecimal.valueOf(60)) <= 0) {
|
|
|
// 得零分
|
|
@@ -105,7 +112,7 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
}
|
|
|
}
|
|
|
// 获取大纲中的项目名称
|
|
|
- List<String> xmmcList = gzdgList.stream().map(JtGzdg::getXmmc).collect(Collectors.toList());
|
|
|
+ List<String> xmmcList = gzdgList.stream().filter(data -> StringUtils.isNotBlank(data.getType())).map(JtGzdg::getXmmc).collect(Collectors.toList());
|
|
|
// 若每个项目没有“类型”为勘察工作大纲对应的数据(即三项都没有),扣0.5分/项。
|
|
|
List<String> emptyBlankData = khxmList.stream()
|
|
|
.filter(info -> !xmmcList.contains(info.getXmmc()))
|
|
@@ -115,14 +122,14 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
.collect(Collectors.toList());
|
|
|
if (!emptyBlankData.isEmpty()) {
|
|
|
String peojectNames = String.join(",", emptyBlankData);
|
|
|
- errorMsg = errorMsg+ "项目级:以下项目名称:" + peojectNames + " 没有勘察设计指导书 ";
|
|
|
+ errorMsg = errorMsg + "项目级:以下项目名称:" + peojectNames + " 没有勘察工作大纲/设计工作大纲/勘察设计指导书 ";
|
|
|
finalScore = finalScore.subtract(BigDecimal.valueOf((double) emptyBlankData.size() * 0.5));
|
|
|
if (finalScore.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
finalScore = BigDecimal.ZERO;
|
|
|
return assemblyYcpfhzDetail(jtYcpfhz, jkAssessmentRules, finalScore, errorMsg, currentUser);
|
|
|
}
|
|
|
}
|
|
|
- List<String> emergingProjects = getEmergingProjects(khxmList, xmmcList, emptyBlankData.size());
|
|
|
+ List<String> emergingProjects = getEmergingProjects(khxmList, gzdgList.stream().map(JtGzdg::getXmmc).distinct().collect(Collectors.toList()));
|
|
|
if (!emergingProjects.isEmpty()) {
|
|
|
String peojectNames = String.join(",", emergingProjects);
|
|
|
errorMsg = errorMsg + "项目级:以下项目名称:" + peojectNames + " 属于新兴业务项目但未开展勘察设计指导书审查 ";
|
|
@@ -144,14 +151,13 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
* @param gzdgList
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<String> getEmergingProjects(List<JtFjglxm> khxmList, List<String> xmmcList, int limitSize) {
|
|
|
+ public List<String> getEmergingProjects(List<JtFjglxm> khxmList, List<String> xmmcList) {
|
|
|
|
|
|
return khxmList
|
|
|
.stream()
|
|
|
- .filter(info -> "0".equals(info.getSfxxyw()) && !xmmcList.contains(info.getXmmc()))
|
|
|
+ .filter(data -> "0".equals(data.getSfxxyw() ) && !xmmcList.contains(data.getXmmc()))
|
|
|
.map(JtFjglxm::getXmmc)
|
|
|
.distinct()
|
|
|
- .limit(6 - limitSize)
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
@@ -162,11 +168,11 @@ public class ScoreCalculationServiceNum5 implements ScoreCalculationService {
|
|
|
* @param authorizeDatas 已完成审定的项目数量
|
|
|
* @return
|
|
|
*/
|
|
|
- public BigDecimal calculateApprovalRate(List<JtFjglxm> khxmList, List<JtGzdg> authorizeDatas) {
|
|
|
+ public BigDecimal calculateApprovalRate(List<String> khxmList, List<String> authorizeDatas) {
|
|
|
// 分母
|
|
|
int denominator = khxmList.size();
|
|
|
// 分子
|
|
|
- int numerator = (int) authorizeDatas.stream().map(JtGzdg::getXmmc).distinct().count();
|
|
|
+ int numerator = authorizeDatas.size();
|
|
|
if (denominator == 0) {
|
|
|
return BigDecimal.ZERO;
|
|
|
}
|