Ver código fonte

根据调整后的逻辑,重新跑一遍结果

DESKTOP-6LTVLN7\Liumouren 1 mês atrás
pai
commit
ecfade8369

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

@@ -50,7 +50,7 @@ public class AddressQueryEngine {
 //      数据库查询
         for (String addr : addrs) {
             // 优先进行数据库查询
-            List<YyszAddressQp> dbPois = AreaService.getInstance().getAddressPoisByAddr(addr);
+            List<AmapAddressV3> dbPois = AreaService.getInstance().getAddressPoisByAddr(addr);
             if (dbPois != null && dbPois.size() > 0) {
                 JSONArray pois = new JSONArray();
                 pois.addAll(dbPois);

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

@@ -80,7 +80,7 @@ public class CorporateLibraryController {
             yyskAddressStandardizationService.searchLoadFileData(fileRootPath, startFileIndex, endFileIndex, sort);// 记录程序结束时间
             long endTime = System.currentTimeMillis();
             ScheduledTasks.taskRunStatus = false;
-            return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
+            return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!" + ScheduledTasks.errorCount;
         } else {
             return "定时任务正在运行,暂不可以调用该方法!";
         }

+ 5 - 4
src/main/java/com/skyversation/poiaddr/controller/PoiAddressController.java

@@ -5,6 +5,7 @@ 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.entity.AmapAddressV3;
 import com.skyversation.poiaddr.entity.YyszAddressQp;
 import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.service.impl.SjArrDzbzhSjWcbryDzxxServiceImpl;
@@ -114,10 +115,10 @@ public class PoiAddressController {
             List<Map<String, Object>> errorDatas = new ArrayList<>();
             JSONObject returnDatas = new JSONObject();
             for (Map<String, Object> item : fileData) {
-                List<YyszAddressQp> dbPois = AreaService.getInstance().getAddressPoisByAddr(item.get("对口路牌").toString());
+                List<AmapAddressV3> dbPois = AreaService.getInstance().getAddressPoisByAddr(item.get("对口路牌").toString());
                 if (dbPois != null && dbPois.size() > 0) {
-                    YyszAddressQp requestData = dbPois.get(0);
-                    if (requestData.getCounty().contains("青浦区") && requestData.getSourceaddress().contains(item.get("对口路牌").toString())) {
+                    AmapAddressV3 requestData = dbPois.get(0);
+                    /*if (requestData.getCounty().contains("青浦区") && requestData.getSourceaddress().contains(item.get("对口路牌").toString())) {
                         JSONObject jsonObjectItem = new JSONObject();
                         jsonObjectItem.put("name", item.get("对口路牌").toString());
                         jsonObjectItem.put("address", requestData.getSourceaddress());
@@ -127,7 +128,7 @@ public class PoiAddressController {
                         returnDatas.put(item.get("对口路牌").toString(), jsonObjectItem);
                     } else {
                         errorDatas.add(item);
-                    }
+                    }*/
                 } else {
                     errorDatas.add(item);
                 }

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

@@ -89,7 +89,7 @@ public class AreaService {
         System.out.println("<<<<<<<<------根据配置文件为AREA赋值:" + Constant.getArea());
         System.out.println("<<<<<<<<------当前AMAP_CITY_CODE:" + Constant.getAMAP_CITY_CODE());
 //      TODO 数据库连通性测试
-        /*try {
+        try {
             long startTime = System.currentTimeMillis();
             System.out.println("<<<<<<<<------开始数据库连通性测试");
             List<AmapAddressV3> amapAddressV3List = amapAddressV3Service.getAllData();
@@ -106,10 +106,10 @@ public class AreaService {
         } catch (Exception e) {
             e.printStackTrace();
             System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
-        }*/
+        }
 
 //      TODO 网络连通性测试,可以请求一下测试的市中心地址
-        /*try {
+        try {
             System.out.println("电脑最大线程数:" + Runtime.getRuntime().availableProcessors());
             System.out.println("<<<<<<<<------开始网络连通性测试");
             long startTime = System.currentTimeMillis();
@@ -121,7 +121,7 @@ public class AreaService {
         } catch (Exception e) {
             e.printStackTrace();
             System.err.println(">>>>>>>>------网络连通性测试结果:" + e);
-        }*/
+        }
     }
 
     public void initPolygons() {
@@ -195,8 +195,8 @@ public class AreaService {
         datas.clear();
     }
 
-    public List<YyszAddressQp> getAddressPoisByAddr(String addr) {
-        /*List<YyszAddressQp> resultData = new ArrayList<>();
+    public List<AmapAddressV3> getAddressPoisByAddr(String addr) {
+        List<AmapAddressV3> resultData = new ArrayList<>();
         String[] strs = AddressMatcher.matchProvinceAndCity(addr);
         if (strs != null) {
             for (String str : strs) {
@@ -224,10 +224,10 @@ public class AreaService {
                 }
             }
         }
-        return resultData;*/
+        return resultData;
 //        TODO 使用缓存替换数据库查询
 //        System.out.println("<<<<<<<----- 开始数据库查询,数据查询地址为:" + addr);
-        return yyszAddressQpService.getAddressPoisByAddr(addr);
+//        return yyszAddressQpService.getAddressPoisByAddr(addr);
     }
 
     public GeoJsonBean isInadPolygon(double lon, double lat) {

+ 46 - 6
src/main/java/com/skyversation/poiaddr/service/impl/YyskAddressStandardizationServiceImpl.java

@@ -344,9 +344,7 @@ public class YyskAddressStandardizationServiceImpl {
                 yyskAddressStandardization.setResidentialCommittee(item.getOrDefault("residentialCommittee", "").toString());
                 yyskAddressStandardization.setLon(item.getOrDefault("lat", "").toString());
                 yyskAddressStandardization.setLat(item.getOrDefault("lon", "").toString());
-                if (!yyskAddressStandardization.getMatchLevel().contains("rule_0") && !yyskAddressStandardization.getMatchLevel().contains("异常") && !yyskAddressStandardization.getDistinguish().contains("[]")) {
-                    listData.add(yyskAddressStandardization);
-                }
+                listData.add(yyskAddressStandardization);
             }
         } catch (Exception e) {
             listData = null;
@@ -416,6 +414,7 @@ public class YyskAddressStandardizationServiceImpl {
 
     /**
      * 搜索主逻辑
+     *
      * @param listData 传入List<YyskDmdzAddressStandardization> 其中address不能为空
      * @return 处理后的List<YyskDmdzAddressStandardization>
      */
@@ -439,22 +438,53 @@ public class YyskAddressStandardizationServiceImpl {
                 boolean ifSearchTag = true;
 //              首先判断是否为非上海市地址
                 String[] ams = AddressMatcher.matchProvinceAndCity(item.getAddress());
-                if(ams != null && ams[0] != null){
-                    if(!ams[0].equals("上海市")){
+                if (ams != null && ams[0] != null) {
+                    if (!ams[0].equals("上海市")) {
                         item.setMatchLevel("rule_0");
                         item.setProvinces(ams[0]);
-                        if(ams[1] != null){
+                        if (ScheduledTasks.errorCount.containsKey("外地数据")) {
+                            ScheduledTasks.errorCount.put("外地数据", ScheduledTasks.errorCount.get("外地数据") + 1);
+                        } else {
+                            ScheduledTasks.errorCount.put("外地数据", 1);
+                        }
+                        if (ams[1] != null) {
                             item.setMarket(ams[1]);
                         }
                         ifSearchTag = false;
                     }
                 }
+                if (item.getAddress().contains("http")) {
+                    ifSearchTag = false;
+                    item.setMatchLevel("异常");
+                    if (ScheduledTasks.errorCount.containsKey("链接数据")) {
+                        ScheduledTasks.errorCount.put("链接数据", ScheduledTasks.errorCount.get("链接数据") + 1);
+                    } else {
+                        ScheduledTasks.errorCount.put("链接数据", 1);
+                    }
+                }
+                if (item.getStandardAddress() != null && !item.getStandardAddress().isEmpty() && item.getProvinces().equals("上海市") && item.getStandardAddress().contains(item.getDistinguish())) {
+                    ifSearchTag = false;
+                    String newStandardAddress = item.getProvinces() + item.getDistinguish() + item.getStreetTown() + AddressTools.returnAddress(item.getAddress());
+                    if (!item.getStandardAddress().equals(newStandardAddress)) {
+                        if (ScheduledTasks.errorCount.containsKey("分词错误")) {
+                            ScheduledTasks.errorCount.put("分词错误", ScheduledTasks.errorCount.get("分词错误") + 1);
+                        } else {
+                            ScheduledTasks.errorCount.put("分词错误", 1);
+                        }
+                    }
+                    item.setStandardAddress(newStandardAddress);
+                }
                 if (ifSearchTag) {
                     //  TODO 开始查询
                     AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName(addrList);
                     if (addressResult == null || addressResult.getData() == null || addressResult.getData().size() < 1) {
                         item.setMatchLevel("异常");
                         item.setReturnAddress("未匹配到符合规则的结果");
+                        if (ScheduledTasks.errorCount.containsKey("匹配异常")) {
+                            ScheduledTasks.errorCount.put("匹配异常", ScheduledTasks.errorCount.get("匹配异常") + 1);
+                        } else {
+                            ScheduledTasks.errorCount.put("匹配异常", 1);
+                        }
                     } else {
                         try {
                             for (AddressResult.ContentBean contentBean : addressResult.getData()) {
@@ -509,12 +539,22 @@ public class YyskAddressStandardizationServiceImpl {
                                 } else {
                                     item.setMatchLevel("异常");
                                     item.setReturnAddress("查询结果处理异常");
+                                    if (ScheduledTasks.errorCount.containsKey("匹配异常")) {
+                                        ScheduledTasks.errorCount.put("匹配异常", ScheduledTasks.errorCount.get("匹配异常") + 1);
+                                    } else {
+                                        ScheduledTasks.errorCount.put("匹配异常", 1);
+                                    }
                                 }
                             }
                         } catch (Exception e) {
                             item.setMatchLevel("异常");
                             e.printStackTrace();
                             System.err.println("查询结果处理异常:" + e);
+                            if (ScheduledTasks.errorCount.containsKey("处理异常")) {
+                                ScheduledTasks.errorCount.put("处理异常", ScheduledTasks.errorCount.get("处理异常") + 1);
+                            } else {
+                                ScheduledTasks.errorCount.put("处理异常", 1);
+                            }
                         }
                     }
                 }

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

@@ -9,6 +9,8 @@ import javax.annotation.Resource;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 @Component
 public class ScheduledTasks {
@@ -21,6 +23,8 @@ public class ScheduledTasks {
     public static int szxRequestSize = 0;
     public static int gdRequestSize = 0;
     public static Long OID_TAG = 0L;
+//  统计异常数量和类型
+    public static Map<String,Integer> errorCount = new ConcurrentHashMap<>();
 
     @Resource
     private YyskAddressStandardizationServiceImpl yyskAddressStandardizationService;