lzj 4 years ago
parent
commit
3289dc8c82

+ 1 - 0
provider-demo/src/main/java/com/tsf/demo/provider/bean/po/MpBankNetwork.java

@@ -38,6 +38,7 @@ public class MpBankNetwork {
     private String latitude;
     @Column(name = "address")
     private String address;
+    private String distance;
 
 
 }

+ 34 - 0
provider-demo/src/main/java/com/tsf/demo/provider/common/util/CoordCommonUtil.java

@@ -0,0 +1,34 @@
+package com.tsf.demo.provider.common.util;
+
+/**
+ * @author LiuZhenJi
+ * @since 2021-09- 17:45
+ */
+public class CoordCommonUtil {
+
+    /** 获得球面(地球)上两个点之间的距离(坐标可以为WGS84、GCJ02等任何一种坐标,但两个点的坐标类型必须相同)
+     * @param star1 起点的经度
+     * @param star2 起点的纬度
+     * @param end1 终点的经度
+     * @param end2 终点的纬度
+     * @return 两点之间的距离,单位是米
+     */
+    public static int getDistance(Double star1,Double star2, Double end1,Double end2)
+    {
+        double radLat1 = Math.toRadians(star2);		//计算弧长(d * Math.PI / 180.0)
+        double radLat2 = Math.toRadians(end2);
+        double a = radLat1 - radLat2;
+        double b = Math.toRadians(star1) - Math.toRadians(end1);
+        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1)
+                * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
+        s = s * 6378137.0;		//取WGS84标准参考椭球中的地球长半径(单位:m)
+        //s = Math.round(s * 10000) / 10000;
+        return (int)Math.round(s);
+    }
+
+    public static void main(String[] args) {
+        int distance = CoordCommonUtil.getDistance(116.402396, 39.922098, 116.437126, 39.9599228);
+        System.out.println(distance);
+    }
+
+}

+ 47 - 0
provider-demo/src/main/java/com/tsf/demo/provider/common/util/PageUtil.java

@@ -0,0 +1,47 @@
+package com.tsf.demo.provider.common.util;
+
+import com.tsf.demo.provider.bean.po.MpBankNetwork;
+
+import java.util.List;
+
+/**
+ * @author LiuZhenJi
+ * @since 2021-09- 11:24
+ */
+public class PageUtil {
+
+    public static <T> List<T> doWork(List<T> val,int page,int size){
+        int count = 0;
+        int totalPage = 0;
+        if (val != null && val.size() > 0) {
+            //总行数
+            count = val.size();
+            //总页数
+            if (count%size >0) {
+                totalPage=count/size+1;
+            }else if(count%size ==0){
+                totalPage=count/size;
+            }
+            if(page>totalPage){
+                return null;
+            }
+
+
+            int fromIndex = (page-1) * size;
+
+            int toIndex = 0;
+            if(fromIndex == 0){
+                toIndex = size;
+            }else {
+                toIndex = size*page;
+            }
+
+            if (toIndex > count) {
+                toIndex = count;
+            }
+
+            return val.subList(fromIndex, toIndex);
+        }
+        return val;
+    }
+}

+ 54 - 0
provider-demo/src/main/java/com/tsf/demo/provider/controller/MpBankNetworkController.java

@@ -1,5 +1,8 @@
 package com.tsf.demo.provider.controller;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.tsf.demo.provider.bean.po.MpBankNetwork;
 import com.tsf.demo.provider.common.R;
 import com.tsf.demo.provider.service.MpBankNetworkService;
 import io.swagger.annotations.Api;
@@ -7,6 +10,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @RestController
 @CrossOrigin
 @RequestMapping("/mpBankNetwork")
