Przeglądaj źródła

缓存的形式化初始化,并完善补充关键表和字段。

DESKTOP-6LTVLN7\Liumouren 2 tygodni temu
rodzic
commit
40e25adb7e

BIN
img.png


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

@@ -2,10 +2,9 @@ package com.skyversation.poiaddr.addquery;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.skyversation.poiaddr.bean.Address;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.bean.GeoJsonBean;
-import com.skyversation.poiaddr.bean.yyskDmdzAddressStandardization;
+import com.skyversation.poiaddr.bean.YyskDmdzAddressStandardization;
 import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.util.ShanghaiAddressSplitUtil;
 import com.skyversation.poiaddr.util.SplitAddress;
@@ -60,7 +59,7 @@ public class AddressQueryEngine {
     }
 
     /***
-     * 单条地名搜索通用方法,搜索顺序  1. 武大吉奥; 2. 市四中心; 3. 高德搜索; 4. 高德高级搜索;
+     * 单条地名搜索通用方法
      * @param addr
      * @return
      */
@@ -69,7 +68,6 @@ public class AddressQueryEngine {
             return null;
         }
         AddressResult addressResult = new AddressResult();
-
         SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
         if (splitAddress.getStatus() == 2) { // 外省数据
             addressResult.setMessage("非上海数据");
@@ -95,7 +93,7 @@ public class AddressQueryEngine {
             addressResult.setAddrBean(addrBean);
 
             // 优先进行数据库查询
-            List<yyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoisByAddr(splitAddress);
+            List<YyskDmdzAddressStandardization> dbPois = AreaService.getInstance().getAddressPoisByAddr(splitAddress);
             if (dbPois != null && dbPois.size() > 0) {
                 JSONArray pois = new JSONArray();
                 pois.addAll(dbPois);
@@ -112,14 +110,14 @@ public class AddressQueryEngine {
                     addrBean.setAdname(content.getAdname());
                     addrBean.setDistance(content.getDistance());
                     addrBean.setCommunity(content.getCommunity());
-                    addrBean.setStandAddr(content.getStandAddr());
+                    addrBean.setStandAddr(content.getPname()+content.getCityname()+content.getAdname()+content.getSearchAddress());
                     addressResult.setAddrBean(addrBean);
                     return addressResult;
                 }
             /*} else {
                 if (splitAddress.getDistrict() != null && !splitAddress.getDistrict().isEmpty()) {
                     //查询无结果,尝试给出推荐结果
-                    List<yyskDmdzAddressStandardization> recommendPois = AreaService.getInstance().getRecommendAddress(splitAddress);
+                    List<YyskDmdzAddressStandardization> recommendPois = AreaService.getInstance().getRecommendAddress(splitAddress);
                     if (recommendPois != null && recommendPois.size() > 0) {
                         JSONArray pois = new JSONArray();
                         pois.addAll(recommendPois);

+ 43 - 0
src/main/java/com/skyversation/poiaddr/bean/GovernanceResultsTable.java

@@ -0,0 +1,43 @@
+package com.skyversation.poiaddr.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * hive
+ * 治理结果表
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class GovernanceResultsTable {
+    //    原始地址
+    private String original_address;
+    //    标准地址
+    private String standard_address;
+    //    简称地址
+    private String abbreviated_address;
+    //    市
+    private String city;
+    //    区
+    private String county;
+    //    街镇
+    private String town;
+    //    居委
+    private String community;
+    //    经度
+    private Float lon;
+    //    纬度
+    private Float lat;
+    //    批次号
+    private String batch_number;
+    //    数据来源
+    private String data_sources;
+    //    入库日期
+    private Date in_data;
+}

+ 25 - 0
src/main/java/com/skyversation/poiaddr/bean/PendingGovernanceIntermediateTable.java

@@ -0,0 +1,25 @@
+package com.skyversation.poiaddr.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * hive
+ * 待治理中间表
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PendingGovernanceIntermediateTable {
+    //  待治理字段
+    private String pending_governance_address;
+    //  批次号
+    private String batch_number;
+    //  数据来源
+    private String data_sources;
+    //  治理状态(0:未治理;1已治理)
+    private Long governance_status;
+}

+ 9 - 1
src/main/java/com/skyversation/poiaddr/bean/TAddressCallback.java

@@ -16,7 +16,7 @@ import java.io.Serializable;
  *
  */
 @Entity
-@Table(name = "t_address_callback_demo", schema = "")
+@Table(name = "t_address_callback", schema = "")
 @Data
 @Builder
 @NoArgsConstructor
@@ -51,6 +51,14 @@ public class TAddressCallback implements Serializable {
     @Column(name = "lat")
     private String lat;
 
+    //    批次号
+    @Column(name = "batch_number")
+    private String batchNumber;
+
+    //    数据来源
+    @Column(name = "data_sources")
+    private String dataSources;
+
     @Column(name = "status_tag")
     private Integer statusTag;
 }

+ 8 - 2
src/main/java/com/skyversation/poiaddr/bean/yyskDmdzAddressStandardization.java → src/main/java/com/skyversation/poiaddr/bean/YyskDmdzAddressStandardization.java

@@ -15,7 +15,7 @@ import java.util.Date;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class yyskDmdzAddressStandardization implements Serializable {
+public class YyskDmdzAddressStandardization implements Serializable {
     private static final long serialVersionUID = -234567890123456789L;
 
     @Id
@@ -203,6 +203,12 @@ public class yyskDmdzAddressStandardization implements Serializable {
     @Column(name = "ybdd", length = 50)
     private String ybdd;
 
-    @Column(name = "address", length = 255)
+    @Column(name = "address")
     private String address;
+
+    @Column(name = "tydz_jc", length = 50)
+    private String tydzJc;
+
+    @Column(name = "sj_clean_timestamp")
+    private Date sjCleanTimestamp;
 }

+ 0 - 47
src/main/java/com/skyversation/poiaddr/bean/ZrrCallback20250609.java

@@ -1,47 +0,0 @@
-package com.skyversation.poiaddr.bean;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.*;
-import java.io.Serializable;
-
-@Entity
-@Table(name = "zrr_callback_20250609", schema = "")
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class ZrrCallback20250609 implements Serializable {
-
-    @Id
-    @Column(name = "search_address")
-    private String searchAddress;
-
-    @Column(name = "cankao_address")
-    private String cankaoAddress;
-
-    @Column(name = "pname")
-    private String pname;
-
-    @Column(name = "standard_address")
-    private String standardAddress;
-
-    @Column(name = "county")
-    private String county;
-
-    @Column(name = "street_town_name")
-    private String streetTownName;
-
-    @Column(name = "community")
-    private String community;
-
-    @Column(name = "lon")
-    private String lon;
-
-    @Column(name = "lat")
-    private String lat;
-
-}

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

@@ -3,10 +3,9 @@ package com.skyversation.poiaddr.controller;
 import com.alibaba.fastjson.JSONArray;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.addquery.TransfromDataTool;
-import com.skyversation.poiaddr.bean.Address;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.bean.GeoJsonBean;
-import com.skyversation.poiaddr.bean.yyskDmdzAddressStandardization;
+import com.skyversation.poiaddr.bean.YyskDmdzAddressStandardization;
 import com.skyversation.poiaddr.entity.YyskAddressStandardization;
 import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.service.impl.YyskAddressStandardizationServiceImpl;
@@ -55,7 +54,6 @@ public class CorporateLibraryController {
         return MessageManage.getInstance().getResultContent(Constant.SUCCESS, addressResult, "成功");
     }
 
-
     //    地址查询
     @RequestMapping(value = "/searchByName")
     public String searchByName(HttpServletRequest request) {
@@ -64,7 +62,7 @@ public class CorporateLibraryController {
             return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
 //      数据库查询
-        List<yyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(address);
+        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(address);
         AddressResult addressResult = null;
         if (list == null || list.size() < 1) {
 //          写入回流表
@@ -90,7 +88,6 @@ public class CorporateLibraryController {
         }
     }
 
-
     //    高级地址查询
     @RequestMapping(value = "/searchByNameV3")
     public String searchByNameV3(HttpServletRequest request) {
@@ -114,158 +111,55 @@ public class CorporateLibraryController {
         }
     }
 
-    @RequestMapping(value = "/sd")
-    public String sd() {
-        List<Map<String, Object>> uniScDatas = AreaService.getInstance().getUniScDatas();
-        int index = 0;
-        try {
-            System.out.println("共:<<<-- " + uniScDatas.size() + "  -->> 条数据");
-            for (Map<String, Object> dataItem : uniScDatas) {
-                System.out.println("开始处理第:<<<-- " + index++ + "  -->> 个数据");
-                dataItem.put("lat", "");
-                dataItem.put("lon", "");
-                dataItem.put("pname", "");
-                dataItem.put("county", "");
-                dataItem.put("street_town_name", "");
-                dataItem.put("community", "");
-                dataItem.put("distance", "");
-                dataItem.put("standard_address", "");
-                dataItem.put("type", "error");
-
-                if (dataItem.get("real_address") != null) {
-                    String addr = dataItem.get("real_address").toString();
-                    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);
-                        dataItem.put("type", "db");
-                    } else {
-                        addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr, 3);
-                        if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
-                            contentBean = addressResult.getData().get(0);
-                            dataItem.put("type", "szx");
-                        }
-                    }
-                    if (contentBean != null && contentBean.getLon() != null) {
-                        AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
-                        dataItem.put("lat", contentBean.getLat());
-                        dataItem.put("lon", contentBean.getLon());
-                        dataItem.put("pname", contentBean.getPname());
-                        dataItem.put("county", contentBean.getCityname());
-                        dataItem.put("street_town_name", contentBean.getAdname());
-                        dataItem.put("community", contentBean.getCommunity());
-                        dataItem.put("distance", contentBean.getCommunity());
-                        dataItem.put("standard_address", contentBean.getStandAddr());
-                        SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
-                        if (splitAddress != null) {
-                            if (!StringUtils.hasText(contentBean.getPname())) {
-                                contentBean.setPname(splitAddress.getCity());
-                                dataItem.put("pname", splitAddress.getCity());
-                            }
-                            if (!StringUtils.hasText(contentBean.getPname())) {
-                                contentBean.setPname("上海市");
-                                dataItem.put("pname", "上海市");
-                            }
-                            dataItem.put("standard_address", contentBean.getPname() + contentBean.getCityname() +
-                                    contentBean.getAdname() + contentBean.getCommunity() + splitAddress.getAddr());
-                        }
-                    }
-                }
-            }
-
-            ExcelReaderUtils.writeToExcel(uniScDatas, "D:\\Users\\admin\\Desktop\\uniScDatas.xlsx");
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            String ss = "809890";
-            ss.toString();
-            try {
-                ExcelReaderUtils.writeToExcel(uniScDatas, "D:\\Users\\admin\\Desktop\\uniScDatas2.xlsx");
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
+    /**
+     * 只返回bean的接口
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/searchByNameOnly")
+    public String searchByNameOnly(HttpServletRequest request) {
+        String address = request.getParameter("address");
+        if (!StringUtils.hasText(address)) {
+            return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
-
-//        yyskAddressStandardizationService.updateSDDatas(uniScDatas);
-        return "处理完成";
-    }
-
-
-    @RequestMapping(value = "/sdFile")
-    public String sdFile() {
-        try {
-            int index = 0;
-            List<Map<String, Object>> uniScDatas = ExcelReaderUtils.readExcel("D:\\Users\\admin\\Desktop\\uniScDatas7.xlsx");
-            System.out.println("共:<<<-- " + uniScDatas.size() + "  -->> 条数据");
-            for (Map<String, Object> dataItem : uniScDatas) {
-                System.out.println("开始处理第:<<<-- " + index++ + "  -->> 个数据");
-                if (dataItem.get("street_town_name") != null && !dataItem.get("street_town_name").toString().isEmpty()) {
-                    if (dataItem.get("street_town_name").toString().contains("区") && !dataItem.get("street_town_name").toString().contains("工业区") && !dataItem.get("street_town_name").toString().contains("开发区") && !dataItem.get("street_town_name").toString().contains("试验区") && !dataItem.get("street_town_name").toString().contains("管委会")) {
-                        String addr = dataItem.get("real_address").toString();
-                        SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
-                        if (splitAddress != null && splitAddress.getStreet() != null && !splitAddress.getStreet().toString().isEmpty()) {
-                            dataItem.put("street_town_name", splitAddress.getStreet());
-                            dataItem.put("standard_address", dataItem.get("pname").toString() + dataItem.get("county") + dataItem.get("street_town_name") + splitAddress.getAddr());
-                        } else {
-                            AddressResult addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr, 3);
-                            if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
-                                AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
-                                AddressResult.ContentBean contentBean = addressResult.getData().get(0);
-                                dataItem.put("lat", contentBean.getLat());
-                                dataItem.put("lon", contentBean.getLon());
-                                dataItem.put("pname", contentBean.getPname());
-                                dataItem.put("county", contentBean.getCityname());
-                                dataItem.put("street_town_name", contentBean.getAdname());
-                                dataItem.put("community", contentBean.getCommunity());
-                                dataItem.put("distance", contentBean.getCommunity());
-                                SplitAddress splitAddress2 = ShanghaiAddressSplitUtil.splitBestAddress(addr);
-                                if (splitAddress2 != null) {
-                                    if (!StringUtils.hasText(contentBean.getPname())) {
-                                        contentBean.setPname(splitAddress2.getCity());
-                                        dataItem.put("pname", splitAddress2.getCity());
-                                    }
-                                    if (!StringUtils.hasText(contentBean.getPname())) {
-                                        contentBean.setPname("上海市");
-                                        dataItem.put("pname", "上海市");
-                                    }
-                                    dataItem.put("standard_address", contentBean.getPname() + contentBean.getCityname() +
-                                            contentBean.getAdname() + splitAddress2.getAddr());
-
-                                }
-
-                                dataItem.put("type", "szx");
-                            }
-                        }
-                    }
-                }
+//      数据库查询
+        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(address);
+        AddressResult addressResult = null;
+        if (list == null || list.size() < 1) {
+//          写入回流表
+            AreaService.getInstance().callBackErrorAddr(address);
+            return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "无数据", "无数据");
+        } else {
+            JSONArray pois = new JSONArray();
+            pois.addAll(list);
+            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(address);
+//          打分并返回最优结果
+            addressResult = new TransfromDataTool().dbResultToResult(splitAddress, address, pois);
+            if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
+                addressResult.setCode(AddressResultEnum.DB_SUCCESS);
+                addressResult.setMessage("成功");
+                AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
             }
-
-            ExcelReaderUtils.writeToExcel(uniScDatas, "D:\\Users\\admin\\Desktop\\uniScDatas8.xlsx");
-        } catch (Exception e) {
-            e.printStackTrace();
         }
-        return "处理完成";
-    }
-
-    @RequestMapping(value = "/sdFileToBase")
-    public String sdFileToBase() {
-        try {
-            List<Map<String, Object>> uniScDatas = ExcelReaderUtils.readExcel("D:\\Users\\admin\\Desktop\\uniScDatas.xlsx");
-            yyskAddressStandardizationService.updateSDDatas(uniScDatas);
-        } catch (Exception e) {
-            e.printStackTrace();
+        if (addressResult == null || addressResult.getData() == null || addressResult.getData().get(0) == null) {
+            return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "无数据", "无数据");
+        } else {
+            return MessageManage.getInstance().getResultContent(Constant.SUCCESS, addressResult.getData().get(0), "成功");
         }
-        return "处理完成";
     }
 
-    @RequestMapping(value = "/runCallBackTable")
-    public String runCallBackTable(HttpServletRequest request) {
+    /**
+     * 处理待处理表接口
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/runCallBackTablev2")
+    public String runCallBackTablev2(HttpServletRequest request) {
         try {
             String page = request.getParameter("page");
-            String endPage = request.getParameter("endPage");
             String pageSize = request.getParameter("pageSize");
-            String par_dt = request.getParameter("par_dt");
-            AreaService.getInstance().selectLimitData(Integer.parseInt(page), Integer.parseInt(pageSize),Integer.parseInt(endPage),par_dt);
+            AreaService.getInstance().selectLimitData(Integer.parseInt(page), Integer.parseInt(pageSize));
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
@@ -279,7 +173,6 @@ public class CorporateLibraryController {
         return "处理完成";
     }
 
-
     /**
      * (开发中)
      * 定时器:每天都全量更新法人库的地名地址数据
@@ -309,104 +202,4 @@ public class CorporateLibraryController {
         }
     }
 
-    /**
-     * 1、解析xlsx得到所有数据
-     * 2、根据主键address和标准化地址standardAddress直接跑规则,属于rule_4的要替换掉同时添加updateTag
-     * 3、标准化地址还要做一层去空和街镇异常处理,有变动的也添加updateTag
-     *
-     * @return
-     */
-    @PostMapping(value = "/dataQingXi", produces = MediaType.APPLICATION_JSON_VALUE)
-    public Object dataQingXi() {
-        // 记录程序开始时间
-        long startTime = System.currentTimeMillis();
-        SerializationUtils.test();
-        long endTime = System.currentTimeMillis();
-        return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
-    }
-
-
-    @PostMapping(value = "/updateByTag", produces = MediaType.APPLICATION_JSON_VALUE)
-    public Object updateByTag() {
-        // 记录程序开始时间
-        long startTime = System.currentTimeMillis();
-        try {
-            List<Map<String, Object>> fileDatas = ExcelReaderUtils.readExcel("output/yysk_new_wcb_address_standardization.xlsx");
-            List<YyskAddressStandardization> sjArrDzbzhSjWcbryDzxxList = new ArrayList<>();
-            for (Map<String, Object> item : fileDatas) {
-                if (item.get("updateTag") != null && Boolean.parseBoolean(item.get("updateTag").toString())) {
-                    YyskAddressStandardization yyskAddressStandardization = new YyskAddressStandardization();
-                    yyskAddressStandardization.setAddress(item.get("address").toString());
-                    yyskAddressStandardization.setMatchLevel(item.get("match_level").toString());
-                    yyskAddressStandardization.setStandardAddress(item.get("standard_address").toString());
-                    sjArrDzbzhSjWcbryDzxxList.add(yyskAddressStandardization);
-                }
-            }
-            System.out.println("要处理的数据条数:" + sjArrDzbzhSjWcbryDzxxList.size());
-            yyskAddressStandardizationService.updateDatas2(sjArrDzbzhSjWcbryDzxxList, "yysk_dmdz_address_standardization");
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        long endTime = System.currentTimeMillis();
-        return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
-    }
-
-    @PostMapping(value = "/getAllDataBaseData", produces = MediaType.APPLICATION_JSON_VALUE)
-    public Object getAllDataBaseData() {
-        // 记录程序开始时间
-        long startTime = System.currentTimeMillis();
-        int fileDataSize = 20000;
-        int pageNum = 309;
-        String tableName = "yysk_dmdz_address_standardization";
-        String whereStr = "address is not null";
-        yyskAddressStandardizationService.downLoadAllData(fileDataSize, pageNum, tableName, whereStr);
-        long endTime = System.currentTimeMillis();
-        return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
-    }
-
-    @PostMapping(value = "/jjData", produces = MediaType.APPLICATION_JSON_VALUE)
-    public Object jjData() throws IOException {
-        // 记录程序开始时间
-        long startTime = System.currentTimeMillis();
-        List<Map<String, Object>> fileDatas = ExcelReaderUtils.readExcel("output/摸底数据20250331_output.xlsx");
-        Set<String> addressSet = new HashSet<>();
-        for (Map<String, Object> item : fileDatas) {
-            String matchLevel = item.get("matchLevel").toString();
-            if (!matchLevel.contains("rule_") && !matchLevel.contains("异常")) {
-                Float level = Float.parseFloat(matchLevel);
-                if (level < 1.6f) {
-                    addressSet.add(item.get("address").toString());
-                }
-            }
-            /*if (item.containsKey("居住地址") && item.get("居住地址") != null) {
-                String jzdz = item.getOrDefault("居住地址", "").toString();
-                if (!jzdz.isEmpty()) {
-                    addressSet.add(jzdz);
-                }
-            }
-            if (item.containsKey("户籍地址") && item.get("户籍地址") != null) {
-                String hjdz = item.getOrDefault("户籍地址", "").toString();
-                if (!hjdz.isEmpty()) {
-                    addressSet.add(hjdz);
-                }
-            }*/
-        }
-        System.out.println("去重后地址数据条数:" + addressSet.size());
-
-        List<YyskAddressStandardization> requestData = new ArrayList<>();
-        for (String address : addressSet) {
-            YyskAddressStandardization YyskAddressStandardization = new YyskAddressStandardization();
-            if (address != null) {
-                YyskAddressStandardization.setAddress(address);
-            }
-            requestData.add(YyskAddressStandardization);
-        }
-        /*List<YyskAddressStandardization> resultDataList = yyskAddressStandardizationService.runExecutorService(requestData);
-        if (resultDataList.size() > 0 && !ScheduledTasks.taskServiceErr) {
-            ExcelReaderUtils.convertYYListToMapList(resultDataList, "output/摸底数据20250331_output2.xlsx");
-        }*/
-        long endTime = System.currentTimeMillis();
-        return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
-    }
-
 }

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

@@ -2,16 +2,13 @@ package com.skyversation.poiaddr.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.bean.*;
 import com.skyversation.poiaddr.config.DbConnection;
 import com.skyversation.poiaddr.service.impl.TAddressCallbackRepository;
 import com.skyversation.poiaddr.service.impl.YyszAddressRepository;
-import com.skyversation.poiaddr.service.impl.ZrrCallBackRepository;
 import com.skyversation.poiaddr.util.ShanghaiAddressSplitUtil;
 import com.skyversation.poiaddr.util.SplitAddress;
-import com.skyversation.poiaddr.util.status.AddressResultEnum;
 import com.skyversation.poiaddr.util.tasks.ScheduledTasks;
 import org.geotools.geojson.geom.GeometryJSON;
 import org.geotools.geometry.jts.JTSFactoryFinder;
@@ -22,16 +19,13 @@ import org.locationtech.jts.io.WKTReader;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.io.*;
 import java.util.*;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
 
 @Service
 public class AreaService {
@@ -42,9 +36,6 @@ public class AreaService {
     @Resource
     private YyszAddressRepository yyszAddressRepository;
 
-    @Resource
-    private ZrrCallBackRepository zrrCallBackRepository;
-
     @Resource
     private TAddressCallbackRepository tAddressCallbackRepository;
 
@@ -91,7 +82,7 @@ public class AreaService {
         System.out.println("<<<<<<<<------根据配置文件为AREA赋值:" + Constant.getArea());
         System.out.println("<<<<<<<<------当前AMAP_CITY_CODE:" + Constant.getAMAP_CITY_CODE());
 //      TODO 网络连通性测试,可以请求一下测试的市中心地址
-        try {
+        /*try {
             System.out.println("电脑最大线程数:" + Runtime.getRuntime().availableProcessors());
             System.out.println("<<<<<<<<------开始网络连通性测试");
             long startTime = System.currentTimeMillis();
@@ -102,12 +93,13 @@ public class AreaService {
             System.out.println(">>>>>>>>------网络连通性测试完成!用时" + (endTime - startTime) / 1000 + "秒!结果:" + addressResult);
         } catch (Exception e) {
             System.err.println(">>>>>>>>------网络连通性测试结果:" + e);
-        }
+        }*/
 //      TODO 数据库连通性测试
         try {
-            System.out.println("<<<<<<<<------开始数据库连通性测试");
-            System.out.println("------数据库连通性测试结果:" + DbConnection.getInstance().runSqlStr("select count(*) from " + searchTableName));
-            initScheduledTasksSetAddress();
+            /*System.out.println("<<<<<<<<------开始数据库连通性测试");
+            System.out.println("------数据库连通性测试结果:" + DbConnection.getInstance().runSqlStr("select count(*) from " + searchTableName));*/
+//            System.out.println("<<<<<<<<------开始缓存待处理表对象");
+//            initScheduledTasksSetAddress();
         } catch (Exception e) {
             System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
         }
@@ -119,20 +111,9 @@ public class AreaService {
                     ScheduledTasks.callBackAllErrorAddrs.add(tAddressCallback.getSearchAddress());
                 }
             }
-            /*List<Map<String, Object>> callBackAddr = DbConnection.getInstance().runSqlStr("select * from t_address_callback");
-            if (callBackAddr != null && callBackAddr.size() == 1) {
-                for (Map<String, Object> item : callBackAddr) {
-                    Integer maxId = Integer.parseInt(item.get("id").toString());
-                    if (ScheduledTasks.callBackMaxId < maxId) {
-                        ScheduledTasks.callBackMaxId = maxId;
-                    }
-                    ScheduledTasks.callBackAllErrorAddrs.add(item.get("address").toString());
-                }
-            }*/
         } catch (Exception e) {
             e.printStackTrace();
         }
-
     }
 
     public void initPolygons() {
@@ -184,112 +165,76 @@ public class AreaService {
         System.out.println("<<<<<<<<------run geo data complete------>>>>>>>>>");
     }
 
-    public void initScheduledTasksSetAddress() {
+    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("弄"));
+            }
+            if (!ScheduledTasks.allDmdzData.containsKey(addr)) {
+                List<YyskDmdzAddressStandardization> datas = new ArrayList<>();
+                datas.add(item);
+                ScheduledTasks.allDmdzData.put(addr, datas);
+            } else if (ScheduledTasks.allDmdzData.get(addr).size() < 20) {
+                ScheduledTasks.allDmdzData.get(addr).add(item);
+            }
+        }
+    }
+
+    /**
+     * 缓存地址库数据
+     */
+    public void getAllDmdzAddressDatas() {
         long startTime = System.currentTimeMillis();
-        List<ZrrCallback20250609> zrrCallback20250609s = zrrCallBackRepository.findAll();
-        if (zrrCallback20250609s.size() > 0) {
-            for (ZrrCallback20250609 zrrCallback20250609 : zrrCallback20250609s) {
-                ScheduledTasks.setAddress.add(zrrCallback20250609.getSearchAddress());
+//      先查询到所有数据
+        getDmdzDataByPage(0, 10000);
+        System.out.println("ScheduledTasks.allDmdzData初始化完成,有" + ScheduledTasks.allDmdzData.size() + "条记录保存到缓存中,用时" + (System.currentTimeMillis() - startTime) / 1000 + "秒");
+    }
+
+    /**
+     * JPA的形式加载所有地址信息到缓存
+     * @param maxOid
+     * @param pageSize
+     */
+    @Transactional(readOnly = true)
+    public void getDmdzDataByPage(int maxOid, int pageSize) {
+        System.out.println("maxOid:" + maxOid + "pageSize:" + pageSize);
+        long sTime = System.currentTimeMillis();
+        List<YyskDmdzAddressStandardization> dataList = yyszAddressRepository.getAllByOidPage(maxOid, pageSize);
+        System.out.println("当前OID" + maxOid + "查询完成,用时:" + (System.currentTimeMillis() - sTime) / 1000 + "秒!");
+        //      TODO 经测试发现一次性读全表,内存根本吃不消
+        for (YyskDmdzAddressStandardization item : dataList) {
+            if (item.getAddress() != null && StringUtils.hasText(item.getAddress())) {
+                SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(item.getAddress());
+                putAllDmdzData(splitAddress.getAddr(), item);
+            }
+            if (item.getSourceaddress() != null && StringUtils.hasText(item.getSourceaddress())) {
+                SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(item.getSourceaddress());
+                putAllDmdzData(splitAddress.getAddr(), item);
             }
+            if (item.getOid() > maxOid) {
+                maxOid = item.getOid();
+            }
+        }
+        System.out.println("当前OID" + maxOid + "查询处理完成,用时:" + (System.currentTimeMillis() - sTime) / 1000 + "秒!");
+        if (dataList.size() > 0) {
+            getDmdzDataByPage(maxOid, pageSize);
+        } else {
+            System.out.println("分页查询结束");
         }
-        System.out.println("ScheduledTasks.setAddress初始化完成,共" + ScheduledTasks.setAddress.size() + "条,查询用时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒!");
     }
 
-    public void selectLimitData(int page, int pageSize, int endPage, String par_dt) {
+    public void selectLimitData(int page, int pageSize) {
         Map<String, Object> loginfoMap = new HashMap<>();
         loginfoMap.put("page", page);
         loginfoMap.put("pageSize", pageSize);
         try {
             long startTime = System.currentTimeMillis();
             loginfoMap.put("startTime", startTime);
-            List<Map<String, Object>> callBackDatas = DbConnection.getInstance().runSqlStr("select roomdetailedaddress,hjdz from dws.dws_sjqdsjzx_zrr_hjjzxx_arrange where par_dt = '" + par_dt + "' order by ryid limit " + (page * pageSize) + "," + pageSize);
-            System.out.println("数据库查询par_dt:" + par_dt + ",page:" + page + ",pageSize:" + pageSize + "完成,用时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒!");
-            if (callBackDatas != null && callBackDatas.size() > 0 && page < endPage) {
-                Set<String> address = new HashSet<>();
-                for (Map<String, Object> dataI : callBackDatas) {
-                    if (dataI.get("roomdetailedaddress") != null && StringUtils.hasText(dataI.get("roomdetailedaddress") + "") && !ScheduledTasks.setAddress.contains(dataI.get("roomdetailedaddress") + "")) {
-                        address.add(dataI.get("roomdetailedaddress") + "");
-                        ScheduledTasks.setAddress.add(dataI.get("roomdetailedaddress") + "");
-                    }
-                    if (dataI.get("hjdz") != null && StringUtils.hasText(dataI.get("hjdz") + "") && !ScheduledTasks.setAddress.contains(dataI.get("hjdz") + "")) {
-                        address.add(dataI.get("hjdz") + "");
-                        ScheduledTasks.setAddress.add(dataI.get("hjdz") + "");
-                    }
-                }
-                callBackDatas.clear();
-                List<ZrrCallback20250609> outDatas = new ArrayList<>();
-                int MaxTnumber = Runtime.getRuntime().availableProcessors();
-                System.out.println("共:《" + address.size() + "》条数据!最大可用线程数:" + MaxTnumber);
-                int index = 0;
-                ExecutorService executorService = Executors.newFixedThreadPool(MaxTnumber / 2);
-                List<Future<?>> futures = new ArrayList<>();
-                for (String addrStr : address) {
-                    index++;
-                    int finalIndex = index;
-                    futures.add(executorService.submit(() -> {
-                        System.out.print(">" + finalIndex);
-                        ZrrCallback20250609 zrrCallback20250609 = new ZrrCallback20250609();
-                        zrrCallback20250609.setSearchAddress(addrStr);
-                        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(addrStr);
-                        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);
-                        }
-                        if (contentBean != null && contentBean.getLon() != null) {
-                            AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
-                            zrrCallback20250609.setLat(contentBean.getLat() + "");
-                            zrrCallback20250609.setLon(contentBean.getLon() + "");
-                            zrrCallback20250609.setPname(contentBean.getPname());
-                            zrrCallback20250609.setCounty(contentBean.getCityname());
-                            zrrCallback20250609.setCankaoAddress(contentBean.getAddress());
-                            zrrCallback20250609.setStreetTownName(contentBean.getAdname());
-                            zrrCallback20250609.setCommunity(contentBean.getCommunity());
-                            zrrCallback20250609.setStandardAddress(contentBean.getStandAddr());
-                            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addrStr);
-                            if (!StringUtils.hasText(contentBean.getPname())) {
-                                contentBean.setPname(splitAddress.getCity());
-                                zrrCallback20250609.setPname(splitAddress.getCity());
-                            }
-                            if (!StringUtils.hasText(contentBean.getPname())) {
-                                contentBean.setPname("上海市");
-                                zrrCallback20250609.setPname("上海市");
-                            }
-                            zrrCallback20250609.setStandardAddress(contentBean.getPname() + contentBean.getCityname() +
-                                    contentBean.getAdname() + contentBean.getCommunity() + splitAddress.getAddr());
-                        }
-                        if (zrrCallback20250609.getSearchAddress() != null) {
-                            outDatas.add(zrrCallback20250609);
-                        }
-                    }));
-                }
-
-                // 等待所有任务完成
-                for (Future<?> future : futures) {
-                    try {
-                        future.get();
-                    } catch (InterruptedException | ExecutionException e) {
-                        System.err.println("线程异常:" + e);
-                    }
-                }
-                // 关闭线程池
-                executorService.shutdown();
-                zrrCallBackRepository.saveAll(outDatas);
-                long endTime = System.currentTimeMillis();
-                System.out.println("处理完成!用时" + (endTime - startTime) / 1000 + "秒!");
-                loginfoMap.put("endTime", endTime);
-                loginfoMap.put("message", "成功");
-                page++;
-                selectLimitData(page, pageSize, endPage, par_dt);
-            } else if (page < endPage) {
-                loginfoMap.put("endTime", System.currentTimeMillis());
-                loginfoMap.put("message", "当前页数据已处理!");
-                page++;
-                selectLimitData(page, pageSize, endPage, par_dt);
-            } else {
-                System.out.println("所有数据处理完成");
-                loginfoMap.put("endTime", System.currentTimeMillis());
-                loginfoMap.put("message", "所有数据处理完成!");
-            }
+            System.out.println("数据库查询page:" + page + ",pageSize:" + pageSize + "完成,用时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒!");
+//            TODO 要使用JDBC的方式去查询待处理表的数据,然后有个sql需要执行一下,筛选出结果表中不存在的数据,然后进行下一步处理。
         } catch (Exception e) {
             e.printStackTrace();
             loginfoMap.put("endTime", System.currentTimeMillis());
@@ -303,6 +248,7 @@ public class AreaService {
      * 批量插入数据到callback表
      */
     public void callBackAddrs() {
+//      TOOD jpa
         try {
             List<TAddressCallback> tAddressCallbacks = tAddressCallbackRepository.saveAll(ScheduledTasks.callBackDatas);
             if (tAddressCallbacks.size() > 0) {
@@ -313,7 +259,7 @@ 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);
@@ -331,7 +277,7 @@ public class AreaService {
     }
 
     /**
-     * 是否入callBack表判断
+     * 是否入callBack表判断
      *
      * @param addrStr
      */
@@ -432,7 +378,7 @@ public class AreaService {
         }
         return null;
     }*/
-    public List<yyskDmdzAddressStandardization> getAddressPoisByAddr(SplitAddress splitAddress) {
+    public List<YyskDmdzAddressStandardization> getAddressPoisByAddr(SplitAddress splitAddress) {
         if (splitAddress.getAddr().contains("号")) {
             splitAddress.setSearchAddr(splitAddress.getAddr().substring(0, splitAddress.getAddr().indexOf("号")));
         }
@@ -443,22 +389,54 @@ public class AreaService {
         if (splitAddress.getSearchAddr() == null) {
             splitAddress.setSearchAddr(splitAddress.getAddr());
         }
-        List<yyskDmdzAddressStandardization> list = null;
+        List<YyskDmdzAddressStandardization> list = null;
         if (StringUtils.hasText(splitAddress.getDistrict())) {
-            list = yyszAddressRepository.getAddressPoisByAddrAQX(splitAddress.getDistrict(), splitAddress.getSearchAddr());
+//          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 (splitAddress.getSearchAddr().contains(key)) {
+                        dmdzList = ScheduledTasks.allDmdzData.get(key);
+                    }
+                }
+            }
+            for (YyskDmdzAddressStandardization item : dmdzList) {
+                if (item.getCounty().contains(splitAddress.getDistrict())) {
+                    if (list.size() < 20) {
+                        list.add(item);
+                    } else {
+                        break;
+                    }
+                }
+            }
+//            TODO 数据库查询的方式
+//            list = yyszAddressRepository.getAddressPoisByAddrAQX(splitAddress.getDistrict(), splitAddress.getSearchAddr());
         }
         if (list == null) {
-            list = yyszAddressRepository.getAddressPoisByAddr(splitAddress.getSearchAddr());
+            list = getAddressPoiOnlyDB(splitAddress.getSearchAddr());
         }
-
         return list;
     }
 
-    public List<yyskDmdzAddressStandardization> getAddressPoiOnlyDB(String addr) {
-        return yyszAddressRepository.getAddressPoisByAddr(addr);
+    public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(String addr) {
+//      TODO 数据库查询逻辑调整为内存处理的方式
+        if (ScheduledTasks.allDmdzData.containsKey(addr)) {
+            return ScheduledTasks.allDmdzData.get(addr);
+        } else {
+            for (String key : ScheduledTasks.allDmdzData.keySet()) {
+                if (addr.contains(key)) {
+                    return ScheduledTasks.allDmdzData.get(key);
+                }
+            }
+            return null;
+        }
+//      TODO 数据库查询的方式
+//        return yyszAddressRepository.getAddressPoisByAddr(addr);
     }
 
-    public List<yyskDmdzAddressStandardization> getRecommendAddress(SplitAddress splitAddress) {
+    public List<YyskDmdzAddressStandardization> getRecommendAddress(SplitAddress splitAddress) {
         if (splitAddress.getCity() == null) {
             splitAddress.setCity("");
         }

+ 10 - 6
src/main/java/com/skyversation/poiaddr/service/impl/YyszAddressRepository.java

@@ -1,6 +1,8 @@
 package com.skyversation.poiaddr.service.impl;
 
-import com.skyversation.poiaddr.bean.yyskDmdzAddressStandardization;
+import com.skyversation.poiaddr.bean.YyskDmdzAddressStandardization;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -9,18 +11,18 @@ import javax.annotation.Resource;
 import java.util.List;
 
 @Resource
-public interface YyszAddressRepository extends JpaRepository<yyskDmdzAddressStandardization, String> {
+public interface YyszAddressRepository extends JpaRepository<YyskDmdzAddressStandardization, String> {
 
     // 执行自定义的SQL查询
     @Query(value = "SELECT * FROM yysk_dmdz_address_standardization WHERE sourceaddress ILIKE %:addr% or address ILIKE  %:addr% LIMIT 20", nativeQuery = true)
-    List<yyskDmdzAddressStandardization> getAddressPoisByAddr(@Param("addr") String addr);
+    List<YyskDmdzAddressStandardization> getAddressPoisByAddr(@Param("addr") String addr);
 
     // 执行自定义的SQL查询
     @Query(value = "SELECT * FROM yysk_dmdz_address_standardization WHERE county ILIKE %:adname% and ( sourceaddress ILIKE %:addr% or address ILIKE  %:addr% ) LIMIT 20", nativeQuery = true)
-    List<yyskDmdzAddressStandardization> getAddressPoisByAddrAQX(@Param("adname") String adname, @Param("addr") String addr);
+    List<YyskDmdzAddressStandardization> getAddressPoisByAddrAQX(@Param("adname") String adname, @Param("addr") String addr);
 
     @Query(value = "SELECT * FROM yysk_dmdz_address_standardization WHERE (city = :city or :city = '') and (county=:county or :county = '') and (town=:town or :town = '') and (community=:community or :community = '') LIMIT 20",nativeQuery = true)
-    List<yyskDmdzAddressStandardization> getAddressPoisByDivisions(@Param("city") String city, @Param("county") String county, @Param("town") String town, @Param("community") String community);
+    List<YyskDmdzAddressStandardization> getAddressPoisByDivisions(@Param("city") String city, @Param("county") String county, @Param("town") String town, @Param("community") String community);
 
     @Query(value = "SELECT COUNT(*) FROM yysk_dmdz_address_standardization", nativeQuery = true)
     long countAllUsersNative();
@@ -29,6 +31,8 @@ public interface YyszAddressRepository extends JpaRepository<yyskDmdzAddressStan
             "SELECT * FROM yysk_dmdz_address_standardization " +
             "JOIN input_point ip ON ST_DistanceSphere(t_yysz_address.location, ip.location) <= :radius " +
             "LIMIT 20;", nativeQuery = true)
-    List<yyskDmdzAddressStandardization> getNearbySearch(@Param("lat") double lat, @Param("lon") double lon, @Param("radius") int radius);
+    List<YyskDmdzAddressStandardization> getNearbySearch(@Param("lat") double lat, @Param("lon") double lon, @Param("radius") int radius);
 
+    @Query(value = "SELECT * FROM yysk_dmdz_address_standardization where oid >:oid order by oid limit :pageSize", nativeQuery = true)
+    List<YyskDmdzAddressStandardization> getAllByOidPage(@Param("oid") int oid,@Param("pageSize") int pageSize);
 }

+ 0 - 15
src/main/java/com/skyversation/poiaddr/service/impl/ZrrCallBackRepository.java

@@ -1,15 +0,0 @@
-package com.skyversation.poiaddr.service.impl;
-
-import com.skyversation.poiaddr.bean.ZrrCallback20250609;
-import com.skyversation.poiaddr.bean.yyskDmdzAddressStandardization;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-@Resource
-public interface ZrrCallBackRepository extends JpaRepository<ZrrCallback20250609, String> {
-
-}

+ 9 - 11
src/main/java/com/skyversation/poiaddr/util/AddressTools.java

@@ -894,6 +894,7 @@ public class AddressTools {
 
     /**
      * 只匹配数字
+     *
      * @param address
      * @param array
      * @param param
@@ -978,10 +979,11 @@ public class AddressTools {
 
     /**
      * 将数据库结果映射为AddressResult.ContentBean
+     *
      * @param json
      * @return
      */
-    public AddressResult.ContentBean addressToContentBean(SplitAddress splitAddress,JSONObject json){
+    public AddressResult.ContentBean addressToContentBean(SplitAddress splitAddress, JSONObject json) {
         AddressResult.ContentBean content = new AddressResult.ContentBean();
 
         content.setPname(json.getString("city"));
@@ -997,20 +999,16 @@ public class AddressTools {
         content.setSearchAddress(json.getString("searchAddress"));
         content.setDistance("");
         content.setName(json.getString("address"));
-        content.setLocation(json.get("lon") + "," +json.get("lat"));
+        content.setLocation(json.get("lon") + "," + json.get("lat"));
         content.setLat(json.getDoubleValue("lat"));
         content.setLon(json.getDoubleValue("lon"));
         content.setScore("rule_3");
 
-//        String province = json.getString("province")==null?"":json.getString("province");
-        String city = json.getString("city")==null?"":json.getString("city");
-        String county = json.getString("county")==null?"":json.getString("county");
-        String town = json.getString("town")==null?"":json.getString("town");
-        String community = json.getString("community")==null?"":json.getString("community");
-        String address = json.getString("sourceaddress")==null?"":json.getString("sourceaddress");
-        address = ShanghaiAddressSplitUtil.splitBestAddress(address).getAddr();
-//        content.setStandAddr(province+city+county+town+community+address);
-        content.setStandAddr(city+county+town+community+splitAddress.getAddr());
+        String city = json.getString("city") == null ? "" : json.getString("city");
+        String county = json.getString("county") == null ? "" : json.getString("county");
+        String town = json.getString("town") == null ? "" : json.getString("town");
+        String community = json.getString("community") == null ? "" : json.getString("community");
+        content.setStandAddr(city + county + town + community + splitAddress.getAddr());
         return content;
     }
 }

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

@@ -1,5 +1,6 @@
 package com.skyversation.poiaddr.util;
 
+import com.skyversation.poiaddr.service.AreaService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -92,6 +93,8 @@ public class ShanghaiAddressSplitUtil {
                                 .collect(Collectors.toList())
                 )));
         System.out.println("分词器初始化完成");
+        System.out.println("<<<<<<<<------开始缓存ScheduledTasks.allDmdzData对象");
+        AreaService.getInstance().getAllDmdzAddressDatas();
     }
 
     private static void initData(String district, String street, String community, String districtFullName, String streetFullName, String communityFullName,String districtCode, String streetCode, String communityCode, Map<String, threeLevelAddress> districtMap, Map<String, List<threeLevelAddress>> streetMap, Map<String, List<threeLevelAddress>> communityMap, Map<String, List<String>> districtToStreetMap, Map<String, List<String>> streetToCommunityMap) {

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

@@ -3,6 +3,7 @@ package com.skyversation.poiaddr.util.tasks;
 import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.bean.TAddressCallback;
+import com.skyversation.poiaddr.bean.YyskDmdzAddressStandardization;
 import com.skyversation.poiaddr.config.DbConnection;
 import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.service.impl.YyskAddressStandardizationServiceImpl;
@@ -17,10 +18,7 @@ import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Component
 public class ScheduledTasks {
@@ -40,9 +38,11 @@ public class ScheduledTasks {
      */
     public static Integer taskPageNum = 0;
 
+    /**
+     * 日志记录并会在程序结束时输出
+     */
     public static List<Map<String, Object>> logInfos = new ArrayList<>();
 
-    public static List<String> setAddress = new ArrayList<>();
 
     /**
      * 回流表处理状态
@@ -64,17 +64,19 @@ public class ScheduledTasks {
      * 找不到的数据更新状态
      * 一天执行一次,把callBack表中查询到的数据保存到地址库中,并删除callBack表有数据的记录
      */
-//    public static List<String> callBackAddrs = new ArrayList<>();
+//    暂存待入库的回流表数据
     public static List<TAddressCallback> callBackDatas = new ArrayList<>();
+//    TODO 缓存所有回流表中的地址,
     public static List<String> callBackAllErrorAddrs = new ArrayList<>();
-//    public static Integer callBackMaxId = 0;
+//      暂存的所有地址库中的数据
+    public static Map<String, List<YyskDmdzAddressStandardization>> allDmdzData = new HashMap<>();
 
     @Resource
     private YyskAddressStandardizationServiceImpl yyskAddressStandardizationService;
 
 
     /**
-     * 每1分钟请求一次数据库,防止jdbc断开链接
+     * 每5分钟请求一次数据库,防止jdbc断开链接
      */
     @Scheduled(cron = "15 */5 * * * *")
     public void setCallBackAddrs1() {
@@ -107,20 +109,6 @@ public class ScheduledTasks {
         }
     }
 
-    /**
-     * 每天凌晨0:30:00,运行定时任务
-     * 下一个接口要满足
-     * 查询回流表的某个分区的所有数据,并保存为xlsx,只保留查询地址字段,可以一个文件保存10W行数据
-     * 查询地址表的所有数据,直接放到缓存里面(可选)
-     */
-//    @Scheduled(cron = "0 30 0 * * *")
-    public void getCallBack() {
-        String in_tableName = "dws.dws_sjqdsjzx_zrr_hjjzxx_arrange";
-        String in_real_address = "roomdetailedaddress,hjdz";
-        String out_table_name = "kjyy_dev.zrr_callback_2020609";
-
-    }
-
     /**
      * (先不整)
      * 回流表数据查询并更新

+ 5 - 0
src/main/resources/application.properties

@@ -9,6 +9,11 @@ spring.datasource.username=${DMS_DB_ACCOUNT:postgres}
 spring.datasource.password=${DMS_DB_PASSWORD:SKYversation0816}
 spring.datasource.driver-class-name=org.postgresql.Driver
 
+#spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/postgres?stringtype=unspecified&u003fuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false&tinyInt1isBit=false&postgis=true
+#spring.datasource.username=postgres
+#spring.datasource.password=WE176852439@lmx
+#spring.datasource.driver-class-name=org.postgresql.Driver
+
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
 spring.datasource.hikari.maximum-pool-size=100