Forráskód Böngészése

速度减慢,保证质量

DESKTOP-6LTVLN7\Liumouren 1 hete
szülő
commit
0cf2a90485

+ 5 - 30
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -67,10 +67,11 @@ public class AddressQueryEngine {
      * @return
      */
     public AddressResult commonSearchByName_nw(String addr) {
-        if (!StringUtils.hasText(addr) || addr.length() <= 3) {
-            return null;
-        }
         AddressResult addressResult = new AddressResult();
+        if (!StringUtils.hasText(addr) || addr.length() < 3) {
+            addressResult.setMessage("非地址数据");
+            return addressResult;
+        }
         AddrBean lmrAddrBean = AddrSplitLmrMap.outAddrMapInAddr(addr);
         if (lmrAddrBean.getRule() != null && Integer.parseInt(lmrAddrBean.getRule()) <= 0) {
             addressResult.setMessage("非上海数据");
@@ -102,7 +103,7 @@ public class AddressQueryEngine {
             addressResult.setAddrBean(addrBean);
 
             // 优先进行数据库查询
-            List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoisByAddr(splitAddress);
+            List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress);
             if (dbPois != null && dbPois.size() > 0) {
                 JSONArray pois = new JSONArray();
                 pois.addAll(dbPois);
@@ -123,32 +124,6 @@ public class AddressQueryEngine {
                     addressResult.setAddrBean(addrBean);
                     return addressResult;
                 }
-            /*} else {
-                if (splitAddress.getDistrict() != null && !splitAddress.getDistrict().isEmpty()) {
-                    //查询无结果,尝试给出推荐结果
-                    List<YyskDmdzAddressStandardization> recommendPois = AreaService.getInstance().getRecommendAddress(splitAddress);
-                    if (recommendPois != null && recommendPois.size() > 0) {
-                        JSONArray pois = new JSONArray();
-                        pois.addAll(recommendPois);
-                        SplitAddress splitAddress1 = ShanghaiAddressSplitUtil.splitBestAddress(addr);
-                        addressResult = new TransfromDataTool().dbResultToResult(splitAddress1, addr, pois);
-                        addressResult.setAddrBean(addrBean);
-                        if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
-                            getCjWgWgwByLoc(addressResult);
-                            addressResult.setCode(AddressResultEnum.DB_RECOMMEND_SUCCESS);
-                            addressResult.setMessage("成功");
-                            AddressResult.ContentBean content = addressResult.getData().get(0);
-                            addrBean.setPname(content.getPname());
-                            addrBean.setCityname(content.getCityname());
-                            addrBean.setAdname(content.getAdname());
-                            addrBean.setDistance(content.getDistance());
-                            addrBean.setCommunity(content.getCommunity());
-                            addrBean.setStandAddr(content.getStandAddr());
-                            addressResult.setAddrBean(addrBean);
-                            return addressResult;
-                        }
-                    }
-                }*/
             }
         }
         addressResult.setMessage("失败");

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

@@ -44,7 +44,7 @@ public class CorporateLibraryController {
         }
 //      数据库查询
         SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(address);
-        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress.getAddr());
+        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(splitAddress);
         AddressResult addressResult = null;
         if (list == null || list.size() < 1) {
 //          写入回流表
@@ -119,13 +119,12 @@ public class CorporateLibraryController {
     public String runCallBackTablev2(HttpServletRequest request) {
         try {
 //            TODO 首先要使用JDBC写一个sql语句,验证同批次的地址不能重复,和null,重复或者为null的话直接返回(sql执行)
-            /*String sql = "select * from " + com.skyversation.poiaddr.addquery.Constant.getPgiTable() + " group by batch_number,pending_governance_address";
-            List<Map<String, Object>> sql1Datas = DbConnection.getInstance().runSqlStr(sql);
-            if (sql1Datas != null && sql1Datas.size() > 0) {
-                return "待处理表中同一批次有重复的地址数据:" + sql1Datas;
-            }*/
-//            TODO 然后根据结果总表中的数据,全词匹配待查地址,包含的放到回匹表中,(sql执行)先略过
-//            String sql2 = "";
+            /**
+             * -- 第一部分:更新待治理表的状态
+             * UPDATE 待治理表
+             * SET governance_status = 1
+             * WHERE address IN (SELECT address FROM 治理结果汇总表);
+             */
 //            TODO 不包含的要走V3接口逻辑,匹配到的数据分别放到结果总表和回匹表(走缓存)也就是全部走Only逻辑,然后把匹配到的数据放到结果表,没匹配到的数据放到回流表中
             String page = request.getParameter("page");
             String pageSize = request.getParameter("pageSize");
@@ -139,6 +138,13 @@ public class CorporateLibraryController {
             } catch (Exception e2) {
                 e2.printStackTrace();
             }
+            /**
+             * -- 第二部分:将匹配数据写入治理回匹表
+             * INSERT INTO TABLE 治理回匹表
+             * SELECT *
+             * FROM 治理结果汇总表
+             * WHERE address IN (SELECT address FROM 待治理表);
+             */
         }
         return "处理完成";
     }

+ 30 - 181
src/main/java/com/skyversation/poiaddr/service/AreaService.java

@@ -185,13 +185,6 @@ public class AreaService {
 
     public void putAllDmdzData(String addr, YyskDmdzAddressStandardization item) {
         if (StringUtils.hasText(addr)) {
-            if (addr.contains("号")) {
-                addr = addr.substring(0, addr.indexOf("号"));
-            }
-            if (addr.contains("弄")) {
-                addr = addr.substring(0, addr.indexOf("弄"));
-            }
-            addr = addr.replaceAll("(?<=[^\\d])\\d+$", "");
             if (!ScheduledTasks.allDmdzData.containsKey(addr)) {
                 List<YyskDmdzAddressStandardization> datas = new ArrayList<>();
                 datas.add(item);
@@ -336,21 +329,6 @@ public class AreaService {
             e.printStackTrace();
             System.out.println("数据回流异常:" + e);
         }
-//      TODO sql
-        /*StringBuilder sql = new StringBuilder("insert into t_address_callback (id,create_time,address,name,provice_name,city_name,town_name,community_name,status,process_status,is_new) values ");
-        for (String addr : ScheduledTasks.callBackAddrs) {
-            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
-            ScheduledTasks.callBackMaxId++;
-            sql.append("(").append(ScheduledTasks.callBackMaxId).append(1).append(",'").append(ScheduledTasks.getCurrentDateTime()).append("','").append(addr).append("','").append(splitAddress.getAddr()).append("','").append(splitAddress.getProvince()).append("','").append(splitAddress.getCity()).append("','").append(splitAddress.getStreet()).append("','").append(splitAddress.getCommunity()).append("',").append(0).append(",").append(0).append(",").append(1).append(") ,");
-        }
-        try {
-            DbConnection.getInstance().updateSql(sql.substring(0, sql.toString().length() - 2));
-            ScheduledTasks.callBackAddrs.clear();
-            System.out.println("数据回流成功");
-        } catch (Exception e) {
-            e.printStackTrace();
-            System.out.println("数据回流异常:" + e);
-        }*/
     }
 
     /**
@@ -370,165 +348,45 @@ public class AreaService {
         }
     }
 
-    /**
-     * 数据库查询 尝试给出推荐结果
-     *
-     * @param splitAddress
-     * @return
-     */
-    /*public List<Address> getRecommendAddress(SplitAddress splitAddress) {
-        if (splitAddress.getCity() == null) {
-            splitAddress.setCity("");
-        }
-        if (splitAddress.getDistrict() == null) {
-            splitAddress.setDistrict("");
-        }
-        if (splitAddress.getStreet() == null) {
-            splitAddress.setStreet("");
-        }
-        if (splitAddress.getCommunity() == null) {
-            splitAddress.setCommunity("");
-        }
-        String sql = "select * from " + Constant.getSearchTableName() + " WHERE  city like '%" + splitAddress.getCity() + "%' " +
-                "and county like '%" + splitAddress.getDistrict() + "%' and town like '%" + splitAddress.getStreet() + "%' " +
-                "and community like '%" + splitAddress.getCommunity() + "%' order by updatetime desc LIMIT 20";
-        try {
-            return odsToAddr(DbConnection.getInstance().runSqlStr(sql));
-        } catch (Exception e) {
-            return null;
-        }
-    }*/
-
-    //    进行数据库查询
-    /*public List<Address> getAddressPoisByAddr(SplitAddress splitAddress) {
-        if (splitAddress.getAddr().contains("号")) {
-            splitAddress.setSearchAddr(splitAddress.getAddr().substring(0, splitAddress.getAddr().lastIndexOf("号")));
-        }
-        if (splitAddress.getAddr().contains("弄")) {
-            splitAddress.setSearchAddr(splitAddress.getAddr().substring(0, splitAddress.getAddr().lastIndexOf("弄")));
-        }
-
-        if (splitAddress.getSearchAddr() == null) {
-            splitAddress.setSearchAddr(splitAddress.getAddr());
-        }
-
-        List<Address> list = null;
-        if (StringUtils.hasText(splitAddress.getDistrict())) {
-            String sql = "select * from " + Constant.getSearchTableName() + " WHERE  county like '%" + splitAddress.getDistrict() + "%' " +
-                    "and (sourceaddress like '%" + splitAddress.getSearchAddr() + "%' or address like '%" + splitAddress.getSearchAddr() + "%') order by updatetime desc LIMIT 20";
-            try {
-                list = odsToAddr(DbConnection.getInstance().runSqlStr(sql));
-            } catch (Exception e) {
-                list = null;
-            }
-        }
-        if (list == null) {
-            String sql = "select * from " + Constant.getSearchTableName() + " WHERE sourceaddress like '%" + splitAddress.getSearchAddr() + "%' or address like '%" + splitAddress.getSearchAddr() + "%' order by updatetime desc LIMIT 20";
-            try {
-                list = odsToAddr(DbConnection.getInstance().runSqlStr(sql));
-            } catch (Exception e) {
-                list = null;
-            }
-        }
-
-        return list;
-    }*/
-
-    /**
-     * 根据地址关键字查询数据库结果
-     *
-     * @return
-     */
-    /*public List<Address> getAddressPoiOnlyDB(String addr) {
-        try {
-            return odsToAddr(DbConnection.getInstance().runSqlStr("select * from " + Constant.getSearchTableName() + " WHERE  sourceaddress LIKE '%" + addr + "%' or address LIKE  '%" + addr + "%' order by updatetime desc LIMIT 20"));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }*/
-    public List<YyskDmdzAddressStandardization> getAddressPoisByAddr(SplitAddress splitAddress) {
-        if (splitAddress.getAddr().contains("号")) {
-            splitAddress.setSearchAddr(splitAddress.getAddr().substring(0, splitAddress.getAddr().indexOf("号")));
-        }
-
-        if (splitAddress.getAddr().contains("弄")) {
-            splitAddress.setSearchAddr(splitAddress.getAddr().substring(0, splitAddress.getAddr().indexOf("弄")));
-        }
-
-        if (splitAddress.getSearchAddr() == null) {
-            splitAddress.setSearchAddr(splitAddress.getAddr().replaceAll("(?<=[^\\d])\\d+$", ""));
-        }
-
-        List<YyskDmdzAddressStandardization> list = new ArrayList<>();
-        if (StringUtils.hasText(splitAddress.getDistrict())) {
-//          TODO 数据库查询逻辑调整为内存处理的方式
-            List<YyskDmdzAddressStandardization> dmdzList = new ArrayList<>();
-            if (ScheduledTasks.allDmdzData.containsKey(splitAddress.getSearchAddr())) {
-                dmdzList = ScheduledTasks.allDmdzData.get(splitAddress.getSearchAddr());
-            } else {
-                for (String key : ScheduledTasks.allDmdzData.keySet()) {
-                    if (key.contains(splitAddress.getSearchAddr())) {
-                        dmdzList = ScheduledTasks.allDmdzData.get(key);
+    public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(SplitAddress splitAddress) {
+//      TODO 数据库查询逻辑调整为内存处理的方式
+        String addr = splitAddress.getSearchAddr();
+        List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
+        for (String key : ScheduledTasks.allDmdzData.keySet()) {
+            if (key != null && addr != null && returnDatas.size() < 20) {
+                if (key.contains(addr)) {
+                    returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
+                } else {
+                    String addr2 = addr + "";
+                    if (addr2.contains("号")) {
+                        addr2 = addr2.substring(0, addr2.indexOf("号"));
                     }
-                }
-            }
-            for (YyskDmdzAddressStandardization item : dmdzList) {
-                if (item.getCounty().contains(splitAddress.getDistrict())) {
-                    if (list.size() < 20) {
-                        list.add(item);
+                    if (addr2.contains("弄")) {
+                        addr2 = addr2.substring(0, addr2.indexOf("弄"));
+                    }
+                    if (key.contains(addr2)) {
+                        returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
                     } else {
-                        break;
+                        addr2 = addr2.replaceAll("(?<=[^\\d])\\d+$", "");
+                        if (key.contains(addr2)) {
+                            returnDatas.addAll(ScheduledTasks.allDmdzData.get(key));
+                        }
                     }
                 }
+            } else {
+                break;
             }
-//            TODO 数据库查询的方式
-//            list = yyszAddressRepository.getAddressPoisByAddrAQX(splitAddress.getDistrict(), splitAddress.getSearchAddr());
-        }
-        if (list.size() == 0) {
-            list = getAddressPoiOnlyDB(splitAddress.getSearchAddr());
-        }
-        return list;
-    }
-
-    public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(String addr) {
-//      TODO 数据库查询逻辑调整为内存处理的方式
-        if (addr.contains("号")) {
-            addr = addr.substring(0, addr.indexOf("号"));
-        }
-        if (addr.contains("弄")) {
-            addr = addr.substring(0, addr.indexOf("弄"));
         }
-        addr = addr.replaceAll("(?<=[^\\d])\\d+$", "");
-        List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
-        if (ScheduledTasks.allDmdzData.containsKey(addr)) {
-            returnDatas = ScheduledTasks.allDmdzData.get(addr);
-        } else {
-            for (String key : ScheduledTasks.allDmdzData.keySet()) {
-                if (key.contains(addr)) {
-                    returnDatas = ScheduledTasks.allDmdzData.get(key);
+//      对于区的精准查询
+        List<YyskDmdzAddressStandardization> returnDatas2 = new ArrayList<>();
+        if (StringUtils.hasText(splitAddress.getDistrict())) {
+            for (YyskDmdzAddressStandardization item : returnDatas) {
+                if (item != null && item.getCounty() != null && item.getCounty().contains(splitAddress.getDistrict())) {
+                    returnDatas2.add(item);
                 }
             }
         }
-        return returnDatas;
-//      TODO 数据库查询的方式
-//        return yyszAddressRepository.getAddressPoisByAddr(addr);
-    }
-
-    public List<YyskDmdzAddressStandardization> getRecommendAddress(SplitAddress splitAddress) {
-        if (splitAddress.getCity() == null) {
-            splitAddress.setCity("");
-        }
-        if (splitAddress.getDistrict() == null) {
-            splitAddress.setDistrict("");
-        }
-        if (splitAddress.getStreet() == null) {
-            splitAddress.setStreet("");
-        }
-        if (splitAddress.getCommunity() == null) {
-            splitAddress.setCommunity("");
-        }
-        return yyszAddressRepository.getAddressPoisByDivisions(splitAddress.getCity(), splitAddress.getDistrict(), splitAddress.getStreet(), splitAddress.getCommunity());
+        return returnDatas2;
     }
 
     public List<TAddressCallback> getCallbackDataByTag(Integer tag) {
@@ -539,15 +397,6 @@ public class AreaService {
         return tAddressCallbackRepository.saveAll(datas);
     }
 
-    public List<Map<String, Object>> getUniScDatas() {
-        try {
-            return DbConnection.getInstance().runSqlStr("select * from songjiang_uni_sc_id_v1"); // where real_address is not null and street_town_name is null
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
     public static List<Address> odsToAddr(List<Map<String, Object>> datas) {
         if (datas == null || datas.size() == 0) {
             return null;

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

@@ -466,9 +466,7 @@ public class ShanghaiAddressSplitUtil {
     }
     public static void main(String[] args) throws Exception {
         new ShanghaiAddressSplitUtil().init();
-        System.out.println(splitBestAddress("村165号"));
-        System.out.println(splitBestAddress("河南驻马店汝南县东官庄镇"));
-        System.out.println(splitBestAddress("云南省昭通市昭阳区永丰镇绿荫社区居民委员会管湾村二十五组205号"));
+        System.out.println(splitBestAddress("上海市松江区乐都路339"));
 //        System.out.println(splitBestAddress("新胜路88、98号3号厂房"));
 //        System.out.println(splitBestAddress("新胜路88-98号3号厂房"));
 //        System.out.println(splitBestAddress("新胜路、98号3号厂房"));