Prechádzať zdrojové kódy

地址判断逻辑优化

DESKTOP-6LTVLN7\Liumouren 1 mesiac pred
rodič
commit
12abbab008

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

@@ -47,6 +47,26 @@ public class CorporateLibraryController {
         return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "地址" + address + "写入回流表", "成功");
     }
 
+    /**
+     * 异常替换地址操作
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/changeErrAddrReStr")
+    public String changeErrAddrReStr(HttpServletRequest request) {
+        String edit = request.getParameter("edit");
+        if (edit.equals("put")) {
+            String key = request.getParameter("key");
+            String value = request.getParameter("value");
+            ShanghaiAddressSplitUtil.errAddrReStr.put(key, value);
+        } else if (edit.equals("del")) {
+            String key = request.getParameter("key");
+            ShanghaiAddressSplitUtil.errAddrReStr.remove(key);
+        }
+        return MessageManage.getInstance().getResultContent(Constant.SUCCESS, "状态已更新为:" + ShanghaiAddressSplitUtil.errAddrReStr, "成功");
+    }
+
     //  手动更新是否检查结果经纬度状态
     @RequestMapping(value = "/changeIfOpenLonLatStatus")
     public String changeIfOpenLonLatStatus(HttpServletRequest request) {
@@ -186,7 +206,7 @@ public class CorporateLibraryController {
             return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
         AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address);
-        if (addressResult == null && addressResult.getData() == null && addressResult.getData().get(0) == null) {
+        if (addressResult == null || addressResult.getData() == null || addressResult.getData().get(0) == null) {
             AreaService.getInstance().callBackErrorAddr(address);
             return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "无数据", "无数据");
         } else {

+ 0 - 3
src/main/java/com/skyversation/poiaddr/controller/PoiAddressController.java

@@ -2,12 +2,9 @@ package com.skyversation.poiaddr.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
-import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.config.DbConnection;
 import com.skyversation.poiaddr.service.impl.SjArrDzbzhSjWcbryDzxxServiceImpl;
-import com.skyversation.poiaddr.util.AddressTools;
-import com.skyversation.poiaddr.util.ExcelReaderUtils;
 import com.skyversation.poiaddr.util.RequestUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;

+ 2 - 2
src/main/java/com/skyversation/poiaddr/util/AddressTools.java

@@ -913,11 +913,11 @@ public class AddressTools {
         SplitAddress splitAddress2 = ShanghaiAddressSplitUtil.splitBestAddress(bean.getStandAddr());
         SplitAddress splitAddress3 = ShanghaiAddressSplitUtil.splitBestAddress(bean.getAddress());
 //      验证行政区划是否一致(也许是错误的输入地址呢?不过概率很小,不强制)
-        if (StringUtils.hasText(splitAddress1.getDistrict()) && StringUtils.hasText(splitAddress2.getDistrict()) && !splitAddress1.getDistrict().contains(splitAddress2.getDistrict())) {
+        if (splitAddress1.getDistrict() != null && splitAddress2.getDistrict() != null && StringUtils.hasText(splitAddress1.getDistrict()) && StringUtils.hasText(splitAddress2.getDistrict()) && !splitAddress1.getDistrict().contains(splitAddress2.getDistrict())) {
             AreaService.getInstance().callBackErrorAddr(bean.getSearchAddress());
         }
 //      验证街镇是否一致(这个很关键,如果用户输入的是正确的地址,但是搜索完地址导致街镇不对,就需要注意了:是不是数据库中的这个路的数据量太少导致强行匹配了别的镇的数据,或者数据库里面的定位就不准,还有一种情况:用户输入的就是错误的)
-        if (StringUtils.hasText(splitAddress1.getStreet()) && StringUtils.hasText(splitAddress2.getStreet()) && !splitAddress1.getStreet().contains(splitAddress2.getStreet())) {
+        if (splitAddress1.getStreet() != null && splitAddress2.getStreet() != null && StringUtils.hasText(splitAddress1.getStreet()) && StringUtils.hasText(splitAddress2.getStreet()) && !splitAddress1.getStreet().contains(splitAddress2.getStreet())) {
             AreaService.getInstance().callBackErrorAddr(bean.getSearchAddress());
         }
 //      验证路牌号是否一致(加上了这个判断大概率会导致很多地址回流)

+ 3 - 2
src/main/java/com/skyversation/poiaddr/util/ShanghaiAddressSplitUtil.java

@@ -53,7 +53,7 @@ public class ShanghaiAddressSplitUtil {
 
     private static final Pattern MULTI_ADDRESS = Pattern.compile("(?<=[0-9])[号弄]?[、/\\\\][0-9]+(?=[号弄])");
 
-    private static Map<String, String> errAddrReStr = new HashMap<>();
+    public static Map<String, String> errAddrReStr = new HashMap<>();
 
     @PostConstruct
     private void init() {
@@ -89,6 +89,7 @@ public class ShanghaiAddressSplitUtil {
         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<>();
@@ -586,7 +587,7 @@ public class ShanghaiAddressSplitUtil {
         new ShanghaiAddressSplitUtil().init();
         AddrSplitLmrMap addrSplitLmrMap = new AddrSplitLmrMap();
         addrSplitLmrMap.initFile();
-        String testAddress = "上海市长宁区仙霞新村街道仙霞街道外来人员管理办公室";
+        String testAddress = "上海市崇明区港西镇三双公路1021号10幢U1006室(上海津桥经济开发区)";
         System.out.println("测试地址:" + testAddress);
         SplitAddress xzqh = splitBestAddress(testAddress);
         System.out.println(xzqh);