Sfoglia il codice sorgente

调整回流表,写入方式和数据库。

DESKTOP-6LTVLN7\Liumouren 3 settimane fa
parent
commit
6fca6e8109

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

@@ -264,7 +264,8 @@ public class CorporateLibraryController {
             String page = request.getParameter("page");
             String endPage = request.getParameter("endPage");
             String pageSize = request.getParameter("pageSize");
-            AreaService.getInstance().selectLimitData(Integer.parseInt(page), Integer.parseInt(pageSize),Integer.parseInt(endPage));
+            String par_dt = request.getParameter("par_dt");
+            AreaService.getInstance().selectLimitData(Integer.parseInt(page), Integer.parseInt(pageSize),Integer.parseInt(endPage),par_dt);
         } catch (Exception e) {
             e.printStackTrace();
         } finally {

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

@@ -113,7 +113,13 @@ public class AreaService {
         }
         //          查询callback表中最大的id和添加到callBackAllErrorAddrs列表中
         try {
-            List<Map<String, Object>> callBackAddr = DbConnection.getInstance().runSqlStr("select * from t_address_callback");
+            List<TAddressCallback> tAddressCallbacks = tAddressCallbackRepository.findAll();
+            if (tAddressCallbacks.size() > 0) {
+                for (TAddressCallback tAddressCallback : tAddressCallbacks) {
+                    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());
@@ -122,7 +128,7 @@ public class AreaService {
                     }
                     ScheduledTasks.callBackAllErrorAddrs.add(item.get("address").toString());
                 }
-            }
+            }*/
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -189,15 +195,15 @@ public class AreaService {
         System.out.println("ScheduledTasks.setAddress初始化完成,共" + ScheduledTasks.setAddress.size() + "条,查询用时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒!");
     }
 
