diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ConstructionPlanReviewHandle.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ConstructionPlanReviewHandle.java index fe2f333..27ef385 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ConstructionPlanReviewHandle.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ConstructionPlanReviewHandle.java @@ -64,23 +64,20 @@ public class ConstructionPlanReviewHandle extends AbstractProcessBusinessHandle ProcessProgressVo instanceDetail = null; // 未找到当前版本项目的建设方案审核流程且当前项目版本号大于1(是被驳回重新申报的项目) if (Objects.isNull(projectInst)) { - if (project.getVersion() > CommonConst.VERSION_ONE){ + if (project.getVersion() > CommonConst.VERSION_ONE ){ // 获取上个版本的信息 - instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId); - if (Objects.isNull(instanceDetail)){ - throw new BizException("未获取到历史版本的流程详情!"); - } - }else { - // 版本号为1 - processDetailVO.setStepStatus(StepStatusEnum.NOT_START); - processDetailVO.setProcessName(CommonConst.CONSTRUCTION_PLAN_REVIEW); - processSchedule.add(processDetailVO); - return; + instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId,InstTypeEnum.CONSTRUCTION_PLAN_REVIEW); } }else { String instCode = projectInst.getInstCode(); instanceDetail = processInstanceService.getProgressInstanceDetail(null, instCode); } + if (Objects.isNull(instanceDetail)){ + processDetailVO.setStepStatus(StepStatusEnum.NOT_START); + processDetailVO.setProcessName(CommonConst.CONSTRUCTION_PLAN_REVIEW); + processSchedule.add(processDetailVO); + return; + } String status = instanceDetail.getStatus(); if (ProcessStatusEnum.UNDER_REVIEW.getDesc().equals(status)){ processDetailVO.setStepStatus(StepStatusEnum.ON_GOING); diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/PreliminaryPreviewHandle.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/PreliminaryPreviewHandle.java index c0dd713..95a8fd6 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/PreliminaryPreviewHandle.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/PreliminaryPreviewHandle.java @@ -68,21 +68,18 @@ public class PreliminaryPreviewHandle extends AbstractProcessBusinessHandle { if (Objects.isNull(projectInst)) { if (project.getVersion() > CommonConst.VERSION_ONE){ // 获取上个版本的信息 - instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId); - if (Objects.isNull(instanceDetail)){ - throw new BizException("未获取到历史版本的流程详情!"); - } - }else { - // 版本号为1 - processDetailVO.setStepStatus(StepStatusEnum.NOT_START); - processDetailVO.setProcessName(CommonConst.PRELIMINARY_PREVIEW); - processSchedule.add(processDetailVO); - return; + instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId,InstTypeEnum.PRELIMINARY_PREVIEW); } }else { String instCode = projectInst.getInstCode(); instanceDetail = processInstanceService.getProgressInstanceDetail(null, instCode); } + if (Objects.isNull(instanceDetail)){ + processDetailVO.setStepStatus(StepStatusEnum.NOT_START); + processDetailVO.setProcessName(CommonConst.PRELIMINARY_PREVIEW); + processSchedule.add(processDetailVO); + return; + } String status = instanceDetail.getStatus(); if (ProcessStatusEnum.UNDER_REVIEW.getDesc().equals(status)){ processDetailVO.setStepStatus(StepStatusEnum.ON_GOING); diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/UnitInnerAuditHandle.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/UnitInnerAuditHandle.java index 344d0a5..1057e4a 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/UnitInnerAuditHandle.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/UnitInnerAuditHandle.java @@ -4,6 +4,7 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -71,7 +72,7 @@ public class UnitInnerAuditHandle extends AbstractProcessBusinessHandle { if (Objects.isNull(projectInst)) { if (project.getVersion() > CommonConst.VERSION_ONE){ // 获取上个版本的信息 - instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId); + instanceDetail = projectVersionUtil.getPreVerProcessInfo(projectId, InstTypeEnum.UNIT_INNER_AUDIT); } }else { String instCode = projectInst.getInstCode(); diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/utils/ProjectVersionUtil.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/utils/ProjectVersionUtil.java index 92532af..faa55cb 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/utils/ProjectVersionUtil.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/utils/ProjectVersionUtil.java @@ -1,9 +1,14 @@ package com.ningdatech.pmapi.projectlib.utils; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ningdatech.basic.exception.BizException; +import com.ningdatech.basic.util.CollUtils; import com.ningdatech.pmapi.common.constant.CommonConst; +import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum; import com.ningdatech.pmapi.projectlib.model.entity.Project; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst; +import com.ningdatech.pmapi.projectlib.service.IProjectInstService; import com.ningdatech.pmapi.projectlib.service.IProjectService; import com.wflow.workflow.bean.vo.ProcessProgressVo; import com.wflow.workflow.service.ProcessInstanceService; @@ -13,8 +18,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 根据项目版本获取流程详情工具类 @@ -29,13 +37,14 @@ public class ProjectVersionUtil { private final IProjectService projectService; private final ProcessInstanceService processInstanceService; + private final IProjectInstService projectInstService; /** * 根据最新的项目ID获取临近项目版本的审核记录信息 * @param projectId * @return */ - public ProcessProgressVo getPreVerProcessInfo(Long projectId){ + public ProcessProgressVo getPreVerProcessInfo(Long projectId, InstTypeEnum instTypeEnum){ Project project = projectService.getById(projectId); if (Objects.isNull(project)){ throw new BizException("当前项目不存在!"); @@ -46,22 +55,28 @@ public class ProjectVersionUtil { } // 获取相同项目编号的项目 List projectList = projectService.list(Wrappers.lambdaQuery(Project.class) - .eq(Project::getProjectCode, projectCode) - .orderByDesc(Project::getVersion)); + .eq(Project::getProjectCode, projectCode)); if (projectList.size() < CommonConst.VERSION_SIZE){ throw new BizException("未发现该项目的历史版本!"); } // 获取上个版本的项目 - int index = projectList.size() - CommonConst.VERSION_SIZE; + int index = projectList.size() - 1; ProcessProgressVo instanceDetail = null; while (index > 0){ index = index - 1; Project preProject = projectList.get(index); - // 获取上个版本的项目关联的流程实例ID - String preInstCode = preProject.getInstCode(); - instanceDetail = processInstanceService.getProgressInstanceDetail(null, preInstCode); - if (Objects.nonNull(instanceDetail)){ - return instanceDetail; + // 从项目流程实例关联表中查出实例详情 + List projectInstList = projectInstService.list(Wrappers.lambdaQuery(ProjectInst.class) + .eq(ProjectInst::getProjectId, preProject.getId()) + .eq(ProjectInst::getInstType,instTypeEnum.getCode())); + if (CollUtil.isNotEmpty(projectInstList)) { + // 获取最新一个对应审核类型的项目关联实例 + ProjectInst projectInst = projectInstList.get(projectInstList.size() - 1); + // 获取流程详情 + instanceDetail = processInstanceService.getProgressInstanceDetail(null, projectInst.getInstCode()); + if (Objects.nonNull(instanceDetail)){ + return instanceDetail; + } } } return null;