From 1ba323228dbe8ce20331d3ea8575074b7010125f Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 12 三月 2026 09:54:57 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
index 4e1b063..b4be938 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -78,6 +78,10 @@
 
     @Override
     public PageInfo<XpElectronicFence> pageList(ElectronicPageListQuery query) {
+        if (query == null) {
+            return new PageInfo<>();
+        }
+        normalizeProhibitedAreaCountFilter(query);
         PageInfo<XpElectronicFence> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         if (StringUtils.isEmpty(query.getCreateSort())&& StringUtils.isEmpty(query.getUpdateSort())){
             query.setCreateSort("2");
@@ -103,6 +107,81 @@
         pageInfo.setRecords(list);
         return pageInfo;
     }
+
+    private void normalizeProhibitedAreaCountFilter(ElectronicPageListQuery query) {
+        Integer prohibitedAreaCountMin = query.getProhibitedAreaCountMin();
+        Integer prohibitedAreaCountMax = query.getProhibitedAreaCountMax();
+        if (prohibitedAreaCountMin != null || prohibitedAreaCountMax != null) {
+            if (prohibitedAreaCountMin != null && prohibitedAreaCountMax != null) {
+                int min = Math.min(prohibitedAreaCountMin, prohibitedAreaCountMax);
+                int max = Math.max(prohibitedAreaCountMin, prohibitedAreaCountMax);
+                if (min < 0) {
+                    clearAreaFilter(query);
+                    return;
+                }
+                query.setProhibitedAreaCountMin(min);
+                query.setProhibitedAreaCountMax(max);
+                query.setElectronicAreaId(null);
+                return;
+            }
+            if (prohibitedAreaCountMin != null) {
+                if (prohibitedAreaCountMin < 0) {
+                    clearAreaFilter(query);
+                    return;
+                }
+                query.setElectronicAreaId(null);
+                return;
+            }
+            if (prohibitedAreaCountMax < 0) {
+                clearAreaFilter(query);
+                return;
+            }
+            query.setElectronicAreaId(null);
+            return;
+        }
+
+        String electronicAreaId = query.getElectronicAreaId();
+        if (StringUtils.isEmpty(electronicAreaId)) {
+            return;
+        }
+        try {
+            if (electronicAreaId.contains(",")) {
+                String[] parts = electronicAreaId.split(",");
+                if (parts.length != 2) {
+                    clearAreaFilter(query);
+                    return;
+                }
+                int left = Integer.parseInt(parts[0].trim());
+                int right = Integer.parseInt(parts[1].trim());
+                int min = Math.min(left, right);
+                int max = Math.max(left, right);
+                if (min < 0) {
+                    clearAreaFilter(query);
+                    return;
+                }
+                query.setProhibitedAreaCountMin(min);
+                query.setProhibitedAreaCountMax(max);
+                query.setElectronicAreaId(null);
+                return;
+            }
+            int threshold = Integer.parseInt(electronicAreaId.trim());
+            if (threshold < 0 || threshold == Integer.MAX_VALUE) {
+                clearAreaFilter(query);
+                return;
+            }
+            query.setProhibitedAreaCountMin(threshold + 1);
+            query.setProhibitedAreaCountMax(null);
+            query.setElectronicAreaId(null);
+        } catch (Exception e) {
+            clearAreaFilter(query);
+        }
+    }
+
+    private void clearAreaFilter(ElectronicPageListQuery query) {
+        query.setElectronicAreaId(null);
+        query.setProhibitedAreaCountMin(null);
+        query.setProhibitedAreaCountMax(null);
+    }
     public static String getPinyinInitials(String chinese) {
         StringBuilder pinyinInitials = new StringBuilder();
         for (char c : chinese.toCharArray()) {

--
Gitblit v1.7.1