Browse Source

信创符合性申请审批修改

tags/24080901
WendyYang 10 months ago
parent
commit
e9efe476ca
22 changed files with 337 additions and 251 deletions
  1. +3
    -15
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectStateChangeAction.java
  2. +2
    -17
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java
  3. +1
    -9
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/ProjectStateChangeEvent.java
  4. +0
    -59
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/AbstractProcessBusinessHandle.java
  5. +92
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/AbstractProcessHandle.java
  6. +5
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ApprovalAmountHandle.java
  7. +38
    -24
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/FinalInspectionHandle.java
  8. +18
    -16
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/FirstInspectedHandle.java
  9. +30
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/HandleParamContext.java
  10. +19
    -16
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/PilotRunningHandle.java
  11. +9
    -7
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProcessProgressContext.java
  12. +22
    -16
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectAdaptionHandle.java
  13. +4
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectApprovalHandle.java
  14. +4
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectDeclareHandle.java
  15. +11
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectPurchaseHandle.java
  16. +4
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectReviewHandle.java
  17. +19
    -10
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectSelfTestHandle.java
  18. +27
    -20
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectTestValidHandle.java
  19. +26
    -19
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/XcfhxReviewHandle.java
  20. +1
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/ProjectStatusEnum.java
  21. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/TenderStatusEnum.java
  22. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java

+ 3
- 15
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectStateChangeAction.java View File

@@ -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());


+ 2
- 17
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java View File

@@ -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()
// 终审审核通过,从终审审核中到已归档


+ 1
- 9
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/ProjectStateChangeEvent.java View File

@@ -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),
/**
* 终验审核不通过(项目状态变为:终验审核不通过)
*/


+ 0
- 59
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/AbstractProcessBusinessHandle.java View File

@@ -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;

}

}

+ 92
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/AbstractProcessHandle.java View File

@@ -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;
}
}

}

+ 5
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ApprovalAmountHandle.java View File

@@ -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);
}


+ 38
- 24
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/FinalInspectionHandle.java View File

@@ -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


+ 18
- 16
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/FirstInspectedHandle.java View File

@@ -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);
}
}
}



+ 30
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/HandleParamContext.java View File

@@ -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;

}

+ 19
- 16
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/PilotRunningHandle.java View File

@@ -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


+ 9
- 7
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProcessProgressContext.java View File

@@ -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();


+ 22
- 16
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectAdaptionHandle.java View File

@@ -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


+ 4
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectApprovalHandle.java View File

@@ -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;


+ 4
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectDeclareHandle.java View File

@@ -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


+ 11
- 6
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectPurchaseHandle.java View File

@@ -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());
}



+ 4
- 4
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectReviewHandle.java View File

@@ -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);
}

}

+ 19
- 10
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectSelfTestHandle.java View File

@@ -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


+ 27
- 20
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/ProjectTestValidHandle.java View File

@@ -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


+ 26
- 19
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/XcfhxReviewHandle.java View File

@@ -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


+ 1
- 2
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/ProjectStatusEnum.java View File

@@ -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),
/**
* 项目阶段:已归档
*/


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/TenderStatusEnum.java View File

@@ -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, "终验完成");


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java View File

@@ -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())


Loading…
Cancel
Save