diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/AssigneeService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/AssigneeService.java index 73311cee5..62450d8c1 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/AssigneeService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/AssigneeService.java @@ -22,9 +22,9 @@ public interface AssigneeService { /** * 通过taskId查询对应的任务办理人列表 * - * @param taskIds taskId串逗号分隔 + * @param taskIdList 任务id * @return 列表 */ - List selectByIds(String taskIds); + List selectByIds(List taskIdList); } diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/TaskAssigneeTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/TaskAssigneeTranslationImpl.java index 7a2502b1c..bb55f2028 100644 --- a/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/TaskAssigneeTranslationImpl.java +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/TaskAssigneeTranslationImpl.java @@ -19,7 +19,9 @@ public class TaskAssigneeTranslationImpl implements TranslationInterface @Override public String translation(Object key, String other) { - if (key instanceof String id) { + if (key instanceof Long id) { + return assigneeService.selectAssigneeByIds(id.toString()); + } else if (key instanceof String id) { return assigneeService.selectAssigneeByIds(id); } return null; diff --git a/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index ad40205ed..d578b7370 100644 --- a/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -4,3 +4,4 @@ org.dromara.common.translation.core.impl.DictTypeTranslationImpl org.dromara.common.translation.core.impl.OssUrlTranslationImpl org.dromara.common.translation.core.impl.UserNameTranslationImpl org.dromara.common.translation.core.impl.NicknameTranslationImpl +org.dromara.common.translation.core.impl.TaskAssigneeTranslationImpl diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/WorkflowStatus.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/WorkflowStatus.java deleted file mode 100644 index 9552e9ba8..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/WorkflowStatus.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.dromara.workflow.common.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import org.dromara.warm.flow.core.utils.ObjectUtil; - -/** - * 工作流状态 - * - * @author AprilWind - */ -@Getter -@AllArgsConstructor -public enum WorkflowStatus { - - /** - * 待提交状态 - * 流程还未提交,处于待提交状态 - */ - TOBESUBMIT("0", "待提交", "submitted"), - - /** - * 审批中状态 - * 流程正在审批过程中,处于审批中状态 - */ - APPROVAL("1", "审批中", "approving"), - - /** - * 审批通过状态 - * 流程已通过审批,处于审批通过状态 - */ - PASS("2", "审批通过", "passed"), - - /** - * 自动完成状态 - * 流程已自动完成,通常不需要人工干预 - */ - AUTO_PASS("3", "自动完成", "auto"), - - /** - * 终止状态 - * 流程已终止,不能继续执行 - */ - TERMINATE("4", "终止", "terminated"), - - /** - * 作废状态 - * 流程被作废,已不再有效 - */ - NULLIFY("5", "作废", "nullified"), - - /** - * 撤销状态 - * 流程已被撤销,撤销后流程无法继续 - */ - CANCEL("6", "撤销", "cancelled"), - - /** - * 取回状态 - * 流程被取回,通常是审批被暂停,重新操作后可继续 - */ - RETRIEVE("7", "取回", "retrieved"), - - /** - * 已完成状态 - * 流程已全部完成,且所有操作已结束 - */ - FINISHED("8", "已完成", "done"), - - /** - * 已退回状态 - * 流程被退回,通常是审批不通过或者需要重新处理 - */ - REJECT("9", "已退回", "rejected"), - - /** - * 失效状态 - * 流程已失效,不再有效,不能继续执行 - */ - INVALID("10", "失效", "invalid"); - - /** - * 唯一标识符 - */ - private final String key; - - /** - * 中文描述 - */ - private final String value; - - /** - * 状态 - */ - private final String status; - - public static WorkflowStatus getByKey(String key) { - for (WorkflowStatus workflowStatus : WorkflowStatus.values()) { - if (workflowStatus.getKey().equals(key)) { - return workflowStatus; - } - } - return null; - } - - public static WorkflowStatus getByValue(String value) { - for (WorkflowStatus workflowStatus : WorkflowStatus.values()) { - if (workflowStatus.getValue().equals(value)) { - return workflowStatus; - } - } - return null; - } - - public static WorkflowStatus getByStatus(String status) { - for (WorkflowStatus workflowStatus : WorkflowStatus.values()) { - if (workflowStatus.getStatus().equals(status)) { - return workflowStatus; - } - } - return null; - } - - public static Boolean isFinished(String key) { - return ObjectUtil.isNotNull(key) && (WorkflowStatus.FINISHED.getKey().equals(key)); - } - - public static Boolean isFinished(WorkflowStatus workflowStatus) { - return ObjectUtil.isNotNull(workflowStatus) && (WorkflowStatus.FINISHED == workflowStatus); - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index 9d54d5629..e4a06d0a7 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -12,6 +12,7 @@ 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.common.web.core.BaseController; +import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.dto.ModifyHandler; import org.dromara.warm.flow.core.entity.HisTask; import org.dromara.warm.flow.core.entity.Instance; @@ -168,12 +169,12 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PostMapping("/delegateTask") public R delegateTask(@Validated({AddGroup.class}) @RequestBody DelegateBo bo) { - return toAjax(taskService.depute( - bo.getTaskId(), - LoginHelper.getUserIdStr(), - WorkflowUtils.permissionList(), - Collections.singletonList(bo.getUserId()), - bo.getMessage())); + FlowParams flowParams = new FlowParams(); + flowParams.addHandlers(Collections.singletonList(bo.getUserId())); + flowParams.handler(LoginHelper.getUserIdStr()); + flowParams.permissionFlag(WorkflowUtils.permissionList()); + flowParams.message(bo.getMessage()); + return toAjax(taskService.depute(bo.getTaskId(), flowParams)); } /** @@ -185,12 +186,12 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PostMapping("/transferTask") public R transferTask(@Validated({AddGroup.class}) @RequestBody TransferBo bo) { - return toAjax(taskService.transfer( - bo.getTaskId(), - LoginHelper.getUserIdStr(), - WorkflowUtils.permissionList(), - Collections.singletonList(bo.getUserId()), - bo.getMessage())); + FlowParams flowParams = new FlowParams(); + flowParams.addHandlers(Collections.singletonList(bo.getUserId())); + flowParams.handler(LoginHelper.getUserIdStr()); + flowParams.permissionFlag(WorkflowUtils.permissionList()); + flowParams.message(bo.getMessage()); + return toAjax(taskService.transfer(bo.getTaskId(), flowParams)); } /** @@ -202,12 +203,12 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PostMapping("/addSignature") public R addSignature(@Validated({AddGroup.class}) @RequestBody AddSignatureBo bo) { - return toAjax(taskService.addSignature( - bo.getTaskId(), - LoginHelper.getUserIdStr(), - WorkflowUtils.permissionList(), - bo.getUserIds(), - bo.getMessage())); + FlowParams flowParams = new FlowParams(); + flowParams.addHandlers(bo.getUserIds()); + flowParams.handler(LoginHelper.getUserIdStr()); + flowParams.permissionFlag(WorkflowUtils.permissionList()); + flowParams.message(bo.getMessage()); + return toAjax(taskService.addSignature(bo.getTaskId(), flowParams)); } /** @@ -219,12 +220,12 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PostMapping("/reductionSignature") public R reductionSignature(@Validated({AddGroup.class}) @RequestBody ReductionSignatureBo bo) { - return toAjax(taskService.reductionSignature( - bo.getTaskId(), - LoginHelper.getUserIdStr(), - WorkflowUtils.permissionList(), - bo.getUserIds(), - bo.getMessage())); + FlowParams flowParams = new FlowParams(); + flowParams.reductionHandlers(bo.getUserIds()); + flowParams.handler(LoginHelper.getUserIdStr()); + flowParams.permissionFlag(WorkflowUtils.permissionList()); + flowParams.message(bo.getMessage()); + return toAjax(taskService.reductionSignature(bo.getTaskId(), flowParams)); } /** @@ -237,15 +238,12 @@ public class FlwTaskController extends BaseController { @RepeatSubmit() @PutMapping("/updateAssignee/{taskId}/{userId}") public R updateAssignee(@PathVariable Long taskId, @PathVariable String userId) { - ModifyHandler modifyHandler = new ModifyHandler() - .setTaskId(taskId) - .setAddHandlers(Collections.singletonList(userId)) - .setPermissionFlag(WorkflowUtils.permissionList()) - .setCooperateType(CooperateType.APPROVAL.getKey()) - .setMessage("修改任务办理人") - .setCurUser(LoginHelper.getUserIdStr()) - .setIgnore(false); - return toAjax(taskService.updateHandler(modifyHandler)); + FlowParams flowParams = new FlowParams(); + flowParams.addHandlers(Collections.singletonList(userId)); + flowParams.cooperateType(CooperateType.APPROVAL.getKey()); + flowParams.ignore(false); + flowParams.message("修改任务办理人"); + return toAjax(taskService.updateHandler(taskId, flowParams)); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowFinishListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowFinishListener.java index 6a13c1cd3..1617713f6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowFinishListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowFinishListener.java @@ -3,12 +3,13 @@ package org.dromara.workflow.listener; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.utils.SpringUtils; import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Instance; +import org.dromara.warm.flow.core.enums.FlowStatus; import org.dromara.warm.flow.core.listener.Listener; import org.dromara.warm.flow.core.listener.ListenerVariable; -import org.dromara.workflow.common.enums.WorkflowStatus; import org.dromara.workflow.service.IFlwInstanceService; import org.springframework.stereotype.Component; @@ -45,15 +46,14 @@ public class WorkflowFinishListener implements Listener { public void notify(ListenerVariable listenerVariable) { log.info("流程结束监听器"); Instance instance = listenerVariable.getInstance(); - WorkflowStatus status = WorkflowStatus.getByKey(instance.getFlowStatus()); Definition definition = listenerVariable.getDefinition(); ProcessEvent processEvent = new ProcessEvent(); //检查流程是否已结束 - if (WorkflowStatus.isFinished(status)) { + if (FlowStatus.isFinished(instance.getFlowStatus())) { // 若流程已结束,更新状态为已完成 - iFlwInstanceService.updateStatus(instance.getId(), status.getStatus()); + iFlwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus()); // 流程结束监听,处理结束后的业务逻辑 - processEvent.setStatus(status.getStatus()); + processEvent.setStatus(BusinessStatusEnum.FINISH.getStatus()); processEvent.setSubmit(false); processEvent.setFlowCode(definition.getFlowCode()); processEvent.setBusinessKey(instance.getBusinessId()); 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 09fcdb731..91af9c18c 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 @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.SystemConstants; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -68,7 +69,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { @Override public TableDataInfo getPageByRunning(Instance instance, PageQuery pageQuery) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("t.flow_status", FlowStatus.APPROVAL.getKey()); + queryWrapper.eq("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); queryWrapper.eq("t.del_flag", SystemConstants.NORMAL); Page page = flwInstanceMapper.page(pageQuery.build(), queryWrapper); TableDataInfo build = TableDataInfo.build(); @@ -86,7 +87,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { @Override public TableDataInfo getPageByFinish(Instance instance, PageQuery pageQuery) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in("t.flow_status", Arrays.asList(FlowStatus.FINISHED.getKey(), FlowStatus.AUTO_PASS.getKey())); + queryWrapper.eq("t.flow_status", BusinessStatusEnum.FINISH.getStatus()); Page page = flwInstanceMapper.page(pageQuery.build(), queryWrapper); TableDataInfo build = TableDataInfo.build(); build.setRows(BeanUtil.copyToList(page.getRecords(), FlowInstanceVo.class)); 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 31849f131..12420f23f 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 @@ -18,7 +18,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.*; -import org.dromara.warm.flow.core.enums.FlowStatus; import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.SkipType; import org.dromara.warm.flow.core.service.DefService; @@ -167,16 +166,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { // 更新实例状态为待审核状态 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(), - BusinessStatusEnum.FINISH.getStatus(), false); - } return true; } catch (Exception e) { log.error(e.getMessage(), e); @@ -257,7 +246,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { public TableDataInfo getPageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); - queryWrapper.in("t.processed_by", WorkflowUtils.permissionList()); Page page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); return TableDataInfo.build(page); } @@ -321,11 +309,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { FlowParams flowParams = new FlowParams(); flowParams.variable(bo.getVariables()); + flowParams.skipType(SkipType.PASS.getKey()); 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()); @@ -413,15 +400,15 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { /** * 通过taskId查询对应的任务办理人列表 * - * @param taskIds taskId串逗号分隔 + * @param taskIdList 任务id * @return 列表 */ @Override - public List selectByIds(String taskIds) { - if (StringUtils.isBlank(taskIds)) { + public List selectByIds(List taskIdList) { + if (CollUtil.isEmpty(taskIdList)) { return Collections.emptyList(); } - List userList = userService.getByAssociateds(List.of(Long.valueOf(taskIds))); + List userList = userService.getByAssociateds(taskIdList); return WorkflowUtils.getHandlerUser(userList); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml index 52061053f..18bf11ec6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml @@ -99,7 +99,8 @@ c.flow_code from flow_his_task a LEFT JOIN flow_instance b on a.instance_id = b.id - LEFT JOIN flow_definition c on a.definition_id = c.id + LEFT JOIN flow_definition c on a.definition_id = c.id where + a.del_flag ='0' and b.del_flag = '0' and c.del_flag = '0' and a.node_type not in ('0') ) t ${ew.getCustomSqlSegment} @@ -119,7 +120,7 @@ LEFT JOIN flow_instance b ON a.associated = b.id LEFT JOIN flow_definition d on b.definition_id=d.id WHERE - a.type = 4 and a.del_flag = '0' + a.type = 4 and a.del_flag = '0' and b.del_flag = '0' ) t ${ew.getCustomSqlSegment}