فهرست منبع

优化初始化逻辑,查询逻辑,接口返回参数和类型

DESKTOP-6LTVLN7\Liumouren 1 هفته پیش
والد
کامیت
5848c080a0

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

@@ -76,10 +76,13 @@ public class AddressQueryEngine {
             content.setCityname(splitAddress.getCity());
             content.setAdname(splitAddress.getStreet());
             content.setCommunity(splitAddress.getCommunity());
+            content.setScore("rule_0");
             addressResult.setData(new ArrayList<>());
             addressResult.getData().add(content);
+            return addressResult;
         } else if (splitAddress.getStatus() == 3) {// 不是地址
             addressResult.setMessage("非地址数据");
+            return addressResult;
         } else {
             AddressResult.ContentBean addrBean = new AddressResult.ContentBean();
             addrBean.setSearchAddress(addr);
@@ -100,7 +103,7 @@ public class AddressQueryEngine {
                 SplitAddress splitAddress1 = ShanghaiAddressSplitUtil.splitBestAddress(addr);
                 addressResult = new TransfromDataTool().dbResultToResult(splitAddress1, addr, pois);
                 addressResult.setAddrBean(addrBean);
-                if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
+                if (addressResult.getData() != null && addressResult.getData().size() > 0) {
                     getCjWgWgwByLoc(addressResult);
                     addressResult.setCode(AddressResultEnum.DB_SUCCESS);
                     addressResult.setMessage("成功");
@@ -142,10 +145,7 @@ public class AddressQueryEngine {
                 }*/
             }
         }
-
-        if (addressResult != null) {
-            addressResult.setMessage("失败");
-        }
+        addressResult.setMessage("失败");
         return addressResult;
     }
 
@@ -307,27 +307,7 @@ public class AddressQueryEngine {
                             }
                         }
                     }
-                    /*if (!StringUtils.hasText(content.getWgName())) {
-                        GeoJsonBean geoJsonBean = areaService.isInWGPolygon(content.getLon(), content.getLat());
-                        if (geoJsonBean != null && geoJsonBean.getProperties() != null) {
-                            content.setWgName(geoJsonBean.getProperties().getString("网格名称"));
-                            content.setWgCode(geoJsonBean.getProperties().getString("网格编码"));
-                        }
-                    }
-                    if (!StringUtils.hasText(content.getWgwCode())) {
-                        GeoJsonBean geoJsonBean = areaService.isInWGWPolygon(content.getLon(), content.getLat());
-                        if (geoJsonBean != null && geoJsonBean.getProperties() != null) {
-                            content.setWgwName(geoJsonBean.getProperties().getString("å¾®ç½\u0091_1"));
-                            content.setWgwCode(geoJsonBean.getProperties().getString("å¾®ç½\u0091æ ¼"));
-                        }
-                    }
-                    if (!StringUtils.hasText(content.getZhwgName())) {
-                        GeoJsonBean geoJsonBean = areaService.isInZHGWPolygon(content.getLon(), content.getLat());
-                        if (geoJsonBean != null && geoJsonBean.getProperties() != null) {
-                            content.setZhwgName(geoJsonBean.getProperties().getString("网格名称"));
-                            content.setZhwgCode(geoJsonBean.getProperties().getString("网格编码"));
-                        }
-                    }*/
+                    content.setStandAddr(content.getPname()+content.getCityname()+content.getAdname()+content.getSearchAddress());
                 } else {
                     System.err.println("没有经纬度参数,不能根据经纬度落点补充街镇等信息!");
                 }

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

