Browse Source

添加接口支持本地处理文件有效数据入库;
AMAP_KEY切换为旧值

DESKTOP-6LTVLN7\Liumouren 2 tháng trước cách đây
mục cha
commit
5e4a7382b9

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

@@ -78,8 +78,8 @@ public class Constant {
     public static String AMAP_SEARCH_TYPES = "010000|020000|030000|040000|050000|060000|070000|080000|090000" +
             "|100000|110000|120000|130000|140000|150000|160000|170000|180000|190000|200000|220000|970000|980000|990000";
 
-    public static String AMAP_KEY = "38511ab3763ab97a10bd68ad8210933d";
-//    public static String AMAP_KEY = "161e0c673807a9586ba5a115da2a0112";
+//    public static String AMAP_KEY = "38511ab3763ab97a10bd68ad8210933d";
+    public static String AMAP_KEY = "161e0c673807a9586ba5a115da2a0112";
 
     //    oauth和dms搭建服务器地址
     public static String ServerBaseUrl = "http://121.43.55.7:";

+ 17 - 0
src/main/java/com/skyversation/poiaddr/controller/CorporateLibraryController.java

@@ -147,4 +147,21 @@ public class CorporateLibraryController {
         return AddressQueryEngine.getInstance().gdV3SearchByName(address);
     }
 
+    /**
+     * 首先得到所有的文件列表
+     * 遍历xlsx
+     * 判断level为rule_2\rule_4\>1.8的数据
+     * 还要将这些数据的经纬度由sh2000转成高德坐标系
+     * 把这些数据一起保存到pg数据库中
+     *
+     * @return
+     */
+    @PostMapping(value = "/saveFileDataToPg")
+    public Object saveFileDataToPg(@RequestParam(name = "fileRootPath") String fileRootPath, @RequestParam(name = "startFileIndex") Integer startFileIndex, @RequestParam(name = "endFileIndex") Integer endFileIndex, @RequestParam(name = "sort") Integer sort) {
+        // 记录程序开始时间
+        long startTime = System.currentTimeMillis();
+        yyskAddressStandardizationService.readFileToPg(fileRootPath, startFileIndex, endFileIndex, sort);
+        long endTime = System.currentTimeMillis();
+        return "处理完成!用时" + (endTime - startTime) / 1000 + "秒!";
+    }
 }

+ 14 - 2
src/main/java/com/skyversation/poiaddr/entity/AmapAddressV3.java

@@ -13,7 +13,7 @@ import java.util.Date;
 /**
  * @Description  
  * @Author  LiuMengxiang
- * @Date 2025-04-10 16:15:14 
+ * @Date 2025-04-14 11:16:31 
  */
 
 @AllArgsConstructor
