update 调整流程驳回

fix 修复发送审批提醒重复
update 修改新增租户同步流程分类
This commit is contained in:
gssong 2025-01-09 21:54:29 +08:00
parent e9936334e5
commit 57a46ea7b3
4 changed files with 23 additions and 44 deletions

View File

@ -58,4 +58,9 @@ public interface FlowConstant {
*/ */
String FLOW_CATEGORY_NAME = "flow_category_name#30d"; String FLOW_CATEGORY_NAME = "flow_category_name#30d";
/**
* 默认租户OA申请分类id
*/
Long FLOW_CATEGORY_ID = 100L;
} }

View File

@ -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.FlowHisTaskMapper;
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
import org.dromara.warm.flow.orm.mapper.FlowSkipMapper; 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.domain.vo.FlowDefinitionVo;
import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.service.IFlwDefinitionService;
@ -59,7 +61,6 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
private final FlowDefinitionMapper flowDefinitionMapper; private final FlowDefinitionMapper flowDefinitionMapper;
private final FlowHisTaskMapper flowHisTaskMapper; private final FlowHisTaskMapper flowHisTaskMapper;
private final FlwCategoryMapper flwCategoryMapper; private final FlwCategoryMapper flwCategoryMapper;
private final FlowNodeMapper flowNodeMapper; private final FlowNodeMapper flowNodeMapper;
private final FlowSkipMapper flowSkipMapper; private final FlowSkipMapper flowSkipMapper;
@ -223,6 +224,11 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
if (CollUtil.isEmpty(flowDefinitions)) { if (CollUtil.isEmpty(flowDefinitions)) {
return; return;
} }
FlowCategory flowCategory = flwCategoryMapper.selectOne(new LambdaQueryWrapper<FlowCategory>()
.eq(FlowCategory::getTenantId, DEFAULT_TENANT_ID).eq(FlowCategory::getCategoryId, FlowConstant.FLOW_CATEGORY_ID));
flowCategory.setCategoryId(null);
flowCategory.setTenantId(tenantId);
flwCategoryMapper.insert(flowCategory);
List<Long> defIds = StreamUtils.toList(flowDefinitions, FlowDefinition::getId); List<Long> defIds = StreamUtils.toList(flowDefinitions, FlowDefinition::getId);
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().in(FlowNode::getDefinitionId, defIds)); List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().in(FlowNode::getDefinitionId, defIds));
List<FlowSkip> flowSkips = flowSkipMapper.selectList(new LambdaQueryWrapper<FlowSkip>().in(FlowSkip::getDefinitionId, defIds)); List<FlowSkip> flowSkips = flowSkipMapper.selectList(new LambdaQueryWrapper<FlowSkip>().in(FlowSkip::getDefinitionId, defIds));
@ -231,7 +237,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
flowDefinition.setId(null); flowDefinition.setId(null);
flowDefinition.setTenantId(tenantId); flowDefinition.setTenantId(tenantId);
flowDefinition.setIsPublish(0); flowDefinition.setIsPublish(0);
flowDefinition.setCategory(null); flowDefinition.setCategory(String.valueOf(flowCategory.getCategoryId()));
int insert = flowDefinitionMapper.insert(flowDefinition); int insert = flowDefinitionMapper.insert(flowDefinition);
if (insert <= 0) { if (insert <= 0) {
log.info("同步流程定义【{}】失败!", definition.getFlowCode()); log.info("同步流程定义【{}】失败!", definition.getFlowCode());

View File

@ -361,48 +361,20 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (ObjectUtil.isNull(task)) { if (ObjectUtil.isNull(task)) {
throw new ServiceException("任务不存在!"); throw new ServiceException("任务不存在!");
} }
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, task.getDefinitionId()));
Instance inst = insService.getById(task.getInstanceId()); Instance inst = insService.getById(task.getInstanceId());
BusinessStatusEnum.checkBackStatus(inst.getFlowStatus()); BusinessStatusEnum.checkBackStatus(inst.getFlowStatus());
Long definitionId = task.getDefinitionId(); Long definitionId = task.getDefinitionId();
Definition definition = defService.getById(definitionId); Definition definition = defService.getById(definitionId);
String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId); String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId);
List<FlowTaskVo> listRunTask = flwTaskMapper.getListRunTask(new QueryWrapper<FlowTaskBo>().eq("instance_id", task.getInstanceId())); FlowParams flowParams = FlowParams.build();
//不是当前节点的待审任务 flowParams.nodeCode(bo.getNodeCode());
List<FlowTaskVo> taskVos = StreamUtils.filter(listRunTask, e -> !e.getId().equals(taskId)); flowParams.message(message);
WorkflowUtils.deleteRunTask(StreamUtils.toList(taskVos, FlowTaskVo::getId)); flowParams.skipType(SkipType.REJECT.getKey());
if (applyNodeCode.equals(bo.getNodeCode())) { flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus())
WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.BACK.getStatus(), TaskStatusEnum.BACK.getStatus()); .hisStatus(TaskStatusEnum.BACK.getStatus());
} else { taskService.skip(task.getId(), flowParams);
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<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(
new LambdaQueryWrapper<FlowHisTask>()
.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));
}
}
Instance instance = insService.getById(inst.getId()); Instance instance = insService.getById(inst.getId());
//判断或节点是否有多个只保留一个
List<FlowTask> currentTaskList = selectByInstId(instance.getId());
if (CollUtil.isNotEmpty(currentTaskList)) {
List<String> nodeCodes = StreamUtils.toList(currentTaskList, FlowTask::getNodeCode);
List<FlowNode> nodeCodeList = StreamUtils.filter(flowNodes, flowNode -> nodeCodes.contains(flowNode.getNodeCode()));
for (Node n : nodeCodeList) {
List<FlowTask> 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); this.setHandler(instance, task, null);
// 消息通知 // 消息通知
WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
@ -413,11 +385,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
} }
} }
/**
* 获取可驳回节点
*
* @param instanceId 实例id
*/
/** /**
* 获取可驳回的前置节点 * 获取可驳回的前置节点
* *

View File

@ -36,6 +36,7 @@ import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
/** /**
@ -121,7 +122,7 @@ public class WorkflowUtils {
switch (messageTypeEnum) { switch (messageTypeEnum) {
case SYSTEM_MESSAGE: case SYSTEM_MESSAGE:
SseMessageDto dto = new SseMessageDto(); 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); dto.setMessage(message);
SseMessageUtils.publishMessage(dto); SseMessageUtils.publishMessage(dto);
break; break;