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";
/**
* 默认租户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.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<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<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().in(FlowNode::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.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());

View File

@ -361,48 +361,20 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (ObjectUtil.isNull(task)) {
throw new ServiceException("任务不存在!");
}
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().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<FlowTaskVo> listRunTask = flwTaskMapper.getListRunTask(new QueryWrapper<FlowTaskBo>().eq("instance_id", task.getInstanceId()));
//不是当前节点的待审任务
List<FlowTaskVo> 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<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));
}
}
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<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);
// 消息通知
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.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;