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 ad05867cb..83d06f8de 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 @@ -131,15 +131,7 @@ public class FlwTaskController extends BaseController { */ @GetMapping("/getTaskById/{taskId}") public R getTaskById(@PathVariable Long taskId) { - Task task = taskService.getById(taskId); - if (ObjectUtil.isNotNull(task)) { - FlowTaskVo flowTaskVo = BeanUtil.toBean(task, FlowTaskVo.class); - Instance instance = insService.getById(task.getInstanceId()); - flowTaskVo.setFlowStatus(instance.getFlowStatus()); - flowTaskVo.setFlowStatusName(BusinessStatusEnum.findByStatus(instance.getFlowStatus())); - return R.ok(flowTaskVo); - } - return R.fail(); + return R.ok(flwTaskService.selectById(taskId)); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java index 806d8c271..5f7b0b622 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java @@ -116,6 +116,7 @@ public class FlowTaskVo implements Serializable { /** * 流程状态 */ + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "flowStatus",other = "wf_business_status") private String flowStatusName; /** 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 ff9df7323..1be0f9c9c 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 @@ -42,7 +42,7 @@ public interface IFlwInstanceService { * @param businessId 业务id * @return 结果 */ - FlowInstance instanceByBusinessId(String businessId); + FlowInstance selectInstByBusinessId(String businessId); /** * 按照实例id查询流程实例 @@ -50,7 +50,7 @@ public interface IFlwInstanceService { * @param instanceId 实例id * @return 结果 */ - FlowInstance instanceById(Long instanceId); + FlowInstance selectInstById(Long instanceId); /** * 按照实例id查询流程实例 @@ -58,7 +58,7 @@ public interface IFlwInstanceService { * @param instanceIds 实例id * @return 结果 */ - List instanceByIdList(List instanceIds); + List selectInstListByIdList(List instanceIds); /** * 按照业务id删除流程实例 @@ -124,4 +124,20 @@ public interface IFlwInstanceService { * @param variable 流程变量 */ void setVariable(Long instanceId, Map variable); + + /** + * 按任务id查询实例 + * + * @param taskId 任务id + * @return 结果 + */ + FlowInstance selectByTaskId(Long taskId); + + /** + * 按任务id查询实例 + * + * @param taskIdList 任务id + * @return 结果 + */ + List selectByTaskIdList(List taskIdList); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index d2b80c142..ffa6e800d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -4,7 +4,6 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.warm.flow.core.entity.HisTask; import org.dromara.warm.flow.orm.entity.FlowHisTask; -import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowTask; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.FlowHisTaskVo; @@ -129,7 +128,7 @@ public interface IFlwTaskService { * @param taskId 任务id * @return 结果 */ - FlowTask selectByIdList(Long taskId); + FlowTaskVo selectById(Long taskId); /** * 按照任务id查询任务 @@ -171,20 +170,4 @@ public interface IFlwTaskService { * @return 结果 */ boolean taskOperation(TaskOperationBo bo, String taskOperation); - - /** - * 按任务id查询实例 - * - * @param taskId 任务id - * @return 结果 - */ - FlowInstance selectByTaskId(Long taskId); - - /** - * 按任务id查询实例 - * - * @param taskIdList 任务id - * @return 结果 - */ - List selectByTaskIdList(List taskIdList); } 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 55e3917a7..6d579bb8f 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 @@ -11,7 +11,6 @@ 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.DateUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -24,7 +23,6 @@ import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.core.entity.Task; -import org.dromara.warm.flow.core.enums.CooperateType; import org.dromara.warm.flow.core.enums.FlowStatus; import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.SkipType; @@ -33,10 +31,7 @@ import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.NodeService; import org.dromara.warm.flow.core.service.TaskService; import org.dromara.warm.flow.core.utils.AssertUtil; -import org.dromara.warm.flow.orm.entity.FlowDefinition; -import org.dromara.warm.flow.orm.entity.FlowHisTask; -import org.dromara.warm.flow.orm.entity.FlowInstance; -import org.dromara.warm.flow.orm.entity.FlowNode; +import org.dromara.warm.flow.orm.entity.*; import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; @@ -49,14 +44,12 @@ import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.VariableVo; import org.dromara.workflow.mapper.FlwInstanceMapper; import org.dromara.workflow.service.IFlwInstanceService; +import org.dromara.workflow.service.IFlwTaskService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 流程实例 服务层实现 @@ -77,6 +70,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { private final TaskService taskService; private final FlowNodeMapper flowNodeMapper; private final NodeService nodeService; + private final IFlwTaskService flwTaskService; /** * 分页查询正在运行的流程实例 @@ -118,7 +112,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { * @param businessId 业务id */ @Override - public FlowInstance instanceByBusinessId(String businessId) { + public FlowInstance selectInstByBusinessId(String businessId) { return flowInstanceMapper.selectOne(new LambdaQueryWrapper().eq(FlowInstance::getBusinessId, businessId)); } @@ -128,7 +122,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { * @param instanceId 实例id */ @Override - public FlowInstance instanceById(Long instanceId) { + public FlowInstance selectInstById(Long instanceId) { return flowInstanceMapper.selectById(instanceId); } @@ -138,7 +132,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { * @param instanceIds 实例id */ @Override - public List instanceByIdList(List instanceIds) { + public List selectInstListByIdList(List instanceIds) { return flowInstanceMapper.selectByIds(instanceIds); } @@ -177,7 +171,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { @Transactional(rollbackFor = Exception.class) public boolean cancelProcessApply(FlowCancelBo bo) { try { - Instance instance = instanceByBusinessId(bo.getBusinessId()); + Instance instance = selectInstByBusinessId(bo.getBusinessId()); if (instance == null) { throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE); } @@ -254,7 +248,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { @Override public Map getFlowImage(String businessId) { Map map = new HashMap<>(16); - FlowInstance flowInstance = instanceByBusinessId(businessId); + FlowInstance flowInstance = selectInstByBusinessId(businessId); + if (flowInstance == null) { + throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE); + } LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(FlowHisTask::getInstanceId, flowInstance.getId()); wrapper.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey()); @@ -322,4 +319,48 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { taskService.mergeVariable(instance, variable); } } + + /** + * 按任务id查询实例 + * + * @param taskId 任务id + */ + @Override + public FlowInstance selectByTaskId(Long taskId) { + Task task = taskService.getById(taskId); + if (task == null) { + FlowHisTask flowHisTask = flwTaskService.selectHisTaskById(taskId); + if (flowHisTask != null) { + return selectInstById(flowHisTask.getInstanceId()); + } + } else { + return selectInstById(task.getInstanceId()); + } + return null; + } + + /** + * 按任务id查询实例 + * + * @param taskIdList 任务id + */ + @Override + public List selectByTaskIdList(List taskIdList) { + if (CollUtil.isEmpty(taskIdList)) { + return Collections.emptyList(); + } + Set instanceIds = new HashSet<>(); + List flowTaskList = flwTaskService.selectByIdList(taskIdList); + for (FlowTask flowTask : flowTaskList) { + instanceIds.add(flowTask.getInstanceId()); + } + List flowHisTaskList = flwTaskService.selectHisTaskByIdList(taskIdList); + for (FlowHisTask flowHisTask : flowHisTaskList) { + instanceIds.add(flowHisTask.getInstanceId()); + } + if (!instanceIds.isEmpty()) { + return selectInstListByIdList(new ArrayList<>(instanceIds)); + } + return Collections.emptyList(); + } } 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 779af3775..849db5265 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 @@ -1,5 +1,6 @@ package org.dromara.workflow.service.impl; +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; @@ -29,6 +30,7 @@ import org.dromara.warm.flow.core.enums.UserType; import org.dromara.warm.flow.core.service.*; import org.dromara.warm.flow.orm.entity.*; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; +import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; import org.dromara.warm.flow.orm.mapper.FlowSkipMapper; import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; import org.dromara.workflow.common.enums.TaskAssigneeType; @@ -41,7 +43,6 @@ import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.WorkflowPermissionHandler; import org.dromara.workflow.mapper.FlwTaskMapper; -import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IWfDefinitionConfigService; import org.dromara.workflow.utils.WorkflowUtils; @@ -65,10 +66,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { private final TaskService taskService; private final InsService insService; + private final FlowInstanceMapper flowInstanceMapper; private final FlwTaskMapper flwTaskMapper; private final UserService userService; private final IWfDefinitionConfigService wfDefinitionConfigService; - private final IFlwInstanceService iFlwInstanceService; private final FlowTaskMapper flowTaskMapper; private final FlowHisTaskMapper flowHisTaskMapper; private final FlowSkipMapper flowSkipMapper; @@ -105,7 +106,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { log.error("流程定义ID【{}】不存在!", definitionId); throw new ServiceException("请到流程定义ID【" + definitionId + "】不存在!"); } - FlowInstance flowInstance = iFlwInstanceService.instanceByBusinessId(businessKey); + FlowInstance flowInstance = flowInstanceMapper.selectOne(new LambdaQueryWrapper<>(FlowInstance.class) + .eq(FlowInstance::getBusinessId, businessKey)); if (flowInstance != null) { List taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId())); return Map.of(PROCESS_INSTANCE_ID, taskList.get(0).getInstanceId(), TASK_ID, taskList.get(0).getId()); @@ -163,8 +165,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus()); // 执行任务跳转,并根据返回的处理人设置下一步处理人 setHandler(taskService.skip(taskId, flowParams), flowTask, wfCopyList); - // 更新实例状态为待审核状态 - iFlwInstanceService.updateStatus(ins.getId(), BusinessStatusEnum.WAITING.getStatus()); return true; } catch (Exception e) { log.error(e.getMessage(), e); @@ -464,9 +464,15 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { * @param taskId 任务id */ @Override - public FlowTask selectByIdList(Long taskId) { - return flowTaskMapper.selectOne(new LambdaQueryWrapper<>(FlowTask.class) - .eq(FlowTask::getId, taskId)); + public FlowTaskVo selectById(Long taskId) { + Task task = taskService.getById(taskId); + if (task == null) { + return null; + } + FlowTaskVo flowTaskVo = BeanUtil.toBean(task, FlowTaskVo.class); + Instance instance = insService.getById(task.getInstanceId()); + flowTaskVo.setFlowStatus(instance.getFlowStatus()); + return flowTaskVo; } /** @@ -609,46 +615,4 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { } return true; } - - /** - * 按任务id查询实例 - * - * @param taskId 任务id - */ - @Override - public FlowInstance selectByTaskId(Long taskId) { - FlowTask flowTask = selectByIdList(taskId); - if (flowTask == null) { - FlowHisTask flowHisTask = selectHisTaskById(taskId); - if (flowHisTask != null) { - return iFlwInstanceService.instanceById(flowHisTask.getInstanceId()); - } - } - return null; - } - - /** - * 按任务id查询实例 - * - * @param taskIdList 任务id - */ - @Override - public List selectByTaskIdList(List taskIdList) { - if (CollUtil.isEmpty(taskIdList)) { - return Collections.emptyList(); - } - Set instanceIds = new HashSet<>(); - List flowTaskList = selectByIdList(taskIdList); - for (FlowTask flowTask : flowTaskList) { - instanceIds.add(flowTask.getInstanceId()); - } - List flowHisTaskList = selectHisTaskByIdList(taskIdList); - for (FlowHisTask flowHisTask : flowHisTaskList) { - instanceIds.add(flowHisTask.getInstanceId()); - } - if (!instanceIds.isEmpty()) { - return iFlwInstanceService.instanceByIdList(new ArrayList<>(instanceIds)); - } - return Collections.emptyList(); - } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index 96f51a71f..d460a5ed6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -5,7 +5,6 @@ import lombok.RequiredArgsConstructor; import org.dromara.common.core.service.WorkflowService; import org.dromara.common.core.utils.StringUtils; import org.dromara.workflow.service.IFlwInstanceService; -import org.dromara.workflow.service.IFlwTaskService; import org.springframework.stereotype.Service; import java.util.List; @@ -21,7 +20,6 @@ import java.util.Map; public class WorkflowServiceImpl implements WorkflowService { private final IFlwInstanceService flwInstanceService; - private final IFlwTaskService flwTaskService; /** * 删除流程实例 @@ -41,7 +39,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public String getBusinessStatusByTaskId(Long taskId) { - return ObjectUtil.isNotNull(flwTaskService.selectByTaskId(taskId)) ? flwTaskService.selectByTaskId(taskId).getFlowStatus() : StringUtils.EMPTY; + return ObjectUtil.isNotNull(flwInstanceService.selectByTaskId(taskId)) ? flwInstanceService.selectByTaskId(taskId).getFlowStatus() : StringUtils.EMPTY; } /** @@ -51,7 +49,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public String getBusinessStatus(String businessKey) { - return ObjectUtil.isNotNull(flwInstanceService.instanceByBusinessId(businessKey)) ? flwInstanceService.instanceByBusinessId(businessKey).getFlowStatus() : StringUtils.EMPTY; + return ObjectUtil.isNotNull(flwInstanceService.selectInstByBusinessId(businessKey)) ? flwInstanceService.selectInstByBusinessId(businessKey).getFlowStatus() : StringUtils.EMPTY; } /** @@ -73,6 +71,6 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public Long getInstanceIdByBusinessKey(String businessKey) { - return ObjectUtil.isNotNull(flwInstanceService.instanceByBusinessId(businessKey)) ? flwInstanceService.instanceByBusinessId(businessKey).getId() : null; + return ObjectUtil.isNotNull(flwInstanceService.selectInstByBusinessId(businessKey)) ? flwInstanceService.selectInstByBusinessId(businessKey).getId() : null; } }