瀏覽代碼

添加搜索精确等级参数(1、路名;2弄号;3:楼栋号)

DESKTOP-6LTVLN7\Liumouren 1 周之前
父節點
當前提交
7528a6a5c2

+ 2 - 7
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -79,7 +79,7 @@ public class AddressQueryEngine {
      * @param addr
      * @return
      */
-    public AddressResult commonSearchByName_nw(String addr) {
+    public AddressResult commonSearchByName_nw(String addr,int sl) {
         AddressResult addressResult = new AddressResult();
         if (!StringUtils.hasText(addr) || addr.length() < 3) {
             addressResult.setMessage("非地址数据");
@@ -116,7 +116,7 @@ public class AddressQueryEngine {
             addressResult.setAddrBean(addrBean);
 
             // 优先进行数据库查询
-            List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress);
+            List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress,sl);
             if (dbPois != null && dbPois.size() > 0) {
                 JSONArray pois = new JSONArray();
                 pois.addAll(dbPois);
@@ -204,11 +204,6 @@ public class AddressQueryEngine {
                 }
                 break;
         }
-        /*if (address.startsWith("中山") && paramObject.containsKey("value") && StringUtils.hasText(paramObject.get("value").toString()) && address.length() > 2) {
-            if (!address.startsWith("中山街道")) {
-                paramObject.put("value", "中山街道" + paramObject.get("value").toString().substring(2));
-            }
-        }*/
         if (!address.startsWith("上海")) {
             paramObject.put("value", "上海市" + paramObject.get("value"));
         }

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

@@ -111,7 +111,7 @@ public class CorporateLibraryController {
                     SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(address);
                     try {
                         String xzqh = StringUtils.hasText(splitAddress.getDistrict()) ? splitAddress.getDistrict() : item.getCounty();
-                        if(xzqh.equals("松江区")){
+                        if (xzqh.equals("松江区")) {
 //                          得到经纬度,落点判断是否是这个区划和街道,不属于的话
                             Float lon = item.getLon();
                             Float lat = item.getLat();
@@ -125,7 +125,7 @@ public class CorporateLibraryController {
                                     item.setCommunity(cjBean.getProperties().getString("居委_1"));
                                     updateDatas.add(item);
                                 }
-                            }else{
+                            } else {
                                 sum++;
                                 item.setType("clear_err");
                                 updateDatas.add(item);
@@ -157,7 +157,7 @@ public class CorporateLibraryController {
         if (StringUtils.hasText(district)) {
             splitAddress.setDistrict(district);
         }
-        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress);
+        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress,3);
         AddressResult addressResult = null;
         if (list == null || list.size() < 1) {
 //          写入回流表
@@ -184,7 +184,7 @@ public class CorporateLibraryController {
         if (!StringUtils.hasText(address)) {
             return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
-        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address);
+        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address,1);
         if (addressResult == null) {
             AreaService.getInstance().callBackErrorAddr(address);
             return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "无数据", "无数据");
@@ -208,7 +208,18 @@ public class CorporateLibraryController {
         if (!StringUtils.hasText(address)) {
             return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
-        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address);
+//      搜索等级:【1:路名、2:弄号、3:楼栋号】
+        int sl = 3;
+        String searchLevel = request.getParameter("searchLevel");
+        try {
+            sl = Integer.parseInt(searchLevel);
+            if (sl < 1 || sl > 3) {
+                return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
+            }
+        } catch (Exception e) {
+            return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
+        }
+        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address,sl);
         if (addressResult == null || addressResult.getData() == null || addressResult.getData().get(0) == null) {
             AreaService.getInstance().callBackErrorAddr(address);
             return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "无数据", "无数据");

+ 31 - 24
src/main/java/com/skyversation/poiaddr/service/AreaService.java

@@ -376,7 +376,7 @@ public class AreaService {
                 for (PendingGovernanceIntermediateTable item : dataList) {
                     i++;
                     System.out.print(">" + i);
-                    AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(item.getOriginalAddress());
+                    AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(item.getOriginalAddress(), 3);
                     GovernanceResultsTable governanceResultsTable = new GovernanceResultsTable();
                     governanceResultsTable.setOriginalAddress(item.getOriginalAddress());
                     governanceResultsTable.setBatchNumber(item.getBatchNumber());
@@ -436,16 +436,18 @@ public class AreaService {
      * 批量插入数据到callback表
      */
     public void callBackAddrs() {
-//      TOOD jpa
-        try {
-            List<TAddressCallback> tAddressCallbacks = tAddressCallbackRepository.saveAll(ScheduledTasks.callBackDatas);
-            if (tAddressCallbacks.size() > 0) {
-                ScheduledTasks.callBackDatas.clear();
-                System.out.println("数据回流成功");
+//      TODO jpa
+        if (ScheduledTasks.callBackDatas != null && ScheduledTasks.callBackDatas.size() > 0) {
+            try {
+                List<TAddressCallback> tAddressCallbacks = tAddressCallbackRepository.saveAll(ScheduledTasks.callBackDatas);
+                if (tAddressCallbacks.size() > 0) {
+                    ScheduledTasks.callBackDatas.clear();
+                    System.out.println("数据回流成功");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                System.out.println("数据回流异常:" + e);
             }
-        } catch (Exception e) {
-            e.printStackTrace();
-            System.out.println("数据回流异常:" + e);
         }
     }
 
@@ -471,30 +473,35 @@ public class AreaService {
      *
      * @return
      */
-    public List<YyskDmdzAddressStandardization> getDmdzAddressByRoadInfos(String addr2) {
+    public List<YyskDmdzAddressStandardization> getDmdzAddressByRoadInfos(String addr2, int sl) {
         List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
         Map<String, String> roadInfos = AddrSplitLmrMap.parseAddress(addr2);
         if (roadInfos != null && roadInfos.containsKey("路名") && roadInfos.get("路名") != null && StringUtils.hasText(roadInfos.get("路名"))) {
-            addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "");
+//          搜索等级:【1:路名、2:弄号、3:楼栋号】
+            switch (sl) {
+                case 1:
+                    addr2 = roadInfos.get("路名");
+                    break;
+                case 2:
+                    addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "");
+                    break;
+                case 3:
+                    addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "") + (StringUtils.hasText(roadInfos.get("楼栋号")) ? roadInfos.get("楼栋号") : "");
+                    break;
+            }
             if (ScheduledTasks.allDmdzData.containsKey(addr2)) {
                 returnDatas = ScheduledTasks.allDmdzData.get(addr2);
             } else {
-                addr2 = roadInfos.get("路名") + (StringUtils.hasText(roadInfos.get("弄号")) ? roadInfos.get("弄号") : "");
-                if (ScheduledTasks.allDmdzData.containsKey(addr2)) {
-                    returnDatas = ScheduledTasks.allDmdzData.get(addr2);
-                } else {
-                    for (String key : ScheduledTasks.allDmdzData.keySet()) {
+                for (String key : ScheduledTasks.allDmdzData.keySet()) {
 //                      TODO 地址库有离谱的骚东西
-                        if (key != null && key.contains(addr2)) {
-                            returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
-                            break;
-                        }
+                    if (key != null && key.contains(addr2) && returnDatas.size() < 20) {
+                        returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
                     }
                 }
             }
         } else {
             for (String key : ScheduledTasks.allDmdzData.keySet()) {
-//                      TODO 地址库有离谱的骚东西
+//              TODO 地址库有离谱的骚东西
                 if (key != null && addr2 != null && key.contains(addr2)) {
                     returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
                     break;
@@ -504,7 +511,7 @@ public class AreaService {
         return returnDatas;
     }
 
-    public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(SplitAddress splitAddress) {
+    public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(SplitAddress splitAddress, int sl) {
 //      TODO 数据库查询逻辑调整为内存处理的方式
         String addr = splitAddress.getAddr();
         String addr2 = addr + "";
@@ -512,7 +519,7 @@ public class AreaService {
         if (lmrAddrBean.getAddress() != null) {
             addr2 = lmrAddrBean.getAddress();
         }
-        List<YyskDmdzAddressStandardization> returnDatas = getDmdzAddressByRoadInfos(addr2);
+        List<YyskDmdzAddressStandardization> returnDatas = getDmdzAddressByRoadInfos(addr2, sl);
 //      对于区的精准查询
         List<YyskDmdzAddressStandardization> returnDatas2 = new ArrayList<>();
         if (StringUtils.hasText(splitAddress.getDistrict())) {