|
|
@@ -350,13 +350,20 @@ public class WorkbenchManage { |
|
|
|
public Integer processNodeNotFinishedCount(Map<String, List<ProjectStatusChange>> projectStatusChanges, |
|
|
|
ProjectStateChangeEvent startEvent, |
|
|
|
ProjectStateChangeEvent finishEvent, |
|
|
|
Map<Long, List<Purchase>> projectPurchaseMap) { |
|
|
|
Map<Long, List<Purchase>> projectPurchaseMap, |
|
|
|
Map<String, Project> projectMap) { |
|
|
|
return CollUtil.count(projectStatusChanges.entrySet(), w -> { |
|
|
|
List<ProjectStatusChange> changes = w.getValue(); |
|
|
|
if (CollUtil.anyMatch(changes, w1 -> ProjectStateChangeEvent.STOPPED_APPLY_PASS.eq(w1.getEvent()) |
|
|
|
|| ProjectStateChangeEvent.STOPPED_APPLY_AUTO_PASS.eq(w1.getEvent()))) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (startEvent.equals(ProjectStateChangeEvent.ANNUAL_PLAN_PASS)) { |
|
|
|
Project project = projectMap.get(w.getKey()); |
|
|
|
if (project.getApprovalAmount() == null || !NumberUtil.isGreater(project.getApprovalAmount(), BigDecimal.ZERO)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
if (startEvent.equals(ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD)) { |
|
|
|
Long projectId = ProjectIdCodeCacheUtil.newest(w.getKey()); |
|
|
|
List<Purchase> purchases = projectPurchaseMap.getOrDefault(projectId, Collections.emptyList()); |
|
|
@@ -380,7 +387,7 @@ public class WorkbenchManage { |
|
|
|
// 查询完成立项备案的项目 |
|
|
|
List<Long> viewUnitIds = mhUnitCache.getViewChildIdsRecursion(req.getUnitId()); |
|
|
|
Wrapper<Project> query = Wrappers.lambdaQuery(Project.class) |
|
|
|
.select(Project::getId, Project::getApprovalAmount, Project::getProjectCode, Project::getStatus) |
|
|
|
.select(Project::getId, Project::getApprovalAmount, Project::getProjectCode, Project::getStatus, Project::getAnnualPlanOpened) |
|
|
|
.eq(Project::getProjectYear, req.getProjectYear()) |
|
|
|
.eq(req.getUnitStrip() != null, Project::getUnitStrip, req.getUnitStrip()) |
|
|
|
.eq(Project::getNewest, Boolean.TRUE) |
|
|
@@ -389,6 +396,7 @@ public class WorkbenchManage { |
|
|
|
ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT) |
|
|
|
.in(Project::getBuildOrgCode, CollUtils.convert(viewUnitIds, String::valueOf)); |
|
|
|
List<Project> projects = projectService.list(query); |
|
|
|
Map<String, Project> projectMap = CollUtils.listToMap(projects, Project::getProjectCode); |
|
|
|
Map<String, List<ProjectStatusChange>> projectStatusChangeMap = new HashMap<>(); |
|
|
|
for (WorkbenchProcessNode node : WorkbenchProcessNode.ALL) { |
|
|
|
if (Arrays.asList(WorkbenchProcessNode.FINISHED, |
|
|
@@ -439,13 +447,14 @@ public class WorkbenchManage { |
|
|
|
currStat.setReviewFailedCount(reviewFailed); |
|
|
|
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT, ProjectStateChangeEvent.PROJECT_REVIEW_PASS, |
|
|
|
projectPurchaseCountMap)); |
|
|
|
null, null)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case APPROVAL_AMOUNT: { |
|
|
|
List<String> projectCodes = projects.stream() |
|
|
|
.filter(w -> w.getApprovalAmount() != null |
|
|
|
&& NumberUtil.isGreater(w.getApprovalAmount(), BigDecimal.ZERO)) |
|
|
|
&& NumberUtil.isGreater(w.getApprovalAmount(), BigDecimal.ZERO) |
|
|
|
&& Boolean.TRUE.equals(w.getAnnualPlanOpened())) |
|
|
|
.map(Project::getProjectCode) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
currStat.setProjectCount(projectCodes.size()); |
|
|
@@ -454,8 +463,8 @@ public class WorkbenchManage { |
|
|
|
currStat.setTargetCount(systemReplaceCount.getValue()); |
|
|
|
currStat.setStoppedCount(stoppedProjectCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.PROJECT_REVIEW_PASS, ProjectStateChangeEvent.ANNUAL_PLAN_PASS)); |
|
|
|
currStat.setPendingCount(CollUtil.count(projects, w -> w.getApprovalAmount() == null |
|
|
|
|| NumberUtil.isLessOrEqual(w.getApprovalAmount(), BigDecimal.ZERO))); |
|
|
|
currStat.setPendingCount(CollUtil.count(projects, w -> Boolean.TRUE.equals(w.getAnnualPlanOpened()) |
|
|
|
&& (w.getApprovalAmount() == null || NumberUtil.isLessOrEqual(w.getApprovalAmount(), BigDecimal.ZERO)))); |
|
|
|
} |
|
|
|
break; |
|
|
|
case PROJECT_APPROVAL: { |
|
|
@@ -468,7 +477,7 @@ public class WorkbenchManage { |
|
|
|
ProjectStateChangeEvent.ANNUAL_PLAN_PASS, ProjectStateChangeEvent.DECLARED_RECORD_PASS)); |
|
|
|
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.ANNUAL_PLAN_PASS, ProjectStateChangeEvent.DECLARED_RECORD_PASS, |
|
|
|
projectPurchaseCountMap)); |
|
|
|
null, projectMap)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case PROJECT_PURCHASE: { |
|
|
@@ -506,7 +515,7 @@ public class WorkbenchManage { |
|
|
|
} |
|
|
|
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.DECLARED_RECORD_PASS, ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD, |
|
|
|
projectPurchaseCountMap)); |
|
|
|
null, null)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case PROJECT_ADAPTION: { |
|
|
@@ -541,7 +550,7 @@ public class WorkbenchManage { |
|
|
|
ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD, ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM)); |
|
|
|
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD, ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM, |
|
|
|
projectPurchaseCountMap)); |
|
|
|
projectPurchaseCountMap, null)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case FIRST_INSPECTED: { |
|
|
@@ -554,7 +563,7 @@ public class WorkbenchManage { |
|
|
|
ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES)); |
|
|
|
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES, |
|
|
|
projectPurchaseCountMap)); |
|
|
|
null, null)); |
|
|
|
} |
|
|
|
break; |
|
|
|
case FINAL_INSPECTED: { |
|
|
@@ -567,7 +576,7 @@ public class WorkbenchManage { |
|
|
|
ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES, ProjectStateChangeEvent.FINAL_ACCEPTANCE_PASS)); |
|
|
|
currStat.setPendingCount(processNodeNotFinishedCount(projectStatusChangeMap, |
|
|
|
ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES, ProjectStateChangeEvent.FINAL_ACCEPTANCE_PASS, |
|
|
|
projectPurchaseCountMap)); |
|
|
|
null, null)); |
|
|
|
} |
|
|
|
break; |
|
|
|
default: |
|
|
@@ -679,7 +688,9 @@ public class WorkbenchManage { |
|
|
|
ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT, ProjectStateChangeEvent.PROJECT_REVIEW_PASS); |
|
|
|
break; |
|
|
|
case APPROVAL_AMOUNT: |
|
|
|
query.eq(Project::getAnnualPlanOpened, Boolean.TRUE); |
|
|
|
if (Boolean.FALSE.equals(req.getProcessNodeFinished())) { |
|
|
|
query.ne(Project::getStatus, ProjectStatus.STOPPED_PASSED.getCode()); |
|
|
|
query.and(q1 -> q1.isNull(Project::getApprovalAmount) |
|
|
|
.or(q2 -> q2.le(Project::getApprovalAmount, BigDecimal.ZERO))); |
|
|
|
} else { |
|
|
@@ -687,6 +698,7 @@ public class WorkbenchManage { |
|
|
|
} |
|
|
|
break; |
|
|
|
case PROJECT_APPROVAL: |
|
|
|
query.isNotNull(Project::getApprovalAmount).gt(Project::getApprovalAmount, BigDecimal.ZERO); |
|
|
|
projectProcessNodeFinishedQuery(query, req.getProcessNodeFinished(), |
|
|
|
ProjectStateChangeEvent.ANNUAL_PLAN_PASS, ProjectStateChangeEvent.DECLARED_RECORD_PASS); |
|
|
|
break; |
|
|
@@ -769,6 +781,7 @@ public class WorkbenchManage { |
|
|
|
AbstractStateChangeEvent startEvent, |
|
|
|
AbstractStateChangeEvent finishEvent) { |
|
|
|
if (Boolean.FALSE.equals(processNodeFinished)) { |
|
|
|
query.ne(Project::getStatus, ProjectStatus.STOPPED_PASSED.getCode()); |
|
|
|
projectQueryExistsProjectStatusChange(query, startEvent); |
|
|
|
projectQueryNotExistsProjectStatusChange(query, finishEvent); |
|
|
|
} else { |
|
|
@@ -781,6 +794,7 @@ public class WorkbenchManage { |
|
|
|
AbstractStateChangeEvent startEvent, |
|
|
|
AbstractStateChangeEvent finishEvent) { |
|
|
|
if (Boolean.FALSE.equals(processNodeFinished)) { |
|
|
|
query.ne(Project::getStatus, ProjectStatus.STOPPED_PASSED.getCode()); |
|
|
|
allPurchaseFinished(query, startEvent); |
|
|
|
anyPurchaseNotFinished(query, finishEvent); |
|
|
|
} else { |
|
|
|