update 调整任务,实例查询

This commit is contained in:
gssong 2024-12-07 19:13:05 +08:00
parent b60e3fba27
commit e3825e928f
7 changed files with 95 additions and 100 deletions

View File

@ -131,15 +131,7 @@ public class FlwTaskController extends BaseController {
*/
@GetMapping("/getTaskById/{taskId}")
public R<FlowTaskVo> 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));
}
/**

View File

@ -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;
/**

View File

@ -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<FlowInstance> instanceByIdList(List<Long> instanceIds);
List<FlowInstance> selectInstListByIdList(List<Long> instanceIds);
/**
* 按照业务id删除流程实例
@ -124,4 +124,20 @@ public interface IFlwInstanceService {
* @param variable 流程变量
*/
void setVariable(Long instanceId, Map<String, Object> variable);
/**
* 按任务id查询实例
*
* @param taskId 任务id
* @return 结果
*/
FlowInstance selectByTaskId(Long taskId);
/**
* 按任务id查询实例
*
* @param taskIdList 任务id
* @return 结果
*/
List<FlowInstance> selectByTaskIdList(List<Long> taskIdList);
}

View File

@ -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<FlowInstance> selectByTaskIdList(List<Long> taskIdList);
}

View File

@ -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<FlowInstance>().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<FlowInstance> instanceByIdList(List<Long> instanceIds) {
public List<FlowInstance> selectInstListByIdList(List<Long> 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<String, Object> getFlowImage(String businessId) {
Map<String, Object> map = new HashMap<>(16);
FlowInstance flowInstance = instanceByBusinessId(businessId);
FlowInstance flowInstance = selectInstByBusinessId(businessId);
if (flowInstance == null) {
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
}
LambdaQueryWrapper<FlowHisTask> 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<FlowInstance> selectByTaskIdList(List<Long> taskIdList) {
if (CollUtil.isEmpty(taskIdList)) {
return Collections.emptyList();
}
Set<Long> instanceIds = new HashSet<>();
List<FlowTask> flowTaskList = flwTaskService.selectByIdList(taskIdList);
for (FlowTask flowTask : flowTaskList) {
instanceIds.add(flowTask.getInstanceId());
}
List<FlowHisTask> flowHisTaskList = flwTaskService.selectHisTaskByIdList(taskIdList);
for (FlowHisTask flowHisTask : flowHisTaskList) {
instanceIds.add(flowHisTask.getInstanceId());
}
if (!instanceIds.isEmpty()) {
return selectInstListByIdList(new ArrayList<>(instanceIds));
}
return Collections.emptyList();
}
}

View File

@ -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<Task> 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<FlowInstance> selectByTaskIdList(List<Long> taskIdList) {
if (CollUtil.isEmpty(taskIdList)) {
return Collections.emptyList();
}
Set<Long> instanceIds = new HashSet<>();
List<FlowTask> flowTaskList = selectByIdList(taskIdList);
for (FlowTask flowTask : flowTaskList) {
instanceIds.add(flowTask.getInstanceId());
}
List<FlowHisTask> flowHisTaskList = selectHisTaskByIdList(taskIdList);
for (FlowHisTask flowHisTask : flowHisTaskList) {
instanceIds.add(flowHisTask.getInstanceId());
}
if (!instanceIds.isEmpty()) {
return iFlwInstanceService.instanceByIdList(new ArrayList<>(instanceIds));
}
return Collections.emptyList();
}
}

View File

@ -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;
}
}