|
|
@@ -42,6 +42,7 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
|
|
import org.dromara.workflow.domain.vo.FlowInstanceVo;
|
|
|
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
|
|
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
|
|
+import org.dromara.workflow.mapper.FlwHisTaskExtMapper;
|
|
|
import org.dromara.workflow.mapper.FlwInstanceMapper;
|
|
|
import org.dromara.workflow.service.IFlwInstanceService;
|
|
|
import org.dromara.workflow.service.IFlwTaskService;
|
|
|
@@ -71,6 +72,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
private final IFlwTaskService flwTaskService;
|
|
|
private final FlwInstanceMapper flwInstanceMapper;
|
|
|
private final FlwCategoryMapper flwCategoryMapper;
|
|
|
+ private final FlwHisTaskExtMapper flwHisTaskExtMapper;
|
|
|
|
|
|
/**
|
|
|
* 分页查询正在运行的流程实例
|
|
|
@@ -128,15 +130,21 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
*/
|
|
|
private QueryWrapper<FlowInstanceBo> buildQueryWrapper(FlowInstanceBo flowInstanceBo) {
|
|
|
QueryWrapper<FlowInstanceBo> queryWrapper = Wrappers.query();
|
|
|
- queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getNodeName()), "fi.node_name", flowInstanceBo.getNodeName());
|
|
|
- queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowName()), "fd.flow_name", flowInstanceBo.getFlowName());
|
|
|
- queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd.flow_code", flowInstanceBo.getFlowCode());
|
|
|
+ queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getNodeName()), "fi.node_name",
|
|
|
+ flowInstanceBo.getNodeName());
|
|
|
+ queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowName()), "fd.flow_name",
|
|
|
+ flowInstanceBo.getFlowName());
|
|
|
+ queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd.flow_code",
|
|
|
+ flowInstanceBo.getFlowCode());
|
|
|
if (StringUtils.isNotBlank(flowInstanceBo.getCategory())) {
|
|
|
- List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowInstanceBo.getCategory()));
|
|
|
+ List<Long> categoryIds = flwCategoryMapper
|
|
|
+ .selectCategoryIdsByParentId(Convert.toLong(flowInstanceBo.getCategory()));
|
|
|
queryWrapper.in("fd.category", StreamUtils.toList(categoryIds, Convert::toStr));
|
|
|
}
|
|
|
- queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi.business_id", flowInstanceBo.getBusinessId());
|
|
|
- queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi.create_by", flowInstanceBo.getCreateByIds());
|
|
|
+ queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi.business_id",
|
|
|
+ flowInstanceBo.getBusinessId());
|
|
|
+ queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi.create_by",
|
|
|
+ flowInstanceBo.getCreateByIds());
|
|
|
queryWrapper.eq("fi.del_flag", "0");
|
|
|
queryWrapper.orderByDesc("fi.create_time");
|
|
|
return queryWrapper;
|
|
|
@@ -149,7 +157,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
*/
|
|
|
@Override
|
|
|
public FlowInstance selectInstByBusinessId(String businessId) {
|
|
|
- return flowInstanceMapper.selectOne(new LambdaQueryWrapper<FlowInstance>().eq(FlowInstance::getBusinessId, businessId));
|
|
|
+ return flowInstanceMapper
|
|
|
+ .selectOne(new LambdaQueryWrapper<FlowInstance>().eq(FlowInstance::getBusinessId, businessId));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -180,7 +189,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean deleteByBusinessIds(List<Long> businessIds) {
|
|
|
- List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>().in(FlowInstance::getBusinessId, StreamUtils.toList(businessIds, Convert::toStr)));
|
|
|
+ List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>()
|
|
|
+ .in(FlowInstance::getBusinessId, StreamUtils.toList(businessIds, Convert::toStr)));
|
|
|
if (CollUtil.isEmpty(flowInstances)) {
|
|
|
log.warn("未找到对应的流程实例信息,无法执行删除操作。");
|
|
|
return false;
|
|
|
@@ -204,8 +214,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
}
|
|
|
// 获取定义信息
|
|
|
Map<Long, Definition> definitionMap = defService.getByIds(
|
|
|
- StreamUtils.toList(instances, Instance::getDefinitionId)
|
|
|
- ).stream().collect(Collectors.toMap(Definition::getId, definition -> definition));
|
|
|
+ StreamUtils.toList(instances, Instance::getDefinitionId)).stream()
|
|
|
+ .collect(Collectors.toMap(Definition::getId, definition -> definition));
|
|
|
|
|
|
// 逐一触发删除事件
|
|
|
instances.forEach(instance -> {
|
|
|
@@ -242,11 +252,11 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
String userIdStr = LoginHelper.getUserIdStr();
|
|
|
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
|
|
FlowParams flowParams = FlowParams.build()
|
|
|
- .message(message)
|
|
|
- .flowStatus(BusinessStatusEnum.CANCEL.getStatus())
|
|
|
- .hisStatus(BusinessStatusEnum.CANCEL.getStatus())
|
|
|
- .handler(userIdStr)
|
|
|
- .ignore(true);
|
|
|
+ .message(message)
|
|
|
+ .flowStatus(BusinessStatusEnum.CANCEL.getStatus())
|
|
|
+ .hisStatus(BusinessStatusEnum.CANCEL.getStatus())
|
|
|
+ .handler(userIdStr)
|
|
|
+ .ignore(true);
|
|
|
taskService.revoke(instance.getId(), flowParams);
|
|
|
} catch (Exception e) {
|
|
|
log.error("撤销失败: {}", e.getMessage(), e);
|
|
|
@@ -281,7 +291,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
|
|
|
}
|
|
|
Long instanceId = flowInstance.getId();
|
|
|
- //运行中的任务
|
|
|
+ // 运行中的任务
|
|
|
List<FlowHisTaskVo> list = new ArrayList<>();
|
|
|
List<FlowTask> flowTaskList = flwTaskService.selectByInstId(instanceId);
|
|
|
if (CollUtil.isNotEmpty(flowTaskList)) {
|
|
|
@@ -302,16 +312,13 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
}
|
|
|
list.addAll(flowHisTaskVos);
|
|
|
}
|
|
|
- //历史任务
|
|
|
- LambdaQueryWrapper<FlowHisTask> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper.eq(FlowHisTask::getInstanceId, instanceId);
|
|
|
- wrapper.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey());
|
|
|
- wrapper.orderByDesc(FlowHisTask::getCreateTime).orderByDesc(FlowHisTask::getUpdateTime);
|
|
|
- List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(wrapper);
|
|
|
- if (CollUtil.isNotEmpty(flowHisTasks)) {
|
|
|
- list.addAll(BeanUtil.copyToList(flowHisTasks, FlowHisTaskVo.class));
|
|
|
+ // 历史任务(使用自定义Mapper查询,包含签名字段)
|
|
|
+ List<FlowHisTaskVo> flowHisTaskVos = flwHisTaskExtMapper.selectHisTaskListWithSignature(instanceId,
|
|
|
+ NodeType.BETWEEN.getKey());
|
|
|
+ if (CollUtil.isNotEmpty(flowHisTaskVos)) {
|
|
|
+ list.addAll(flowHisTaskVos);
|
|
|
}
|
|
|
- return Map.of("list", list,"instanceId",instanceId);
|
|
|
+ return Map.of("list", list, "instanceId", instanceId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -336,10 +343,11 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
@Override
|
|
|
public Map<String, Object> instanceVariable(Long instanceId) {
|
|
|
FlowInstance flowInstance = flowInstanceMapper.selectById(instanceId);
|
|
|
- Map<String, Object> variableMap = Optional.ofNullable(flowInstance.getVariableMap()).orElse(Collections.emptyMap());
|
|
|
+ Map<String, Object> variableMap = Optional.ofNullable(flowInstance.getVariableMap())
|
|
|
+ .orElse(Collections.emptyMap());
|
|
|
List<Map<String, Object>> variableList = variableMap.entrySet().stream()
|
|
|
- .map(entry -> Map.of("key", entry.getKey(), "value", entry.getValue()))
|
|
|
- .toList();
|
|
|
+ .map(entry -> Map.of("key", entry.getKey(), "value", entry.getValue()))
|
|
|
+ .toList();
|
|
|
return Map.of("variableList", variableList, "variable", flowInstance.getVariable());
|
|
|
}
|
|
|
|
|
|
@@ -416,10 +424,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|
|
BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus());
|
|
|
}
|
|
|
FlowParams flowParams = FlowParams.build()
|
|
|
- .message(bo.getComment())
|
|
|
- .flowStatus(BusinessStatusEnum.INVALID.getStatus())
|
|
|
- .hisStatus(TaskStatusEnum.INVALID.getStatus())
|
|
|
- .ignore(true);
|
|
|
+ .message(bo.getComment())
|
|
|
+ .flowStatus(BusinessStatusEnum.INVALID.getStatus())
|
|
|
+ .hisStatus(TaskStatusEnum.INVALID.getStatus())
|
|
|
+ .ignore(true);
|
|
|
taskService.terminationByInsId(bo.getId(), flowParams);
|
|
|
return true;
|
|
|
} catch (Exception e) {
|