diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java index 65712a22e..b491f9f9a 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java @@ -83,4 +83,12 @@ public interface IFlwInstanceService { * @return 结果 */ Map getFlowImage(String businessId); + + /** + * 按照实例id更新状态 + * + * @param instanceId 实例id + * @param status 状态 + */ + void updateStatus(Long instanceId, String status); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index 00302d1b3..875e51b93 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.warm.flow.core.entity.*; @@ -162,7 +163,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { List flowInstanceVos = BeanUtil.copyToList(page.getRecords(), FlowInstanceVo.class); if (CollUtil.isNotEmpty(flowInstanceVos)) { List definitionIds = StreamUtils.toList(flowInstanceVos, FlowInstanceVo::getDefinitionId); - List flowDefinitions = flowDefinitionMapper.selectBatchIds(definitionIds); + List flowDefinitions = flowDefinitionMapper.selectByIds(definitionIds); for (FlowInstanceVo vo : flowInstanceVos) { flowDefinitions.stream().filter(e -> e.getId().toString().equals(vo.getDefinitionId().toString())).findFirst().ifPresent(e -> { vo.setFlowName(e.getFlowName()); @@ -178,9 +179,14 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { return build; } + /** + * 获取流程图,流程记录 + * + * @param businessId 业务id + */ @Override public Map getFlowImage(String businessId) { - Map map = new HashMap<>(); + Map map = new HashMap<>(16); FlowInstance flowInstance = instanceByBusinessId(businessId); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(FlowHisTask::getInstanceId, flowInstance.getId()); @@ -231,4 +237,18 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { return 0 + "秒"; } } + + /** + * 按照实例id更新状态 + * + * @param instanceId 实例id + * @param status 状态 + */ + @Override + public void updateStatus(Long instanceId, String status) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.set(FlowInstance::getFlowStatus, status); + wrapper.eq(FlowInstance::getId, instanceId); + flowInstanceMapper.update(wrapper); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index e67cbf1ea..b897dda6d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -22,12 +22,14 @@ import com.warm.flow.orm.mapper.FlowSkipMapper; import com.warm.flow.orm.mapper.FlowTaskMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.*; import org.dromara.workflow.handler.FlowProcessEventHandler; @@ -100,6 +102,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { flowParams.flowCode(wfDefinitionConfigVo.getProcessKey()); flowParams.variable(startProcessBo.getVariables()); flowParams.setHandler(String.valueOf(LoginHelper.getUserId())); + flowParams.flowStatus(BusinessStatusEnum.DRAFT.getStatus()); Instance instance; try { instance = insService.start(startProcessBo.getBusinessKey(), flowParams); @@ -132,7 +135,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService { //流程定义 Definition definition = defService.getById(flowTask.getDefinitionId()); //流程提交监听 - if (FlowStatus.TOBESUBMIT.getKey().equals(ins.getFlowStatus()) || FlowStatus.REJECT.getKey().equals(ins.getFlowStatus())) { + if (BusinessStatusEnum.DRAFT.getStatus().equals(ins.getFlowStatus()) || BusinessStatusEnum.CANCEL.getStatus().equals(ins.getFlowStatus()) + || BusinessStatusEnum.BACK.getStatus().equals(ins.getFlowStatus())) { flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), true); } //办理任务监听 @@ -144,13 +148,17 @@ public class FlwTaskServiceImpl implements IFlwTaskService { flowParams.message(completeTaskBo.getMessage()); flowParams.handler(userId); flowParams.permissionFlag(WorkflowUtils.permissionList()); + flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()) + .hisStatus(TaskStatusEnum.PASS.getStatus()); setHandler(taskService.skip(taskId, flowParams)); + iFlwInstanceService.updateStatus(ins.getId(), BusinessStatusEnum.WAITING.getStatus()); //判断是否流程结束 Instance instance = insService.getById(ins.getId()); if (FlowStatus.isFinished(instance.getFlowStatus())) { + iFlwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus()); //流程结束执行监听 flowProcessEventHandler.processHandler(definition.getFlowCode(), instance.getBusinessId(), - FlowStatus.FINISHED.getKey(), false); + BusinessStatusEnum.FINISH.getStatus(), false); } return true; } catch (Exception e) { @@ -194,7 +202,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo getPageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("t.processed_by", WorkflowUtils.permissionList()); - queryWrapper.in("t.flow_status", FlowStatus.APPROVAL.getKey()); + queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); Page page = buildTaskWaitingPage(pageQuery, queryWrapper, flowTaskBo); return TableDataInfo.build(page); } @@ -326,9 +334,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService { flowParams.variable(bo.getVariables()); if (nextNodeCode.equals(bo.getNodeCode())) { flowParams.skipType(SkipType.REJECT.getKey()); + flowParams.flowStatus(BusinessStatusEnum.BACK.getStatus()); } else { flowParams.skipType(SkipType.PASS.getKey()); + flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()); } + flowParams.hisStatus(TaskStatusEnum.BACK.getStatus()); flowParams.message(bo.getMessage()); flowParams.handler(userId); flowParams.nodeCode(bo.getNodeCode()); @@ -336,7 +347,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { Instance instance = taskService.skip(taskId, flowParams); setHandler(instance); flowProcessEventHandler.processHandler(definition.getFlowCode(), - instance.getBusinessId(), FlowStatus.REJECT.getKey(), false); + instance.getBusinessId(), BusinessStatusEnum.BACK.getStatus(), false); return true; } catch (Exception e) { log.error(e.getMessage(), e); @@ -379,10 +390,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService { flowParams.handler(String.valueOf(LoginHelper.getUserId())); flowParams.message(bo.getComment()); flowParams.permissionFlag(WorkflowUtils.permissionList()); + flowParams.flowStatus(BusinessStatusEnum.TERMINATION.getStatus()) + .hisStatus(TaskStatusEnum.TERMINATION.getStatus()); taskService.termination(bo.getTaskId(), flowParams); //流程终止监听 flowProcessEventHandler.processHandler(definition.getFlowCode(), - ins.getBusinessId(), FlowStatus.INVALID.getKey(), false); + ins.getBusinessId(), BusinessStatusEnum.TERMINATION.getStatus(), false); return true; } catch (Exception e) { log.error(e.getMessage(), e);