فهرست منبع

优化搜索逻辑

zhanghan 2 روز پیش
والد
کامیت
337c83391c

+ 97 - 103
src/main/java/com/skyversation/poiaddr/addquery/AddressQueryEngine.java

@@ -27,7 +27,7 @@ public class AddressQueryEngine {
     @Value("${app.net-type}")
     private String netType=null;
     @Value("${app.yysz-address-service}")
-    private String yyszAddressService=null;
+    private String yyszAddressService="http://121.43.55.7:10013/address";
     @Resource
     private DataCallBackService dataCallBack;
     @PostConstruct
@@ -67,20 +67,24 @@ public class AddressQueryEngine {
         if (addrs == null || addrs.size() < 1) {
             return null;
         }
-        //先走yysz_address
-        AddressResult yyszAddressResult =null;
-        yyszAddressResult = yyszMultiSearch(addrs, level );
-        if (yyszAddressResult != null){
-            return yyszAddressResult;
-        }else {
-            System.out.println("yysz_address地址" + addrs + "未查询到数据!");
-        }
+        // TODO 互联网版本,先走自己搜索,政务网版本,先走武大和四中心
+//        //先走yysz_address
+//        AddressResult yyszAddressResult =null;
+//        yyszAddressResult = yyszMultiSearch(addrs, level );
+//        if (yyszAddressResult != null && yyszAddressResult.getData() != null){
+//            return yyszAddressResult;
+//        }else {
+//            System.out.println("yysz_address地址" + addrs + "未查询到数据!");
+//        }
+
+
         if (!Objects.equals(netType, "internet")) {
             //武大
             if (Objects.equals(netType, "qingpu")) {
                 AddressResult wdAddressResult = wdMultiSearch(addrs, level);
                 if (wdAddressResult != null) {
                     dataCallBack.successDataCallBack(wdAddressResult);
+                    System.out.println("武大吉奥地址::" + addrs + "查询到数据!");
                     return wdAddressResult;
                 }
             }
@@ -88,19 +92,20 @@ public class AddressQueryEngine {
             AddressResult szxAddressResult = szxMultiSearch(addrs, level);
             if (szxAddressResult != null) {
                 dataCallBack.successDataCallBack(szxAddressResult);
+                System.out.println("四中心地址::" + addrs + "查询到数据!");
                 return szxAddressResult;
             }
-        }else {
+        } else {
 
             //高德
             AddressResult gdAddressResult = gdMultiSearch(addrs, level);
-            if (gdAddressResult != null) {
+            if (gdAddressResult != null && gdAddressResult.getData() != null) {
                 dataCallBack.successDataCallBack(gdAddressResult);
                 return gdAddressResult;
             }
             //高德高级
             AddressResult gdV3AddressResult = gdV3MultiSearch(addrs, level);
-            if (gdV3AddressResult != null) {
+            if (gdV3AddressResult != null && gdAddressResult.getData() != null) {
                 dataCallBack.successDataCallBack(gdV3AddressResult);
                 return gdV3AddressResult;
             }
@@ -156,25 +161,18 @@ public class AddressQueryEngine {
     private AddressResult yyszMultiSearch(List<String> addrs, AddressLevel level) {
         try{
 
-            if(addrs != null && addrs.size() == 1){
-                AddressResult addressResult = yyszSearchByName(addrs.get(0));
-                addressResult.setCode(AddressResultEnum.YYSZ_SUCCESS);
-                addressResult.setMessage("成功");
-                return addressResult;
-            } else {
-                for (String addr : addrs) {
-                    AddressResult.ContentBean contentBean = verificaData(yyszSearchByName(addr), level, addr);
-                    if (contentBean != null) {
-                        contentBean.setSearchAddress(addr);
-
-                        List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
-                        contentBeans.add(contentBean);
-                        AddressResult addressResult = new AddressResult();
-                        addressResult.setData(contentBeans);
-                        addressResult.setCode(AddressResultEnum.YYSZ_SUCCESS);
-                        addressResult.setMessage("成功");
-                        return addressResult;
-                    }
+            for (String addr : addrs) {
+                AddressResult.ContentBean contentBean = verificaData(yyszSearchByName(addr), level, addr);
+                if (contentBean != null) {
+                    contentBean.setSearchAddress(addr);
+
+                    List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
+                    contentBeans.add(contentBean);
+                    AddressResult addressResult = new AddressResult();
+                    addressResult.setData(contentBeans);
+                    addressResult.setCode(AddressResultEnum.YYSZ_SUCCESS);
+                    addressResult.setMessage("成功");
+                    return addressResult;
                 }
             }
         }catch (Exception e){
@@ -187,24 +185,17 @@ public class AddressQueryEngine {
      */
     private AddressResult wdMultiSearch(List<String> addrs, AddressLevel level) {
         try {
-            if(addrs != null && addrs.size() == 1){
-                AddressResult addressResult = yyszSearchByName(addrs.get(0));
-                addressResult.setCode(AddressResultEnum.WDJA_SUCCESS);
-                addressResult.setMessage("成功");
-                return addressResult;
-            } else {
-                for (String addr : addrs) {
-                    AddressResult.ContentBean contentBean = verificaData(wdjaSearchByName(addr), level, addr);
-                    if (contentBean != null) {
-                        contentBean.setSearchAddress(addr);
-                        List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
-                        contentBeans.add(contentBean);
-                        AddressResult addressResult = new AddressResult();
-                        addressResult.setData(contentBeans);
-                        addressResult.setCode(AddressResultEnum.WDJA_SUCCESS);
-                        addressResult.setMessage("成功");
-                        return addressResult;
-                    }
+            for (String addr : addrs) {
+                AddressResult.ContentBean contentBean = verificaData(wdjaSearchByName(addr), level, addr);
+                if (contentBean != null) {
+                    contentBean.setSearchAddress(addr);
+                    List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
+                    contentBeans.add(contentBean);
+                    AddressResult addressResult = new AddressResult();
+                    addressResult.setData(contentBeans);
+                    addressResult.setCode(AddressResultEnum.WDJA_SUCCESS);
+                    addressResult.setMessage("成功");
+                    return addressResult;
                 }
             }
         } catch (Exception e) {
@@ -217,24 +208,17 @@ public class AddressQueryEngine {
      */
     private AddressResult szxMultiSearch(List<String> addrs, AddressLevel level) {
         try {
-            if(addrs != null && addrs.size() == 1){
-                AddressResult addressResult = yyszSearchByName(addrs.get(0));
-                addressResult.setCode(AddressResultEnum.SZX_SUCCESS);
-                addressResult.setMessage("成功");
-                return addressResult;
-            } else {
-                for (String addr : addrs) {
-                    AddressResult.ContentBean contentBean = verificaData(szxSearchByName(addr), level, addr);
-                    if (contentBean != null) {
-                        contentBean.setSearchAddress(addr);
-                        List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
-                        contentBeans.add(contentBean);
-                        AddressResult addressResult = new AddressResult();
-                        addressResult.setData(contentBeans);
-                        addressResult.setCode(AddressResultEnum.SZX_SUCCESS);
-                        addressResult.setMessage("成功");
-                        return addressResult;
-                    }
+            for (String addr : addrs) {
+                AddressResult.ContentBean contentBean = verificaData(szxSearchByName(addr), level, addr);
+                if (contentBean != null) {
+                    contentBean.setSearchAddress(addr);
+                    List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
+                    contentBeans.add(contentBean);
+                    AddressResult addressResult = new AddressResult();
+                    addressResult.setData(contentBeans);
+                    addressResult.setCode(AddressResultEnum.SZX_SUCCESS);
+                    addressResult.setMessage("成功");
+                    return addressResult;
                 }
             }
         } catch (Exception e) {
@@ -247,24 +231,17 @@ public class AddressQueryEngine {
      */
     private AddressResult gdMultiSearch(List<String> addrs, AddressLevel level) {
         try {
-            if(addrs != null && addrs.size() == 1){
-                AddressResult addressResult = yyszSearchByName(addrs.get(0));
-                addressResult.setCode(AddressResultEnum.GD_SUCCESS);
-                addressResult.setMessage("成功");
-                return addressResult;
-            } else {
-                for (String addr : addrs) {
-                    AddressResult.ContentBean contentBean = verificaData(gdSearchByName(addr), level, addr);
-                    if (contentBean != null) {
-                        contentBean.setSearchAddress(addr);
-                        List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
-                        contentBeans.add(contentBean);
-                        AddressResult addressResult = new AddressResult();
-                        addressResult.setData(contentBeans);
-                        addressResult.setCode(AddressResultEnum.GD_SUCCESS);
-                        addressResult.setMessage("成功");
-                        return addressResult;
-                    }
+            for (String addr : addrs) {
+                AddressResult.ContentBean contentBean = verificaData(gdSearchByName(addr), level, addr);
+                if (contentBean != null) {
+                    contentBean.setSearchAddress(addr);
+                    List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
+                    contentBeans.add(contentBean);
+                    AddressResult addressResult = new AddressResult();
+                    addressResult.setData(contentBeans);
+                    addressResult.setCode(AddressResultEnum.GD_SUCCESS);
+                    addressResult.setMessage("成功");
+                    return addressResult;
                 }
             }
         } catch (Exception e) {
@@ -276,24 +253,17 @@ public class AddressQueryEngine {
      */
     public AddressResult gdV3MultiSearch(List<String> addrs, AddressLevel level) {
         try {
-            if(addrs != null && addrs.size() == 1){
-                AddressResult addressResult = yyszSearchByName(addrs.get(0));
-                addressResult.setCode(AddressResultEnum.GDV3_SUCCESS);
-                addressResult.setMessage("成功");
-                return addressResult;
-            } else {
-                for (String addr : addrs) {
-                    AddressResult.ContentBean contentBean = verificaData(gdV3SearchByName(addr), level, addr);
-                    if (contentBean != null) {
-                        contentBean.setSearchAddress(addr);
-                        List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
-                        contentBeans.add(contentBean);
-                        AddressResult addressResult = new AddressResult();
-                        addressResult.setData(contentBeans);
-                        addressResult.setCode(AddressResultEnum.GDV3_SUCCESS);
-                        addressResult.setMessage("成功");
-                        return addressResult;
-                    }
+            for (String addr : addrs) {
+                AddressResult.ContentBean contentBean = verificaData(gdV3SearchByName(addr), level, addr);
+                if (contentBean != null) {
+                    contentBean.setSearchAddress(addr);
+                    List<com.skyversation.poiaddr.bean.AddressResult.ContentBean> contentBeans = new ArrayList<>();
+                    contentBeans.add(contentBean);
+                    AddressResult addressResult = new AddressResult();
+                    addressResult.setData(contentBeans);
+                    addressResult.setCode(AddressResultEnum.GDV3_SUCCESS);
+                    addressResult.setMessage("成功");
+                    return addressResult;
                 }
             }
         } catch (Exception e) {
@@ -302,6 +272,27 @@ public class AddressQueryEngine {
         return null;
     }
 
+    public AddressResult reverseGeocoding(double lon, double lat){
+        ResponseEntity response = AddressNetTools.getInstance().requestGet(yyszAddressService+"/search/reverseGeocoding?lon="+lon+"&lat="+lat, null, null, 10);
+//        ResponseEntity response = AddressNetTools.getInstance().requestGet("http://127.0.0.1:10012/poi/search/reverseGeocoding?lon="+lon+"&lat="+lat, null, null, 10);
+
+        if (response != null) {
+            String body = response.getBody() + "";
+            if (!StringUtils.hasText(body))
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.RESULT_NULL, "搜索无结果");
+            try {
+                AddressResult addressResult = yyszResultToResult(JSONObject.parseObject(body));
+                if(addressResult.getCode() == AddressResultEnum.DB_RECOMMEND_SUCCESS) return null;
+                return addressResult;
+            } catch (Exception e) {
+                System.err.println(e);
+                return AddressTools.getInstance().faildQuery(AddressResultEnum.DATA_FROMAT_FAILD, "格式化失败");
+            }
+        } else {
+            return null;
+        }
+    }
+
     //单搜索
     /**
      * yysz_address地名搜索
@@ -324,6 +315,9 @@ public class AddressQueryEngine {
             return null;
         }
     }
+
+
+
     /**
      * 武大吉奥单条地名搜索
      * @param address

+ 1 - 0
src/main/java/com/skyversation/poiaddr/addquery/TransfromDataTool.java

@@ -190,6 +190,7 @@ public class TransfromDataTool {
             content.setLocation(jsonObject.getString("location"));
             content.setLon(jsonObject.getDouble("lon"));
             content.setLat(jsonObject.getDouble("lat"));
+            content.setDistance(jsonObject.get("distance") + "");
             if (result.getData() == null) {
                 result.setData(new ArrayList<>());
             }

+ 23 - 0
src/main/java/com/skyversation/poiaddr/controller/PoiAddressController.java

@@ -47,6 +47,29 @@ public class PoiAddressController {
         return RequestUtils.request(address);
     }
 
+    @RequestMapping("/reverseGeocoding")
+    public Object reverseGeocoding(HttpServletRequest request){
+        String lonStr = request.getParameter("lon");
+        String latStr = request.getParameter("lat");
+        double lon = 0;
+        double lat = 0;
+        try {
+            lon = Double.valueOf(lonStr);
+            lat = Double.valueOf(latStr);
+        } catch (Exception e){
+            return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
+        }
+        if(lon == 0 || lat == 0){
+            return MessageManage.getInstance().getResultContent(Constant.PARAM_ERROR, "参数错误", "参数错误");
+        }
+        AddressResult addressResult = AddressQueryEngine.getInstance().reverseGeocoding(lon, lat);
+        if (addressResult == null || addressResult.getData() == null || addressResult.getData().size() < 1 ){
+            return MessageManage.getInstance().getResultContent(Constant.NO_DATA,"无数据","未找到");
+        }else {
+            return MessageManage.getInstance().getAddressResultContent(Constant.SUCCESS,addressResult,"成功");
+        }
+    }
+
 
     @RequestMapping("/selectPoi")
     public Object selectPoi(HttpServletRequest request){

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

@@ -38,7 +38,8 @@ spring.jpa.show-sql=false
 app.area=\u9752\u6D66
 app.town=\u6731\u5BB6\u89D2\u9547\u3001\u8D75\u5DF7\u9547\u3001\u5F90\u6CFE\u9547\u3001\u534E\u65B0\u9547\u3001\u91CD\u56FA\u9547\u3001\u767D\u9E64\u9547\u3001\u7EC3\u5858\u9547\u3001\u91D1\u6CFD\u9547\u3001\u590F\u9633\u8857\u9053\u3001\u76C8\u6D66\u8857\u9053\u3001\u9999\u82B1\u6865\u8857\u9053
 
-app.net-type=${NET_TYPE:internet}
+#app.net-type=${NET_TYPE:internet}
+app.net-type=${NET_TYPE:qingpu}
 app.yysz-address-service=${YYSZ_POI_SERVICE:http://121.43.55.7:10013/address}
 #
 #logging.level.org.hibernate=DEBUG