-    public void selectLimitData(int page, int pageSize, int endPage) {
+    public void selectLimitData(int page, int pageSize, int endPage, String par_dt) {
         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 order by ryid limit " + (page * pageSize) + "," + pageSize);
-            System.out.println("数据库查询page:" + page + ",pageSize:" + pageSize + "完成,用时:" + (System.currentTimeMillis() - startTime) / 1000 + "秒!");
+            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) {
@@ -273,12 +279,12 @@ public class AreaService {
                 loginfoMap.put("endTime", endTime);
                 loginfoMap.put("message", "成功");
                 page++;
-                selectLimitData(page, pageSize, endPage);
+                selectLimitData(page, pageSize, endPage, par_dt);
             } else if (page < endPage) {
                 loginfoMap.put("endTime", System.currentTimeMillis());
                 loginfoMap.put("message", "当前页数据已处理!");
                 page++;
-                selectLimitData(page, pageSize, endPage);
+                selectLimitData(page, pageSize, endPage, par_dt);
             } else {
                 System.out.println("所有数据处理完成");
                 loginfoMap.put("endTime", System.currentTimeMillis());
@@ -297,7 +303,18 @@ public class AreaService {
      * 批量插入数据到callback表
      */
     public void callBackAddrs() {
-        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 ");
+        try {
+            List<TAddressCallback> tAddressCallbacks = tAddressCallbackRepository.saveAll(ScheduledTasks.callBackDatas);
+            if (tAddressCallbacks.size() > 0) {
+                ScheduledTasks.callBackDatas.clear();
+                System.out.println("数据回流成功");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("数据回流异常:" + e);
+        }
+
+        /*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);
             ScheduledTasks.callBackMaxId++;
@@ -310,7 +327,7 @@ public class AreaService {
         } catch (Exception e) {
             e.printStackTrace();
             System.out.println("数据回流异常:" + e);
-        }
+        }*/
     }
 
     /**
@@ -327,7 +344,9 @@ public class AreaService {
         } else {
             //      查询回流列表中是否存在
             if (!ScheduledTasks.callBackAllErrorAddrs.contains(addrStr)) {
-                ScheduledTasks.callBackAddrs.add(addrStr);
+                TAddressCallback tAddressCallback = new TAddressCallback();
+                tAddressCallback.setSearchAddress(addrStr);
+                ScheduledTasks.callBackDatas.add(tAddressCallback);
                 ScheduledTasks.callBackAllErrorAddrs.add(addrStr);
                 System.out.println("回流成功,等待进一检查处理");
             } else {
@@ -459,6 +478,10 @@ public class AreaService {
         return tAddressCallbackRepository.getCallbackByTag(tag);
     }
 
+    public List<TAddressCallback> updateCallbackData(List<TAddressCallback> datas) {
+        return tAddressCallbackRepository.saveAll(datas);
+    }
+
     public List<Map<String, Object>> getUniScDatas() {
         try {
             return DbConnection.getInstance().runSqlStr("select * from songjiang_uni_sc_id_v1"); // where real_address is not null and street_town_name is null

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

@@ -1,11 +1,17 @@
 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.config.DbConnection;
 import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.service.impl.YyskAddressStandardizationServiceImpl;
+import com.skyversation.poiaddr.util.ShanghaiAddressSplitUtil;
+import com.skyversation.poiaddr.util.SplitAddress;
+import com.skyversation.poiaddr.util.status.AddressResultEnum;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
@@ -34,7 +40,7 @@ public class ScheduledTasks {
      */
     public static Integer taskPageNum = 0;
 
-    public static List<Map<String,Object>> logInfos = new ArrayList<>();
+    public static List<Map<String, Object>> logInfos = new ArrayList<>();
 
     public static List<String> setAddress = new ArrayList<>();
 
@@ -58,9 +64,10 @@ public class ScheduledTasks {
      * 找不到的数据更新状态
      * 一天执行一次,把callBack表中查询到的数据保存到地址库中,并删除callBack表有数据的记录
      */
-    public static List<String> callBackAddrs = new ArrayList<>();
+//    public static List<String> callBackAddrs = new ArrayList<>();
+    public static List<TAddressCallback> callBackDatas = new ArrayList<>();
     public static List<String> callBackAllErrorAddrs = new ArrayList<>();
-    public static Integer callBackMaxId = 0;
+//    public static Integer callBackMaxId = 0;
 
     @Resource
     private YyskAddressStandardizationServiceImpl yyskAddressStandardizationService;
@@ -85,7 +92,7 @@ public class ScheduledTasks {
      */
     @Scheduled(cron = "*/10 * * * * *")
     public void setCallBackAddrs() {
-        if (callBackAddrs.size() >= 1000) {
+        if (callBackDatas.size() >= 1000) {
             AreaService.getInstance().callBackAddrs();
         }
     }
@@ -95,20 +102,19 @@ public class ScheduledTasks {
      */
     @Scheduled(cron = "0 */10 * * * *")
     public void setCallBackAddrs10() {
-        if (callBackAddrs.size() > 0) {
+        if (callBackDatas.size() > 0) {
             AreaService.getInstance().callBackAddrs();
         }
     }
 
     /**
-     *  每天凌晨0:30:00,运行定时任务
-     *  下一个接口要满足
-     *  查询回流表的某个分区的所有数据,并保存为xlsx,只保留查询地址字段,可以一个文件保存10W行数据
-     *  查询地址表的所有数据,直接放到缓存里面(可选)
-     *
+     * 每天凌晨0:30:00,运行定时任务
+     * 下一个接口要满足
+     * 查询回流表的某个分区的所有数据,并保存为xlsx,只保留查询地址字段,可以一个文件保存10W行数据
+     * 查询地址表的所有数据,直接放到缓存里面(可选)
      */
 //    @Scheduled(cron = "0 30 0 * * *")
-    public void getCallBack(){
+    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";
@@ -126,11 +132,57 @@ public class ScheduledTasks {
     @Scheduled(cron = "0 30 2 * * ?")
     public void dbdataCallBackTask() {
         System.out.println("开始回流表查询并更新任务!");
-        if(callBackRunStatus != 1){
+        if (callBackRunStatus != 1) {
 //          首先查询数据列表
+            callBackRunStatus = 1;
             List<TAddressCallback> tAddressCallbacks = AreaService.getInstance().getCallbackDataByTag(0);
-            
-        }else{
+//          然后调用市中心接口
+            for (TAddressCallback item : tAddressCallbacks) {
+                try{
+                    if (item.getSearchAddress() != null && item.getSearchAddress().length() > 2) {
+                        String addr = item.getSearchAddress();
+                        AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName_nw(addr);
+                        AddressResult.ContentBean contentBean = new AddressResult.ContentBean();
+                        if (addressResult != null && addressResult.getCode() == AddressResultEnum.DB_SUCCESS && addressResult.getData() != null && addressResult.getData().size() > 0) {
+                            contentBean = addressResult.getData().get(0);
+                        } else {
+                            addressResult = AddressQueryEngine.getInstance().sj_szxSearchByName(addr, 3);
+                            if (addressResult != null && addressResult.getData() != null && addressResult.getData().size() > 0) {
+                                contentBean = addressResult.getData().get(0);
+                            }
+                        }
+                        if (contentBean != null && contentBean.getLon() != null) {
+                            AddressQueryEngine.getInstance().getCjWgWgwByLoc(addressResult);
+                            item.setLat(contentBean.getLat().toString());
+                            item.setLon(contentBean.getLon().toString());
+                            item.setPname(contentBean.getPname());
+                            item.setCounty(contentBean.getCityname());
+                            item.setStreetTownName(contentBean.getAdname());
+                            item.setCommunity(contentBean.getCommunity());
+                            item.setStandardAddress(contentBean.getStandAddr());
+                            SplitAddress splitAddress = ShanghaiAddressSplitUtil.splitBestAddress(addr);
+                            if (!StringUtils.hasText(contentBean.getPname())) {
+                                contentBean.setPname(splitAddress.getCity());
+                            }
+                            if (!StringUtils.hasText(contentBean.getPname())) {
+                                contentBean.setPname("上海市");
+                            }
+                            item.setCankaoAddress(contentBean.getAddress());
+                            item.setPname(contentBean.getPname());
+                            item.setStandardAddress(contentBean.getPname() + contentBean.getCityname() +
+                                    contentBean.getAdname() + contentBean.getCommunity() + splitAddress.getAddr());
+                            item.setStatusTag(2);
+                        }else{
+                            item.setStatusTag(1);
+                        }
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+            AreaService.getInstance().updateCallbackData(tAddressCallbacks);
+            callBackRunStatus = 0;
+        } else {
             System.out.println("上一次定时任务未结束!");
         }
     }