diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java index d843185f..3c71b1a9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java @@ -23,6 +23,7 @@ public enum ProcessTypeEnum { ES_ABOLISH("企标废止流程",13, "com.jero.modules.activiti.process.esAbolish.service.impl.ProcessEsAbolishServiceImpl"), ES_ARCHIVE("企标封存流程",14, "com.jero.modules.activiti.process.esArchive.service.impl.ProcessEsArchiveServiceImpl"), ES_ENABLE("已封存企标启用流程",15, "com.jero.modules.activiti.process.esEnable.service.impl.ProcessEsEnableServiceImpl"), + FB_ENTRY_CHANGE("标准法规入库/变更流程",16, "com.jero.modules.activiti.process.fb.service.impl.ProcessHandleServiceImpl"), ; private String name; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java new file mode 100644 index 00000000..f5c3d5f2 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java @@ -0,0 +1,14 @@ +package com.jero.modules.activiti.process.fb.common; + +/** + * @Author: liao + * @Date: 2023/11/3 11:20 + * @Description: 流程定义key + */ +public class ProcessDefinitionKey { + + private ProcessDefinitionKey() {} + + public static final String FB_ENTRY_CHANGE = "fb-entry-change"; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java index fa5dfa33..48d7337d 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java @@ -5,6 +5,7 @@ import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.util.MessageUtils; import com.jero.modules.activiti.process.fb.entity.ProcessFbEntryChange; import com.jero.modules.activiti.process.fb.service.IProcessFbEntryChangeService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.laws.common.constant.ResultCommon; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -57,4 +58,20 @@ public class ProcessFbEntryChangeController extends JeroController startProcess(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processFbEntryChangeService.startProcess(processInfoVO); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + @AutoLog(value = "流程处理-保存为草稿") + @ApiOperation(value = "流程处理-保存为草稿", notes = "流程处理-保存为草稿") + @PostMapping(value = "/saveToDraft") + public Result saveToDraft(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processFbEntryChangeService.saveToDraft(processInfoVO); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessHandleController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessHandleController.java deleted file mode 100644 index dbf9cbd1..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessHandleController.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.jero.modules.activiti.process.fb.controller; - -import com.jero.common.api.vo.Result; -import com.jero.common.aspect.annotation.AutoLog; -import com.jero.common.util.MessageUtils; -import com.jero.modules.activiti.process.fb.entity.ProcessFbEntryChange; -import com.jero.modules.activiti.process.fb.service.IProcessHandleService; -import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; -import com.jero.modules.laws.common.constant.ResultCommon; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @Author: liao - * @Date: 2023/11/2 16:56 - * @Description: 流程处理 - */ -@Api(tags="流程处理") -@RestController -@RequestMapping("/process/fb/handle") -@Slf4j -public class ProcessHandleController { - - @Autowired - private IProcessHandleService processHandleService; - - @AutoLog(value = "流程处理-启动流程") - @ApiOperation(value = "流程处理-启动流程", notes = "流程处理-启动流程") - @PostMapping(value = "/startProcess") - public Result startProcess(@Validated @RequestBody ProcessInfoVO processInfoVO) { - processHandleService.startProcess(processInfoVO); - return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); - } - -} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbEntryChangeService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbEntryChangeService.java index bd6d9a17..b7e9fbcd 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbEntryChangeService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbEntryChangeService.java @@ -2,6 +2,7 @@ package com.jero.modules.activiti.process.fb.service; import com.jero.modules.activiti.process.fb.entity.ProcessFbEntryChange; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.laws.dataCenter.entity.LawsDataCenterFile; /** @@ -31,4 +32,18 @@ public interface IProcessFbEntryChangeService extends IService implements IProcessFbEntryChangeService { + @Resource + private IProcessHandleService processHandleService; /** * @Author: liao @@ -52,4 +65,51 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl userInfoMap = processInfoVO.getUserInfoMap(); // 用户变量map + userInfoMap.put("engineer", CurrentUserUtil.getId()); // 第一个任务节点设置成自己 + processInfoVO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessDefinitionKey.FB_ENTRY_CHANGE)); // 流程定义id + processInfoVO.setProcessName(getProcessNameByBusinessId(processInfoVO.getBusinessId())); // 流程名称 + processInfoVO.setProcessType(ProcessTypeEnum.FB_ENTRY_CHANGE.getValue()); // 流程类型 + processHandleService.startProcess(processInfoVO); + } + + /** + * @Author: liao + * @Date: 2023/11/3 11:28 + * @Description: 根据业务id获取流程名称 + **/ + private String getProcessNameByBusinessId(String businessId) { + if (StringUtils.isBlank(businessId)) { + throw new JeroBootException(ResultCommon.EMPTY_COMMON, "businessId"); + } + ProcessFbEntryChange businessData = getById(businessId); + if (Objects.isNull(businessData)) { + throw new JeroBootException(ResultCommon.NO_CORRESPONDING_DATA_FOUND); + } + String processName = businessData.getStandardNumber() + "-" + businessData.getStandardName(); + if ("1".equals(businessData.getOperateType())) { // 入库 + processName = processName + "-" + "入库"; + } else { // 变更 + processName = processName + "-" + "变更"; + } + return processName; + } + + /** + * @Author: liao + * @Date: 2023/11/3 10:58 + * @Description: 保存为草稿 + **/ + @Override + public void saveToDraft(ProcessInfoVO processInfoVO) { + processHandleService.saveToDraft(processInfoVO); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java index ead207f6..137deb7f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java @@ -3,14 +3,18 @@ package com.jero.modules.activiti.process.fb.service.impl; import com.jero.common.exception.JeroBootException; import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import com.jero.modules.activiti.service.ProcessNodeLinkService; import com.jero.modules.laws.common.util.CurrentUserUtil; import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; +import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.springframework.beans.factory.annotation.Autowired; @@ -36,9 +40,13 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { @Resource private TaskService taskService; @Resource + private RepositoryService repositoryService; + @Resource private ProcessAllService processAllService; // 流程实例总表 @Resource private ProcessApprovalRecordService processApprovalRecordService; // 任务审批表 + @Resource + private ProcessNodeLinkService processNodeLinkService; // 流程实例节点关联用户表 /** * @Author: liao @@ -49,38 +57,87 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { public void startProcess(ProcessInfoVO processInfoVO) { String processDefinitionId = processInfoVO.getProcessDefinitionId(); // 流程定义id Map userInfoMap = processInfoVO.getUserInfoMap(); // 用户变量map - String userId = CurrentUserUtil.getId(); - userInfoMap.put("engineer", userId); // 第一个任务节点设置成自己 // 根据流程定义id和变量map启动流程 ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, userInfoMap); String processInstanceId = processInstance.getId(); // 流程实例id // 根据流程实例id更新流程总表 - ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); - process.setCreateUserId(userId); // 流程创建人 - process.setPrcName(processInfoVO.getProcessName()); // 流程名称 - process.setMes(processInfoVO.getProcessDescription()); // 流程说明 - process.setDueTime(processInfoVO.getProcessDueDate()); // 流程截止时间 - process.setProjectId(processInfoVO.getBusinessId()); // 业务id - processAllService.updateById(process); + processInfoVO.setProcessInstanceId(processInstanceId); + updateProcessAll(processInfoVO); + + // 保存选人信息 + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap); // 根据流程实例id和任务处理人查询任务 Task task = taskService.createTaskQuery() .processInstanceId(processInstanceId) - .taskAssignee(userId).singleResult(); + .taskAssignee(CurrentUserUtil.getId()).singleResult(); String taskId = task.getId(); // 更新审批记录 - ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); - approvalRecord.setCommitFlag(1); // 审批意见(1通过,2驳回) - approvalRecord.setCommitText(processInfoVO.getHandleText()); // 审批内容 - approvalRecord.setCommitFile(processInfoVO.getHandleFile()); // 审批附件 - approvalRecord.setFinishFlag(2); // 完成注记(1进行中,2已完成) - approvalRecord.setEndTime(new Date()); // 完成时间 - processApprovalRecordService.updateById(approvalRecord); + processInfoVO.setTaskId(taskId); + processInfoVO.setCommitFlag(1); // 审批意见(1通过,2驳回) + processInfoVO.setFinishFlag(2); // 完成注记(1进行中,2已完成) + updateApprovalRecord(processInfoVO); // 完成任务 taskService.complete(taskId); } + /** + * @Author: liao + * @Date: 2023/11/3 10:46 + * @Description: 更新流程总表 + **/ + @Override + public void updateProcessAll(ProcessInfoVO processInfoVO) { + ProcessAll process = processAllService.getByProcessInstanceId(processInfoVO.getProcessInstanceId()); + process.setCreateUserId(CurrentUserUtil.getId()); // 流程创建人 + process.setPrcName(processInfoVO.getProcessName()); // 流程名称 + process.setMes(processInfoVO.getProcessDescription()); // 流程说明 + process.setDueTime(processInfoVO.getProcessDueDate()); // 流程截止时间 + process.setPrcType(processInfoVO.getProcessType()); // 流程类型 + process.setProjectId(processInfoVO.getBusinessId()); // 业务id + processAllService.updateById(process); + } + + /** + * @Author: liao + * @Date: 2023/11/3 10:53 + * @Description: 更新审批记录 + **/ + @Override + public void updateApprovalRecord(ProcessInfoVO processInfoVO) { + ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(processInfoVO.getTaskId()); + approvalRecord.setCommitFlag(processInfoVO.getCommitFlag()); // 审批意见(1通过,2驳回) + approvalRecord.setCommitText(processInfoVO.getHandleText()); // 审批内容 + approvalRecord.setCommitFile(processInfoVO.getHandleFile()); // 审批附件 + approvalRecord.setFinishFlag(processInfoVO.getFinishFlag()); // 完成注记(1进行中,2已完成) + approvalRecord.setEndTime(new Date()); // 完成时间 + processApprovalRecordService.updateById(approvalRecord); + } + + /** + * @Author: liao + * @Date: 2023/11/3 10:30 + * @Description: 保存为草稿 + **/ + @Override + public void saveToDraft(ProcessInfoVO processInfoVO) { + + } + + /** + * @Author: liao + * @Date: 2023/11/3 11:14 + * @Description: 根据流程定义key获取最新版本的流程定义id + **/ + @Override + public String getDefinitionIdByKey(String definitionKey) { + return repositoryService.createProcessDefinitionQuery() // 创建部署信息查询器 + .processDefinitionKey(definitionKey) // 根据流程部署key查询 + .orderByProcessDefinitionVersion().desc().latestVersion() // 根据版本倒序取最后一个版本 + .singleResult().getId(); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/vo/ProcessInfoVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/vo/ProcessInfoVO.java index 9c90089b..a57bebc3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/vo/ProcessInfoVO.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/vo/ProcessInfoVO.java @@ -1,6 +1,8 @@ package com.jero.modules.activiti.process.fb.vo; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,6 +29,25 @@ public class ProcessInfoVO { /**流程实例id*/ @ApiModelProperty(value = "流程实例id") private java.lang.String processInstanceId; + /**流程类型*/ + @ApiModelProperty(value="流程类型") + private Integer processType; + + /**任务id*/ + @ApiModelProperty(value = "任务id") + private java.lang.String taskId; + /** + * 审批意见(0同意,1不同意) + */ + @Dict(dicCode = "commit_flag") + @ApiModelProperty(value = "审批意见(1通过,2驳回)") + private Integer commitFlag; + /** + * 完成注记(0未完成,1完成) + */ + @Dict(dicCode = "prc_node_status") + @ApiModelProperty(value = "完成注记(1进行中,2已完成)") + private Integer finishFlag; /**流程信息-流程名称*/ @ApiModelProperty(value = "流程信息-流程名称") @@ -46,9 +67,6 @@ public class ProcessInfoVO { /**流程审批信息-附件*/ @ApiModelProperty(value = "流程审批信息-附件") private java.lang.String handleFile; - /**流程审批信息-操作类型*/ - @ApiModelProperty(value = "流程审批信息-操作类型") - private java.lang.String handleType; /**业务id*/ @ApiModelProperty(value = "业务id")