@@ -14,6 +19,8 @@ import org.springframework.web.bind.annotation.*;
 public class MpBankNetworkController {
     @Autowired
     private MpBankNetworkService mpBankNetworkService;
+
+
     @GetMapping("/addAll")
     @ApiOperation(value = "查询用户申领以及代申领的实体卡", notes = "查询用户申领以及代申领的实体卡")
     public R addAll(){
@@ -25,4 +32,51 @@ public class MpBankNetworkController {
             return R.fail("同步失败");
         }
     }
+
+
+    /**
+     *  分页查询用户附近的银行
+     * @param star1 用户所在经度
+     * @param star2 用户所在纬度
+     * @param page 页数
+     * @param size 页容量
+     * @return
+     */
+    @GetMapping("/returnUserNearBank")
+    @ApiOperation(value = "分页查询用户附近的银行", notes = "分页查询用户附近的银行")
+    public R returnUserNearBank(@RequestParam(value = "star1",defaultValue = "0",required = false) double star1,
+                                @RequestParam(value = "star2",defaultValue = "0",required = false)double star2,
+                                int page ,int size){
+        List<MpBankNetwork> mpBankNetworkList = mpBankNetworkService.returnUserNearBank(star1, star2,page,size);
+
+        if(mpBankNetworkList==null){
+            return R.fail("无更多数据");
+        }
+        return R.data(mpBankNetworkList);
+    }
+
+    /**
+     * 通过bankNo分页查询用户附近的银行
+     * @param bankNo  bankNo
+     * @param star1  用户所在经度
+     * @param star2  用户所在纬度
+     * @param bankType 网点类别(0 服务网点 1 制卡网点)
+     * @param page  当前页数
+     * @param size  页容量
+     * @return
+     */
+    @GetMapping("/returnUserNearBankByBankNo")
+    @ApiOperation(value = "通过bankNo分页查询用户附近的银行", notes = "通过bankNo分页查询用户附近的银行")
+    public R returnUserNearBankByBankNo(String bankNo,
+                                        @RequestParam(value = "star1",defaultValue = "0",required = false) double star1,
+                                        @RequestParam(value = "star2",defaultValue = "0",required = false)double star2,
+                                        @RequestParam(value = "bankType",required = false,defaultValue = "-1") Integer bankType,
+                                        int page ,int size){
+        List<MpBankNetwork> mpBankNetworkList = mpBankNetworkService.returnUserNearBankByBankNo(bankNo, star1, star2, bankType, page, size);
+        if(mpBankNetworkList==null){
+            return R.fail("无更多数据");
+        }
+        return R.data(mpBankNetworkList);
+    }
+
 }

+ 3 - 1
provider-demo/src/main/java/com/tsf/demo/provider/controller/MpUserController.java