@@ -23,7 +23,7 @@ import java.util.Date;
 @Table ( name ="amap_address_v3" , schema = "")
 public class AmapAddressV3  implements Serializable {
 
-	private static final long serialVersionUID =  7657028066806980374L;
+	private static final long serialVersionUID =  7702337652023788047L;
 
 	@Id
    	@Column(name = "id" )
@@ -91,4 +91,16 @@ public class AmapAddressV3  implements Serializable {
 
    	@Column(name = "create_time" )
 	private Date createTime;
+
+   	@Column(name = "street_tTown" )
+	private String streetTTown;
+
+   	@Column(name = "residential_committee" )
+	private String residentialCommittee;
+
+   	@Column(name = "lon" )
+	private String lon;
+
+   	@Column(name = "lat" )
+	private String lat;
 }

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

@@ -94,9 +94,9 @@ public class AreaService {
             List<AmapAddressV3> amapAddressV3List = amapAddressV3Service.getAllData();
             long endTime = System.currentTimeMillis();
             System.out.println(">>>>>>>>------数据库连通性测试完成!用时" + (endTime - startTime) / 1000 + "秒!结果:" + amapAddressV3List.size());
-            System.out.println("<<<<<<<<------开始执行任务!!!");
-            yyskAddressStandardizationService.searchLoadFileData("D:\\1.项目\\5. 松江项目\\4. 地名地址\\地名地址库治理数据\\原始数据\\",
-                    0, 10000, 1);
+//            System.out.println("<<<<<<<<------开始执行任务!!!");
+//            yyskAddressStandardizationService.searchLoadFileData("D:\\1.项目\\5. 松江项目\\4. 地名地址\\地名地址库治理数据\\原始数据\\",
+//                    0, 10000, 1);
         } catch (Exception e) {
             System.err.println(">>>>>>>>------数据库连通性测试结果:" + e);
         }

+ 159 - 79
src/main/java/com/skyversation/poiaddr/service/impl/YyskAddressStandardizationServiceImpl.java

@@ -4,9 +4,12 @@ import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.addquery.Constant;
 import com.skyversation.poiaddr.bean.AddressResult;
 import com.skyversation.poiaddr.config.DbConnection;
+import com.skyversation.poiaddr.entity.AmapAddressV3;
 import com.skyversation.poiaddr.entity.YyskAddressStandardization;
+import com.skyversation.poiaddr.service.AreaService;
 import com.skyversation.poiaddr.util.AddressMatcher;
 import com.skyversation.poiaddr.util.AddressTools;
+import com.skyversation.poiaddr.util.Coordinate;
 import com.skyversation.poiaddr.util.ExcelReaderUtils;
 import org.springframework.stereotype.Service;
 
@@ -227,6 +230,83 @@ public class YyskAddressStandardizationServiceImpl {
         }
     }
 
