Ver código fonte

添加逻辑自动打分然后把打分大于2的入库到地名地址库,定时器时间修改为凌晨两点避开网络高峰。(已完全自动化,可以撤场了)

DESKTOP-6LTVLN7\Liumouren 4 dias atrás
pai
commit
77b6f9a91e

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

@@ -89,7 +89,7 @@ public class TransfromDataTool {
                 content.setType(jsonObject.getString("type_name"));
                 content.setAddress(jsonObject.getString("address"));
                 content.setName(jsonObject.getString("name"));
-//          使用分词方法得到区名是镇名
+//              使用分词方法得到区名是镇名
                 content.setCityname(AddressTools.parseAddressCJ(jsonObject.getString("address"))[1]);
                 double[] points = new double[]{jsonObject.getJSONObject("location").getDouble("lng"),
                         jsonObject.getJSONObject("location").getDouble("lat")};
@@ -104,7 +104,7 @@ public class TransfromDataTool {
                     if (extData.containsKey("region_jw") && !extData.getString("region_jw").isEmpty()) {
                         content.setCommunity(extData.getString("region_jw"));
                     }
-//              如果评分大于1.6,那么就使用接口返回的街镇,否则使用源搜索地址的街镇
+//                  如果评分大于1.6,那么就使用接口返回的街镇,否则使用源搜索地址的街镇
                     if (jsonObject.getString("总分").contains("rule_") || Float.parseFloat(jsonObject.getString("总分")) > 1.6) {
                         if (extData.containsKey("region_jd") && !extData.getString("region_jd").isEmpty()) {
                             content.setAdname(extData.getString("region_jd"));

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

@@ -192,22 +192,8 @@ public class AreaService {
         System.out.println("当前OID" + maxOid + "查询完成,用时:" + (System.currentTimeMillis() - sTime) + "毫秒!");
         //      TODO 经测试发现一次性读全表,内存根本吃不消
         for (YyskDmdzAddressStandardization item : dataList) {
-            if (item.getSourceaddress() != null && StringUtils.hasText(item.getSourceaddress())) {
-                SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(item.getSourceaddress());
-                if (splitAddress.getAddr().length() > 2) {
-                    ScheduledTasks.putAllDmdzData(splitAddress.getAddr(), item);
-                } else {
-                    ScheduledTasks.putAllDmdzData(item.getSourceaddress(), item);
-                }
-                if (item.getAddress() != null && StringUtils.hasText(item.getAddress()) && !item.getSourceaddress().contains(item.getAddress())) {
-                    SplitAddress splitAddress2 = ShanghaiAddressSplitUtil.splitBestAddress(item.getAddress());
-                    if (splitAddress2.getAddr().length() > 2) {
-                        ScheduledTasks.putAllDmdzData(splitAddress2.getAddr(), item);
-                    } else {
-                        ScheduledTasks.putAllDmdzData(item.getAddress(), item);
-                    }
-                }
-            }
+//          把请求到的数据放到缓存中
+            ScheduledTasks.yyskDmdzAddressStandardizationPutDmdz(item);
             if (item.getOid() > maxOid) {
                 maxOid = item.getOid();
             }

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

@@ -124,7 +124,7 @@ public class ScheduledTasks {
      * 如果返回了正确的数据,入到地址库表中,并更新state为2(同时添加到地址库中)
      * 否则更新状态为1
      */
-    @Scheduled(cron = "0 30 18 * * ?")
+    @Scheduled(cron = "0 30 2 * * ?")
     public void dbdataCallBackTask() {
         try {
 //          根据当前日期生成开始id
@@ -138,10 +138,10 @@ public class ScheduledTasks {
 //              首先查询数据列表
                 callBackRunStatus = 1;
                 List<TAddressCallback> tAddressCallbacks = AreaService.getInstance().getCallbackDataByTag();
-                infoItem.put("结束时间", System.currentTimeMillis());
+                infoItem.put("用时(秒)", (System.currentTimeMillis() - startTime) / 1000);
                 infoItem.put("备注", "数据条数" + tAddressCallbacks.size());
                 List<TAddressCallback> updateCallBackDatas = new ArrayList<>();
-//                List<YyskDmdzAddressStandardization> addDmdzDataList = new ArrayList<>();
+                List<YyskDmdzAddressStandardization> addDmdzDataList = new ArrayList<>();
 //              然后调用市中心接口
                 ScheduledTasks.logInfos.add(infoItem);
                 for (TAddressCallback item : tAddressCallbacks) {
@@ -156,14 +156,14 @@ public class ScheduledTasks {
                             if (lmrAddrBean.getRule() != null && Integer.parseInt(lmrAddrBean.getRule()) <= 0) {
                                 item.setStatusTag(-1);
                             } else {
-                                AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(addr);
                                 AddressResult.ContentBean contentBean = new AddressResult.ContentBean();
-                                if (addressResult != null && addressResult.getCode() == AddressResultEnum.DB_SUCCESS && addressResult.getData() != null && addressResult.getData().size() > 0) {
-                                    contentBean = addressResult.getData().get(0);
-                                } else {
-                                    addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr, 3);
-                                    if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
-                                        contentBean = addressResult.getData().get(0);
+                                AddressResult addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr, 3);
+                                if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
+                                    for(AddressResult.ContentBean itemc: addressResult.getData()){
+                                        if(itemc.getScore().contains("rule_") || Float.parseFloat(itemc.getScore()) > 2.0){
+                                            contentBean = addressResult.getData().get(0);
+                                            break;
+                                        }
                                     }
                                 }
                                 if (contentBean != null && contentBean.getLon() != null) {
@@ -188,10 +188,10 @@ public class ScheduledTasks {
                                             contentBean.getAdname() + contentBean.getCommunity() + splitAddress.getAddr());
                                     item.setStatusTag(2);
 //                                  添加数据到地址库和缓存
-                                    /*if (StringUtils.hasText(item.getLat()) && StringUtils.hasText(item.getLon())) {
+                                    if (StringUtils.hasText(item.getLat()) && StringUtils.hasText(item.getLon())) {
                                         startOid++;
                                         addDmdzDataList.add(TAddressCallbackToYyskDmdzAddressStandardization(item, Long.valueOf(getCurrentDateTimeByPatern("yyyyddMMhhmm") + startOid)));
-                                    }*/
+                                    }
                                 } else {
                                     item.setStatusTag(1);
                                 }
@@ -220,9 +220,9 @@ public class ScheduledTasks {
                         e.printStackTrace();
                     }
                 }
-                /*if (addDmdzDataList.size() > 0) {
+                if (addDmdzDataList.size() > 0) {
                     yyszAddressRepository.saveAll(addDmdzDataList);
-                }*/
+                }
                 if (updateCallBackDatas.size() > 0) {
                     infoItem.put("操作", "将治理的数据入库更新callBack表");
                     long inBaseTime = System.currentTimeMillis();
@@ -230,7 +230,7 @@ public class ScheduledTasks {
                     AreaService.getInstance().updateCallbackData(updateCallBackDatas);
                     updateCallBackDatas.clear();
                     long outBaseTime = System.currentTimeMillis();
-                    infoItem.put("结束时间", outBaseTime);
+                    infoItem.put("用时(秒)", (outBaseTime - inBaseTime) / 1000);
                     infoItem.put("备注", "1000条数据入库用时" + (outBaseTime - inBaseTime) / 1000 + "秒!");
                     ScheduledTasks.logInfos.add(infoItem);
                     ExcelReaderUtils.writeToExcel(ScheduledTasks.logInfos, "./logInfos_" + System.currentTimeMillis() + ".xlsx");
@@ -260,7 +260,7 @@ public class ScheduledTasks {
      */
     public static YyskDmdzAddressStandardization TAddressCallbackToYyskDmdzAddressStandardization(TAddressCallback tAddressCallback, Long Oid) {
         YyskDmdzAddressStandardization yyskDmdzAddressStandardization = new YyskDmdzAddressStandardization();
-        yyskDmdzAddressStandardization.setSourceaddress(tAddressCallback.getStandardAddress());
+        yyskDmdzAddressStandardization.setSourceaddress(tAddressCallback.getCankaoAddress());
         yyskDmdzAddressStandardization.setAddress(tAddressCallback.getSearchAddress());
         yyskDmdzAddressStandardization.setLon(Float.parseFloat(tAddressCallback.getLon()));
         yyskDmdzAddressStandardization.setLat(Float.parseFloat(tAddressCallback.getLat()));
@@ -268,24 +268,31 @@ public class ScheduledTasks {
         yyskDmdzAddressStandardization.setCounty(tAddressCallback.getCounty());
         yyskDmdzAddressStandardization.setTown(tAddressCallback.getStreetTownName());
         yyskDmdzAddressStandardization.setCommunity(tAddressCallback.getCommunity());
-        yyskDmdzAddressStandardization.setData_type("zl_v3");
-        yyskDmdzAddressStandardization.setType("callBack");
+        yyskDmdzAddressStandardization.setData_type("callBack");
+        yyskDmdzAddressStandardization.setType("zl_v4");
         yyskDmdzAddressStandardization.setOid(Oid);
 //      把请求到的数据放到缓存中
-        if (yyskDmdzAddressStandardization.getAddress() != null && StringUtils.hasText(yyskDmdzAddressStandardization.getAddress())) {
-            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(yyskDmdzAddressStandardization.getAddress());
-            putAllDmdzData(splitAddress.getAddr(), yyskDmdzAddressStandardization);
-            if (yyskDmdzAddressStandardization.getSourceaddress() != null && StringUtils.hasText(yyskDmdzAddressStandardization.getSourceaddress())) {
-                SplitAddress splitAddress2 = ShanghaiAddressSplitUtil.splitBestAddress(yyskDmdzAddressStandardization.getSourceaddress());
-                if (!splitAddress.getAddr().equals(splitAddress2.getAddr())) {
+        yyskDmdzAddressStandardizationPutDmdz(yyskDmdzAddressStandardization);
+        return yyskDmdzAddressStandardization;
+    }
+
+    public static void yyskDmdzAddressStandardizationPutDmdz(YyskDmdzAddressStandardization yyskDmdzAddressStandardization){
+        if (yyskDmdzAddressStandardization.getSourceaddress() != null && StringUtils.hasText(yyskDmdzAddressStandardization.getSourceaddress())) {
+            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(yyskDmdzAddressStandardization.getSourceaddress());
+            if (splitAddress.getAddr().length() > 2) {
+                putAllDmdzData(splitAddress.getAddr(), yyskDmdzAddressStandardization);
+            } else {
+                putAllDmdzData(yyskDmdzAddressStandardization.getSourceaddress(), yyskDmdzAddressStandardization);
+            }
+            if (yyskDmdzAddressStandardization.getAddress() != null && StringUtils.hasText(yyskDmdzAddressStandardization.getAddress()) && !yyskDmdzAddressStandardization.getSourceaddress().contains(yyskDmdzAddressStandardization.getAddress())) {
+                SplitAddress splitAddress2 = ShanghaiAddressSplitUtil.splitBestAddress(yyskDmdzAddressStandardization.getAddress());
+                if (splitAddress2.getAddr().length() > 2) {
                     putAllDmdzData(splitAddress2.getAddr(), yyskDmdzAddressStandardization);
+                } else {
+                    putAllDmdzData(yyskDmdzAddressStandardization.getAddress(), yyskDmdzAddressStandardization);
                 }
             }
-        } else if (yyskDmdzAddressStandardization.getSourceaddress() != null && StringUtils.hasText(yyskDmdzAddressStandardization.getSourceaddress())) {
-            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(yyskDmdzAddressStandardization.getSourceaddress());
-            putAllDmdzData(splitAddress.getAddr(), yyskDmdzAddressStandardization);
         }
-        return yyskDmdzAddressStandardization;
     }
 
     public static void putAllDmdzData(String addr, YyskDmdzAddressStandardization item) {