Ver Fonte

回流的缓存对象也换成线程安全的数据类型

DESKTOP-6LTVLN7\Liumouren há 5 dias atrás
pai
commit
d025bad70a

+ 2 - 2
src/main/java/com/skyversation/poiaddr/controller/CorporateLibraryController.java

@@ -303,8 +303,8 @@ public class CorporateLibraryController {
             String oid = request.getParameter("oid");
             if (StringUtils.hasText(oid)) {
 //              删除操作,首先要删除缓存中的数据,然后执行del操作删除数据库中对应的数据
-                AreaService.getInstance().delDmdzAddressByRoadInfos(address, Long.parseLong(oid));
-                return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "地址" + address + "删除成功!", "成功");
+                boolean delStatus = AreaService.getInstance().delDmdzAddressByRoadInfos(address, Long.parseLong(oid));
+                return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "地址" + address + "删除" + (delStatus ? "成功" : "失败") + "!", "成功");
             } else {
 //              添加操作
                 String lon = request.getParameter("lon");

+ 6 - 3
src/main/java/com/skyversation/poiaddr/service/AreaService.java

@@ -560,10 +560,13 @@ public class AreaService {
             yyszAddressRepository.delete(delItem);
 //          找到key可以最快删除,地址直接输入路名和弄号等信息
             for (String key : ScheduledTasks.allDmdzData.keySet()) {
-//          TODO 地址库有离谱的骚东西(常见的就是不同的区或镇有相同的路名),这样会导致速度变慢,但是兼容性更强
+//              TODO 地址库有离谱的骚东西(常见的就是不同的区或镇有相同的路名),这样会导致速度变慢,但是兼容性更强
                 if (key != null && addr2 != null && key.contains(addr2)) {
-                    ScheduledTasks.allDmdzData.get(key).removeIf(item -> Objects.equals(item.getOid(), delId));
-                    return true;
+                    for(YyskDmdzAddressStandardization item:ScheduledTasks.allDmdzData.get(key)){
+                        if(Objects.equals(item.getOid(), delId)){
+                            return true;
+                        }
+                    }
                 }
             }
         } catch (Exception e) {

+ 5 - 1
src/main/java/com/skyversation/poiaddr/util/ShanghaiAddressSplitUtil.java

@@ -14,6 +14,7 @@ import java.io.InputStream;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -55,7 +56,7 @@ public class ShanghaiAddressSplitUtil {
 
     private static final Pattern MULTI_ADDRESS = Pattern.compile("(?<=[0-9])[号弄]?[、/\\\\][0-9]+(?=[号弄])");
 
-    public static Map<String, String> errAddrReStr = new HashMap<>();
+    public static Map<String, String> errAddrReStr = new ConcurrentHashMap<>();
 
     @PostConstruct
     private void init() {
@@ -93,6 +94,9 @@ public class ShanghaiAddressSplitUtil {
         errAddrReStr.put("天马山镇", "佘山镇");
         errAddrReStr.put("江海镇", "南桥镇");
         errAddrReStr.put("工业区", "");
+//      特殊路名
+        errAddrReStr.put("蓝天新村", "上海市松江区中山街道蓝天新村");
+        errAddrReStr.put("环城新村", "上海市松江区车墩镇环城新村");
         Map<String, threeLevelAddress> districtMap = new HashMap<>();
         Map<String, List<threeLevelAddress>> streetMap = new HashMap<>();
         Map<String, List<threeLevelAddress>> communityMap = new HashMap<>();

+ 4 - 4
src/main/java/com/skyversation/poiaddr/util/tasks/ScheduledTasks.java

@@ -58,7 +58,7 @@ public class ScheduledTasks {
     /**
      * 日志记录并会在程序结束时输出
      */
-    public static List<Map<String, Object>> logInfos = new ArrayList<>();
+    public static List<Map<String, Object>> logInfos = new CopyOnWriteArrayList<>();
 
 
     /**
@@ -151,8 +151,8 @@ public class ScheduledTasks {
                 List<TAddressCallback> tAddressCallbacks = AreaService.getInstance().getCallbackDataByTag();
                 infoItem.put("用时(毫秒)", System.currentTimeMillis() - startTime);
                 infoItem.put("备注", "数据条数" + tAddressCallbacks.size());
-                List<TAddressCallback> updateCallBackDatas = new ArrayList<>();
-                List<YyskDmdzAddressStandardization> addDmdzDataList = new ArrayList<>();
+                List<TAddressCallback> updateCallBackDatas = new CopyOnWriteArrayList<>();
+                List<YyskDmdzAddressStandardization> addDmdzDataList = new CopyOnWriteArrayList<>();
 //              然后调用市中心接口
                 ScheduledTasks.logInfos.add(infoItem);
                 for (TAddressCallback item : tAddressCallbacks) {
@@ -215,7 +215,7 @@ public class ScheduledTasks {
                         infoItem2.put("备注", "搜索地址:" + item.getSearchAddress());
                         ScheduledTasks.logInfos.add(infoItem2);
                         updateCallBackDatas.add(item);
-                        if (updateCallBackDatas.size() == 1000) {
+                        if (updateCallBackDatas.size() >= 1000) {
                             Map<String, Object> infoItem3 = new HashMap<>();
                             infoItem3.put("操作", "将治理的数据入库更新callBack表");
                             long inBaseTime = System.currentTimeMillis();