+    public void readFileToPg(String fileRootPath, Integer startFileIndex, Integer endFileIndex, Integer sort) {
+        System.out.println("<<<<<<<<------readFileToPg{fileIndex:" + startFileIndex + "}");
+        long startTime = System.currentTimeMillis();
+        List<YyskAddressStandardization> listData = new ArrayList<>();
+        try {
+            List<Map<String, Object>> fileData = ExcelReaderUtils.readExcel(fileRootPath + startFileIndex + ".xlsx");
+            for (Map<String, Object> item : fileData) {
+                YyskAddressStandardization yyskAddressStandardization = new YyskAddressStandardization();
+                String matchLevel = item.get("matchLevel").toString();
+                if (matchLevel != null && !matchLevel.isEmpty() && !"异常".equals(matchLevel) && !"rule_0".equals(matchLevel) && item.get("lat") != null && item.get("lon") != null) {
+                    if ("rule_2".equals(matchLevel) || "rule_4".equals(matchLevel) || Float.parseFloat(matchLevel) > 1.8) {
+                        yyskAddressStandardization.setAddress(item.get("address").toString());
+                        yyskAddressStandardization.setReturnAddress(item.get("returnAddress").toString());
+                        yyskAddressStandardization.setStandardAddress(item.get("standardAddress").toString());
+                        yyskAddressStandardization.setProvinces(item.get("provinces").toString());
+                        yyskAddressStandardization.setMarket(item.get("market").toString());
+                        yyskAddressStandardization.setDistinguish(item.get("distinguish").toString());
+                        yyskAddressStandardization.setStreetTown(item.get("streetTown").toString());
+                        yyskAddressStandardization.setResidentialCommittee(item.get("residentialCommittee").toString());
+                        yyskAddressStandardization.setLon(item.get("lat").toString());
+                        yyskAddressStandardization.setLat(item.get("lon").toString());
+                        listData.add(yyskAddressStandardization);
+                    }
+                }
+            }
+            fileData.clear();
+        } catch (Exception e) {
+            listData = null;
+        }
+        if (listData != null && listData.size() > 0) {
+            List<AmapAddressV3> amapAddressV3List = new ArrayList<>();
+            for (YyskAddressStandardization yyskAddressStandardization : listData) {
+                AmapAddressV3 amapAddressV3 = new AmapAddressV3();
+                amapAddressV3.setId(UUID.randomUUID().toString());
+                amapAddressV3.setAddress(yyskAddressStandardization.getReturnAddress());
+                amapAddressV3.setLon(yyskAddressStandardization.getLon());
+                amapAddressV3.setLat(yyskAddressStandardization.getLat());
+                amapAddressV3.setPname(yyskAddressStandardization.getProvinces());
+                amapAddressV3.setCityname(yyskAddressStandardization.getMarket());
+                amapAddressV3.setAdname(yyskAddressStandardization.getDistinguish());
+                amapAddressV3.setStreetTTown(yyskAddressStandardization.getStreetTown());
+                amapAddressV3.setResidentialCommittee(yyskAddressStandardization.getResidentialCommittee());
+//              上海2000转高德
+                double[] gcjLocation = Coordinate.shcj_to_gcj02(Double.parseDouble(yyskAddressStandardization.getLon()), Double.parseDouble(yyskAddressStandardization.getLat()));
+                amapAddressV3.setLocation(gcjLocation[0] + "," + gcjLocation[1]);
+                amapAddressV3.setCreateTime(new Date());
+                amapAddressV3List.add(amapAddressV3);
+
+                AmapAddressV3 amapAddressV32 = new AmapAddressV3();
+                amapAddressV32.setId(UUID.randomUUID().toString());
+                amapAddressV32.setAddress(yyskAddressStandardization.getStandardAddress());
+                amapAddressV32.setLon(amapAddressV3.getLon());
+                amapAddressV32.setLat(amapAddressV3.getLat());
+                amapAddressV32.setPname(amapAddressV3.getPname());
+                amapAddressV32.setCityname(amapAddressV3.getCityname());
+                amapAddressV32.setAdname(amapAddressV3.getAdname());
+                amapAddressV32.setStreetTTown(amapAddressV3.getStreetTTown());
+                amapAddressV32.setResidentialCommittee(amapAddressV3.getResidentialCommittee());
+                amapAddressV32.setLocation(amapAddressV3.getLocation());
+                amapAddressV32.setCreateTime(new Date());
+                amapAddressV3List.add(amapAddressV32);
+            }
+            //                写入到数据库中
+            AreaService.getInstance().saveAmapAddressV3(amapAddressV3List);
+            long endTime = System.currentTimeMillis();
+            System.out.println("处理单批次用时" + (endTime - startTime) / 1000 + "秒!");
+            amapAddressV3List.clear();
+        } else {
+            System.out.println("该文件无有效数据!");
+        }
+        if (startFileIndex + sort != endFileIndex) {
+            startFileIndex += sort;
+            readFileToPg(fileRootPath, startFileIndex, endFileIndex, sort);
+        } else {
+            System.out.println("<<<<<<<<------任务处理完成!");
+        }
+    }
 
     public void searchLoadFileData(String fileRootPath, Integer startFileIndex, Integer endFileIndex, Integer sort) {
 
@@ -257,7 +337,7 @@ public class YyskAddressStandardizationServiceImpl {
 
     }
 
-    public void startMutilExecutor(int startFileIndex, String filePath, String outPath){
+    public void startMutilExecutor(int startFileIndex, String filePath, String outPath) {
         System.out.println("<<<<<<<<------searchLoadFileData{fileIndex:" + startFileIndex + "}");
         long startTime = System.currentTimeMillis();
         List<YyskAddressStandardization> listData = new ArrayList<>();
@@ -299,101 +379,101 @@ public class YyskAddressStandardizationServiceImpl {
         int total = listData.size();
         for (YyskAddressStandardization item : listData) {
             System.out.println("<<<---- 开始查询第: " + index + " 条数据。。。共:" + total + "条数据--->>>>>>>");
-            index ++;
+            index++;
 //            futures.add(executorService.submit(() -> {
-                List<String> addrList = new ArrayList<>();
-                String[] addr = AddressMatcher.matchProvinceAndCity(item.getAddress());
-                if (addr != null && !addr[0].contains("上海")) {
+            List<String> addrList = new ArrayList<>();
+            String[] addr = AddressMatcher.matchProvinceAndCity(item.getAddress());
+            if (addr != null && !addr[0].contains("上海")) {
 //                  匹配全国省名
-                    item.setProvinces(addr[0]);
+                item.setProvinces(addr[0]);
 //                  遍历全国城市名称匹配搜索地址市名
-                    item.setMarket(addr[1]);
-                    item.setMatchLevel("rule_0");
-                } else {
-                    addrList.add(item.getAddress());
-                    String[] strs = AddressTools.parseAddressJZ(item.getAddress());
-                    if (strs != null) {
-                        item.setProvinces(strs[0] == null ? "" : strs[0]);
-                        item.setMarket(strs[0] == null ? "" : strs[0]);
-                        item.setDistinguish(strs[1] == null ? "" : strs[1]);
-                        item.setStreetTown(strs[2] == null ? "" : strs[2]);
-                    }
+                item.setMarket(addr[1]);
+                item.setMatchLevel("rule_0");
+            } else {
+                addrList.add(item.getAddress());
+                String[] strs = AddressTools.parseAddressJZ(item.getAddress());
+                if (strs != null) {
+                    item.setProvinces(strs[0] == null ? "" : strs[0]);
+                    item.setMarket(strs[0] == null ? "" : strs[0]);
+                    item.setDistinguish(strs[1] == null ? "" : strs[1]);
+                    item.setStreetTown(strs[2] == null ? "" : strs[2]);
                 }
-                if (addrList.size() > 0) {
-                    //  TODO 开始查询
-                    AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName(addrList);
-                    System.out.println("<<<---- 第: " + index + " 条数据返回数据,数据为:!!!" + addressResult.getMessage() + "   ----->>>>>");
-                    if (addressResult == null || addressResult.getData() == null || addressResult.getData().size() < 1) {
-                        item.setMatchLevel("异常");
-                        item.setReturnAddress("未匹配到符合规则的结果");
-                    } else {
-                        try {
-                            for (AddressResult.ContentBean contentBean : addressResult.getData()) {
-                                String resultAddrKey = contentBean.getAddress();
-                                if (resultAddrKey != null && contentBean.getLon() != null && contentBean.getLat() != null && AddressTools.isOtherDistrictThanSongJiang2(resultAddrKey)) {
+            }
+            if (addrList.size() > 0) {
+                //  TODO 开始查询
+                AddressResult addressResult = AddressQueryEngine.getInstance().commonSearchByName(addrList);
+                System.out.println("<<<---- 第: " + index + " 条数据返回数据,数据为:!!!" + addressResult.getMessage() + "   ----->>>>>");
+                if (addressResult == null || addressResult.getData() == null || addressResult.getData().size() < 1) {
+                    item.setMatchLevel("异常");
+                    item.setReturnAddress("未匹配到符合规则的结果");
+                } else {
+                    try {
+                        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());
+                                resultAddrKey = AddressTools.getInstance().deleteStr(contentBean.getAddress());
 //                                  遍历全国省份名称得到省名
-                                    item.setProvinces(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
+                                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) {
-                                        item.setStreetTown(contentBean.getTownJson().getString("name"));
-                                    } else {
-                                        item.setStreetTown("");
-                                    }
+                                if (contentBean.getAdname() != null && !contentBean.getAdname().isEmpty()) {
+                                    item.setStreetTown(contentBean.getAdname());
+                                } else if (contentBean.getTownJson() != null && contentBean.getTownJson().getString("name") != null) {
+                                    item.setStreetTown(contentBean.getTownJson().getString("name"));
+                                } else {
+                                    item.setStreetTown("");
+                                }
 //                                  写入上海市市名
-                                    item.setMarket(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
+                                item.setMarket(AddressTools.isOtherDistrictThanShangHai(resultAddrKey));
 //                                  写入区名
-                                    if (contentBean.getCityname() != null && !contentBean.getCityname().isEmpty()) {
-                                        item.setDistinguish(contentBean.getCityname());
-                                    } else if (contentBean.getAdJson() != null && contentBean.getAdJson().getString("name") != null) {
-                                        item.setDistinguish(contentBean.getAdJson().getString("name"));
-                                    } else {
-                                        item.setDistinguish("");
-                                    }
+                                if (contentBean.getCityname() != null && !contentBean.getCityname().isEmpty()) {
+                                    item.setDistinguish(contentBean.getCityname());
+                                } 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]);
-                                        item.setLon(latLonStr[1]);
-                                    }
-                                    item.setReturnAddress(resultAddrKey);
-                                    item.setMatchLevel(contentBean.getScore());
+                                if (contentBean.getLocation() != null && !contentBean.getLocation().trim().isEmpty()) {
+                                    String[] latLonStr = contentBean.getLocation().split(",");
+                                    item.setLat(latLonStr[0]);
+                                    item.setLon(latLonStr[1]);
+                                }
+                                item.setReturnAddress(resultAddrKey);
+                                item.setMatchLevel(contentBean.getScore());
 //                                  判断并写入居委
-                                    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("");
-                                    }
-                                    String oldAddress = "";
-                                    try{
-                                        oldAddress = Objects.requireNonNull(AddressTools.parseAddressJZ(contentBean.getSearchAddress()))[3].
-                                                replaceAll(item.getMarket().equals("[]") ? "" : item.getMarket(), "").
-                                                replaceAll(item.getDistinguish().equals("[]") ? "" : item.getDistinguish(), "").
-                                                replaceAll(item.getStreetTown().equals("[]") ? "" : item.getStreetTown(), "").
-                                                replaceAll(item.getResidentialCommittee().equals("[]") ? "" : item.getResidentialCommittee(), "");
-                                    } catch (Exception e){
-                                        e.printStackTrace();
-                                    }
-                                    item.setStandardAddress(item.getMarket() + item.getDistinguish() + item.getStreetTown() + AddressQueryEngine.townReplace_ct(oldAddress));
-                                    break;
+                                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.setMatchLevel("异常");
-                                    item.setReturnAddress("结果处理异常");
+                                    item.setResidentialCommittee("");
+                                }
+                                String oldAddress = "";
+                                try {
+                                    oldAddress = Objects.requireNonNull(AddressTools.parseAddressJZ(contentBean.getSearchAddress()))[3].
+                                            replaceAll(item.getMarket().equals("[]") ? "" : item.getMarket(), "").
+                                            replaceAll(item.getDistinguish().equals("[]") ? "" : item.getDistinguish(), "").
+                                            replaceAll(item.getStreetTown().equals("[]") ? "" : item.getStreetTown(), "").
+                                            replaceAll(item.getResidentialCommittee().equals("[]") ? "" : item.getResidentialCommittee(), "");
+                                } catch (Exception e) {
+                                    e.printStackTrace();
                                 }
+                                item.setStandardAddress(item.getMarket() + item.getDistinguish() + item.getStreetTown() + AddressQueryEngine.townReplace_ct(oldAddress));
+                                break;
+                            } else {
+                                item.setMatchLevel("异常");
+                                item.setReturnAddress("结果处理异常");
                             }
-                        } catch (Exception e) {
-                            item.setMatchLevel("异常");
-                            e.printStackTrace();
-                            System.err.println("查询结果处理异常:" + e);
                         }
+                    } catch (Exception e) {
+                        item.setMatchLevel("异常");
+                        e.printStackTrace();
+                        System.err.println("查询结果处理异常:" + e);
                     }
                 }
-                item.setUpdateTime(new Date());
+            }
+            item.setUpdateTime(new Date());
 //            }));
         }