diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index 1e75643f1..1b10eb8ea 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java @@ -58,4 +58,9 @@ public interface FlowConstant { */ String FLOW_CATEGORY_NAME = "flow_category_name#30d"; + /** + * 默认租户OA申请分类id + */ + Long FLOW_CATEGORY_ID = 100L; + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java index 0af0bbe41..baec223fe 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java @@ -30,6 +30,8 @@ import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; import org.dromara.warm.flow.orm.mapper.FlowSkipMapper; +import org.dromara.workflow.common.constant.FlowConstant; +import org.dromara.workflow.domain.FlowCategory; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.service.IFlwDefinitionService; @@ -59,7 +61,6 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { private final FlowDefinitionMapper flowDefinitionMapper; private final FlowHisTaskMapper flowHisTaskMapper; private final FlwCategoryMapper flwCategoryMapper; - private final FlowNodeMapper flowNodeMapper; private final FlowSkipMapper flowSkipMapper; @@ -223,6 +224,11 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { if (CollUtil.isEmpty(flowDefinitions)) { return; } + FlowCategory flowCategory = flwCategoryMapper.selectOne(new LambdaQueryWrapper() + .eq(FlowCategory::getTenantId, DEFAULT_TENANT_ID).eq(FlowCategory::getCategoryId, FlowConstant.FLOW_CATEGORY_ID)); + flowCategory.setCategoryId(null); + flowCategory.setTenantId(tenantId); + flwCategoryMapper.insert(flowCategory); List defIds = StreamUtils.toList(flowDefinitions, FlowDefinition::getId); List flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper().in(FlowNode::getDefinitionId, defIds)); List flowSkips = flowSkipMapper.selectList(new LambdaQueryWrapper().in(FlowSkip::getDefinitionId, defIds)); @@ -231,7 +237,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { flowDefinition.setId(null); flowDefinition.setTenantId(tenantId); flowDefinition.setIsPublish(0); - flowDefinition.setCategory(null); + flowDefinition.setCategory(String.valueOf(flowCategory.getCategoryId())); int insert = flowDefinitionMapper.insert(flowDefinition); if (insert <= 0) { log.info("同步流程定义【{}】失败!", definition.getFlowCode()); 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 5bfaddf03..935d40997 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 @@ -361,48 +361,20 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (ObjectUtil.isNull(task)) { throw new ServiceException("任务不存在!"); } - List flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper().eq(FlowNode::getDefinitionId, task.getDefinitionId())); Instance inst = insService.getById(task.getInstanceId()); BusinessStatusEnum.checkBackStatus(inst.getFlowStatus()); Long definitionId = task.getDefinitionId(); Definition definition = defService.getById(definitionId); String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId); - List listRunTask = flwTaskMapper.getListRunTask(new QueryWrapper().eq("instance_id", task.getInstanceId())); - //不是当前节点的待审任务 - List taskVos = StreamUtils.filter(listRunTask, e -> !e.getId().equals(taskId)); - WorkflowUtils.deleteRunTask(StreamUtils.toList(taskVos, FlowTaskVo::getId)); - if (applyNodeCode.equals(bo.getNodeCode())) { - WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.BACK.getStatus(), TaskStatusEnum.BACK.getStatus()); - } else { - WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus(), TaskStatusEnum.BACK.getStatus()); - } - //删除记录 - FlowNode node = flowNodes.stream().filter(e -> e.getNodeCode().equals(task.getNodeCode())).findFirst().orElse(null); - if (node.getNodeRatio().compareTo(BigDecimal.ZERO) > 0) { - List flowHisTasks = flowHisTaskMapper.selectList( - new LambdaQueryWrapper() - .eq(FlowHisTask::getFlowStatus, BusinessStatusEnum.BACK.getStatus()) - .eq(FlowHisTask::getTaskId, taskId) - .ne(FlowHisTask::getApprover, LoginHelper.getUserIdStr()) - ); - if (CollUtil.isNotEmpty(flowHisTasks)) { - flowHisTaskMapper.deleteByIds(StreamUtils.toList(flowHisTasks, FlowHisTask::getId)); - } - } + FlowParams flowParams = FlowParams.build(); + flowParams.nodeCode(bo.getNodeCode()); + flowParams.message(message); + flowParams.skipType(SkipType.REJECT.getKey()); + flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus()) + .hisStatus(TaskStatusEnum.BACK.getStatus()); + taskService.skip(task.getId(), flowParams); + Instance instance = insService.getById(inst.getId()); - //判断或节点是否有多个,只保留一个 - List currentTaskList = selectByInstId(instance.getId()); - if (CollUtil.isNotEmpty(currentTaskList)) { - List nodeCodes = StreamUtils.toList(currentTaskList, FlowTask::getNodeCode); - List nodeCodeList = StreamUtils.filter(flowNodes, flowNode -> nodeCodes.contains(flowNode.getNodeCode())); - for (Node n : nodeCodeList) { - List flowTasks = currentTaskList.stream().filter(e -> e.getNodeCode().equals(n.getNodeCode()) && n.getNodeRatio().compareTo(BigDecimal.ZERO) == 0).collect(Collectors.toList()); - if (flowTasks.size() > 1) { - flowTasks.remove(0); - WorkflowUtils.deleteRunTask(StreamUtils.toList(flowTasks, Task::getId)); - } - } - } this.setHandler(instance, task, null); // 消息通知 WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); @@ -413,11 +385,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } } - /** - * 获取可驳回节点 - * - * @param instanceId 实例id - */ /** * 获取可驳回的前置节点 * diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index 8cf9b6c0c..0bf8f429b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -36,6 +36,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; /** @@ -121,7 +122,7 @@ public class WorkflowUtils { switch (messageTypeEnum) { case SYSTEM_MESSAGE: SseMessageDto dto = new SseMessageDto(); - dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId)); + dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId).stream().distinct().collect(Collectors.toList())); dto.setMessage(message); SseMessageUtils.publishMessage(dto); break;