From 635458d19a306321df46ba156547b8ef527869dd Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: Sat, 17 Aug 2024 07:01:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/gb28181/bean/Region.java | 26 +++++++++++++ .../iot/vmp/gb28181/dao/GroupMapper.java | 17 +++++--- .../iot/vmp/gb28181/dao/RegionMapper.java | 4 +- .../service/impl/GbChannelServiceImpl.java | 39 ++++++++++++------- 4 files changed, 65 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Region.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Region.java index e1e99f0c..cb70d360 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Region.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Region.java @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.gb28181.bean; import com.genersoft.iot.vmp.common.CivilCodePo; +import com.genersoft.iot.vmp.jt1078.proc.request.Re; import com.genersoft.iot.vmp.utils.CivilCodeUtil; import com.genersoft.iot.vmp.utils.DateUtil; import io.swagger.v3.oas.annotations.media.Schema; @@ -88,4 +89,29 @@ public class Region implements Comparable{ public int compareTo(@NotNull Region region) { return Integer.compare(Integer.parseInt(this.deviceId), Integer.parseInt(region.getDeviceId())); } + + @Override + public boolean equals(Object obj) { + if (obj == null) + return false; + if (this == obj) + return true; + if (obj instanceof Region) { + Region region = (Region) obj; + + // 比较每个属性的值一致时才返回true + if (region.getId() == this.id) { + return true; + } + } + return false; + } + + /** + * 重写hashcode方法,返回的hashCode一样才再去比较每个属性的值 + */ + @Override + public int hashCode() { + return id; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java index 2b261c44..b6a3ebd1 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java @@ -164,14 +164,19 @@ public interface GroupMapper { @Select(" ") - List queryInChannelList(List channelList); + Set queryInChannelList(List channelList); + + @Select(" ") + Set queryParentInChannelList(Set regionChannelList); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java index fe39275e..42446b76 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java @@ -105,7 +105,7 @@ public interface RegionMapper { " where device_id in " + " #{item.gbCivilCode}" + " ") - List queryInChannelList(List channelList); + Set queryInChannelList(List channelList); @Select(" ") - List queryParentInChannelList(List regionChannelList); + Set queryParentInChannelList(Set regionChannelList); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java index a3b5d470..96ba3059 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java @@ -20,10 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; @Slf4j @Service @@ -328,10 +325,10 @@ public class GbChannelServiceImpl implements IGbChannelService { // 是否包含行政区划信息 if (platform.getCatalogWithRegion()) { - List regionChannelList = regionMapper.queryInChannelList(commonGBChannelList); + Set regionChannelList = regionMapper.queryInChannelList(commonGBChannelList); if (!regionChannelList.isEmpty()) { - // 获取这些节点的所有父节点 - List allRegion = getAllRegion(regionChannelList); + // 获取这些节点的所有父节点, 使用set滤重 + Set allRegion = getAllRegion(regionChannelList); for (Region region : allRegion) { channelList.add(CommonGBChannel.build(region)); } @@ -339,25 +336,41 @@ public class GbChannelServiceImpl implements IGbChannelService { } // 是否包含分组信息 if (platform.getCatalogWithGroup()) { - List groupChannelList = groupMapper.queryInChannelList(commonGBChannelList); + Set groupChannelList = groupMapper.queryInChannelList(commonGBChannelList); if (!groupChannelList.isEmpty()) { // 获取这些节点的所有父节点 - channelList.addAll(groupChannelList); + Set allGroup = getAllGroup(groupChannelList); + for (Group group : allGroup) { + channelList.add(CommonGBChannel.build(group)); + } } } channelList.addAll(commonGBChannelList); return channelList; } - private List getAllRegion(List regionChannelList ) { + private Set getAllRegion(Set regionChannelList ) { if (regionChannelList.isEmpty()) { - return new ArrayList<>(); + return new HashSet<>(); } - List channelList = regionMapper.queryParentInChannelList(regionChannelList); + Set channelList = regionMapper.queryParentInChannelList(regionChannelList); if (channelList.isEmpty()) { return channelList; } - List allParentRegion = getAllRegion(channelList); + Set allParentRegion = getAllRegion(channelList); + channelList.addAll(allParentRegion); + return channelList; + } + + private Set getAllGroup(Set regionChannelList ) { + if (regionChannelList.isEmpty()) { + return new HashSet<>(); + } + Set channelList = groupMapper.queryParentInChannelList(regionChannelList); + if (channelList.isEmpty()) { + return channelList; + } + Set allParentRegion = getAllGroup(channelList); channelList.addAll(allParentRegion); return channelList; }