@@ -18,4 +18,15 @@ public class CommonConstant { | |||||
public static final Integer SUB_COMMENT_SIZE_MIN = 0; | public static final Integer SUB_COMMENT_SIZE_MIN = 0; | ||||
public static final Integer SUB_COMMENT_SIZE_MAX = 160; | public static final Integer SUB_COMMENT_SIZE_MAX = 160; | ||||
public static final String PROJECT_DECLARE_PREFIX = "projectDeclare"; | |||||
public static final String UNIT_INNER_AUDIT_PREFIX = "unitInnerAudit"; | |||||
public static final String PRELIMINARY_PREVIEW_PREFIX = "preliminaryPreview"; | |||||
public static final String DEPT_UNITED_REVIEW_PREFIX = "deptUnitedReview"; | |||||
public static final String ANNUAL_PLAN_PREFIX = "annualPlan"; | |||||
public static final String CONSTRUCTION_PLAN_REVIEW_PREFIX = "constructionPlanReview"; | |||||
public static final String PROJECT_APPROVAL_PREFIX = "projectApproval"; | |||||
public static final String TENDER_PURCHASE_PREFIX = "tenderPurchase"; | |||||
public static final String PROJECT_PRELIMINARY_INSPECTION_PREFIX = "projectPreliminaryInspection"; | |||||
public static final String PROJECT_FINAL_INSPECTION_PREFIX = "projectFinalInspection"; | |||||
} | } |
@@ -5,6 +5,7 @@ import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | import com.ningdatech.pmapi.projectlib.model.entity.Project; | ||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | ||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectDetailVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProjectDetailVO; | ||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | ||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
@@ -40,4 +41,10 @@ public class ProjectLibController { | |||||
return projectLibManage.getProjectDetail(id); | return projectLibManage.getProjectDetail(id); | ||||
} | } | ||||
@GetMapping("/totalProcessDetail/{projectId}") | |||||
@ApiOperation("获取流程当前进度") | |||||
private ProcessDetailVO totalProcessDetail(@PathVariable Long projectId){ | |||||
return projectLibManage.totalProcessDetail(projectId); | |||||
} | |||||
} | } |
@@ -0,0 +1,43 @@ | |||||
package com.ningdatech.pmapi.projectlib.enumeration; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Getter; | |||||
import lombok.NoArgsConstructor; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import java.util.Objects; | |||||
/** | |||||
* | |||||
* 实例类型枚举 | |||||
* @author CMM | |||||
* @since 2023/02/24 16:14 | |||||
*/ | |||||
@Getter | |||||
@NoArgsConstructor | |||||
@AllArgsConstructor | |||||
public enum InstTypeEnum { | |||||
/** | |||||
* 流程实例类型 | |||||
*/ | |||||
UNIT_INNER_AUDIT(1, "单位内部审批流程"), | |||||
PRELIMINARY_PREVIEW(2, "项目预审审批流程"), | |||||
DEPT_UNITED_REVIEW(3,"部门联合审批流程"), | |||||
CONSTRUCTION_PLAN_REVIEW(4,"建设方案审批流程"), | |||||
PROJECT_FINAL_INSPECTION(5,"验收申报审批流程"); | |||||
private Integer code; | |||||
private String desc; | |||||
public static String getDescByCode(Integer code) { | |||||
if (Objects.isNull(code)) { | |||||
return StringUtils.EMPTY; | |||||
} | |||||
for (InstTypeEnum t : InstTypeEnum.values()) { | |||||
if (code.equals(t.getCode())) { | |||||
return t.desc; | |||||
} | |||||
} | |||||
return StringUtils.EMPTY; | |||||
} | |||||
} |
@@ -0,0 +1,41 @@ | |||||
package com.ningdatech.pmapi.projectlib.enumeration; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Getter; | |||||
import lombok.NoArgsConstructor; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import java.util.Objects; | |||||
@Getter | |||||
@AllArgsConstructor | |||||
@NoArgsConstructor | |||||
/** | |||||
* 环节状态枚举 | |||||
* @author CMM | |||||
* @since 2023/02/24 11:51 | |||||
*/ | |||||
public enum StepStatusEnum { | |||||
/** | |||||
* 环节状态 | |||||
*/ | |||||
NOT_START(1, "未开始"), | |||||
ON_GOING(2, "进行中"), | |||||
REJECTED(3,"被驳回"), | |||||
COMPLETED(4,"已完成"); | |||||
private Integer code; | |||||
private String desc; | |||||
public static String getDescByCode(Integer code) { | |||||
if (Objects.isNull(code)) { | |||||
return StringUtils.EMPTY; | |||||
} | |||||
for (StepStatusEnum t : StepStatusEnum.values()) { | |||||
if (code.equals(t.getCode())) { | |||||
return t.desc; | |||||
} | |||||
} | |||||
return StringUtils.EMPTY; | |||||
} | |||||
} |
@@ -0,0 +1,43 @@ | |||||
package com.ningdatech.pmapi.projectlib.handler; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | |||||
/** | |||||
* 流程业务抽象处理类 | |||||
* | |||||
* @author CMM | |||||
* @since 2023/02/24 14:22 | |||||
*/ | |||||
public abstract class AbstractProcessBusinessHandler { | |||||
/** | |||||
* 前缀,用于区分是什么业务 | |||||
*/ | |||||
private String prefix; | |||||
/** | |||||
* 构造,子类必须实现 | |||||
*/ | |||||
public AbstractProcessBusinessHandler(){} | |||||
/** | |||||
* 操作前缀属性的公开方法 | |||||
*/ | |||||
public String getPrefix(){ | |||||
return prefix; | |||||
} | |||||
public void setPrefix(String prefix){ | |||||
this.prefix = prefix; | |||||
} | |||||
/** | |||||
* 抽象的,所有具体处理者应该实现的处理逻辑 | |||||
* @param projectId 项目ID | |||||
* @return void | |||||
* @author CMM | |||||
* @since 2023/02/24 14:33 | |||||
*/ | |||||
abstract ProcessDetailVO businessHandle(Long projectId); | |||||
} |
@@ -0,0 +1,70 @@ | |||||
package com.ningdatech.pmapi.projectlib.handler; | |||||
import java.time.LocalDateTime; | |||||
import java.util.Objects; | |||||
import org.springframework.stereotype.Component; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.ningdatech.pmapi.common.constant.CommonConstant; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectInstService; | |||||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||||
import com.wflow.workflow.enums.ProcessStatusEnum; | |||||
import com.wflow.workflow.service.ProcessInstanceService; | |||||
/** | |||||
* 单位内部审核处理 | |||||
* | |||||
* @author CMM | |||||
* @since 2023/02/24 14:35 | |||||
*/ | |||||
@Component | |||||
public class DeptUnitedReviewHandle extends AbstractProcessBusinessHandler{ | |||||
private final IProjectInstService projectInstService; | |||||
private final ProcessInstanceService processInstanceService; | |||||
/** | |||||
* 设置该业务前缀 | |||||
*/ | |||||
private static final String PREFIX = CommonConstant.DEPT_UNITED_REVIEW_PREFIX; | |||||
public DeptUnitedReviewHandle(IProjectInstService projectInstService, ProcessInstanceService processInstanceService){ | |||||
setPrefix(PREFIX); | |||||
this.projectInstService = projectInstService; | |||||
this.processInstanceService = processInstanceService; | |||||
} | |||||
@Override | |||||
ProcessDetailVO businessHandle(Long projectId) { | |||||
ProcessDetailVO processDetailVO = new ProcessDetailVO(); | |||||
// 根据项目ID查询出单位内部审核流程的流程状态 | |||||
// 注意:已经在项目库中的项目,一定是已经开始的项目 | |||||
ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class) | |||||
.eq(ProjectInst::getProjectId, projectId) | |||||
.eq(ProjectInst::getInstType, InstTypeEnum.DEPT_UNITED_REVIEW.getCode())); | |||||
if (Objects.isNull(projectInst)){ | |||||
processDetailVO.setStepStatus(StepStatusEnum.NOT_START); | |||||
return processDetailVO; | |||||
} | |||||
String instCode = projectInst.getInstCode(); | |||||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, instCode); | |||||
String status = instanceDetail.getStatus(); | |||||
if (ProcessStatusEnum.UNDER_REVIEW.getDesc().equals(status)){ | |||||
processDetailVO.setStepStatus(StepStatusEnum.ON_GOING); | |||||
} else if (ProcessStatusEnum.BE_REJECTED.getDesc().equals(status)) { | |||||
processDetailVO.setStepStatus(StepStatusEnum.REJECTED); | |||||
} else if (ProcessStatusEnum.APPROVED.getDesc().equals(status)) { | |||||
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED); | |||||
} | |||||
// 根据流程处理详情获取流程完成时间 | |||||
LocalDateTime finishTime = processDetailVO.getFinishTime(); | |||||
processDetailVO.setFinishTime(finishTime); | |||||
return processDetailVO; | |||||
} | |||||
} |
@@ -0,0 +1,44 @@ | |||||
package com.ningdatech.pmapi.projectlib.handler; | |||||
import com.ningdatech.pmapi.common.constant.CommonConstant; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* 项目申报处理 | |||||
* | |||||
* @author CMM | |||||
* @since 2023/02/24 14:35 | |||||
*/ | |||||
public class ProjectDeclareHandle extends AbstractProcessBusinessHandler{ | |||||
@Autowired | |||||
private IProjectService projectService; | |||||
/** | |||||
* 设置该业务前缀 | |||||
*/ | |||||
private static final String PREFIX = CommonConstant.PROJECT_DECLARE_PREFIX; | |||||
public ProjectDeclareHandle(){ | |||||
setPrefix(PREFIX); | |||||
} | |||||
@Override | |||||
ProcessDetailVO businessHandle(Long projectId) { | |||||
// 因为此时在项目库中的项目,都是已经申报过的项目,所以直接设置环节状态为已完成 | |||||
ProcessDetailVO processDetailVO = new ProcessDetailVO(); | |||||
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED); | |||||
// 项目库中查出申报完成时间 | |||||
Project project = projectService.getById(projectId); | |||||
LocalDateTime createOn = project.getCreateOn(); | |||||
processDetailVO.setFinishTime(createOn); | |||||
return processDetailVO; | |||||
} | |||||
} |
@@ -0,0 +1,65 @@ | |||||
package com.ningdatech.pmapi.projectlib.handler; | |||||
import java.time.LocalDateTime; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.ProjectInst; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectInstService; | |||||
import com.ningdatech.pmapi.common.constant.CommonConstant; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | |||||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||||
import com.wflow.workflow.enums.ProcessStatusEnum; | |||||
import com.wflow.workflow.service.ProcessInstanceService; | |||||
import org.springframework.stereotype.Component; | |||||
/** | |||||
* 单位内部审核处理 | |||||
* | |||||
* @author CMM | |||||
* @since 2023/02/24 14:35 | |||||
*/ | |||||
@Component | |||||
public class UnitInnerAuditHandle extends AbstractProcessBusinessHandler{ | |||||
private final IProjectInstService projectInstService; | |||||
private final ProcessInstanceService processInstanceService; | |||||
/** | |||||
* 设置该业务前缀 | |||||
*/ | |||||
private static final String PREFIX = CommonConstant.UNIT_INNER_AUDIT_PREFIX; | |||||
public UnitInnerAuditHandle(IProjectInstService projectInstService, ProcessInstanceService processInstanceService){ | |||||
setPrefix(PREFIX); | |||||
this.projectInstService = projectInstService; | |||||
this.processInstanceService = processInstanceService; | |||||
} | |||||
@Override | |||||
ProcessDetailVO businessHandle(Long projectId) { | |||||
ProcessDetailVO processDetailVO = new ProcessDetailVO(); | |||||
// 根据项目ID查询出单位内部审核流程的流程状态 | |||||
// 注意:已经在项目库中的项目,一定是已经开始的项目 | |||||
ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class) | |||||
.eq(ProjectInst::getProjectId, projectId) | |||||
.eq(ProjectInst::getInstType, InstTypeEnum.UNIT_INNER_AUDIT.getCode())); | |||||
String instCode = projectInst.getInstCode(); | |||||
ProcessProgressVo instanceDetail = processInstanceService.getProgressInstanceDetail(null, instCode); | |||||
String status = instanceDetail.getStatus(); | |||||
if (ProcessStatusEnum.UNDER_REVIEW.getDesc().equals(status)){ | |||||
processDetailVO.setStepStatus(StepStatusEnum.ON_GOING); | |||||
} else if (ProcessStatusEnum.BE_REJECTED.getDesc().equals(status)) { | |||||
processDetailVO.setStepStatus(StepStatusEnum.REJECTED); | |||||
} else if (ProcessStatusEnum.APPROVED.getDesc().equals(status)) { | |||||
processDetailVO.setStepStatus(StepStatusEnum.COMPLETED); | |||||
} | |||||
// 项目库中查出申报完成时间 | |||||
LocalDateTime finishTime = processDetailVO.getFinishTime(); | |||||
processDetailVO.setFinishTime(finishTime); | |||||
return processDetailVO; | |||||
} | |||||
} |
@@ -0,0 +1,37 @@ | |||||
package com.ningdatech.pmapi.projectlib.model.vo; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.StepStatusEnum; | |||||
import com.wflow.workflow.bean.vo.ProcessProgressVo; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.io.Serializable; | |||||
import java.time.LocalDateTime; | |||||
import java.util.List; | |||||
/** | |||||
* 流程进度详情VO | |||||
* | |||||
* @author CMM | |||||
* @since 2023/02/24 11:25 | |||||
*/ | |||||
@ApiModel(value = "ProcessDetailVO", description = "流程进度详情VO") | |||||
@Data | |||||
public class ProcessDetailVO implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("环节状态") | |||||
private StepStatusEnum stepStatus; | |||||
@ApiModelProperty("完成时间") | |||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | |||||
private LocalDateTime finishTime; | |||||
@ApiModelProperty("流程处理进度详情") | |||||
private ProcessProgressVo processProgressVo; | |||||
} |
@@ -291,6 +291,7 @@ public class TodoCenterManage { | |||||
break; | break; | ||||
// 盖章并通过 | // 盖章并通过 | ||||
case SEAL_PASS: | case SEAL_PASS: | ||||
// TODO 调用盖章接口,返回盖章后的文件流 | |||||
// 通过该任务,流程到下一审核人处 | // 通过该任务,流程到下一审核人处 | ||||
processTaskService.handleTask(param, userId); | processTaskService.handleTask(param, userId); | ||||
break; | break; | ||||