@@ -241,12 +241,6 @@ public class ProjectStateChangeAction { | |||
project.setStatus(ProjectStatusEnum.SCHEME_UNDER_REVIEW.getCode()); | |||
} | |||
@OnTransition(source = "TO_BE_PURCHASED", target = "OPERATION") | |||
public void PURCHASE_PUT_ON_RECORD(Message<ProjectStateChangeEvent> message) { | |||
Project project = getProject(message); | |||
project.setStatus(ProjectStatusEnum.OPERATION.getCode()); | |||
} | |||
@OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION") | |||
public void START_TO_WORK(Message<ProjectStateChangeEvent> message) { | |||
Project project = getProject(message); | |||
@@ -286,19 +280,13 @@ public class ProjectStateChangeAction { | |||
project.setStatus(ProjectStatusEnum.TO_BE_FIRST_INSPECTED.getCode()); | |||
} | |||
@OnTransition(source = "TO_BE_FIRST_INSPECTED", target = "ON_FIRST_INSPECTED") | |||
@OnTransition(source = "TO_BE_FIRST_INSPECTED", target = "ON_PILOT_RUNNING") | |||
public void SUBMIT_FIRST_INSPECTED_FILES(Message<ProjectStateChangeEvent> message) { | |||
Project project = getProject(message); | |||
project.setStatus(ProjectStatusEnum.ON_FIRST_INSPECTED.getCode()); | |||
} | |||
@OnTransition(source = "ON_FIRST_INSPECTED", target = "TO_BE_FINALLY_INSPECTED") | |||
public void FIRST_INSPECTED_PASSED(Message<ProjectStateChangeEvent> message) { | |||
Project project = getProject(message); | |||
project.setStatus(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode()); | |||
project.setStatus(ProjectStatusEnum.ON_PILOT_RUNNING.getCode()); | |||
} | |||
@OnTransition(source = "TO_BE_FINALLY_INSPECTED", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW") | |||
@OnTransition(source = "ON_PILOT_RUNNING", target = "FINAL_ACCEPTANCE_IS_UNDER_REVIEW") | |||
public void FINAL_ACCEPTANCE_APPLICATION(Message<ProjectStateChangeEvent> message) { | |||
Project project = getProject(message); | |||
project.setStatus(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW.getCode()); | |||
@@ -245,26 +245,11 @@ public class ProjectStateMachineBuilderImpl implements BaseStateMachineBuilder<P | |||
// 上传初验材料 | |||
.withExternal() | |||
.source(ProjectStatusEnum.TO_BE_FIRST_INSPECTED) | |||
.target(ProjectStatusEnum.ON_FIRST_INSPECTED) | |||
.target(ProjectStatusEnum.ON_PILOT_RUNNING) | |||
.event(ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES).and() | |||
// 初验审批通过 | |||
.withExternal() | |||
.source(ProjectStatusEnum.ON_FIRST_INSPECTED) | |||
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED) | |||
.event(ProjectStateChangeEvent.FIRST_INSPECTED_PASSED).and() | |||
// 待开工 实施,从实施到建设中 | |||
.withExternal() | |||
.source(ProjectStatusEnum.OPERATION) | |||
.target(ProjectStatusEnum.UNDER_CONSTRUCTION) | |||
.event(ProjectStateChangeEvent.START_TO_WORK).and() | |||
// 建设中初验备案,从建设中到待终验 | |||
.withExternal() | |||
.source(ProjectStatusEnum.UNDER_CONSTRUCTION) | |||
.target(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED) | |||
.event(ProjectStateChangeEvent.PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD).and() | |||
// 待终验终验申请,从待终验到终验审核中 | |||
.withExternal() | |||
.source(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED) | |||
.source(ProjectStatusEnum.ON_PILOT_RUNNING) | |||
.target(ProjectStatusEnum.FINAL_ACCEPTANCE_IS_UNDER_REVIEW) | |||
.event(ProjectStateChangeEvent.FINAL_ACCEPTANCE_APPLICATION).and() | |||
// 终审审核通过,从终审审核中到已归档 | |||
@@ -145,21 +145,13 @@ public enum ProjectStateChangeEvent implements AbstractStateChangeEvent { | |||
*/ | |||
SUBMIT_FIRST_INSPECTED_FILES(ProjectStatusEnum.TO_BE_FIRST_INSPECTED.getCode(), null, null), | |||
/** | |||
* 初验通过 | |||
*/ | |||
FIRST_INSPECTED_PASSED(ProjectStatusEnum.ON_FIRST_INSPECTED.getCode(), null, null), | |||
/** | |||
* 开工 到建设中 | |||
*/ | |||
START_TO_WORK(ProjectStatusEnum.OPERATION.getCode(), null, null), | |||
/** | |||
* 初验备案(项目状态变为:待终验) | |||
*/ | |||
PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(ProjectStatusEnum.UNDER_CONSTRUCTION.getCode(), null, null), | |||
/** | |||
* 终验申请(项目状态变为:终验审核中) | |||
*/ | |||
FINAL_ACCEPTANCE_APPLICATION(ProjectStatusEnum.TO_BE_FINALLY_INSPECTED.getCode(), null, null), | |||
FINAL_ACCEPTANCE_APPLICATION(ProjectStatusEnum.ON_PILOT_RUNNING.getCode(), null, null), | |||
/** | |||
* 终验审核不通过(项目状态变为:终验审核不通过) | |||
*/ | |||
@@ -1,59 +0,0 @@ | |||
package com.hz.pm.api.projectlib.handle; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import lombok.AllArgsConstructor; | |||
import lombok.Getter; | |||
import org.springframework.core.Ordered; | |||
import java.util.List; | |||
/** | |||
* 流程业务抽象处理类 | |||
* | |||
* @author CMM | |||
* @since 2023/02/24 14:22 | |||
*/ | |||
public abstract class AbstractProcessBusinessHandle implements Ordered { | |||
/** | |||
* 构造,子类必须实现 | |||
*/ | |||
protected AbstractProcessBusinessHandle() { | |||
} | |||
/** | |||
* 抽象的,所有具体处理者应该实现的处理逻辑 | |||
* | |||
* @param project \ | |||
* @param processSchedule \ | |||
*/ | |||
abstract void businessHandle(Project project, List<ProcessDetailVO> processSchedule); | |||
abstract ProcessNode getProcessNode(); | |||
@Getter | |||
@AllArgsConstructor | |||
enum ProcessNode { | |||
PROJECT_DECLARED("项目申报", 1), | |||
PROJECT_REVIEW("项目评审", 2), | |||
APPROVAL_AMOUNT("资金下达", 3), | |||
PROJECT_APPROVAL("项目立项", 4), | |||
PROJECT_PURCHASE("招标采购", 5), | |||
PROJECT_ADAPTION("适配改造", 6), | |||
SYSTEM_SELF_TEST("系统自测", 7), | |||
SYSTEM_TEST_VALID("测试验证", 8), | |||
FIRST_INSPECTED("项目初验", 9), | |||
PILOT_RUNNING("上线试运行", 10), | |||
XCFHX_REVIEW("信创测评", 11), | |||
FINAL_INSPECTED("项目终验", 12); | |||
private final String name; | |||
private final Integer order; | |||
} | |||
} |
@@ -0,0 +1,92 @@ | |||
package com.hz.pm.api.projectlib.handle; | |||
import com.google.common.collect.Maps; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.bean.vo.ProcessInfoVO; | |||
import com.wflow.workflow.enums.ProcessStatusEnum; | |||
import com.wflow.workflow.enums.StepStatusEnum; | |||
import lombok.AllArgsConstructor; | |||
import lombok.Getter; | |||
import org.springframework.core.Ordered; | |||
import java.util.*; | |||
import java.util.stream.Collectors; | |||
/** | |||
* 流程业务抽象处理类 | |||
* | |||
* @author CMM | |||
* @since 2023/02/24 14:22 | |||
*/ | |||
public abstract class AbstractProcessHandle implements Ordered { | |||
/** | |||
* 构造,子类必须实现 | |||
*/ | |||
protected AbstractProcessHandle() { | |||
} | |||
/** | |||
* 抽象的,所有具体处理者应该实现的处理逻辑 | |||
* | |||
* @param ctx ctx | |||
*/ | |||
abstract void handle(HandleParamContext ctx); | |||
abstract ProcessNode getProcessNode(); | |||
@Getter | |||
@AllArgsConstructor | |||
enum ProcessNode { | |||
PROJECT_DECLARED("项目申报", 1), | |||
PROJECT_REVIEW("项目评审", 2), | |||
APPROVAL_AMOUNT("资金下达", 3), | |||
PROJECT_APPROVAL("项目立项", 4), | |||
PROJECT_PURCHASE("招标采购", 5), | |||
PROJECT_ADAPTION("适配改造", 6), | |||
SYSTEM_SELF_TEST("系统自测", 7), | |||
SYSTEM_TEST_VALID("测试验证", 8), | |||
FIRST_INSPECTED("项目初验", 9), | |||
PILOT_RUNNING("上线试运行", 10), | |||
XCFHX_REVIEW("信创测评", 11), | |||
FINAL_INSPECTED("项目终验", 12); | |||
private final String name; | |||
private final Integer order; | |||
} | |||
private static final Map<ProcessStatusEnum, Integer> PROCESS_STATUS_PRIORITY_MAP = new HashMap<>(); | |||
static { | |||
PROCESS_STATUS_PRIORITY_MAP.put(ProcessStatusEnum.APPROVED, 3); | |||
PROCESS_STATUS_PRIORITY_MAP.put(ProcessStatusEnum.UNDER_REVIEW, 1); | |||
PROCESS_STATUS_PRIORITY_MAP.put(ProcessStatusEnum.BE_REJECTED, 2); | |||
} | |||
static StepStatusEnum getPurchaseStatus(List<ProcessInfoVO> processes) { | |||
Optional<Integer> min = processes.stream().map(w -> { | |||
ProcessStatusEnum status = Arrays.stream(ProcessStatusEnum.values()) | |||
.filter(s -> s.getDesc().equals(w.getProcessProgressVo().getStatus())) | |||
.findFirst() | |||
.orElse(ProcessStatusEnum.NOT_SUBMITTED); | |||
return PROCESS_STATUS_PRIORITY_MAP.getOrDefault(status, 0); | |||
}).min(Comparator.comparingInt(Integer::intValue)); | |||
if (min.isPresent()) { | |||
int miniOrder = min.get(); | |||
if (miniOrder == 1) { | |||
return StepStatusEnum.ON_GOING; | |||
} else if (miniOrder == 2) { | |||
return StepStatusEnum.REJECTED; | |||
} else { | |||
return StepStatusEnum.COMPLETED; | |||
} | |||
} else { | |||
return StepStatusEnum.NOT_START; | |||
} | |||
} | |||
} |
@@ -16,12 +16,14 @@ import java.util.List; | |||
* @since 21:02 2024/4/8 | |||
*/ | |||
@Component | |||
public class ApprovalAmountHandle extends AbstractProcessBusinessHandle { | |||
public class ApprovalAmountHandle extends AbstractProcessHandle { | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
Project project = ctx.getProject(); | |||
List<ProcessDetailVO> processDetails = ctx.getProcessDetails(); | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
processSchedule.add(detail); | |||
processDetails.add(detail); | |||
detail.setProcessName(getProcessNode().getName()); | |||
detail.setStepStatus(project.getApprovalAmount() != null ? StepStatusEnum.COMPLETED : StepStatusEnum.NOT_START); | |||
} | |||
@@ -4,10 +4,10 @@ import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectdeclared.model.entity.PurchaseInst; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseInstService; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum; | |||
import com.hz.pm.api.projectlib.model.enumeration.TenderStatusEnum; | |||
import com.hz.pm.api.todocenter.utils.BuildUserUtils; | |||
import com.wflow.workflow.bean.process.ProgressNode; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.bean.vo.ProcessInfoVO; | |||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||
@@ -31,7 +31,7 @@ import java.util.stream.Collectors; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class FinalInspectionHandle extends AbstractProcessBusinessHandle { | |||
public class FinalInspectionHandle extends AbstractProcessHandle { | |||
private final IPurchaseInstService purchaseInstService; | |||
private final IPurchaseService purchaseService; | |||
@@ -44,32 +44,46 @@ public class FinalInspectionHandle extends AbstractProcessBusinessHandle { | |||
} | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
List<Purchase> purchases = purchaseService.listByProjectId(project.getId()); | |||
Map<Long, Purchase> purchaseMap = purchases.stream() | |||
.filter(w -> TenderStatusEnum.FINALLY_INSPECTED_FAILED.eq(w.getStatus()) | |||
|| TenderStatusEnum.FINALLY_INSPECTED_PASSED.eq(w.getStatus())) | |||
.collect(Collectors.toMap(Purchase::getId, Function.identity())); | |||
if (purchaseMap.isEmpty()) { | |||
return; | |||
} | |||
void handle(HandleParamContext ctx) { | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
ctx.getProcessDetails().add(detail); | |||
detail.setProcessName(getProcessNode().getName()); | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setProcessInfoList(new ArrayList<>()); | |||
processSchedule.add(detail); | |||
Map<Long, PurchaseInst> instMap = purchaseInstService.list(purchaseMap.keySet(), InstTypeEnum.PROJECT_FINAL_INSPECTION.getCode()); | |||
for (Map.Entry<Long, PurchaseInst> entry : instMap.entrySet()) { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(entry.getValue().getCreateOn())) { | |||
detail.setFinishTime(entry.getValue().getCreateOn()); | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
detail.setStepStatus(StepStatusEnum.NOT_START); | |||
} else { | |||
List<Purchase> purchases = ctx.getPurchases(); | |||
Map<Long, Purchase> purchaseMap = purchases.stream() | |||
.filter(w -> TenderStatusEnum.FINALLY_INSPECTED_FAILED.eq(w.getStatus()) | |||
|| TenderStatusEnum.FINALLY_INSPECTED_PASSED.eq(w.getStatus()) | |||
|| TenderStatusEnum.ON_FINALLY_INSPECTED_APPLY.eq(w.getStatus())) | |||
.collect(Collectors.toMap(Purchase::getId, Function.identity())); | |||
StepStatusEnum stepStatus; | |||
if (purchaseMap.isEmpty()) { | |||
stepStatus = StepStatusEnum.NOT_START; | |||
} else { | |||
List<ProcessInfoVO> processes = new ArrayList<>(); | |||
Map<Long, PurchaseInst> instMap = purchaseInstService.list(purchaseMap.keySet(), InstTypeEnum.PROJECT_FINAL_INSPECTION.getCode()); | |||
List<ProgressNode> progressNodes = new ArrayList<>(); | |||
instMap.forEach((bidId, inst) -> { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(inst.getCreateOn())) { | |||
detail.setFinishTime(inst.getCreateOn()); | |||
} | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, inst.getInstCode()); | |||
progressNodes.addAll(instanceDetail.getProgressInfo()); | |||
ProcessInfoVO tenderProgress = new ProcessInfoVO(); | |||
tenderProgress.setProcessName(purchaseMap.get(bidId).getBidName()); | |||
tenderProgress.setProcessProgressVo(instanceDetail); | |||
processes.add(tenderProgress); | |||
}); | |||
stepStatus = getPurchaseStatus(detail.getProcessInfoList()); | |||
if (stepStatus != StepStatusEnum.NOT_START) { | |||
buildUserUtils.buildUserByProcessInfo(progressNodes); | |||
detail.setProcessInfoList(processes); | |||
} | |||
} | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, entry.getValue().getInstCode()); | |||
buildUserUtils.buildUserByProcessInfo(instanceDetail.getProgressInfo()); | |||
ProcessInfoVO tenderProgress = new ProcessInfoVO(); | |||
tenderProgress.setProcessName(purchaseMap.get(entry.getKey()).getBidName()); | |||
tenderProgress.setProcessProgressVo(instanceDetail); | |||
detail.getProcessInfoList().add(tenderProgress); | |||
detail.setStepStatus(stepStatus); | |||
} | |||
} | |||
@Override | |||
@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.hz.pm.api.common.model.constant.BizConst; | |||
import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange; | |||
import com.hz.pm.api.projectlib.service.IProjectStatusChangeService; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
@@ -12,8 +11,6 @@ import com.wflow.workflow.enums.StepStatusEnum; | |||
import lombok.RequiredArgsConstructor; | |||
import org.springframework.stereotype.Component; | |||
import java.util.List; | |||
/** | |||
* 初验处理 | |||
* | |||
@@ -22,7 +19,7 @@ import java.util.List; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class FirstInspectedHandle extends AbstractProcessBusinessHandle { | |||
public class FirstInspectedHandle extends AbstractProcessHandle { | |||
private final IProjectStatusChangeService projectStatusChangeService; | |||
@@ -37,21 +34,26 @@ public class FirstInspectedHandle extends AbstractProcessBusinessHandle { | |||
} | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
processSchedule.add(detail); | |||
Wrapper<ProjectStatusChange> query = Wrappers.lambdaQuery(ProjectStatusChange.class) | |||
.eq(ProjectStatusChange::getProjectCode, project.getProjectCode()) | |||
.eq(ProjectStatusChange::getEvent, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES) | |||
.orderByDesc(ProjectStatusChange::getCreateOn) | |||
.last(BizConst.LIMIT_1); | |||
ProjectStatusChange change = projectStatusChangeService.getOne(query); | |||
if (change != null) { | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setFinishTime(change.getCreateOn()); | |||
} else { | |||
ctx.getProcessDetails().add(detail); | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
detail.setStepStatus(StepStatusEnum.NOT_START); | |||
} else { | |||
Wrapper<ProjectStatusChange> query = Wrappers.lambdaQuery(ProjectStatusChange.class) | |||
.eq(ProjectStatusChange::getProjectCode, ctx.getProject().getProjectCode()) | |||
.eq(ProjectStatusChange::getEvent, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES) | |||
.orderByDesc(ProjectStatusChange::getCreateOn) | |||
.last(BizConst.LIMIT_1); | |||
ProjectStatusChange change = projectStatusChangeService.getOne(query); | |||
if (change != null) { | |||
detail.setFinishTime(change.getCreateOn()); | |||
ctx.setPreStepStatus(StepStatusEnum.COMPLETED); | |||
} else { | |||
detail.setStepStatus(StepStatusEnum.NOT_START); | |||
ctx.setPreStepStatus(StepStatusEnum.NOT_START); | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,30 @@ | |||
package com.hz.pm.api.projectlib.handle; | |||
import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.enums.StepStatusEnum; | |||
import lombok.Data; | |||
import java.util.List; | |||
/** | |||
* <p> | |||
* HandleParamContext | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 16:38 2024/4/9 | |||
*/ | |||
@Data | |||
public final class HandleParamContext { | |||
private Project project; | |||
private List<ProcessDetailVO> processDetails; | |||
private List<Purchase> purchases; | |||
private StepStatusEnum preStepStatus; | |||
} |
@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.hz.pm.api.common.model.constant.BizConst; | |||
import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange; | |||
import com.hz.pm.api.projectlib.service.IProjectStatusChangeService; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
@@ -12,8 +11,6 @@ import com.wflow.workflow.enums.StepStatusEnum; | |||
import lombok.RequiredArgsConstructor; | |||
import org.springframework.stereotype.Component; | |||
import java.util.List; | |||
/** | |||
* <p> | |||
* PilotRunningHandle | |||
@@ -24,27 +21,33 @@ import java.util.List; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class PilotRunningHandle extends AbstractProcessBusinessHandle { | |||
public class PilotRunningHandle extends AbstractProcessHandle { | |||
private final IProjectStatusChangeService projectStatusChangeService; | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
processSchedule.add(detail); | |||
Wrapper<ProjectStatusChange> query = Wrappers.lambdaQuery(ProjectStatusChange.class) | |||
.eq(ProjectStatusChange::getProjectCode, project.getProjectCode()) | |||
.eq(ProjectStatusChange::getEvent, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES) | |||
.orderByDesc(ProjectStatusChange::getCreateOn) | |||
.last(BizConst.LIMIT_1); | |||
ProjectStatusChange change = projectStatusChangeService.getOne(query); | |||
if (change != null) { | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setFinishTime(change.getCreateOn()); | |||
} else { | |||
ctx.getProcessDetails().add(detail); | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
detail.setStepStatus(StepStatusEnum.NOT_START); | |||
} else { | |||
Wrapper<ProjectStatusChange> query = Wrappers.lambdaQuery(ProjectStatusChange.class) | |||
.eq(ProjectStatusChange::getProjectCode, ctx.getProject().getProjectCode()) | |||
.eq(ProjectStatusChange::getEvent, ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES) | |||
.orderByDesc(ProjectStatusChange::getCreateOn) | |||
.last(BizConst.LIMIT_1); | |||
ProjectStatusChange change = projectStatusChangeService.getOne(query); | |||
if (change != null) { | |||
detail.setFinishTime(change.getCreateOn()); | |||
ctx.setPreStepStatus(StepStatusEnum.COMPLETED); | |||
} else { | |||
detail.setStepStatus(StepStatusEnum.NOT_START); | |||
ctx.setPreStepStatus(StepStatusEnum.NOT_START); | |||
} | |||
} | |||
} | |||
@Override | |||
@@ -2,7 +2,6 @@ package com.hz.pm.api.projectlib.handle; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.enums.StepStatusEnum; | |||
import lombok.RequiredArgsConstructor; | |||
import org.springframework.stereotype.Component; | |||
@@ -23,15 +22,18 @@ public class ProcessProgressContext { | |||
/** | |||
* 具体处理者的集合 | |||
*/ | |||
private final List<AbstractProcessBusinessHandle> processBusinessHandles; | |||
private final List<AbstractProcessHandle> processBusinessHandles; | |||
public List<ProcessDetailVO> handle(Project project, List<ProcessDetailVO> processSchedule) { | |||
HandleParamContext handleParamContext = new HandleParamContext(); | |||
handleParamContext.setProject(project); | |||
handleParamContext.setProcessDetails(processSchedule); | |||
if (!processBusinessHandles.isEmpty()) { | |||
processBusinessHandles.sort(Comparator.comparing(AbstractProcessBusinessHandle::getOrder)); | |||
for (AbstractProcessBusinessHandle processBusinessHandle : processBusinessHandles) { | |||
processBusinessHandle.businessHandle(project, processSchedule); | |||
processBusinessHandles.sort(Comparator.comparing(AbstractProcessHandle::getOrder)); | |||
for (AbstractProcessHandle processBusinessHandle : processBusinessHandles) { | |||
processBusinessHandle.handle(handleParamContext); | |||
} | |||
for (int i = processSchedule.size() - 1; i >= 1; i--) { | |||
/*for (int i = processSchedule.size() - 1; i >= 1; i--) { | |||
ProcessDetailVO curr = processSchedule.get(i); | |||
if (curr.getStepStatus() == null || | |||
curr.getStepStatus().equals(StepStatusEnum.NOT_START)) { | |||
@@ -39,7 +41,7 @@ public class ProcessProgressContext { | |||
} | |||
ProcessDetailVO pre = processSchedule.get(i - 1); | |||
pre.setStepStatus(StepStatusEnum.COMPLETED); | |||
} | |||
}*/ | |||
return processSchedule; | |||
} | |||
return Collections.emptyList(); | |||
@@ -3,11 +3,10 @@ package com.hz.pm.api.projectlib.handle; | |||
import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectdeclared.model.entity.PurchaseInst; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseInstService; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum; | |||
import com.hz.pm.api.projectlib.model.enumeration.TenderAdaptStatusEnum; | |||
import com.hz.pm.api.todocenter.utils.BuildUserUtils; | |||
import com.wflow.workflow.bean.process.ProgressNode; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.bean.vo.ProcessInfoVO; | |||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||
@@ -32,40 +31,47 @@ import java.util.stream.Collectors; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class ProjectAdaptionHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectAdaptionHandle extends AbstractProcessHandle { | |||
private final IPurchaseService purchaseService; | |||
private final IPurchaseInstService purchaseInstService; | |||
private final BuildUserUtils buildUserUtils; | |||
private final ProcessInstanceService processInstanceService; | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
List<Purchase> purchases = purchaseService.listByProjectId(project.getId()); | |||
void handle(HandleParamContext ctx) { | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
return; | |||
} | |||
List<Purchase> purchases = ctx.getPurchases(); | |||
Map<Long, Purchase> purchaseMap = purchases.stream() | |||
.filter(w -> TenderAdaptStatusEnum.ADAPT_INFO_PASSED.eq(w.getAdaptStatus()) | |||
|| TenderAdaptStatusEnum.ADAPT_INFO_FAILED.eq(w.getAdaptStatus())) | |||
|| TenderAdaptStatusEnum.ADAPT_INFO_FAILED.eq(w.getAdaptStatus()) | |||
|| TenderAdaptStatusEnum.ADAPT_INFO_AUDIT.eq(w.getAdaptStatus())) | |||
.collect(Collectors.toMap(Purchase::getId, Function.identity())); | |||
if (purchaseMap.isEmpty()) { | |||
return; | |||
} | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setProcessInfoList(new ArrayList<>()); | |||
processSchedule.add(detail); | |||
ctx.getProcessDetails().add(detail); | |||
Map<Long, PurchaseInst> instMap = purchaseInstService.list(purchaseMap.keySet(), InstTypeEnum.ADAPTION.getCode()); | |||
for (Map.Entry<Long, PurchaseInst> entry : instMap.entrySet()) { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(entry.getValue().getCreateOn())) { | |||
detail.setFinishTime(entry.getValue().getCreateOn()); | |||
List<ProgressNode> progressNodes = new ArrayList<>(); | |||
instMap.forEach((bidId, inst) -> { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(inst.getCreateOn())) { | |||
detail.setFinishTime(inst.getCreateOn()); | |||
} | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, entry.getValue().getInstCode()); | |||
buildUserUtils.buildUserByProcessInfo(instanceDetail.getProgressInfo()); | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, inst.getInstCode()); | |||
progressNodes.addAll(instanceDetail.getProgressInfo()); | |||
ProcessInfoVO tenderProgress = new ProcessInfoVO(); | |||
tenderProgress.setProcessName(purchaseMap.get(entry.getKey()).getBidName()); | |||
tenderProgress.setProcessName(purchaseMap.get(bidId).getBidName()); | |||
tenderProgress.setProcessProgressVo(instanceDetail); | |||
detail.getProcessInfoList().add(tenderProgress); | |||
} | |||
}); | |||
buildUserUtils.buildUserByProcessInfo(progressNodes); | |||
StepStatusEnum stepStatus = getPurchaseStatus(detail.getProcessInfoList()); | |||
detail.setStepStatus(stepStatus); | |||
ctx.setPreStepStatus(stepStatus); | |||
} | |||
@Override | |||
@@ -31,7 +31,7 @@ import java.util.Objects; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class ProjectApprovalHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectApprovalHandle extends AbstractProcessHandle { | |||
private final IProjectStatusChangeService projectStatusChangeService; | |||
private final IProjectService projectService; | |||
@@ -45,11 +45,12 @@ public class ProjectApprovalHandle extends AbstractProcessBusinessHandle { | |||
} | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
processSchedule.add(detail); | |||
ctx.getProcessDetails().add(detail); | |||
//查出历史版本的 所有项目ID | |||
Project project = ctx.getProject(); | |||
Integer status = project.getStatus(); | |||
if (Objects.isNull(status)) { | |||
return; | |||
@@ -17,7 +17,7 @@ import java.util.List; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class ProjectDeclareHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectDeclareHandle extends AbstractProcessHandle { | |||
@Override | |||
ProcessNode getProcessNode() { | |||
@@ -25,15 +25,16 @@ public class ProjectDeclareHandle extends AbstractProcessBusinessHandle { | |||
} | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
// 因为此时在项目库中的项目,都是已经申报过的项目,所以直接设置环节状态为已完成 | |||
ProcessDetailVO processDetailVO = new ProcessDetailVO(); | |||
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED); | |||
// 项目库中查出申报完成时间 | |||
Project project = ctx.getProject(); | |||
LocalDateTime createOn = project.getCreateOn(); | |||
processDetailVO.setFinishTime(createOn); | |||
processDetailVO.setProcessName(getProcessNode().getName()); | |||
processSchedule.add(processDetailVO); | |||
ctx.getProcessDetails().add(processDetailVO); | |||
} | |||
@Override | |||
@@ -3,6 +3,8 @@ package com.hz.pm.api.projectlib.handle; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.hz.pm.api.common.model.constant.BizConst; | |||
import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; | |||
import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange; | |||
import com.hz.pm.api.projectlib.service.IProjectService; | |||
@@ -25,10 +27,10 @@ import static com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum.TO_BE | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class ProjectPurchaseHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectPurchaseHandle extends AbstractProcessHandle { | |||
private final IProjectStatusChangeService projectStatusChangeService; | |||
private final IProjectService projectService; | |||
private final IPurchaseService purchaseService; | |||
@Override | |||
public int getOrder() { | |||
@@ -41,21 +43,21 @@ public class ProjectPurchaseHandle extends AbstractProcessBusinessHandle { | |||
} | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
processSchedule.add(detail); | |||
ctx.getProcessDetails().add(detail); | |||
// 根据项目是否通过立项批复(立项批复时间)来判断招标采购是否开始 | |||
// 进行了立项批复且项目状态是待采购 | |||
Project project = ctx.getProject(); | |||
if (TO_BE_PURCHASED.eq(project.getStatus())) { | |||
detail.setStepStatus(StepStatusEnum.NOT_START); | |||
} else if (ON_PURCHASING.eq(project.getStatus())) { | |||
detail.setStepStatus(StepStatusEnum.ON_GOING); | |||
} else { | |||
List<Long> projectIds = projectService.allVersionProjectIds(project.getProjectCode()); | |||
// 根据采购备案的时间获取 | |||
ProjectStatusChange change = projectStatusChangeService.getOne(Wrappers.lambdaQuery(ProjectStatusChange.class) | |||
.in(ProjectStatusChange::getProjectId, projectIds) | |||
.eq(ProjectStatusChange::getProjectCode, project.getProjectCode()) | |||
.eq(ProjectStatusChange::getEvent, ProjectStateChangeEvent.SUBMIT_OPERATION_PLAN) | |||
.orderByDesc(ProjectStatusChange::getCreateOn) | |||
.last(BizConst.LIMIT_1)); | |||
@@ -64,8 +66,11 @@ public class ProjectPurchaseHandle extends AbstractProcessBusinessHandle { | |||
} else { | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setFinishTime(change.getCreateOn()); | |||
List<Purchase> purchases = purchaseService.listByProjectId(project.getId()); | |||
ctx.setPurchases(purchases); | |||
} | |||
} | |||
ctx.setPreStepStatus(detail.getStepStatus()); | |||
detail.setProcessName(getProcessNode().getName()); | |||
} | |||
@@ -16,7 +16,7 @@ import java.util.List; | |||
*/ | |||
@Component | |||
public class ProjectReviewHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectReviewHandle extends AbstractProcessHandle { | |||
@Override | |||
ProcessNode getProcessNode() { | |||
@@ -29,15 +29,15 @@ public class ProjectReviewHandle extends AbstractProcessBusinessHandle { | |||
} | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
void handle(HandleParamContext ctx) { | |||
// 因为此时在项目库中的项目,都是已经申报过的项目,所以直接设置环节状态为已完成 | |||
ProcessDetailVO processDetailVO = new ProcessDetailVO(); | |||
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED); | |||
// 项目库中查出申报完成时间 | |||
LocalDateTime createOn = project.getCreateOn(); | |||
LocalDateTime createOn = ctx.getProject().getCreateOn(); | |||
processDetailVO.setFinishTime(createOn); | |||
processDetailVO.setProcessName(getProcessNode().getName()); | |||
processSchedule.add(processDetailVO); | |||
ctx.getProcessDetails().add(processDetailVO); | |||
} | |||
} |
@@ -4,10 +4,9 @@ import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectdeclared.model.entity.PurchaseInst; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseInstService; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum; | |||
import com.hz.pm.api.projectlib.model.enumeration.TenderSelfTestStatusEnum; | |||
import com.hz.pm.api.todocenter.utils.BuildUserUtils; | |||
import com.wflow.workflow.bean.process.ProgressNode; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.bean.vo.ProcessInfoVO; | |||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||
@@ -22,6 +21,8 @@ import java.util.Map; | |||
import java.util.function.Function; | |||
import java.util.stream.Collectors; | |||
import static com.hz.pm.api.projectlib.model.enumeration.TenderSelfTestStatusEnum.*; | |||
/** | |||
* <p> | |||
* SelfTestHandle | |||
@@ -32,7 +33,7 @@ import java.util.stream.Collectors; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class ProjectSelfTestHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectSelfTestHandle extends AbstractProcessHandle { | |||
private final IPurchaseService purchaseService; | |||
private final IPurchaseInstService purchaseInstService; | |||
@@ -40,32 +41,40 @@ public class ProjectSelfTestHandle extends AbstractProcessBusinessHandle { | |||
private final ProcessInstanceService processInstanceService; | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
List<Purchase> purchases = purchaseService.listByProjectId(project.getId()); | |||
void handle(HandleParamContext ctx) { | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
return; | |||
} | |||
List<Purchase> purchases = ctx.getPurchases(); | |||
Map<Long, Purchase> purchaseMap = purchases.stream() | |||
.filter(w -> TenderSelfTestStatusEnum.SELF_TEST_INFO_PASSED.eq(w.getSelfTestStatus()) | |||
|| TenderSelfTestStatusEnum.SELF_TEST_INFO_FAILED.eq(w.getSelfTestStatus())) | |||
.filter(w -> SELF_TEST_INFO_PASSED.eq(w.getSelfTestStatus()) | |||
|| SELF_TEST_INFO_FAILED.eq(w.getSelfTestStatus()) | |||
|| SELF_TEST_INFO_AUDIT.eq(w.getSelfTestStatus())) | |||
.collect(Collectors.toMap(Purchase::getId, Function.identity())); | |||
if (purchaseMap.isEmpty()) { | |||
return; | |||
} | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setProcessInfoList(new ArrayList<>()); | |||
processSchedule.add(detail); | |||
ctx.getProcessDetails().add(detail); | |||
Map<Long, PurchaseInst> instMap = purchaseInstService.list(purchaseMap.keySet(), InstTypeEnum.SELF_TEST.getCode()); | |||
List<ProgressNode> progressNodes = new ArrayList<>(); | |||
for (Map.Entry<Long, PurchaseInst> entry : instMap.entrySet()) { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(entry.getValue().getCreateOn())) { | |||
detail.setFinishTime(entry.getValue().getCreateOn()); | |||
} | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, entry.getValue().getInstCode()); | |||
buildUserUtils.buildUserByProcessInfo(instanceDetail.getProgressInfo()); | |||
progressNodes.addAll(instanceDetail.getProgressInfo()); | |||
ProcessInfoVO tenderProgress = new ProcessInfoVO(); | |||
tenderProgress.setProcessName(purchaseMap.get(entry.getKey()).getBidName()); | |||
tenderProgress.setProcessProgressVo(instanceDetail); | |||
detail.getProcessInfoList().add(tenderProgress); | |||
} | |||
buildUserUtils.buildUserByProcessInfo(progressNodes); | |||
StepStatusEnum stepStatus = getPurchaseStatus(detail.getProcessInfoList()); | |||
detail.setStepStatus(stepStatus); | |||
ctx.setPreStepStatus(stepStatus); | |||
} | |||
@Override | |||
@@ -3,12 +3,9 @@ package com.hz.pm.api.projectlib.handle; | |||
import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectdeclared.model.entity.PurchaseInst; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseInstService; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum; | |||
import com.hz.pm.api.projectlib.model.enumeration.TenderSelfTestStatusEnum; | |||
import com.hz.pm.api.projectlib.model.enumeration.TenderTestValidStatusEnum; | |||
import com.hz.pm.api.todocenter.utils.BuildUserUtils; | |||
import com.wflow.workflow.bean.process.ProgressNode; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.bean.vo.ProcessInfoVO; | |||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||
@@ -23,6 +20,8 @@ import java.util.Map; | |||
import java.util.function.Function; | |||
import java.util.stream.Collectors; | |||
import static com.hz.pm.api.projectlib.model.enumeration.TenderTestValidStatusEnum.*; | |||
/** | |||
* <p> | |||
* SelfTestHandle | |||
@@ -33,40 +32,48 @@ import java.util.stream.Collectors; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class ProjectTestValidHandle extends AbstractProcessBusinessHandle { | |||
public class ProjectTestValidHandle extends AbstractProcessHandle { | |||
private final IPurchaseService purchaseService; | |||
private final IPurchaseInstService purchaseInstService; | |||
private final BuildUserUtils buildUserUtils; | |||
private final ProcessInstanceService processInstanceService; | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
List<Purchase> purchases = purchaseService.listByProjectId(project.getId()); | |||
void handle(HandleParamContext ctx) { | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
return; | |||
} | |||
List<ProcessDetailVO> processDetails = ctx.getProcessDetails(); | |||
List<Purchase> purchases = ctx.getPurchases(); | |||
Map<Long, Purchase> purchaseMap = purchases.stream() | |||
.filter(w -> TenderTestValidStatusEnum.TEST_VALID_INFO_PASSED.eq(w.getTestValidStatus()) | |||
|| TenderTestValidStatusEnum.TEST_VALID_INFO_FAILED.eq(w.getTestValidStatus())) | |||
.filter(w -> TEST_VALID_INFO_PASSED.eq(w.getTestValidStatus()) | |||
|| TEST_VALID_INFO_FAILED.eq(w.getTestValidStatus()) | |||
|| TEST_VALID_INFO_AUDIT.eq(w.getTestValidStatus())) | |||
.collect(Collectors.toMap(Purchase::getId, Function.identity())); | |||
if (purchaseMap.isEmpty()) { | |||
return; | |||
} | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setProcessInfoList(new ArrayList<>()); | |||
processSchedule.add(detail); | |||
processDetails.add(detail); | |||
Map<Long, PurchaseInst> instMap = purchaseInstService.list(purchaseMap.keySet(), InstTypeEnum.TEST_VALID.getCode()); | |||
for (Map.Entry<Long, PurchaseInst> entry : instMap.entrySet()) { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(entry.getValue().getCreateOn())) { | |||
detail.setFinishTime(entry.getValue().getCreateOn()); | |||
List<ProgressNode> progressNodes = new ArrayList<>(); | |||
instMap.forEach((bidId, inst) -> { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(inst.getCreateOn())) { | |||
detail.setFinishTime(inst.getCreateOn()); | |||
} | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, entry.getValue().getInstCode()); | |||
buildUserUtils.buildUserByProcessInfo(instanceDetail.getProgressInfo()); | |||
ProcessProgressVo instDetail = processInstanceService.getProgressInstanceDetail(null, inst.getInstCode()); | |||
progressNodes.addAll(instDetail.getProgressInfo()); | |||
ProcessInfoVO tenderProgress = new ProcessInfoVO(); | |||
tenderProgress.setProcessName(purchaseMap.get(entry.getKey()).getBidName()); | |||
tenderProgress.setProcessProgressVo(instanceDetail); | |||
tenderProgress.setProcessName(purchaseMap.get(bidId).getBidName()); | |||
tenderProgress.setProcessProgressVo(instDetail); | |||
detail.getProcessInfoList().add(tenderProgress); | |||
} | |||
}); | |||
buildUserUtils.buildUserByProcessInfo(progressNodes); | |||
StepStatusEnum stepStatus = getPurchaseStatus(detail.getProcessInfoList()); | |||
detail.setStepStatus(stepStatus); | |||
ctx.setPreStepStatus(stepStatus); | |||
} | |||
@Override | |||
@@ -3,11 +3,9 @@ package com.hz.pm.api.projectlib.handle; | |||
import com.hz.pm.api.projectdeclared.model.entity.Purchase; | |||
import com.hz.pm.api.projectdeclared.model.entity.PurchaseInst; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseInstService; | |||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum; | |||
import com.hz.pm.api.projectlib.model.enumeration.TenderXcfhxApplyStatusEnum; | |||
import com.hz.pm.api.todocenter.utils.BuildUserUtils; | |||
import com.wflow.workflow.bean.process.ProgressNode; | |||
import com.wflow.workflow.bean.vo.ProcessDetailVO; | |||
import com.wflow.workflow.bean.vo.ProcessInfoVO; | |||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||
@@ -22,6 +20,8 @@ import java.util.Map; | |||
import java.util.function.Function; | |||
import java.util.stream.Collectors; | |||
import static com.hz.pm.api.projectlib.model.enumeration.TenderXcfhxApplyStatusEnum.*; | |||
/** | |||
* <p> | |||
* XcfhxReviewHandle | |||
@@ -32,41 +32,48 @@ import java.util.stream.Collectors; | |||
*/ | |||
@Component | |||
@RequiredArgsConstructor | |||
public class XcfhxReviewHandle extends AbstractProcessBusinessHandle { | |||
public class XcfhxReviewHandle extends AbstractProcessHandle { | |||
private final IPurchaseService purchaseService; | |||
private final IPurchaseInstService purchaseInstService; | |||
private final BuildUserUtils buildUserUtils; | |||
private final ProcessInstanceService processInstanceService; | |||
@Override | |||
void businessHandle(Project project, List<ProcessDetailVO> processSchedule) { | |||
List<Purchase> purchases = purchaseService.listByProjectId(project.getId()); | |||
void handle(HandleParamContext ctx) { | |||
if (!ctx.getPreStepStatus().equals(StepStatusEnum.COMPLETED)) { | |||
return; | |||
} | |||
List<Purchase> purchases = ctx.getPurchases(); | |||
Map<Long, Purchase> purchaseMap = purchases.stream() | |||
.filter(w -> TenderXcfhxApplyStatusEnum.XCFHX_APPLY_PASSED.eq(w.getXcfhxApplyStatus()) | |||
|| TenderXcfhxApplyStatusEnum.XCFHX_APPLY_FAILED.eq(w.getXcfhxApplyStatus())) | |||
.filter(w -> XCFHX_APPLY_PASSED.eq(w.getXcfhxApplyStatus()) | |||
|| XCFHX_APPLY_FAILED.eq(w.getXcfhxApplyStatus()) | |||
|| ON_XCFHX_APPLY.eq(w.getXcfhxApplyStatus())) | |||
.collect(Collectors.toMap(Purchase::getId, Function.identity())); | |||
if (purchaseMap.isEmpty()) { | |||
return; | |||
} | |||
ProcessDetailVO detail = new ProcessDetailVO(); | |||
detail.setProcessName(getProcessNode().getName()); | |||
detail.setStepStatus(StepStatusEnum.COMPLETED); | |||
detail.setProcessInfoList(new ArrayList<>()); | |||
processSchedule.add(detail); | |||
ctx.getProcessDetails().add(detail); | |||
Map<Long, PurchaseInst> instMap = purchaseInstService.list(purchaseMap.keySet(), InstTypeEnum.XCFHX_APPLY.getCode()); | |||
for (Map.Entry<Long, PurchaseInst> entry : instMap.entrySet()) { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(entry.getValue().getCreateOn())) { | |||
detail.setFinishTime(entry.getValue().getCreateOn()); | |||
List<ProgressNode> progressNodes = new ArrayList<>(); | |||
instMap.forEach((bidId, inst) -> { | |||
if (detail.getFinishTime() == null || detail.getFinishTime().isBefore(inst.getCreateOn())) { | |||
detail.setFinishTime(inst.getCreateOn()); | |||
} | |||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, entry.getValue().getInstCode()); | |||
buildUserUtils.buildUserByProcessInfo(instanceDetail.getProgressInfo()); | |||
ProcessProgressVo instDetail = processInstanceService.getProgressInstanceDetail(null, inst.getInstCode()); | |||
progressNodes.addAll(instDetail.getProgressInfo()); | |||
ProcessInfoVO tenderProgress = new ProcessInfoVO(); | |||
tenderProgress.setProcessName(purchaseMap.get(entry.getKey()).getBidName()); | |||
tenderProgress.setProcessProgressVo(instanceDetail); | |||
tenderProgress.setProcessName(purchaseMap.get(bidId).getBidName()); | |||
tenderProgress.setProcessProgressVo(instDetail); | |||
detail.getProcessInfoList().add(tenderProgress); | |||
} | |||
}); | |||
buildUserUtils.buildUserByProcessInfo(progressNodes); | |||
StepStatusEnum stepStatus = getPurchaseStatus(detail.getProcessInfoList()); | |||
detail.setStepStatus(stepStatus); | |||
ctx.setPreStepStatus(stepStatus); | |||
} | |||
@Override | |||
@@ -62,10 +62,9 @@ public enum ProjectStatusEnum { | |||
TO_BE_FINALLY_INSPECTED(20003, "待终验", GovProjectStatusEnum.HAS_PRE_INS), | |||
ON_FINALLY_INSPECTED(20010, "终验中", GovProjectStatusEnum.HAS_PRE_INS), | |||
TO_BE_FIRST_INSPECTED(20008, "待初验", null), | |||
ON_FIRST_INSPECTED(20009, "初验中", null), | |||
ON_PILOT_RUNNING(20009, "试运行中", null), | |||
FINAL_ACCEPTANCE_IS_UNDER_REVIEW(20004, "终验审核中", null), | |||
FINAL_ACCEPTANCE_REVIEW_FAILED(20005, "终验审核不通过", null), | |||
OPERATION(20006, "待开工", GovProjectStatusEnum.PURCHASED), | |||
/** | |||
* 项目阶段:已归档 | |||
*/ | |||
@@ -23,7 +23,7 @@ public enum TenderStatusEnum { | |||
TO_BE_SUBMIT_CONSTRUCTION_INFO(ProjectStatusEnum.ON_PURCHASING, 102, "待填写合同信息"), | |||
TO_BE_SUBMIT_OPERATION_PLAN(ProjectStatusEnum.ON_PURCHASING, 103, "待填写实施计划"), | |||
TO_BE_SUBMIT_FIRST_INSPECTED_INFO(ProjectStatusEnum.TO_BE_FIRST_INSPECTED, 201, "待上传初验材料"), | |||
TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY(ProjectStatusEnum.ON_FIRST_INSPECTED, 401, "待终验申报"), | |||
TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY(ProjectStatusEnum.ON_PILOT_RUNNING, 401, "待终验申报"), | |||
ON_FINALLY_INSPECTED_APPLY(ProjectStatusEnum.ON_FINALLY_INSPECTED, 501, "终验申报中"), | |||
FINALLY_INSPECTED_FAILED(ProjectStatusEnum.ON_FINALLY_INSPECTED, 502, "终验申报不通过"), | |||
FINALLY_INSPECTED_PASSED(ProjectStatusEnum.ACCEPTED, 601, "终验完成"); | |||
@@ -213,7 +213,7 @@ public class HandlerManage { | |||
break; | |||
case ON_PURCHASING: | |||
case TO_BE_FIRST_INSPECTED: | |||
case ON_FIRST_INSPECTED: | |||
case ON_PILOT_RUNNING: | |||
case TO_BE_FINALLY_INSPECTED: | |||
case ON_FINALLY_INSPECTED: | |||
ProjectProcessStageEnum processStage = ProjectProcessStageEnum.get(instTypeEnum.getCode()) | |||