@@ -29,7 +29,9 @@ public class MpUserController {
      */
     @PostMapping("/info")
     @ApiOperation(value = "查询用户详细信息", notes = "传入")
-    public R info(MpUserVO mpUserVO) {
+    public R info(@RequestBody MpUserVO mpUserVO) {
         return mpUserService.getMpUserByOpenId(mpUserVO);
     }
+
+
 }

+ 10 - 0
provider-demo/src/main/java/com/tsf/demo/provider/dao/MpBankNetworkDao.java

@@ -2,6 +2,16 @@ package com.tsf.demo.provider.dao;
 
 import com.tsf.demo.provider.bean.po.MpBankNetwork;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
 
 public interface MpBankNetworkDao extends JpaRepository<MpBankNetwork,Long> {
+
+    @Query(value="select * from mp_bank_network where bankNo =:bankNo and bankType=:bankType",nativeQuery=true)
+    List<MpBankNetwork> findByBankNoAndBankType(@Param("bankNo")String bankNo,@Param("bankType")Integer bankType);
+
+    @Query(value="select * from mp_bank_network where bankNo =:bankNo" ,nativeQuery=true)
+    List<MpBankNetwork> findByBankNo(@Param("bankNo") String bankNo);
 }

+ 7 - 0
provider-demo/src/main/java/com/tsf/demo/provider/service/MpBankNetworkService.java

@@ -8,6 +8,8 @@ import java.util.List;
 public interface MpBankNetworkService {
  public List<MpBankNetwork> getAll();
 
+
+
  public List<MpBankNetworkVO> getList(MpBankNetworkVO mpBankNetworkVO);
 
  public List<MpBankNetworkVO> saveAll(List<MpBankNetwork> list);
@@ -15,4 +17,9 @@ public interface MpBankNetworkService {
  public boolean deleteAll();
 
  public void sychData();
+
+ List<MpBankNetwork> returnUserNearBank(double star1, double star2,int page,int size);
+
+ List<MpBankNetwork> returnUserNearBankByBankNo(String bankNo,double star1, double star2,Integer bankType,int page ,int size);
+
 }

+ 75 - 2
provider-demo/src/main/java/com/tsf/demo/provider/service/impl/MpBankNetworkServiceImpl.java

@@ -5,10 +5,13 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.tsf.demo.provider.bean.po.MpBankNetwork;
 import com.tsf.demo.provider.bean.po.MpBankNetworkVO;
+import com.tsf.demo.provider.common.util.CoordCommonUtil;
+import com.tsf.demo.provider.common.util.PageUtil;
 import com.tsf.demo.provider.dao.MpBankNetworkDao;
 import com.tsf.demo.provider.service.MpBankNetworkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.domain.Example;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -16,8 +19,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.LinkedHashMap;
-import java.util.List;
+import java.util.*;
 
 @Service
 public class MpBankNetworkServiceImpl implements MpBankNetworkService {
@@ -35,6 +37,8 @@ public class MpBankNetworkServiceImpl implements MpBankNetworkService {
          return mpBankNetworkDao.findAll();
     }
 
+
+
     @Override
     public List<MpBankNetworkVO> getList(MpBankNetworkVO mpBankNetworkVO) {
         return null;
@@ -104,6 +108,75 @@ public class MpBankNetworkServiceImpl implements MpBankNetworkService {
         }
     }
 
+    @Override
+    public List<MpBankNetwork> returnUserNearBank(double star1, double star2,int page ,int size) {
+
+        Map<Integer , MpBankNetwork > map = new HashMap<Integer , MpBankNetwork >();
+        TreeSet<Integer> ts = new TreeSet<Integer>();
+        List<MpBankNetwork> mpBankNetworkList = new ArrayList<MpBankNetwork>();
+
+        //所有银行(未排序)
+        List<MpBankNetwork> allMpBankNetwork = this.getAll();
+
+        //位置信息不为空
+        if(star1 != 0.0 && star2 != 0.0){
+            mpBankNetworkList = queayToNear(star1, star2, allMpBankNetwork);
+        }else{
+            mpBankNetworkList = allMpBankNetwork;
+        }
+        //分页
+        List<MpBankNetwork> pageList = PageUtil.doWork(mpBankNetworkList, page, size);
+        return pageList;
+    }
+
+    public List<MpBankNetwork> queayToNear(double star1, double star2,List<MpBankNetwork> mpBankNetworkList){
+        List<MpBankNetwork> bankNetworkList =new ArrayList<>();
+        Map<Integer , MpBankNetwork > map = new HashMap<Integer , MpBankNetwork >();
+        TreeSet<Integer> ts = new TreeSet<Integer>();
+        for (MpBankNetwork mpBankNetwork : mpBankNetworkList) {
+            if (mpBankNetwork.getLongitude()==null && mpBankNetwork.getLatitude() == null){
+                continue;
+            }
+            Integer distance = CoordCommonUtil.getDistance(Double.valueOf(mpBankNetwork.getLongitude()), Double.valueOf(mpBankNetwork.getLatitude()), star1, star2);
+            mpBankNetwork.setDistance(String.valueOf(distance));
+            map.put(distance,mpBankNetwork);
+            ts.add(distance);
+        }
+
+        //从近至远排序添加对象
+        for (Integer t : ts) {
+            bankNetworkList.add(map.get(t));
+        }
+        return bankNetworkList;
+    }
+
+    @Override
+    public List<MpBankNetwork> returnUserNearBankByBankNo(String bankNo, double star1, double star2, Integer bankType, int page, int size) {
+        Map<Integer , MpBankNetwork > map = new HashMap<Integer , MpBankNetwork >();
+        TreeSet<Integer> ts = new TreeSet<Integer>();
+        List<MpBankNetwork> bankNetworkList = new ArrayList<MpBankNetwork>();
+
+        //未排序信息
+        List<MpBankNetwork> mpBankNetworkList =new ArrayList<>();
+        if(bankType==-1){
+            mpBankNetworkList = mpBankNetworkDao.findByBankNo(bankNo);
+        }else{
+            mpBankNetworkList = mpBankNetworkDao.findByBankNoAndBankType(bankNo,bankType);
+        }
+
+
+        //位置信息不为空
+        if(star1 != 0 && star2 != 0){
+            bankNetworkList = queayToNear(star1, star2, mpBankNetworkList);
+        }else{
+            bankNetworkList = mpBankNetworkList;
+        }
+        //分页
+        List<MpBankNetwork> pageList = PageUtil.doWork(bankNetworkList, page, size);
+        return pageList;
+    }
+
+
     public static void main(String[] args) {
         //获取token
         String httpUrl = "http://61.48.80.80:8088/zuul/api/auth/client/login";