diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeLinkService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeLinkService.java index 4f4b938f..2cde1990 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeLinkService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessNodeLinkService.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @@ -23,11 +24,11 @@ import java.util.Map; *@date 2023-09-26 15:12 */ @Service +@Transactional(rollbackFor = Exception.class) public class ProcessNodeLinkService extends ServiceImpl { @Resource private ProcessNodeService processNodeService; - @Transactional public void saveNodeUserLink(String processDefinitionId, String processInstanceId, Map map) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId); @@ -68,6 +69,54 @@ public class ProcessNodeLinkService extends ServiceImpl map) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId); + List processNodeList = processNodeService.list(wrapper); + List processNodeLinks = new ArrayList<>(); + for (ProcessNode processNode : processNodeList) { + String processNodeId = processNode.getId(); + String variableType = processNode.getVariableType(); + String variableName = processNode.getVariableName(); + List userIdList = new ArrayList<>(); + if (map.containsKey(variableName)) { + String s = (String) map.get(variableName); + if (StrUtil.isNotBlank(s)) { + if (VariableTypeEnum.LIST.getName().equals(variableType)) { + userIdList.addAll(Arrays.asList(s.split(","))); + }else { + userIdList.add(s); + } + } + } + if (!userIdList.isEmpty()) { + //如果当前节点绑定人了,先查询之前绑定的,增量保存 + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(ProcessNodeLink::getProcessNodeId,processNodeId); + wrapper1.eq(ProcessNodeLink::getProcessInstanceId,processInstanceId); + List list = this.list(wrapper1); + List distinctUserIdList = list.stream().map(ProcessNodeLink::getUserId).distinct().collect(Collectors.toList()); + userIdList.removeAll(distinctUserIdList); + for (String userId : userIdList) { + ProcessNodeLink processNodeLink = new ProcessNodeLink(); + processNodeLink.setProcessDefinitionId(processDefinitionId); + processNodeLink.setProcessNodeId(processNodeId); + processNodeLink.setProcessInstanceId(processInstanceId); + processNodeLink.setUserId(userId); + processNodeLinks.add(processNodeLink); + } + } + } + this.saveBatch(processNodeLinks); + + } + public List selectByProcessInstanceId(String processInstanceId) { LambdaQueryWrapper myQuery = Wrappers.lambdaQuery(ProcessNodeLink.class); myQuery.eq(ProcessNodeLink::getProcessInstanceId, processInstanceId);