Преглед изворни кода

添加接口直接返回市中心关键字地名地址接口返回结果。

DESKTOP-6LTVLN7\Liumouren пре 3 месеци
родитељ
комит
9e34605c6a

+ 52 - 0
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -168,6 +168,58 @@ public class AddressQueryEngine {
         }
     }
 
+
+    public Object sj_szxSearchByName_to_server(String address) {
+//      鉴权
+        Map<String, String> headerMap = new HashMap<>();
+        String timestamp = System.currentTimeMillis() + "";
+        String appCode = "7unv4vbwqxnq4a7m9h";
+        String UUid = UUID.randomUUID().toString();
+        String appSecret = "w6tawvf4k3ck4ikij9";
+        headerMap.put("x-timestamp", timestamp);
+        headerMap.put("x-appcode", appCode);
+        headerMap.put("x-uuid", UUid);
+//      签名
+        headerMap.put("x-sign", getSigns(timestamp, appCode, UUid, appSecret));
+        JSONObject params = new JSONObject();
+        JSONArray requestJson = new JSONArray();
+        JSONObject paramObject = new JSONObject();
+        paramObject.put("name", "query");
+        paramObject.put("position", "QUERY");
+        paramObject.put("value", address);
+        requestJson.add(paramObject);
+//      判断是否是关键字版搜索服务
+        if (Constant.SJ_SZX_SEARCH_BY_NAME.contains("1742459783686")) {
+            JSONObject paramObject2 = new JSONObject();
+            paramObject2.put("name", "region");
+            paramObject2.put("position", "QUERY");
+            paramObject2.put("value", Constant.getAMAP_CITY_CODE());
+            requestJson.add(paramObject2);
+            JSONObject paramObject3 = new JSONObject();
+            paramObject3.put("name", "page_size");
+            paramObject3.put("position", "QUERY");
+            paramObject3.put("value", "10");
+            requestJson.add(paramObject3);
+        }
+        params.put("requestJson", requestJson);
+//      发起请求
+        ResponseEntity response = AddressNetTools.getInstance().requestGetOrPost(HttpMethod.POST, Constant.SJ_SZX_SEARCH_BY_NAME, params, headerMap, 1);
+        if (response != null && response.hasBody()) {
+            String body = response.getBody() + "";
+            if (!StringUtils.hasText(body))
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
+            try {
+                return JSONObject.parseObject(body);
+            } catch (Exception e) {
+                System.err.println("请求地址:" + address + ";返回结果:" + body + ";处理异常:" + e);
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
+            }
+        } else {
+            System.out.println("地址[" + address + "]未查询到数据!");
+            return null;
+        }
+    }
+
     /***
      * 高德普通地名搜索
      * @param address

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

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

+ 7 - 3
src/main/java/com/skyversation/poiaddr/addquery/TransfromDataTool.java

@@ -126,18 +126,22 @@ public class TransfromDataTool {
             if (!jsonObject.getString("address").isEmpty()) {
                 addressList.add(jsonObject.getString("address"));
             }
+//          从返回地址信息里面判断区,首先得到上海市所有的区,然后遍历区名
+            for (String area : Constant.allAreas) {
+                if (content.getAddress().contains(area)) {
+                    content.setAdname(area);
+                    break;
+                }
+            }
             if (!jsonObject.getString("std_address").isEmpty()) {
                 addressList.add(jsonObject.getString("std_address"));
             }
             content.setName(jsonObject.getString("name"));
             double[] points = new double[]{jsonObject.getJSONObject("location").getDouble("lng"),
                     jsonObject.getJSONObject("location").getDouble("lat")};
-//            content.setLocation(points[0] + "," + points[1]);
             content.setLon(points[1]);
             content.setLat(points[0]);
             if (jsonObject.get("point_x") != null && jsonObject.get("point_y") != null) {
-//                content.setLat(jsonObject.getDouble("point_x"));
-//                content.setLon(jsonObject.getDouble("point_y"));
                 content.setLocation(jsonObject.getDouble("point_x") + "," + jsonObject.getDouble("point_y"));
             }
             if (jsonObject.containsKey("ext_data")) {

+ 15 - 1
src/main/java/com/skyversation/poiaddr/controller/PoiAddressController.java

@@ -114,12 +114,26 @@ public class PoiAddressController {
                 if (contentBean.getAddress().contains("青浦区") && !Objects.equals(level, "异常") && (level.contains("rule_") || Float.parseFloat(level) > 2.0)) {
                     JSONObject jsonObjectItem = new JSONObject();
                     jsonObjectItem.put("name", contentBean.getSearchAddress());
-                    jsonObjectItem.put("address", contentBean.getLocation());
+                    jsonObjectItem.put("address", contentBean.getAddress());
                     jsonObjectItem.put("type", "diy");
+                    jsonObjectItem.put("level", level);
                     jsonObjectItem.put("location", contentBean.getLat() + "," + contentBean.getLon());
+                    returnDatas.put(contentBean.getSearchAddress(), jsonObjectItem);
                 }
             }
         }
         return returnDatas;
     }
+
+    /**
+     * 直接输地址并返回结果
+     *
+     * @param address
+     * @return
+     * @throws SQLException
+     */
+    @GetMapping(value = "/searchByAddrStrToServer")
+    public Object searchByAddrStrToServer(@RequestParam(name = "address") String address) {
+        return AddressQueryEngine.getInstance().sj_szxSearchByName_to_server(address);
+    }
 }

