@@ -1,9 +1,8 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.controller; | package com.ningdatech.pmapi.projectdeclared.controller; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.pmapi.projectdeclared.entity.dto.DeclaredProjectListParamDto; | |||||
import com.ningdatech.pmapi.projectdeclared.entity.vo.ProjectDeclaredListItemVO; | |||||
import com.ningdatech.pmapi.projectdeclared.manage.DeclaredProjectManage; | |||||
import com.ningdatech.pmapi.projectdeclared.entity.dto.PreDeclaredProjectDto; | |||||
import com.ningdatech.pmapi.projectdeclared.manage.PrequalificationDeclaredProjectManage; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage; | import com.ningdatech.pmapi.projectlib.manage.ProjectLibManage; | ||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | ||||
@@ -13,10 +12,7 @@ import io.swagger.annotations.ApiOperation; | |||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||
import org.springframework.web.bind.annotation.GetMapping; | |||||
import org.springframework.web.bind.annotation.ModelAttribute; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RestController; | |||||
import org.springframework.web.bind.annotation.*; | |||||
/** | /** | ||||
* @Classname PrequalificationDeclaredController | * @Classname PrequalificationDeclaredController | ||||
@@ -34,6 +30,8 @@ public class PrequalificationDeclaredController { | |||||
private final ProjectLibManage projectLibManage; | private final ProjectLibManage projectLibManage; | ||||
private final PrequalificationDeclaredProjectManage prequalificationDeclaredProjectManage; | |||||
@ApiOperation(value = "可预审申报项目列表", notes = "可预审申报项目列表") | @ApiOperation(value = "可预审申报项目列表", notes = "可预审申报项目列表") | ||||
@GetMapping("/list") | @GetMapping("/list") | ||||
public PageVo<ProjectLibListItemVO> list(@Validated @ModelAttribute ProjectListReq req) { | public PageVo<ProjectLibListItemVO> list(@Validated @ModelAttribute ProjectListReq req) { | ||||
@@ -42,4 +40,11 @@ public class PrequalificationDeclaredController { | |||||
req.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode()); | req.setStatus(ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode()); | ||||
return projectLibManage.projectLibList(req); | return projectLibManage.projectLibList(req); | ||||
} | } | ||||
@ApiOperation(value = "申报预审", notes = "申报预审") | |||||
@PostMapping("/start") | |||||
public String startTheProcess(@Validated @RequestBody PreDeclaredProjectDto dto) { | |||||
String instanceId = prequalificationDeclaredProjectManage.startTheProcess(dto); | |||||
return "提交预审 " + instanceId + " 成功"; | |||||
} | |||||
} | } |
@@ -0,0 +1,43 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.entity.dto; | |||||
import cn.hutool.core.collection.CollUtil; | |||||
import com.google.common.collect.Maps; | |||||
import com.ningdatech.pmapi.projectlib.model.dto.ProjectDto; | |||||
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Builder; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import javax.validation.constraints.NotNull; | |||||
import java.io.Serializable; | |||||
import java.util.Map; | |||||
/** | |||||
* @Classname DeclaredProjectDto | |||||
* @Description 申报项目 | |||||
* @Date 2023/2/1 14:52 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@Builder | |||||
@NoArgsConstructor | |||||
@AllArgsConstructor | |||||
public class PreDeclaredProjectDto implements Serializable { | |||||
@NotNull | |||||
private Long projectId; | |||||
private Map<String,Object> formData; | |||||
@NotNull | |||||
private ProcessInstanceUserDto user; | |||||
public Map<String,Object> getFormData(){ | |||||
if(CollUtil.isEmpty(this.formData)){ | |||||
this.formData = Maps.newHashMap(); | |||||
return this.formData; | |||||
} | |||||
return this.formData; | |||||
} | |||||
} |
@@ -142,7 +142,8 @@ public class DeclaredProjectManage { | |||||
.last("limit 1")); | .last("limit 1")); | ||||
if (Objects.isNull(model)) { | if (Objects.isNull(model)) { | ||||
throw new BusinessException(String.format("此 【%s】区域找不到流程配置", regionCode)); | |||||
log.error("此 【{}】区域找不到单位流程配置", regionCode); | |||||
throw new BusinessException(String.format("此 【%s】区域找不到单位流程配置", regionCode)); | |||||
} | } | ||||
ProcessStartParamsVo params = new ProcessStartParamsVo(); | ProcessStartParamsVo params = new ProcessStartParamsVo(); | ||||
@@ -0,0 +1,118 @@ | |||||
package com.ningdatech.pmapi.projectdeclared.manage; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.TypeReference; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.ningdatech.basic.function.VUtils; | |||||
import com.ningdatech.pmapi.common.enums.ProjectProessStageEnum; | |||||
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; | |||||
import com.ningdatech.pmapi.projectdeclared.entity.dto.PreDeclaredProjectDto; | |||||
import com.ningdatech.pmapi.projectdeclared.entity.dto.ProjectConditionDto; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | |||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | |||||
import com.wflow.bean.entity.WflowModels; | |||||
import com.wflow.exception.BusinessException; | |||||
import com.wflow.workflow.bean.vo.ProcessStartParamsVo; | |||||
import com.wflow.workflow.service.ProcessInstanceService; | |||||
import com.wflow.workflow.service.ProcessModelService; | |||||
import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.beans.BeanUtils; | |||||
import org.springframework.stereotype.Component; | |||||
import java.time.LocalDateTime; | |||||
import java.util.Collections; | |||||
import java.util.Map; | |||||
import java.util.Objects; | |||||
/** | |||||
* @Classname ProqualificationDeclaredProjectManage | |||||
* @Description | |||||
* @Date 2023/2/13 14:48 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Component | |||||
@Slf4j | |||||
@RequiredArgsConstructor | |||||
public class PrequalificationDeclaredProjectManage { | |||||
private final IProjectService projectService; | |||||
private final StateMachineUtils stateMachineUtils; | |||||
private final ProcessInstanceService processService; | |||||
private final ProcessModelService processModelService; | |||||
/** | |||||
* 提交预审 | |||||
* | |||||
* @param dto | |||||
* @return | |||||
*/ | |||||
public String startTheProcess(PreDeclaredProjectDto dto) { | |||||
Project projectInfo = projectService.getById(dto.getProjectId()); | |||||
VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); | |||||
String regionCode = projectInfo.getAreaCode(); | |||||
WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) | |||||
.eq(WflowModels::getRegionCode, regionCode) | |||||
.eq(WflowModels::getFormName, ProjectProessStageEnum.PROJECT_PREQUALIFICATION_APPROVAL_PROCESS.getDesc()) | |||||
.last("limit 1")); | |||||
if (Objects.isNull(model)) { | |||||
log.error("此 【{}】区域找不到 预审流程配置", regionCode); | |||||
throw new BusinessException(String.format("此 【%s】区域找不到 预审流程配置", regionCode)); | |||||
} | |||||
//首先要判断 项目当前状态 是不是 待预审 | |||||
VUtils.isTrue(!ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode().equals(projectInfo.getStatus()) || | |||||
!ProjectStatusEnum.NOT_APPROVED.getCode().equals(projectInfo.getStage())) | |||||
.throwMessage("提交失败 该项目不是 待预审状态或者未立项阶段"); | |||||
//TODO 再判断 该项目是否 真实走完 单位内部审批 | |||||
ProcessStartParamsVo params = new ProcessStartParamsVo(); | |||||
params.setUser(dto.getUser()); | |||||
params.setProcessUsers(Collections.emptyMap()); | |||||
//放入条件判断的项目字段 | |||||
ProjectConditionDto conditionDto = new ProjectConditionDto(); | |||||
BeanUtils.copyProperties(projectInfo, conditionDto); | |||||
if (Objects.nonNull(conditionDto)) { | |||||
dto.getFormData().putAll( | |||||
JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference<Map<String, Object>>() { | |||||
}) | |||||
); | |||||
} | |||||
params.setFormData(dto.getFormData()); | |||||
String instanceId = processService.startProcess(model.getProcessDefId(), params); | |||||
log.info("提交预审项目成功 【{}】", instanceId); | |||||
//保存预审项目 | |||||
modifyProject(projectInfo, instanceId); | |||||
return instanceId; | |||||
} | |||||
/** | |||||
* 提交预审项目 时 更新信息 | |||||
* | |||||
* @param project | |||||
* @param instanceId | |||||
*/ | |||||
private void modifyProject(Project project, String instanceId) { | |||||
//流程启动之后 入库项目 重要业务信息 用于列表查询 展示 | |||||
try { | |||||
project.setUpdateOn(LocalDateTime.now()); | |||||
project.setInstCode(instanceId); | |||||
//调用状态机 进入下一个通过状态 | |||||
stateMachineUtils.execute(project,stateMachineUtils.getProjectStatusPassEvent(project.getStatus())); | |||||
projectService.updateById(project); | |||||
} catch (Exception e) { | |||||
log.error("提交预审 项目信息修改 错误 ", e); | |||||
throw new BusinessException("提交预审 项目信息修改 错误 :" + e.getMessage()); | |||||
} | |||||
} | |||||
} |