From c97c04770c17c36c554963bf8bb8d8fafc6a8d43 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 07 五月 2026 09:43:35 +0800
Subject: [PATCH] #地图更新刷新缓存

---
 src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
index 1e3b7b6..7f3cb64 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
@@ -15,15 +15,19 @@
 import com.zy.asrs.service.BasMapService;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.utils.Utils;
+import com.zy.common.utils.NavigateSolution;
 import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
 import com.zy.core.enums.RedisKeyType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -36,6 +40,14 @@
     @Autowired
     private RedisUtil redisUtil;
 
+    // 鍦板浘鎷撴墤鍙樺寲鍚庯紝杩欎簺鍙揪鎬у拰绔欑偣閫夋嫨缁撴灉閮藉彲鑳借繃鏈燂紝蹇呴』鏁翠綋澶辨晥銆�
+    private static final String[] MAP_DERIVED_CACHE_PREFIXES = {
+            RedisKeyType.STATION_REACHABLE_CACHE.key,
+            RedisKeyType.PRECOMPUTE_IN_TASK_ROW_CACHE.key,
+            RedisKeyType.IN_STATION_ROUTE_CACHE.key,
+            RedisKeyType.OUT_STATION_ROUTE_CACHE.key
+    };
+
     @Override
     public BasMap selectLatestMap(Integer lev) {
         return this.baseMapper.selectLatestMap(lev);
@@ -43,7 +55,9 @@
 
     @Override
     public boolean deleteByLev(Integer lev) {
-        return this.baseMapper.deleteByLev(lev);
+        boolean deleted = this.baseMapper.deleteByLev(lev);
+        refreshMapRuntimeCaches(Collections.singletonList(lev));
+        return deleted;
     }
 
     @Override
@@ -123,6 +137,50 @@
     }
 
     @Override
+    public void refreshMapRuntimeCaches(List<Integer> levList) {
+        redisUtil.del(RedisKeyType.LOC_MAP_BASE.key);
+        redisUtil.del(RedisKeyType.LOC_MAST_MAP_LIST.key);
+        clearMapDerivedRedisCaches();
+        if (levList == null || levList.isEmpty()) {
+            return;
+        }
+
+        LinkedHashSet<Integer> distinctLevSet = new LinkedHashSet<>(levList);
+        for (Integer lev : distinctLevSet) {
+            if (lev == null) {
+                continue;
+            }
+            NavigateSolution.clearMapCache(lev);
+            if (!hasMapLev(lev)) {
+                continue;
+            }
+            refreshNavigateMapCache(lev);
+        }
+    }
+
+    private void clearMapDerivedRedisCaches() {
+        for (String keyPrefix : MAP_DERIVED_CACHE_PREFIXES) {
+            redisUtil.deleteByPrefix(keyPrefix);
+        }
+    }
+
+    private boolean hasMapLev(Integer lev) {
+        if (lev == null) {
+            return false;
+        }
+        return this.count(new QueryWrapper<BasMap>().eq("lev", lev)) > 0;
+    }
+
+    private void refreshNavigateMapCache(Integer lev) {
+        try {
+            NavigateSolution.refreshMapCache(lev);
+        } catch (Exception e) {
+            News.error("鍦板浘杩愯缂撳瓨鍒锋柊澶辫触锛宭ev={}", lev, e);
+            throw e;
+        }
+    }
+
+    @Override
     @Transactional
     public int syncLocMastByMap(Integer lev) {
         if (lev == null || lev <= 0) {

--
Gitblit v1.9.1