+ 0 - 28
src/main/java/com/skyversation/poiaddr/util/ExcelReaderUtils.java

@@ -325,34 +325,6 @@ public class ExcelReaderUtils {
         return fileList;
     }
 
-    public static boolean isOtherDistrictThanQingpu(String address) {
-        // 将地址字符串转换为小写,以便进行不区分大小写的比较
-        String lowerCaseAddress = address.toLowerCase();
-        // 检查地址是否包含 "青浦区" 字样,如果不包含,则可能是其他区
-        // 列出上海市的其他区(已补充完整)
-        String[] otherDistricts = {"黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "金山区", ("青浦".equals(Constant.getArea()) ? "松江区" : "青浦区"), "奉贤区", "崇明区", "浦东新区"};
-        for (String district : otherDistricts) {
-            if (lowerCaseAddress.contains(district.toLowerCase())) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-
-    public static boolean isOtherDistrictThanSongJiang(String address) {
-        // 将地址字符串转换为小写,以便进行不区分大小写的比较
-        String lowerCaseAddress = address.toLowerCase();
-        // 检查地址是否包含 "青浦区" 字样,如果不包含,则可能是其他区
-        // 列出上海市的其他区(已补充完整)
-        String[] otherDistricts = {"黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "金山区", "青浦区", "奉贤区", "崇明区", "浦东新区"};
-        for (String district : otherDistricts) {
-            if (lowerCaseAddress.contains(district.toLowerCase())) {
-                return false;
-            }
-        }
-        return true;
-    }
     /*public static void main(String[] args) {
 //        根据Map字段修改表头
 //        ModifyExcelHeaderJExcelApi();

+ 12 - 8
src/main/java/com/skyversation/poiaddr/util/SerializationUtils.java

@@ -4,6 +4,7 @@ import com.skyversation.poiaddr.addquery.AddressQueryEngine;
 import com.skyversation.poiaddr.entity.SjArrDzbzhSjWcbryDzxx;
 
 import java.io.*;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -46,9 +47,9 @@ public class SerializationUtils {
     }
 
     public static void main(String[] args) throws IOException {
-        test();
+//        test();
 //        ruleTest("上海市松江区泗泾镇江川南路25弄19号302室", "上海市松江区洞泾镇砖桥居民委员会江川南路25弄19号302室");
-//        replaceResidentialCommitteeToNull();
+        replaceResidentialCommitteeToNull();
         /*List<SjArrDzbzhSjWcbryDzxx> listData = deserialize("output/testDataBase_all.ser");
 //      将序列化的文件转储为xlsx文件
         ExcelReaderUtils.writeClassToExcel(listData, "output/allData.xlsx");*/
@@ -139,17 +140,20 @@ public class SerializationUtils {
      */
     public static void replaceResidentialCommitteeToNull() {
         try {
-            List<Map<String, Object>> fileDatas = ExcelReaderUtils.readExcel("output/yysk_new_wcb_address_standardization2.xlsx");
+            List<Map<String, Object>> fileDatas = ExcelReaderUtils.readExcel("output/yysk_new_wcb_address_standardization3.xlsx");
+            List<Map<String,Object>> outputDatas = new ArrayList<>();
             for (Map<String, Object> item : fileDatas) {
-                if (item.get("return_address") != null && !item.get("return_address").toString().isEmpty()) {
+                if(!AddressTools.isOtherDistrictThanSongJiang2(item.get("address").toString())){
+                    outputDatas.add(item);
+                }else if (item.get("street_town") != null && !item.get("street_town").toString().isEmpty()) {
                     String address = item.get("address").toString();
-                    String returnAddress = item.get("return_address").toString();
-                    if(ruleTest(address,returnAddress)){
-                        item.put("match_level","rule_4");
+                    String streetTown = item.get("street_town").toString();
+                    if(address.contains("镇") && !address.contains(streetTown)){
+                        outputDatas.add(item);
                     }
                 }
             }
-            ExcelReaderUtils.writeToExcel(fileDatas, "output/yysk_new_wcb_address_standardization3.xlsx");
+            ExcelReaderUtils.writeToExcel(outputDatas, "output/yysk_new_wcb_address_standardization4.xlsx");
         } catch (Exception e) {
             e.printStackTrace();
         }