瀏覽代碼

请求参数地址优化;
请求异常处理优化;
添加数据库连接异常处理;
居委判断逻辑优化;
分词逻辑优化;
结果地址处理逻辑优化;

DESKTOP-6LTVLN7\Liumouren 2 月之前
父節點
當前提交
7edbd0493f

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

@@ -48,8 +48,7 @@ public class AddressQueryEngine {
         AddressResult addressResult = new AddressResult();
         for (String addr : addrs) {
             //  创建请求
-            addressResult = sj_szxSearchByName(addr);
-//            addressResult = szxSearchByName(addr);
+            addressResult = sj_szxSearchByName(addr, 3);
             if (addressResult != null) {
                 addressResult.setCode(AddressResultEnum.SZX_SUCCESS);
                 addressResult.setMessage("成功");
@@ -95,8 +94,21 @@ public class AddressQueryEngine {
         }
     }
 
+    public static Map<String, String> initSigns() {
+        Map<String, String> headerMap = new HashMap<>();
+        String timestamp = System.currentTimeMillis() + "";
+        String appCode = "7unv4vbwqxnq4a7m9h";
+        String UUid = UUID.randomUUID().toString();
+        String appSecret = "w6tawvf4k3ck4ikij9";
+        headerMap.put("x-timestamp", timestamp);
+        headerMap.put("x-appcode", appCode);
+        headerMap.put("x-uuid", UUid);
+//                  签名
+        headerMap.put("x-sign", AddressQueryEngine.getSigns(timestamp, appCode, UUid, appSecret));
+        return headerMap;
+    }
 
-    public String getSigns(String timestamp, String appCode, String UUid, String appSecret) {
+    public static String getSigns(String timestamp, String appCode, String UUid, String appSecret) {
 //        先拼接
         String signData = timestamp + appCode + UUid;
 //        生成sign
@@ -112,24 +124,36 @@ public class AddressQueryEngine {
         return sign;
     }
 
-    public AddressResult sj_szxSearchByName(String address) {
+    public AddressResult sj_szxSearchByName(String address, Integer level) {
 //      鉴权
-        Map<String, String> headerMap = new HashMap<>();
-        String timestamp = System.currentTimeMillis() + "";
-        String appCode = "7unv4vbwqxnq4a7m9h";
-        String UUid = UUID.randomUUID().toString();
-        String appSecret = "w6tawvf4k3ck4ikij9";
-        headerMap.put("x-timestamp", timestamp);
-        headerMap.put("x-appcode", appCode);
-        headerMap.put("x-uuid", UUid);
-//      签名
-        headerMap.put("x-sign", getSigns(timestamp, appCode, UUid, appSecret));
         JSONObject params = new JSONObject();
         JSONArray requestJson = new JSONArray();
         JSONObject paramObject = new JSONObject();
         paramObject.put("name", "query");
         paramObject.put("position", "QUERY");
-        paramObject.put("value", address);
+        switch (level) {
+            case 3:
+                paramObject.put("value", address);
+                break;
+            case 2:
+                if (address.contains("号")) {
+                    paramObject.put("value", address.substring(0, address.lastIndexOf("号") + 1));
+                } else {
+                    level--;
+                    return sj_szxSearchByName(address, level);
+                }
+                break;
+            case 1:
+                if (address.contains("弄")) {
+                    paramObject.put("value", address.substring(0, address.lastIndexOf("弄") + 1));
+                } else {
+                    paramObject.put("value", address);
+                }
+                break;
+        }
+        if (!address.startsWith("上海")) {
+            paramObject.put("value", "上海市" + paramObject.get("value"));
+        }
         requestJson.add(paramObject);
 //      判断是否是关键字版搜索服务
         if (Constant.SJ_SZX_SEARCH_BY_NAME.contains("1742459783686")) {
@@ -146,14 +170,25 @@ public class AddressQueryEngine {
         }
         params.put("requestJson", requestJson);
 //      发起请求
-        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.POST, Constant.SJ_SZX_SEARCH_BY_NAME, params, headerMap, 1);
+        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.POST, Constant.SJ_SZX_SEARCH_BY_NAME, params, initSigns(), 5);
         if (response != null && response.hasBody()) {
             String body = response.getBody() + "";
-            if (!StringUtils.hasText(body))
+            if (!StringUtils.hasText(body)) {
+                if (level > 0) {
+                    level--;
+                    return sj_szxSearchByName(address, level);
+                }
                 return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
+            }
+
             try {
                 if (body.indexOf("[") != 0) {
-                    return TransfromDataTool.szxResultToResult(JSONObject.parseObject(body), address);
+                    AddressResult addressResult = TransfromDataTool.szxResultToResult(JSONObject.parseObject(body), address);
+                    if (addressResult.getCode().equals(AddressResultEnum.RESULT_NULL) && level > 0) {
+                        level--;
+                        return sj_szxSearchByName(address, level);
+                    }
+                    return addressResult;
                 } else {
 //                  将得分最高的结果映射到实体类
                     return TransfromDataTool.szxResultToResult2(com.skyversation.poiaddr.util.AddressTools.getInstance().findBestMatch(address, JSONArray.parseArray(body), "address"));
@@ -163,58 +198,10 @@ public class AddressQueryEngine {
                 return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
             }
         } else {
-            System.out.println("地址[" + address + "]未查询到数据!");
-            return null;
-        }
-    }
-
-
-    public Object sj_szxSearchByName_to_server(String address) {
-//      鉴权
-        Map<String, String> headerMap = new HashMap<>();
-        String timestamp = System.currentTimeMillis() + "";
-        String appCode = "7unv4vbwqxnq4a7m9h";
-        String UUid = UUID.randomUUID().toString();
-        String appSecret = "w6tawvf4k3ck4ikij9";
-        headerMap.put("x-timestamp", timestamp);
-        headerMap.put("x-appcode", appCode);
-        headerMap.put("x-uuid", UUid);
-//      签名
-        headerMap.put("x-sign", getSigns(timestamp, appCode, UUid, appSecret));
-        JSONObject params = new JSONObject();
-        JSONArray requestJson = new JSONArray();
-        JSONObject paramObject = new JSONObject();
-        paramObject.put("name", "query");
-        paramObject.put("position", "QUERY");
-        paramObject.put("value", address);
-        requestJson.add(paramObject);
-//      判断是否是关键字版搜索服务
-        if (Constant.SJ_SZX_SEARCH_BY_NAME.contains("1742459783686")) {
-            JSONObject paramObject2 = new JSONObject();
-            paramObject2.put("name", "region");
-            paramObject2.put("position", "QUERY");
-            paramObject2.put("value", Constant.getAMAP_CITY_CODE());
-            requestJson.add(paramObject2);
-            JSONObject paramObject3 = new JSONObject();
-            paramObject3.put("name", "page_size");
-            paramObject3.put("position", "QUERY");
-            paramObject3.put("value", "10");
-            requestJson.add(paramObject3);
-        }
-        params.put("requestJson", requestJson);
-//      发起请求
-        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.POST, Constant.SJ_SZX_SEARCH_BY_NAME, params, headerMap, 1);
-        if (response != null && response.hasBody()) {
-            String body = response.getBody() + "";
-            if (!StringUtils.hasText(body))
-                return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
-            try {
-                return JSONObject.parseObject(body);
-            } catch (Exception e) {
-                System.err.println("请求地址:" + address + ";返回结果:" + body + ";处理异常:" + e);
-                return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
+            if (level > 0) {
+                level--;
+                return sj_szxSearchByName(address, level);
             }
-        } else {
             System.out.println("地址[" + address + "]未查询到数据!");
             return null;
         }
@@ -308,11 +295,22 @@ public class AddressQueryEngine {
         } else {
             AreaService areaService = AreaService.getInstance();
             for (AddressResult.ContentBean content : result.getData()) {
-                if ((content.getAdname() == null || content.getAdname().isEmpty() || content.getCityname() == null || content.getCityname().isEmpty()) && content.getLat() != null && content.getLon() != null) {
-                    GeoJsonBean adBean = areaService.isInadPolygon(content.getLon(), content.getLat());
-                    content.setAdJson(adBean == null ? new JSONObject() : adBean.getProperties());
-                    GeoJsonBean townBean = areaService.isInTownPolygon(content.getLon(), content.getLat());
-                    content.setTownJson(townBean == null ? new JSONObject() : townBean.getProperties());
+                if ((content.getAdname() == null || content.getAdname().isEmpty() || content.getCityname() == null || content.getCityname().isEmpty() || content.getCommunity() == null || content.getCommunity().isEmpty()) && content.getLat() != null && content.getLon() != null) {
+//                  判断是否存在行政区划数据
+                    if (content.getCityname() == null || content.getCityname().isEmpty()) {
+                        GeoJsonBean adBean = areaService.isInadPolygon(content.getLon(), content.getLat());
+                        content.setAdJson(adBean == null ? new JSONObject() : adBean.getProperties());
+                    }
+//                  判断是否存在街镇数据
+                    if (content.getAdname() == null || content.getAdname().isEmpty()) {
+                        GeoJsonBean townBean = areaService.isInTownPolygon(content.getLon(), content.getLat());
+                        content.setTownJson(townBean == null ? new JSONObject() : townBean.getProperties());
+                    }
+//                  判断是否存在村居数据
+                    if (content.getCommunity() == null || content.getCommunity().isEmpty()) {
+                        GeoJsonBean cjBean = areaService.isInResidentialCommitteePolygon(content.getLon(), content.getLat());
+                        content.setCjJson(cjBean == null ? new JSONObject() : cjBean.getProperties());
+                    }
                 }
             }
             return result;
@@ -448,12 +446,13 @@ public class AddressQueryEngine {
         return address.replaceAll("上海市", "").replaceAll(Constant.getArea() + "区", "").replaceAll("-", "").replaceAll("_", "").replaceAll("/", "").replaceAll(" ", "").replaceAll(",", "").replaceAll("\\.", "").replaceAll(",", "").replaceAll("。", "").replaceAll("\\+", "").replaceAll("\\*", "");
     }
 
-    public static String townReplaceAll(String address) {
+    public static String townReplace_ct(String address) {
+        address = address.replaceAll(" ", "");
 //      替换市
         address = address.replaceAll("上海市", "");
         String[] towns = Constant.getTowns();
         for (String town : towns) {
-            if(address.contains(town)){
+            if (address.contains(town)) {
                 address = address.substring(address.indexOf(town) + town.length());
             }
         }
@@ -464,6 +463,11 @@ public class AddressQueryEngine {
         if (address.contains("委员会")) {
             address = address.substring(address.indexOf("委员会") + 3);
         }
+        return address;
+    }
+
+    public static String townReplaceAll(String address) {
+        address = townReplace_ct(address);
         return address.replaceAll("小区", "0").replaceAll("号", "0").replaceAll("弄", "0").replaceAll("室", "0").replaceAll("户", "0").replaceAll("单元", "0").replaceAll("幢", "0");
     }
 

+ 12 - 9
src/main/java/com/skyversation/poiaddr/addquery/AddressTools.java

@@ -15,15 +15,18 @@ import java.security.NoSuchAlgorithmException;
 public class AddressTools {
 
     private static AddressTools instance = new AddressTools();
-    private AddressTools(){}
-    public synchronized static AddressTools getInstance(){
-        if(instance == null){
+
+    private AddressTools() {
+    }
+
+    public synchronized static AddressTools getInstance() {
+        if (instance == null) {
             instance = new AddressTools();
         }
         return instance;
     }
 
-    public WDToken getWDToken(String userName, String pwd){
+    public WDToken getWDToken(String userName, String pwd) {
         long time = System.currentTimeMillis() / 1000;
         System.out.println("当前时间为:" + time);
         String secret = time + pwd;
@@ -33,18 +36,18 @@ public class AddressTools {
 
         String param = "?user=" + userName + "&secret=" + secret + "&time=" + time;
         System.out.println("准备获取token,获取地址为:" + Constant.GET_TOKEN_URL + param);
-        ResponseEntity responseEntity =AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET,Constant.GET_TOKEN_URL + param, null, null,0);
-        if(responseEntity != null){
+        ResponseEntity responseEntity = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.GET, Constant.GET_TOKEN_URL + param, null, null, 0);
+        if (responseEntity != null) {
             String body = responseEntity.getBody() + "";
             WDToken wdToken = JSONObject.parseObject(body, WDToken.class);
             System.out.println("获取token完成,返回信息为:" + body);
             return wdToken;
-        }else{
+        } else {
             return null;
         }
     }
 
-    private String md5_32(String msg){
+    private String md5_32(String msg) {
         try {
             MessageDigest md = MessageDigest.getInstance("MD5");
             byte[] messageDigest = md.digest(msg.getBytes());
@@ -59,7 +62,7 @@ public class AddressTools {
         }
     }
 
-    public AddressResult faildQuery(AddressResultEnum code, String message){
+    public AddressResult faildQuery(AddressResultEnum code, String message) {
         return new AddressResult(code, message);
     }
 

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

@@ -22,9 +22,7 @@ public class Constant {
     //    TODO 青浦区行政区划编码:310118 松江区行政区划编码:310117
     private String area;
 
-    private String[] towns = new String[]{"岳阳街道", "永丰街道", "方松街道", "中山街道", "广富林街道", "九里亭街道", "泗泾镇", "佘山镇", "车墩镇", "新桥镇", "洞泾镇", "九亭镇", "泖港镇", "石湖荡镇", "新浜镇", "叶榭镇", "小昆山镇", "天马山镇"};
-
-    public static String[] allAreas = new String[]{"黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "金山区", "松江区", "青浦区", "奉贤区", "崇明区", "浦东新区"};
+    private String[] towns = new String[]{};
 
     @Value("${app.search_server_id}")
     private String searchServerId;

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

@@ -121,15 +121,10 @@ public class TransfromDataTool {
             content.setScore(jsonObject.getString("总分"));
             content.setSearchAddress(jsonObject.getString("searchAddress"));
             content.setType(jsonObject.getString("type_name"));
-            List<String> addressList = new ArrayList<>();
             content.setAddress(jsonObject.getString("address"));
-            if (!jsonObject.getString("address").isEmpty()) {
-                addressList.add(jsonObject.getString("address"));
-            }
-            if (!jsonObject.getString("std_address").isEmpty()) {
-                addressList.add(jsonObject.getString("std_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")};
             content.setLon(points[1]);
@@ -137,26 +132,19 @@ public class TransfromDataTool {
             if (jsonObject.get("point_x") != null && jsonObject.get("point_y") != null) {
                 content.setLocation(jsonObject.getDouble("point_x") + "," + jsonObject.getDouble("point_y"));
             }
+            content.setAdname(AddressTools.parseAddressCJ(jsonObject.getString("address"))[2]);
             if (jsonObject.containsKey("ext_data")) {
                 JSONObject extData = jsonObject.getJSONObject("ext_data");
-                if (extData.containsKey("address") && !extData.getString("address").isEmpty()) {
-                    addressList.add(extData.getString("address"));
-                }
-                if (extData.containsKey("source_address") && !extData.getString("source_address").isEmpty()) {
-                    addressList.add(extData.getString("source_address"));
-                }
-
                 if (extData.containsKey("region_jw") && !extData.getString("region_jw").isEmpty()) {
-                    JSONObject cjJson = new JSONObject();
-                    cjJson.put("所属街道", extData.getString("region_jd"));
-                    cjJson.put("所属居委", extData.getString("region_jw"));
-                    content.setCjJson(cjJson);
+                    content.setCommunity(extData.getString("region_jw"));
                 }
-            }
-            for (String item : addressList) {
-//                item.contains("上海市") && item.contains(Constant.getArea() + "区") &&
-                if (item.length() > content.getAddress().length()) {
-                    content.setAddress(item);
+//              如果评分大于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"));
+                    }
+                } else if (AddressTools.parseAddressCJ(searchAddress)[2] != null && !AddressTools.parseAddressCJ(searchAddress)[2].isEmpty()) {
+                    content.setAdname(AddressTools.parseAddressCJ(searchAddress)[2]);
                 }
             }
             if (result.getData() == null) {

+ 38 - 12
src/main/java/com/skyversation/poiaddr/config/DbConnection.java

@@ -49,23 +49,49 @@ public class DbConnection {
 
     }
 
+    //  插入、删除、更新
     public int updateSql(String sqlStr) throws SQLException {
-        return stmt.executeUpdate(sqlStr);
+        try {
+            return stmt.executeUpdate(sqlStr);
+        } catch (Exception e) {
+            if (connection == null || connection.isClosed()) {
+                System.out.println("数据库异常断开,尝试重新连接!");
+                connection = DriverManager.getConnection(jdbcURL, db_user_name, db_password);
+                stmt = connection.createStatement();
+                return this.updateSql(sqlStr);
+            } else {
+                System.err.println(e.getMessage());
+                return -1;
+            }
+        }
     }
 
+    //  只查询
     public List<Map<String, Object>> runSqlStr(String sqlStr) throws SQLException {
-        ResultSet rs = stmt.executeQuery(sqlStr);
-        ResultSetMetaData rsmd = rs.getMetaData();
-        int size = rsmd.getColumnCount();
-        List<Map<String, Object>> requestData = new ArrayList<>();
-        while (rs.next()) {
-            Map<String, Object> dataItem = new HashMap<>();
-            for (int i = 0; i < size; i++) {
-                dataItem.put(rsmd.getColumnName(i + 1), rs.getString(i + 1));
+        try {
+            ResultSet rs = stmt.executeQuery(sqlStr);
+            ResultSetMetaData rsmd = rs.getMetaData();
+            int size = rsmd.getColumnCount();
+            List<Map<String, Object>> requestData = new ArrayList<>();
+            while (rs.next()) {
+                Map<String, Object> dataItem = new HashMap<>();
+                for (int i = 0; i < size; i++) {
+                    dataItem.put(rsmd.getColumnName(i + 1), rs.getString(i + 1));
+                }
+                requestData.add(dataItem);
+            }
+            rs.close();
+            return requestData;
+        } catch (Exception e) {
+            if (connection == null || connection.isClosed()) {
+                System.out.println("数据库异常断开,尝试重新连接!");
+                connection = DriverManager.getConnection(jdbcURL, db_user_name, db_password);
+                stmt = connection.createStatement();
+                return this.runSqlStr(sqlStr);
+            } else {
+                System.err.println(e.getMessage());
+                return null;
             }
-            requestData.add(dataItem);
         }
-        rs.close();
-        return requestData;
     }
 }

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

@@ -4,6 +4,7 @@ import com.skyversation.poiaddr.entity.YyskAddressStandardization;
 import com.skyversation.poiaddr.service.impl.YyskAddressStandardizationServiceImpl;
 import com.skyversation.poiaddr.util.ExcelReaderUtils;
 import com.skyversation.poiaddr.util.SerializationUtils;
+import com.skyversation.poiaddr.util.tasks.ScheduledTasks;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
@@ -26,7 +27,6 @@ public class CorporateLibraryController {
     @Resource
     private YyskAddressStandardizationServiceImpl yyskAddressStandardizationService;
 
-
     /**
      * (开发中)
      * 定时器:每天都全量更新法人库的地名地址数据
@@ -38,12 +38,24 @@ public class CorporateLibraryController {
      * 5、将结果保存为ser文件
      */
     @PostMapping(value = "/test", produces = MediaType.APPLICATION_JSON_VALUE)
-    public Object updateDataBaseData(@RequestParam(name = "pageSize") Integer pageSize, @RequestParam(name = "init") Integer init, @RequestParam(name = "tableName") String tableName) {
+    public Object updateDataBaseData(@RequestParam(name = "pageSize") Integer pageSize, @RequestParam(name = "pageNum") Integer pageNum, @RequestParam(name = "whereStr") String whereStr, @RequestParam(name = "init") Integer init, @RequestParam(name = "tableName") String tableName,@RequestParam(name = "updateToDataBase") Integer updateToDataBase) {
         // 记录程序开始时间
-        long startTime = System.currentTimeMillis();
-        yyskAddressStandardizationService.iterativeProcessing(pageSize, init, tableName);// 记录程序结束时间
-        long endTime = System.currentTimeMillis();
-        return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
+        if (!ScheduledTasks.taskRunStatus) {
+            long startTime = System.currentTimeMillis();
+            ScheduledTasks.taskRunStatus = true;
+            if (pageNum == null) {
+                pageNum = 0;
+            }
+            if(updateToDataBase == null){
+                updateToDataBase = 0;
+            }
+            yyskAddressStandardizationService.iterativeProcessing(pageSize, pageNum, init, tableName, whereStr,updateToDataBase);// 记录程序结束时间
+            long endTime = System.currentTimeMillis();
+            ScheduledTasks.taskRunStatus = false;
+            return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
+        } else {
+            return "定时任务正在运行,暂不可以调用该方法!";
+        }
     }
 
     /**
@@ -80,7 +92,7 @@ public class CorporateLibraryController {
                 }
             }
             System.out.println("要处理的数据条数:" + sjArrDzbzhSjWcbryDzxxList.size());
-            yyskAddressStandardizationService.updateDatas2(sjArrDzbzhSjWcbryDzxxList, "yysk_wcb_address_standardization");
+            yyskAddressStandardizationService.updateDatas2(sjArrDzbzhSjWcbryDzxxList, "yysk_dmdz_address_standardization");
         } catch (Exception e) {
             e.printStackTrace();
         }

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

@@ -96,6 +96,7 @@ public class PoiAddressController {
 
     /**
      * 直接输地址并返回结果
+     * 教育局专用接口
      *
      * @param address
      * @return
@@ -106,7 +107,7 @@ public class PoiAddressController {
         String[] addressList = address.split(",");
         JSONObject returnDatas = new JSONObject();
         for (String addr : addressList) {
-            AddressResult addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr);
+            AddressResult addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr, 3);
             List<AddressResult.ContentBean> data = addressResult.getData();
             if (data != null && data.size() > 0) {
                 AddressResult.ContentBean contentBean = data.get(0);
@@ -134,6 +135,6 @@ public class PoiAddressController {
      */
     @GetMapping(value = "/searchByAddrStrToServer")
     public Object searchByAddrStrToServer(@RequestParam(name = "address") String address) {
-        return AddressQueryEngine.getInstance().sj_szxSearchByName_to_server(address);
+        return AddressQueryEngine.getInstance().sj_szxSearchByName(address, 3);
     }
 }

+ 12 - 1
src/main/java/com/skyversation/poiaddr/entity/YyskAddressStandardization.java

@@ -28,7 +28,12 @@ public class YyskAddressStandardization implements Serializable {
 	private String address;
 
 	/**
-	 * 省、市
+	 * 省
+	 */
+	private String provinces;
+
+	/**
+	 * 市
 	 */
 	private String market;
 
@@ -71,8 +76,14 @@ public class YyskAddressStandardization implements Serializable {
 	 * 纬度
 	 */
 	private String lon;
+
 	/**
 	 * 更新时间
 	 */
 	private Date updateTime;
+
+	/**
+	 * 数据标志
+	 */
+	private String dataTag;
 }

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

@@ -43,6 +43,7 @@ public class AreaService {
     WKTReader reader = new WKTReader(JTSFactoryFinder.getGeometryFactory());
     public List<GeoJsonBean> shAllAdministrativeDivisionPolygonList = new ArrayList<>();
     public List<GeoJsonBean> shAllToensPolygonList = new ArrayList<>();
+    public List<GeoJsonBean> shAllResidentialCommitteeList = new ArrayList<>();
 
     @PostConstruct
     public void initGeoData() {
@@ -57,7 +58,7 @@ public class AreaService {
             e.printStackTrace();
         }
 //      TODO 初始化配置文件变量
-        Constant.setTowns(town.split(""));
+        Constant.setTowns(town.split(","));
         Constant.setArea(area);
         System.out.println("<<<<<<<<------根据配置文件为AREA赋值:" + Constant.getArea());
         System.out.println("<<<<<<<<------当前AMAP_CITY_CODE:" + Constant.getAMAP_CITY_CODE());
@@ -77,7 +78,25 @@ public class AreaService {
 //      TODO 数据库连通性测试
         try {
             System.out.println("<<<<<<<<------开始数据库连通性测试");
-            System.out.println(">>>>>>>>------数据库连通性测试结果:" + DbConnection.getInstance().runSqlStr("select count(*) from yysk_wcb_address_standardization").toString());
+            /*String insertIntoSql = "INSERT INTO yysk_dmdz_address_standardization (address) \n" +
+                    "select real_address  FROM dws.fusion_nfrk_corp_info_partition_dsjzx_v1 where real_address is not NULL\n" +
+                    "UNION\n" +
+                    "select addr_area_name_gb FROM dws.fusion_nfrk_corp_info_partition_dsjzx_v1 where addr_area_name_gb is not NULL\n" +
+                    "UNION\n" +
+                    "select real_address  FROM dws.fusion_nfrk_corp_info_partition_dsjzx where real_address is not NULL\n" +
+                    "UNION\n" +
+                    "select addr_area_name_gb FROM dws.fusion_nfrk_corp_info_partition_dsjzx where addr_area_name_gb is not NULL\n" +
+                    "UNION\n" +
+                    "select before_conten from dws.fusion_nfrk_corp_change_partition_dsjzx where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and before_conten is not NULL\n" +
+                    "UNION\n" +
+                    "select after_content from dws.fusion_nfrk_corp_change_partition_dsjzx where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and after_content is not NULL\n" +
+                    "UNION\n" +
+                    "select before_conten from dws.fusion_nfrk_corp_change_partition_dsjzx_v2 where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and before_conten is not NULL\n" +
+                    "UNION\n" +
+                    "select after_content from dws.fusion_nfrk_corp_change_partition_dsjzx_v2 where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and after_content is not NULL\n";*/
+//            String insertIntoSql = "INSERT INTO yysk_dmdz_address_standardization (address) select address from yysk_wcb_address_standardization where address is not null";
+//            System.out.println(">>>>>>>>------数据库连通性测试结果:" + DbConnection.getInstance().updateSql(insertIntoSql));
+            System.out.println(">>>>>>>>------数据库连通性测试结果:" + DbConnection.getInstance().runSqlStr("select count(*) from yysk_dmdz_address_standardization").toString());
         } catch (Exception e) {
             System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
         }
@@ -87,7 +106,8 @@ public class AreaService {
         List<List<GeoJsonBean>> lis = new ArrayList<>();
         lis.add(shAllAdministrativeDivisionPolygonList);
         lis.add(shAllToensPolygonList);
-        String[] path = new String[]{"geojson/sh_all_administrative_division.geojson", "geojson/sh_all_towns.geojson"};
+        lis.add(shAllResidentialCommitteeList);
+        String[] path = new String[]{"geojson/sh_all_administrative_division.geojson", "geojson/sh_all_towns.geojson", "geojson/sh_all_residential_committee.geojson"};
 
         for (int j = 0; j < path.length; j++) {
             BufferedReader reader = null;
@@ -156,4 +176,19 @@ public class AreaService {
 
         }
     }
+
+    public GeoJsonBean isInResidentialCommitteePolygon(double lon, double lat) {
+        try {
+            Geometry point = reader.read("POINT (" + lat + " " + lon + ")");
+            for (GeoJsonBean bean : shAllResidentialCommitteeList) {
+                if (bean.getMultiPolygon().contains(point)) {
+                    return bean;
+                }
+            }
+            return null;
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+
+        }
+    }
 }

+ 39 - 17
src/main/java/com/skyversation/poiaddr/service/impl/YyskAddressStandardizationServiceImpl.java

@@ -55,10 +55,10 @@ public class YyskAddressStandardizationServiceImpl {
     }
 
     //  分页查询地址表
-    public List<YyskAddressStandardization> getAllDataPage(int size, String tableName) {
+    public List<YyskAddressStandardization> getAllDataPage(int size, int pageNum, String tableName, String whereStr) {
         try {
             List<YyskAddressStandardization> requestData = new ArrayList<>();
-            String sql = "SELECT * FROM " + tableName + " WHERE update_time is null limit " + size;
+            String sql = "SELECT * FROM " + tableName + " WHERE " + whereStr + " limit " + size * pageNum + "," + size;
             List<Map<String, Object>> dbData = DbConnection.getInstance().runSqlStr(sql);
             for (Map<String, Object> item : dbData) {
                 YyskAddressStandardization YyskAddressStandardization = new YyskAddressStandardization();
@@ -182,18 +182,28 @@ public class YyskAddressStandardizationServiceImpl {
      * 首先要得到一个Page<T>对象,然后判断是否还有别的数据,有的话接着请求并返回新的Page<T>对象并迭代处理数据
      * init [0:批量处理;1:初始化]
      */
-    public void iterativeProcessing(Integer pageSize, Integer init, String tableName) {
-        System.out.println("<<<<<<<<------iterativeProcessing{pageSize:" + pageSize + "}");
+    public void iterativeProcessing(Integer pageSize, Integer pageNum, Integer init, String tableName, String whereStr, Integer updateToDataBase) {
+        System.out.println("<<<<<<<<------iterativeProcessing{pageSize:" + pageSize + ",pageNum:" + pageNum + "}");
         long startTime = System.currentTimeMillis();
         if (init == 0) {
-            List<YyskAddressStandardization> listData = getAllDataPage(pageSize, tableName);
+            List<YyskAddressStandardization> listData = getAllDataPage(pageSize, pageNum, tableName, whereStr);
             if (listData != null && listData.size() > 0) {
 //              批量更新处理后的数据
-                updateDatas(runExecutorService(listData), tableName);
+                if (updateToDataBase == 1) {
+                    updateDatas(runExecutorService(listData), tableName);
+                } else if (updateToDataBase == 0) {
+                    List<YyskAddressStandardization> resultDataList = runExecutorService(listData);
+                    if (resultDataList.size() > 0) {
+                        ExcelReaderUtils.convertYYListToMapList(resultDataList, "output/yysk_dmdz_address_standardization_" + pageSize + "_" + pageNum + ".xlsx");
+                    }
+                }
                 long endTime = System.currentTimeMillis();
                 System.out.println("处理单批次用时" + (endTime - startTime) / 1000 + "秒!");
                 if (listData.size() > 0) {
-                    iterativeProcessing(pageSize, init, tableName);
+                    if (updateToDataBase == 0) {
+                        pageNum++;
+                    }
+                    iterativeProcessing(pageSize, pageNum, init, tableName, whereStr, updateToDataBase);
                 } else {
                     System.out.println("<<<<<<<<------任务处理完成!");
                 }
@@ -223,8 +233,14 @@ public class YyskAddressStandardizationServiceImpl {
         for (YyskAddressStandardization item : listData) {
             futures.add(executorService.submit(() -> {
                 List<String> addrList = new ArrayList<>();
-                if (item.getAddress() != null && !item.getAddress().isEmpty()) {
+                if (item.getAddress() != null && !item.getAddress().isEmpty() && AddressTools.isOtherDistrictThanSongJiang2(item.getAddress())) {
                     addrList.add(item.getAddress());
+                } else {
+//                  匹配全国省名
+                    item.setProvinces(AddressTools.isOtherDistrictThanShangHai(item.getAddress()));
+//                  遍历全国城市名称匹配搜索地址市名
+                    item.setMarket(AddressTools.ifCITIES(item.getAddress()));
+                    item.setMatchLevel("rule_0");
                 }
                 if (addrList.size() > 0) {
                     //  TODO 开始查询
@@ -237,8 +253,11 @@ public class YyskAddressStandardizationServiceImpl {
                             for (AddressResult.ContentBean contentBean : addressResult.getData()) {
                                 String resultAddrKey = contentBean.getAddress();
                                 if (resultAddrKey != null && contentBean.getLon() != null && contentBean.getLat() != null && AddressTools.isOtherDistrictThanSongJiang2(resultAddrKey)) {
+//                                  去除特殊字符
                                     resultAddrKey = AddressTools.getInstance().deleteStr(contentBean.getAddress());
-                                    contentBean.setAdname(AddressTools.parseAddressCJ(resultAddrKey)[2]);
+//                                  遍历全国省份名称得到省名
+                                    item.setProvinces(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
+//                                  写入街镇数据
                                     if (contentBean.getAdname() != null && !contentBean.getAdname().isEmpty()) {
                                         item.setStreetTown(contentBean.getAdname());
                                     } else if (contentBean.getTownJson() != null && contentBean.getTownJson().getString("name") != null) {
@@ -246,15 +265,17 @@ public class YyskAddressStandardizationServiceImpl {
                                     } else {
                                         item.setStreetTown("");
                                     }
-                                    contentBean.setCityname(AddressTools.parseAddressCJ(resultAddrKey)[1]);
+//                                  写入上海市市名
                                     item.setMarket(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
+//                                  写入区名
                                     if (contentBean.getCityname() != null && !contentBean.getCityname().isEmpty()) {
                                         item.setDistinguish(contentBean.getCityname());
-                                    } else if (contentBean.getAdJson().getString("name") != null) {
+                                    } else if (contentBean.getAdJson() != null && contentBean.getAdJson().getString("name") != null) {
                                         item.setDistinguish(contentBean.getAdJson().getString("name"));
                                     } else {
                                         item.setDistinguish("");
                                     }
+//                                  写入sh2000坐标系
                                     if (contentBean.getLocation() != null && !contentBean.getLocation().trim().isEmpty()) {
                                         String[] latLonStr = contentBean.getLocation().split(",");
                                         item.setLat(latLonStr[0]);
@@ -262,13 +283,16 @@ public class YyskAddressStandardizationServiceImpl {
                                     }
                                     item.setReturnAddress(resultAddrKey);
                                     item.setMatchLevel(contentBean.getScore());
-                                    String oldAddress = contentBean.getSearchAddress().replaceAll(item.getMarket(), "").replaceAll(item.getDistinguish(), "").replaceAll(item.getStreetTown(), "");
-                                    if (contentBean.getCjJson() != null && contentBean.getCjJson().containsKey("所属居委")) {
-                                        item.setResidentialCommittee(contentBean.getCjJson().getString("所属居委"));
+//                                  判断并写入居委
+                                    if (contentBean.getCommunity() != null && !contentBean.getCommunity().isEmpty()) {
+                                        item.setResidentialCommittee(contentBean.getCommunity());
+                                    } else if (contentBean.getCjJson() != null && contentBean.getCjJson().containsKey("居委_1")) {
+                                        item.setResidentialCommittee(contentBean.getCjJson().getString("居委_1"));
                                     } else {
                                         item.setResidentialCommittee("");
                                     }
-                                    item.setStandardAddress(item.getMarket() + item.getDistinguish() + item.getStreetTown() + AddressQueryEngine.townReplaceAll(oldAddress));
+                                    String oldAddress = AddressTools.parseAddressJZ(contentBean.getSearchAddress())[3].replaceAll(item.getMarket(), "").replaceAll(item.getDistinguish(), "").replaceAll(item.getStreetTown(), "").replaceAll(item.getResidentialCommittee(), "");
+                                    item.setStandardAddress(item.getMarket() + item.getDistinguish() + item.getStreetTown() + AddressQueryEngine.townReplace_ct(oldAddress));
                                     break;
                                 } else {
                                     item.setMatchLevel("异常");
@@ -281,8 +305,6 @@ public class YyskAddressStandardizationServiceImpl {
                             System.err.println("查询结果处理异常:" + e);
                         }
                     }
-                } else {
-                    item.setMatchLevel("否");
                 }
                 item.setUpdateTime(new Date());
             }));

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

@@ -595,7 +595,7 @@ public class AddressTools {
                 "宁夏回族自治区", "新疆维吾尔自治区",
                 "香港特别行政区", "澳门特别行政区"};
         for (String district : otherDistricts) {
-            if (lowerCaseAddress.contains(district.toLowerCase()) || lowerCaseAddress.indexOf(district.substring(0, 2)) == 0) {
+            if (lowerCaseAddress.contains(district.toLowerCase()) || lowerCaseAddress.indexOf(district.substring(0, 3)) == 0) {
                 return false;
             }
         }
@@ -617,11 +617,11 @@ public class AddressTools {
                 "宁夏回族自治区", "新疆维吾尔自治区",
                 "香港特别行政区", "澳门特别行政区"};
         for (String district : otherDistricts) {
-            if (lowerCaseAddress.contains(district.toLowerCase()) || lowerCaseAddress.indexOf(district.substring(0, 2)) == 0) {
+            if (lowerCaseAddress.contains(district.toLowerCase()) || lowerCaseAddress.indexOf(district.substring(0, 3)) == 0) {
                 return district;
             }
         }
-        return "";
+        return "上海市";
     }
 
     /***
@@ -657,8 +657,8 @@ public class AddressTools {
 
     /***
      * 其他方法的引用方法,不用管
-     * @param inputAddr
-     * @param shortAddr
+     * @param inputAddr 搜索地址
+     * @param shortAddr 返回地址
      * @return
      */
     private double calculateFullWordMatchScore(String inputAddr, String shortAddr) {
@@ -814,6 +814,15 @@ public class AddressTools {
             "基隆市", "新竹市", "嘉义市", "澳门市", "香港市"
     ));
 
+    public static String ifCITIES(String address) {
+        for (String item : CITIES) {
+            if (address.contains(item)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
     /***
      * 去除地名地址的前缀,一直到镇/街道
      * @param address

+ 36 - 9
src/main/java/com/skyversation/poiaddr/util/ExcelReaderUtils.java

@@ -2,6 +2,7 @@ package com.skyversation.poiaddr.util;
 
 import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.entity.SjArrDzbzhSjWcbryDzxx;
+import com.skyversation.poiaddr.entity.YyskAddressStandardization;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.ss.usermodel.*;
@@ -70,20 +71,20 @@ public class ExcelReaderUtils {
     }
 
     public static void writeClassToExcel(List<SjArrDzbzhSjWcbryDzxx> dataList, String filePath) throws IOException {
-        writeToExcel(convertListToMapList(dataList),filePath);
+        writeToExcel(convertListToMapList(dataList), filePath);
     }
 
-    public static List<Map<String,Object>> convertListToMapList(List<SjArrDzbzhSjWcbryDzxx> list){
-        List<Map<String,Object>> result = new ArrayList<>();
-        for(SjArrDzbzhSjWcbryDzxx item:list){
-            Map<String,Object> map = new HashMap<>();
+    public static List<Map<String, Object>> convertListToMapList(List<SjArrDzbzhSjWcbryDzxx> list) {
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (SjArrDzbzhSjWcbryDzxx item : list) {
+            Map<String, Object> map = new HashMap<>();
             Class<?> clazz = item.getClass();
             Field[] fields = clazz.getDeclaredFields();
-            for (Field field:fields){
+            for (Field field : fields) {
                 field.setAccessible(true);
-                try{
-                    map.put(field.getName(),field.get(item));
-                }catch (Exception e){
+                try {
+                    map.put(field.getName(), field.get(item));
+                } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
@@ -93,6 +94,32 @@ public class ExcelReaderUtils {
     }
 
 
+    public static void convertYYListToMapList(List<YyskAddressStandardization> list, String filePath) {
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (YyskAddressStandardization item : list) {
+            Map<String, Object> map = new HashMap<>();
+            Class<?> clazz = item.getClass();
+            Field[] fields = clazz.getDeclaredFields();
+            for (Field field : fields) {
+                field.setAccessible(true);
+                try {
+                    map.put(field.getName(), field.get(item));
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            result.add(map);
+        }
+        try {
+            if (result.size() > 0) {
+                writeToExcel(result, filePath);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
     public static List<Map<String, Object>> readExcel(String filePath) throws IOException {
         List<Map<String, Object>> resultList = new ArrayList<>();
         FileInputStream fis = new FileInputStream(filePath);

+ 20 - 9
src/main/java/com/skyversation/poiaddr/util/net/AddressNetTools.java

@@ -1,6 +1,7 @@
 package com.skyversation.poiaddr.util.net;
 
 import com.alibaba.fastjson.JSONObject;
+import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
@@ -21,6 +22,7 @@ import org.springframework.web.client.RestTemplate;
 import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
 
 public class AddressNetTools {
 
@@ -47,8 +49,8 @@ public class AddressNetTools {
     @Async
     public ResponseEntity requestGetOrPost(HttpMethod httpMethod, String url, JSONObject params, Map<String, String> headerMap, Integer ifReloadSize) {
         SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
-        requestFactory.setConnectTimeout(10 * 1000);
-        requestFactory.setReadTimeout(10 * 1000);
+        requestFactory.setConnectTimeout(1500);
+        requestFactory.setReadTimeout(1500);
         RestTemplate client = new RestTemplate(requestFactory);
         client.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
         HttpHeaders headers = new HttpHeaders();
@@ -61,27 +63,36 @@ public class AddressNetTools {
             }
         }
         try {
-            if(httpMethod == HttpMethod.POST){
+            if (httpMethod == HttpMethod.POST) {
                 org.springframework.http.HttpEntity<JSONObject> requestEntity = new org.springframework.http.HttpEntity<>(params, headers);//执行HTTP请求
                 return client.exchange(url, httpMethod, requestEntity, String.class);
-            }else{
+            } else {
                 MultiValueMap<String, String> params2 = new LinkedMultiValueMap<>();
-                if(params != null){
-                    for(String key:params.keySet()){
-                        params2.add(key,params.get(key).toString());
+                if (params != null) {
+                    for (String key : params.keySet()) {
+                        params2.add(key, params.get(key).toString());
                     }
                 }
                 org.springframework.http.HttpEntity<MultiValueMap<String, String>> requestEntity = new org.springframework.http.HttpEntity<>(params2, headers);//执行HTTP请求
                 return client.exchange(url, httpMethod, requestEntity, String.class);
             }
-
         } catch (Exception e) {
             if (ifReloadSize > 0) {
                 ifReloadSize--;
-                return requestGetOrPost(httpMethod,url, params, headerMap, ifReloadSize);
+                return requestGetOrPost(httpMethod, url, params, headerMap, ifReloadSize);
             } else {
                 System.err.println("requestGet err:" + e);
                 return null;
+                /*if (e.toString().contains("timed out")) {
+                    System.out.print("请求超时!");
+                    return requestGetOrPost(httpMethod, url, params, headerMap, ifReloadSize);
+                } else if (e.toString().contains("时间戳不合法或者已经过期")) {
+                    System.out.print("时间戳过期!");
+                    return requestGetOrPost(httpMethod, url, params, AddressQueryEngine.initSigns(), ifReloadSize);
+                } else {
+                    System.err.println("requestGet err:" + e);
+                    return null;
+                }*/
             }
         }
     }

+ 60 - 10
src/main/java/com/skyversation/poiaddr/util/tasks/ScheduledTasks.java

@@ -1,29 +1,79 @@
 package com.skyversation.poiaddr.util.tasks;
 
-import com.skyversation.poiaddr.addquery.AddressQueryEngine;
-import com.skyversation.poiaddr.bean.AddressResult;
-import com.skyversation.poiaddr.service.impl.SjArrDzbzhSjWcbryDzxxServiceImpl;
+import com.skyversation.poiaddr.config.DbConnection;
+import com.skyversation.poiaddr.service.impl.YyskAddressStandardizationServiceImpl;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+
 import javax.annotation.Resource;
-import java.util.ArrayList;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.Date;
-import java.util.List;
 
 @Component
 public class ScheduledTasks {
 
+    /**
+     * 避免重复触发定时任务的多线程逻辑,设置一个tag记录定时任务是否完成。
+     */
+    public static boolean taskRunStatus = false;
+
     @Resource
-    private SjArrDzbzhSjWcbryDzxxServiceImpl testDataService;
+    private YyskAddressStandardizationServiceImpl yyskAddressStandardizationService;
 
     /**
-     * 全量跑C表数据
+     * 每天凌晨一点跑地址表没跑过的数据
      */
-    @Scheduled(cron = "0 20 11 * * *")
+//    @Scheduled(cron = "0 0 1 * * *")
     public void executeAtOneOClock() {
         System.out.println("定时开始执行,当前时间:" + new Date());
-        // 在这里编写具体的业务逻辑
-        testDataService.iterativeProcessing(50,  0);
+        if (!taskRunStatus) {
+            taskRunStatus = true;
+            yyskAddressStandardizationService.iterativeProcessing(100, 0, 0, "yysk_dmdz_address_standardization", "update_time is null", 0);
+            taskRunStatus = false;
+        }
+    }
+
+
+    /**
+     * 每天凌晨30秒时得到前一天更新的数据并将数据插入到地址表中
+     */
+//    @Scheduled(cron = "30 0 0 * * *")
+    public void insertIntoTask() {
+        System.out.println("定时开始执行,当前时间:" + new Date());
+        try {
+            String previousDateStr = getPreviousDateStr();
+            String insertIntoSql = "INSERT INTO yysk_dmdz_address_standardization (address) \n" +
+                    "select real_address  FROM dws.fusion_nfrk_corp_info_partition_dsjzx_v1 where real_address is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select addr_area_name_gb FROM dws.fusion_nfrk_corp_info_partition_dsjzx_v1 where addr_area_name_gb is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select real_address  FROM dws.fusion_nfrk_corp_info_partition_dsjzx where real_address is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select addr_area_name_gb FROM dws.fusion_nfrk_corp_info_partition_dsjzx where addr_area_name_gb is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select before_conten from dws.fusion_nfrk_corp_change_partition_dsjzx where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and before_conten is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select after_content from dws.fusion_nfrk_corp_change_partition_dsjzx where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and after_content is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select before_conten from dws.fusion_nfrk_corp_change_partition_dsjzx_v2 where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and before_conten is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n" +
+                    "UNION\n" +
+                    "select after_content from dws.fusion_nfrk_corp_change_partition_dsjzx_v2 where reg_item_name IN ('住所变更','经营场所变更','驻在地址变更','主要经营场所','经营场所','注册地址(住所)') and after_content is not NULL and task_dsjzx_date like '" + previousDateStr + "%'\n";
+            System.out.println(">>>>>>>>------数据库连通性测试结果:" + DbConnection.getInstance().updateSql(insertIntoSql));
+        } catch (Exception e) {
+            System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
+        }
+    }
+
+    public static String getPreviousDateStr() {
+//      获取当前日期
+        LocalDate currentDate = LocalDate.now();
+//      获取前一天的日期
+        LocalDate previousDate = currentDate.minusDays(1);
+//      定义日期格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+//      返回前一天的日期字符串
+        return previousDate.format(formatter);
     }
 
 }

文件差異過大導致無法顯示
+ 0 - 0
src/main/resources/geojson/sh_all_residential_committee.geojson


部分文件因文件數量過多而無法顯示