@@ -24,6 +24,9 @@ public class Constant {
     private String[] towns = new String[]{};
 
     private String searchTableName;
+    private String pgiTable;
+    private String grTable;
+    private String rpTable;
 
     @Value("${app.search_server_id}")
     private String searchServerId;
@@ -47,11 +50,38 @@ public class Constant {
         return getInstance().area;
     }
 
-    public static void setSearchTableName(String searchTableName){
+    public static void setSearchTableName(String searchTableName) {
         getInstance().searchTableName = searchTableName;
     }
 
-    public static String getSearchTableName(){ return getInstance().searchTableName; }
+    public static String getSearchTableName() {
+        return getInstance().searchTableName;
+    }
+
+    public static void setPgiTable(String pgiTable) {
+        getInstance().pgiTable = pgiTable;
+    }
+
+    public static String getPgiTable() {
+        return getInstance().pgiTable;
+    }
+
+    public static void setGrTable(String grTable) {
+        getInstance().grTable = grTable;
+    }
+
+    public static String getGrTable() {
+        return getInstance().grTable;
+    }
+
+
+    public static void setRpTable(String rpTable) {
+        getInstance().rpTable = rpTable;
+    }
+
+    public static String getRpTable() {
+        return getInstance().rpTable;
+    }
 
     public static String getAMAP_CITY_CODE() {
         return "青浦".equals(getArea()) ? "310118" : "松江".equals(getArea()) ? "310117" : "310000";

+ 4 - 2
src/main/java/com/skyversation/poiaddr/bean/GovernanceResultsTable.java

@@ -9,7 +9,7 @@ import java.util.Date;
 
 /**
  * hive
- * 治理结果表
+ * 治理结果表(治理结果总表)
  */
 @Data
 @Builder
@@ -36,8 +36,10 @@ public class GovernanceResultsTable {
     private Float lat;
     //    批次号
     private String batch_number;
-    //    数据来源
+    //    打分
     private String data_sources;
+    //    数据来源表
+    private String data_table;
     //    入库日期
     private Date in_data;
 }

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

@@ -8,6 +8,8 @@ import lombok.NoArgsConstructor;
 /**
  * hive
  * 待治理中间表
+ * 能在结果总表中查询到的数据,要放到结果表中,同时修改中间表的治理状态为1
+ * 然后再查询中间表的状态为0的数据,通过pg中的地址库匹配结果,有返回结果的放到结果表和结果总表中,没有返回结果的放到回流表中。结果表中的数据不够的话也先这样!
  */
 @Data
 @Builder

+ 0 - 6
src/main/java/com/skyversation/poiaddr/bean/YyskDmdzAddressStandardization.java

@@ -205,10 +205,4 @@ public class YyskDmdzAddressStandardization implements Serializable {
 
     @Column(name = "address")
     private String address;
-
-    @Column(name = "tydz_jc", length = 50)
-    private String tydzJc;
-
-    @Column(name = "sj_clean_timestamp")
-    private Date sjCleanTimestamp;
 }

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

@@ -6,6 +6,7 @@ import com.skyversation.poiaddr.addquery.TransfromDataTool;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.bean.GeoJsonBean;
 import com.skyversation.poiaddr.bean.YyskDmdzAddressStandardization;
+import com.skyversation.poiaddr.config.DbConnection;
 import com.skyversation.poiaddr.entity.YyskAddressStandardization;
 import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.service.impl.YyskAddressStandardizationServiceImpl;
@@ -75,9 +76,9 @@ public class CorporateLibraryController {
 //          打分并返回最优结果
             addressResult = new TransfromDataTool().dbResultToResult(splitAddress, address, pois);
             if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
+                AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
                 addressResult.setCode(AddressResultEnum.DB_SUCCESS);
                 addressResult.setMessage("成功");
-                AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
             }
         }
 
@@ -96,7 +97,6 @@ public class CorporateLibraryController {
         if (!StringUtils.hasText(address)) {
             return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
-
         AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address);
         if (addressResult == null || addressResult.getCode() == null || !addressResult.getCode().equals(AddressResultEnum.DB_SUCCESS)) {
             AreaService.getInstance().callBackErrorAddr(address);
@@ -123,24 +123,9 @@ public class CorporateLibraryController {
         if (!StringUtils.hasText(address)) {
             return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
         }
-//      数据库查询
-        List<YyskDmdzAddressStandardization> list = AreaService.getInstance().getAddressPoiOnlyDB(address);
-        AddressResult addressResult = null;
-        if (list == null || list.size() < 1) {
-//          写入回流表
+        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(address);
+        if (addressResult == null || addressResult.getCode() == null || !addressResult.getCode().equals(AddressResultEnum.DB_SUCCESS)) {
             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);
-            }
         }
         if (addressResult == null || addressResult.getData() == null || addressResult.getData().get(0) == null) {
             return MessageManage.getInstance().getResultContent(Constant.NO_DATA, "无数据", "无数据");
@@ -151,12 +136,23 @@ public class CorporateLibraryController {
 
     /**
      * 处理待处理表接口
+     * 首先要使用JDBC写一个sql语句,验证同批次的地址不能重复,和null,重复或者为null的话直接返回(sql执行)
+     * 然后根据结果总表中的数据,全词匹配待查地址,包含的放到回匹表中,(sql执行)
+     * 不包含的要走V3接口逻辑,匹配到的数据分别放到结果总表和回匹表(走缓存)
+     * 没匹配到的数据放到回流表中。(自动处理)
+     * 回流表的后续处理逻辑暂定(应该是调用接口查询并标准化,然后插入到结果总表中)
+     *
      * @param request
      * @return
      */
     @RequestMapping(value = "/runCallBackTablev2")
     public String runCallBackTablev2(HttpServletRequest request) {
         try {
+            String sql = "select * from " + com.skyversation.poiaddr.addquery.Constant.getPgiTable() + " group by batch_number,pending_governance_address";
+            List<Map<String, Object>> sql1Datas = DbConnection.getInstance().runSqlStr(sql);
+            if (sql1Datas != null && sql1Datas.size() > 0) {
+                return "待处理表中同一批次有重复的地址数据:" + sql1Datas;
+            }
             String page = request.getParameter("page");
             String pageSize = request.getParameter("pageSize");
             AreaService.getInstance().selectLimitData(Integer.parseInt(page), Integer.parseInt(pageSize));

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

@@ -2,6 +2,7 @@ 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;
@@ -55,6 +56,15 @@ public class AreaService {
     @Value("${app.db.search_table_name}")
     private String searchTableName;
 
+    @Value("${app.db.pgi_table}")
+    private String pgi_table;
+
+    @Value("${app.db.gr_table}")
+    private String gr_table;
+
+    @Value("${app.db.rp_table}")
+    private String rp_table;
+
     WKTReader reader = new WKTReader(JTSFactoryFinder.getGeometryFactory());
     public List<GeoJsonBean> shAllAdministrativeDivisionPolygonList = new ArrayList<>();
     public List<GeoJsonBean> shAllToensPolygonList = new ArrayList<>();
@@ -79,10 +89,16 @@ public class AreaService {
         Constant.setTowns(town.split(","));
         Constant.setArea(area);
         Constant.setSearchTableName(searchTableName);
+        Constant.setGrTable(gr_table);
+        Constant.setPgiTable(pgi_table);
+        Constant.setRpTable(rp_table);
         System.out.println("<<<<<<<<------根据配置文件为AREA赋值:" + Constant.getArea());
         System.out.println("<<<<<<<<------当前AMAP_CITY_CODE:" + Constant.getAMAP_CITY_CODE());
+        System.out.println("<<<<<<<<------结果总表:" + Constant.getGrTable());
+        System.out.println("<<<<<<<<------中间表:" + Constant.getPgiTable());
+        System.out.println("<<<<<<<<------回匹表:" + Constant.getRpTable());
 //      TODO 网络连通性测试,可以请求一下测试的市中心地址
-        /*try {
+        try {
             System.out.println("电脑最大线程数:" + Runtime.getRuntime().availableProcessors());
             System.out.println("<<<<<<<<------开始网络连通性测试");
             long startTime = System.currentTimeMillis();
@@ -93,15 +109,6 @@ 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));*/
-//            System.out.println("<<<<<<<<------开始缓存待处理表对象");
-//            initScheduledTasksSetAddress();
-        } catch (Exception e) {
-            System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
         }
         //          查询callback表中最大的id和添加到callBackAllErrorAddrs列表中
         try {
@@ -195,6 +202,7 @@ public class AreaService {
 
     /**
      * JPA的形式加载所有地址信息到缓存
+     *
      * @param maxOid
      * @param pageSize
      */
@@ -203,14 +211,19 @@ public class AreaService {
         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 + "秒!");
+        System.out.println("当前OID" + maxOid + "查询完成,用时:" + (System.currentTimeMillis() - sTime) + "秒!");
         //      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())) {
+                if(item.getSourceaddress() != null&& StringUtils.hasText(item.getSourceaddress())){
+                    SplitAddress splitAddress2 = ShanghaiAddressSplitUtil.splitBestAddress(item.getSourceaddress());
+                    if(!splitAddress.getAddr().equals(splitAddress2.getAddr())){
+                        putAllDmdzData(splitAddress2.getAddr(), item);
+                    }
+                }
+            }else if (item.getSourceaddress() != null && StringUtils.hasText(item.getSourceaddress())) {
                 SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(item.getSourceaddress());
                 putAllDmdzData(splitAddress.getAddr(), item);
             }
@@ -218,7 +231,7 @@ public class AreaService {
                 maxOid = item.getOid();
             }
         }
-        System.out.println("当前OID" + maxOid + "查询处理完成,用时:" + (System.currentTimeMillis() - sTime) / 1000 + "秒!");
+        System.out.println("当前OID" + maxOid + "缓存处理完成,ScheduledTasks.allDmdzData.size():" + ScheduledTasks.allDmdzData.size() + ",用时:" + (System.currentTimeMillis() - sTime) / 1000 + "秒!");
         if (dataList.size() > 0) {
             getDmdzDataByPage(maxOid, pageSize);
         } else {
@@ -389,7 +402,7 @@ public class AreaService {
         if (splitAddress.getSearchAddr() == null) {
             splitAddress.setSearchAddr(splitAddress.getAddr());
         }
-        List<YyskDmdzAddressStandardization> list = null;
+        List<YyskDmdzAddressStandardization> list = new ArrayList<>();
         if (StringUtils.hasText(splitAddress.getDistrict())) {
 //          TODO 数据库查询逻辑调整为内存处理的方式
             List<YyskDmdzAddressStandardization> dmdzList = new ArrayList<>();
@@ -414,7 +427,7 @@ public class AreaService {
 //            TODO 数据库查询的方式
 //            list = yyszAddressRepository.getAddressPoisByAddrAQX(splitAddress.getDistrict(), splitAddress.getSearchAddr());
         }
-        if (list == null) {
+        if (list.size() == 0) {
             list = getAddressPoiOnlyDB(splitAddress.getSearchAddr());
         }
         return list;
@@ -422,16 +435,26 @@ public class AreaService {
 
     public List<YyskDmdzAddressStandardization> getAddressPoiOnlyDB(String addr) {
 //      TODO 数据库查询逻辑调整为内存处理的方式
+        List<YyskDmdzAddressStandardization> returnDatas = new ArrayList<>();
         if (ScheduledTasks.allDmdzData.containsKey(addr)) {
-            return ScheduledTasks.allDmdzData.get(addr);
+            returnDatas = ScheduledTasks.allDmdzData.get(addr);
         } else {
             for (String key : ScheduledTasks.allDmdzData.keySet()) {
-                if (addr.contains(key)) {
-                    return ScheduledTasks.allDmdzData.get(key);
+                if (key.contains(addr)) {
+                    returnDatas = ScheduledTasks.allDmdzData.get(key);
                 }
             }
-            return null;
+            if (returnDatas == null || returnDatas.size() == 0) {
+                SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
+                if (splitAddress.getAddr() != null && splitAddress.getAddr().length() > 0 && StringUtils.hasText(splitAddress.getAddr()))
+                    for (String key : ScheduledTasks.allDmdzData.keySet()) {
+                        if (key.contains(splitAddress.getAddr())) {
+                            returnDatas = ScheduledTasks.allDmdzData.get(key);
+                        }
+                    }
+            }
         }
+        return returnDatas;
 //      TODO 数据库查询的方式
 //        return yyszAddressRepository.getAddressPoisByAddr(addr);
     }

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

@@ -33,6 +33,6 @@ public interface YyszAddressRepository extends JpaRepository<YyskDmdzAddressStan
             "LIMIT 20;", nativeQuery = true)
     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)
+    @Query(value = "SELECT oid,sourceaddress,address,lon,lat 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 - 1
src/main/java/com/skyversation/poiaddr/util/AddressTools.java

@@ -985,7 +985,6 @@ public class AddressTools {
      */
     public AddressResult.ContentBean addressToContentBean(SplitAddress splitAddress, JSONObject json) {
         AddressResult.ContentBean content = new AddressResult.ContentBean();
-
         content.setPname(json.getString("city"));
         content.setCityname(json.getString("county"));
         content.setAdname(json.getString("town"));

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

@@ -117,7 +117,7 @@ public class ScheduledTasks {
      * 如果返回了正确的数据,入到地址库表中,并更新state为2
      * 否则更新状态为1
      */
-    @Scheduled(cron = "0 30 2 * * ?")
+//    @Scheduled(cron = "0 30 2 * * ?")
     public void dbdataCallBackTask() {
         System.out.println("开始回流表查询并更新任务!");
         if (callBackRunStatus != 1) {

+ 8 - 1
src/main/resources/application.properties

@@ -4,7 +4,7 @@ spring.application.name=poiAddr
 spring.servlet.multipart.max-file-size=300MB
 spring.servlet.multipart.max-request-size=300MB
 
-spring.datasource.url=jdbc:postgresql://${DMS_DB_IP:172.30.77.14}:${DMS_DB_PORT:5433}/${ADDRESS_DB_TABLE_NAME:postgres}?stringtype=unspecified&u003fuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false&tinyInt1isBit=false&postgis=true
+spring.datasource.url=jdbc:postgresql://${DMS_DB_IP:172.30.77.68}:${DMS_DB_PORT:5433}/${ADDRESS_DB_TABLE_NAME:postgres}?stringtype=unspecified&u003fuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false&tinyInt1isBit=false&postgis=true
 spring.datasource.username=${DMS_DB_ACCOUNT:postgres}
 spring.datasource.password=${DMS_DB_PASSWORD:SKYversation0816}
 spring.datasource.driver-class-name=org.postgresql.Driver
@@ -28,3 +28,10 @@ app.db.password=30DFBEABYi#5
 app.db.driver=io.transwarp.jdbc.QuarkDriver
 app.db.jdbc_url=jdbc:transwarp2://172.30.75.126:32265/kjyy_dev
 app.db.search_table_name=dwd.dwd_sjqdsjzypt_k_yysk_dmdz_address_standardization
+# \u4E2D\u95F4\u8868
+app.db.pgi_table=pending_governance_table
+# \u7ED3\u679C\u603B\u8868
+app.db.gr_table=governance_results_table
+# \u56DE\u5339\u8868
+app.db.rp_table=govern_results_table
+