diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/WorkflowService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/WorkflowService.java index 2ff5c1d3f..52d4877b7 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/WorkflowService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/WorkflowService.java @@ -23,7 +23,7 @@ public interface WorkflowService { * * @param taskId 任务id */ - String getBusinessStatusByTaskId(String taskId); + String getBusinessStatusByTaskId(Long taskId); /** * 获取当前流程状态 @@ -33,38 +33,12 @@ public interface WorkflowService { String getBusinessStatus(String businessKey); /** - * 设置流程变量(全局变量) + * 设置流程变量 * - * @param taskId 任务id - * @param variableName 变量名称 - * @param value 变量值 + * @param instanceId 流程实例id + * @param variable 流程变量 */ - void setVariable(String taskId, String variableName, Object value); - - /** - * 设置流程变量(全局变量) - * - * @param taskId 任务id - * @param variables 流程变量 - */ - void setVariables(String taskId, Map variables); - - /** - * 设置流程变量(本地变量,非全局变量) - * - * @param taskId 任务id - * @param variableName 变量名称 - * @param value 变量值 - */ - void setVariableLocal(String taskId, String variableName, Object value); - - /** - * 设置流程变量(本地变量,非全局变量) - * - * @param taskId 任务id - * @param variables 流程变量 - */ - void setVariablesLocal(String taskId, Map variables); + void setVariable(Long instanceId, Map variable); /** * 按照业务id查询流程实例id @@ -72,5 +46,5 @@ public interface WorkflowService { * @param businessKey 业务id * @return 结果 */ - String getInstanceIdByBusinessKey(String businessKey); + Long getInstanceIdByBusinessKey(String businessKey); } 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 7c6b3098d..ff9df7323 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 @@ -44,6 +44,22 @@ public interface IFlwInstanceService { */ FlowInstance instanceByBusinessId(String businessId); + /** + * 按照实例id查询流程实例 + * + * @param instanceId 实例id + * @return 结果 + */ + FlowInstance instanceById(Long instanceId); + + /** + * 按照实例id查询流程实例 + * + * @param instanceIds 实例id + * @return 结果 + */ + List instanceByIdList(List instanceIds); + /** * 按照业务id删除流程实例 * @@ -100,4 +116,12 @@ public interface IFlwInstanceService { * @return 结果 */ Map getInstanceVariable(String instanceId); + + /** + * 设置流程变量 + * + * @param instanceId 实例id + * @param variable 流程变量 + */ + void setVariable(Long instanceId, Map variable); } 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 ad7761c30..c4f2229a3 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 @@ -3,6 +3,8 @@ package org.dromara.workflow.service; 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,6 +131,22 @@ public interface IFlwTaskService { */ FlowTask selectByIdList(Long taskId); + /** + * 按照任务id查询任务 + * + * @param taskIdList 任务id + * @return 结果 + */ + List selectHisTaskByIdList(List taskIdList); + + /** + * 按照任务id查询任务 + * + * @param taskId 任务id + * @return 结果 + */ + FlowHisTask selectHisTaskById(Long taskId); + /** * 按照实例id查询任务 * @@ -153,4 +171,20 @@ 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 700422207..55e3917a7 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 @@ -122,6 +122,26 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { return flowInstanceMapper.selectOne(new LambdaQueryWrapper().eq(FlowInstance::getBusinessId, businessId)); } + /** + * 按照实例id查询流程实例 + * + * @param instanceId 实例id + */ + @Override + public FlowInstance instanceById(Long instanceId) { + return flowInstanceMapper.selectById(instanceId); + } + + /** + * 按照实例id查询流程实例 + * + * @param instanceIds 实例id + */ + @Override + public List instanceByIdList(List instanceIds) { + return flowInstanceMapper.selectByIds(instanceIds); + } + /** * 按照业务id删除流程实例 * @@ -288,4 +308,18 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { map.put("variable", flowInstance.getVariable()); return map; } + + /** + * 设置流程变量 + * + * @param instanceId 实例id + * @param variable 流程变量 + */ + @Override + public void setVariable(Long instanceId, Map variable) { + Instance instance = insService.getById(instanceId); + if (instance != null) { + taskService.mergeVariable(instance, variable); + } + } } 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 c04de73ee..ecf8f222f 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 @@ -469,6 +469,30 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService { .eq(FlowTask::getId, taskId)); } + /** + * 按照任务id查询任务 + * + * @param taskIdList 任务id + * @return 结果 + */ + @Override + public List selectHisTaskByIdList(List taskIdList) { + return flowHisTaskMapper.selectList(new LambdaQueryWrapper<>(FlowHisTask.class) + .in(FlowHisTask::getId, taskIdList)); + } + + /** + * 按照任务id查询任务 + * + * @param taskId 任务id + * @return 结果 + */ + @Override + public FlowHisTask selectHisTaskById(Long taskId) { + return flowHisTaskMapper.selectOne(new LambdaQueryWrapper<>(FlowHisTask.class) + .eq(FlowHisTask::getId, taskId)); + } + /** * 按照实例id查询任务 * @@ -585,4 +609,46 @@ 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 0c2ec50ad..96f51a71f 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 @@ -1,8 +1,11 @@ package org.dromara.workflow.service.impl; +import cn.hutool.core.util.ObjectUtil; 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; @@ -17,7 +20,8 @@ import java.util.Map; @Service public class WorkflowServiceImpl implements WorkflowService { - private final IFlwInstanceService iFlwInstanceService; + private final IFlwInstanceService flwInstanceService; + private final IFlwTaskService flwTaskService; /** * 删除流程实例 @@ -27,7 +31,7 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public boolean deleteInstance(List businessKeys) { - return iFlwInstanceService.deleteByBusinessIds(businessKeys); + return flwInstanceService.deleteByBusinessIds(businessKeys); } /** @@ -36,8 +40,8 @@ public class WorkflowServiceImpl implements WorkflowService { * @param taskId 任务id */ @Override - public String getBusinessStatusByTaskId(String taskId) { - return ""; + public String getBusinessStatusByTaskId(Long taskId) { + return ObjectUtil.isNotNull(flwTaskService.selectByTaskId(taskId)) ? flwTaskService.selectByTaskId(taskId).getFlowStatus() : StringUtils.EMPTY; } /** @@ -47,49 +51,18 @@ public class WorkflowServiceImpl implements WorkflowService { */ @Override public String getBusinessStatus(String businessKey) { - return ""; + return ObjectUtil.isNotNull(flwInstanceService.instanceByBusinessId(businessKey)) ? flwInstanceService.instanceByBusinessId(businessKey).getFlowStatus() : StringUtils.EMPTY; } /** - * 设置流程变量(全局变量) + * 设置流程变量 * - * @param taskId 任务id - * @param variableName 变量名称 - * @param value 变量值 + * @param instanceId 流程实例id + * @param variables 流程变量 */ @Override - public void setVariable(String taskId, String variableName, Object value) { - } - - /** - * 设置流程变量(全局变量) - * - * @param taskId 任务id - * @param variables 流程变量 - */ - @Override - public void setVariables(String taskId, Map variables) { - } - - /** - * 设置流程变量(本地变量,非全局变量) - * - * @param taskId 任务id - * @param variableName 变量名称 - * @param value 变量值 - */ - @Override - public void setVariableLocal(String taskId, String variableName, Object value) { - } - - /** - * 设置流程变量(本地变量,非全局变量) - * - * @param taskId 任务id - * @param variables 流程变量 - */ - @Override - public void setVariablesLocal(String taskId, Map variables) { + public void setVariable(Long instanceId, Map variables) { + flwInstanceService.setVariable(instanceId, variables); } /** @@ -99,7 +72,7 @@ public class WorkflowServiceImpl implements WorkflowService { * @return 结果 */ @Override - public String getInstanceIdByBusinessKey(String businessKey) { - return null; + public Long getInstanceIdByBusinessKey(String businessKey) { + return ObjectUtil.isNotNull(flwInstanceService.instanceByBusinessId(businessKey)) ? flwInstanceService.instanceByBusinessId(businessKey).getId() : null; } }