mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-11 19:56:37 +08:00
fix: 批量分配时对请求中的重复tunnelId进行去重
防止同一请求中包含重复tunnelId导致创建多条权限记录
This commit is contained in:
@@ -17,7 +17,9 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -64,20 +66,21 @@ public class UserTunnelServiceImpl extends ServiceImpl<UserTunnelMapper, UserTun
|
|||||||
User user = userService.getById(batchAssignDto.getUserId());
|
User user = userService.getById(batchAssignDto.getUserId());
|
||||||
if (user == null) return R.err("用户不存在");
|
if (user == null) return R.err("用户不存在");
|
||||||
|
|
||||||
List<Integer> requestedTunnelIds = batchAssignDto.getTunnels().stream()
|
Map<Integer, UserTunnelBatchAssignDto.TunnelAssignItem> uniqueTunnels = new LinkedHashMap<>();
|
||||||
.map(UserTunnelBatchAssignDto.TunnelAssignItem::getTunnelId)
|
for (UserTunnelBatchAssignDto.TunnelAssignItem item : batchAssignDto.getTunnels()) {
|
||||||
.collect(Collectors.toList());
|
uniqueTunnels.putIfAbsent(item.getTunnelId(), item);
|
||||||
|
}
|
||||||
|
|
||||||
Set<Integer> existingTunnelIds = this.list(
|
Set<Integer> existingTunnelIds = this.list(
|
||||||
new QueryWrapper<UserTunnel>()
|
new QueryWrapper<UserTunnel>()
|
||||||
.eq("user_id", batchAssignDto.getUserId())
|
.eq("user_id", batchAssignDto.getUserId())
|
||||||
.in("tunnel_id", requestedTunnelIds)
|
.in("tunnel_id", uniqueTunnels.keySet())
|
||||||
).stream().map(UserTunnel::getTunnelId).collect(Collectors.toSet());
|
).stream().map(UserTunnel::getTunnelId).collect(Collectors.toSet());
|
||||||
|
|
||||||
List<UserTunnel> toSave = new ArrayList<>();
|
List<UserTunnel> toSave = new ArrayList<>();
|
||||||
List<Integer> skippedIds = new ArrayList<>();
|
List<Integer> skippedIds = new ArrayList<>();
|
||||||
|
|
||||||
for (UserTunnelBatchAssignDto.TunnelAssignItem item : batchAssignDto.getTunnels()) {
|
for (UserTunnelBatchAssignDto.TunnelAssignItem item : uniqueTunnels.values()) {
|
||||||
if (existingTunnelIds.contains(item.getTunnelId())) {
|
if (existingTunnelIds.contains(item.getTunnelId())) {
|
||||||
skippedIds.add(item.getTunnelId());
|
skippedIds.add(item.getTunnelId());
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user