| package com.matrix.system.shopXcx.api.action; | 
|   | 
| import com.matrix.core.exception.GlobleException; | 
| import com.matrix.core.pojo.AjaxResult; | 
| import com.matrix.biz.bean.BizUser; | 
| import com.matrix.component.redis.RedisUserLoginUtils; | 
| import com.matrix.system.common.constance.AppConstance; | 
|   | 
| import com.matrix.system.shopXcx.bean.ShopReceiveAddress; | 
| import com.matrix.system.shopXcx.dao.ShopReceiveAddressDao; | 
| import com.matrix.system.shopXcx.api.pojo.AddressUntilsPOJO; | 
| import com.matrix.system.shopXcx.api.tools.AddressUntils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Controller; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import java.util.Collections; | 
| import java.util.List; | 
|   | 
| /** | 
|  * @description 收货地址接口 | 
|  * @author jiangyouyao | 
|  * @date 2019-06-06 10:15 | 
|  */ | 
| @CrossOrigin(origins = "*", maxAge = 3600) | 
| @Controller | 
| @RequestMapping(value = "wxapi/shopAddressAction") | 
| public class WxReceiveAddressAction { | 
|     @Autowired | 
|     private ShopReceiveAddressDao shopReceiveAddressDao; | 
|   | 
|     @Autowired | 
|     private RedisUserLoginUtils redisUserLoginUtils; | 
|     /** | 
|      * 接收保存收货地址 | 
|      */ | 
|     @PostMapping(value = "/saveReceiveAddress") | 
|     public @ResponseBody | 
|     AjaxResult saveReceiveAddress(@RequestBody ShopReceiveAddress receiveAddress) { | 
|         BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class); | 
|         receiveAddress.setCreateBy(loginUser.getOpenId()); | 
|         receiveAddress.setUpdateBy(loginUser.getOpenId()); | 
|         receiveAddress.setAddrUserid(loginUser.getOpenId()); | 
|   | 
|         //通过经纬度查询省市区 | 
|         String addrLongitude = receiveAddress.getAddrLongitude(); | 
|         String addrLatitude = receiveAddress.getAddrLatitude(); | 
|         if(null != addrLatitude && !"".equals(addrLatitude) && null != addrLongitude && !"".equals(addrLongitude)){ | 
|             try{ | 
|                 AddressUntilsPOJO address = AddressUntils.getAdd(addrLongitude, addrLatitude); | 
|                 receiveAddress.setAddrProvince(address.getProvince()); | 
|                 receiveAddress.setAddrCity(address.getCity()); | 
|                 receiveAddress.setAddrArea(address.getDistrict()); | 
|             }catch (Exception e){ | 
|                 throw new GlobleException("通过经纬度查询省市区错误", e); | 
|             } | 
|   | 
|         } | 
|   | 
|         //查看该用户下是否有地址 | 
|         ShopReceiveAddress param = new ShopReceiveAddress(); | 
|         param.setAddrUserid(loginUser.getOpenId()); | 
|         List<ShopReceiveAddress> receiveList = shopReceiveAddressDao.selectByModel(param); | 
|         if(null == receiveList || receiveList.size() ==0){ | 
|             receiveAddress.setAddrDefault(1); | 
|         } | 
|   | 
|         //如果默认地址传来1就将前面地址的默认状态改为2 | 
|         if(receiveAddress.getAddrDefault()==1){ | 
|             ShopReceiveAddress params = new ShopReceiveAddress(); | 
|             params.setAddrDefault(receiveAddress.getAddrDefault()); | 
|             params.setAddrUserid(loginUser.getOpenId()); | 
|             List<ShopReceiveAddress> shopReceiveList = shopReceiveAddressDao.selectByModel(params); | 
|             if(null != shopReceiveList && shopReceiveList.size()>0){ | 
|                 for (ShopReceiveAddress receiveAddre :shopReceiveList){ | 
|                     receiveAddre.setAddrDefault(2); | 
|                     shopReceiveAddressDao.updateByModel(receiveAddre); | 
|                 } | 
|             } | 
|         } | 
|         int i = shopReceiveAddressDao.insert(receiveAddress); | 
|   | 
|         if (i == 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "更新失败"); | 
|         } | 
|         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "更新成功"); | 
|     } | 
|   | 
|     /** | 
|      * 根据用户ID查询收货地址 | 
|      * @param | 
|      * @return | 
|      */ | 
|     @PostMapping("/findReceiveAddress") | 
|     @ResponseBody | 
|     public AjaxResult getByAddrUserId(@RequestBody ShopReceiveAddress receiveAddress) { | 
|         BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class); | 
|         String userId = loginUser.getOpenId(); | 
|         receiveAddress.setAddrUserid(userId); | 
|         List<ShopReceiveAddress> list = shopReceiveAddressDao.selectByModel(receiveAddress); | 
|         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, list, list.size()); | 
|         return result; | 
|     } | 
|   | 
|     /** | 
|      * 根据用户ID和地址ID查询收货地址 | 
|      * @param | 
|      * @return | 
|      */ | 
|     @PostMapping("/findAddrByAddrId/{addrId}") | 
|     @ResponseBody | 
|     public AjaxResult getByAddrId(@PathVariable("addrId") Integer addrId) { | 
|         BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class); | 
|         String userId = loginUser.getOpenId(); | 
|         ShopReceiveAddress params = new ShopReceiveAddress(); | 
|         params.setAddrUserid(userId); | 
|         params.setAddrId(addrId); | 
|         List<ShopReceiveAddress> list = shopReceiveAddressDao.selectByModel(params); | 
|         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, list, list.size()); | 
|         return result; | 
|     } | 
|   | 
|     /** | 
|      * 根据ID删除收货地址 | 
|      * @param | 
|      * @return | 
|      */ | 
|     @PostMapping("/deleteByAddrId/{addrId}") | 
|     @ResponseBody | 
|     public AjaxResult deleteByAddrId(@PathVariable("addrId") Integer addrId){ | 
|         ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(addrId); | 
|         if(null != shopReceiveAddress && AppConstance.ADDR_DEFAULT .equals(shopReceiveAddress.getAddrDefault())){ | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "默认地址不能删除"); | 
|         } | 
|         int i = shopReceiveAddressDao.deleteById(addrId); | 
|         if (i == 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "删除失败"); | 
|         } | 
|         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "删除成功"); | 
|     } | 
|   | 
|     /** | 
|      * 接收修改收货地址 | 
|      */ | 
|     @PostMapping(value = "/updateReceiveAddress") | 
|     public @ResponseBody | 
|     AjaxResult updateReceiveAddress(@RequestBody ShopReceiveAddress receiveAddress) { | 
|         BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class); | 
|         receiveAddress.setCreateBy(loginUser.getOpenId()); | 
|         receiveAddress.setUpdateBy(loginUser.getOpenId()); | 
|         receiveAddress.setAddrUserid(loginUser.getOpenId()); | 
|   | 
|         //通过经纬度查询省市区 | 
|         String addrLongitude = receiveAddress.getAddrLongitude(); | 
|         String addrLatitude = receiveAddress.getAddrLatitude(); | 
|         if(null != addrLatitude && !"".equals(addrLatitude) && null != addrLongitude && !"".equals(addrLongitude)){ | 
|             try{ | 
|                 AddressUntilsPOJO address = AddressUntils.getAdd(addrLongitude, addrLatitude); | 
|                 receiveAddress.setAddrProvince(address.getProvince()); | 
|                 receiveAddress.setAddrCity(address.getCity()); | 
|                 receiveAddress.setAddrArea(address.getDistrict()); | 
|             }catch (Exception e){ | 
|                 throw new GlobleException("通过经纬度查询省市区错误", e); | 
|             } | 
|   | 
|         } | 
|   | 
|         if(receiveAddress.getAddrDefault()==1){ | 
|             ShopReceiveAddress params = new ShopReceiveAddress(); | 
|             params.setAddrDefault(receiveAddress.getAddrDefault()); | 
|             params.setAddrUserid(loginUser.getOpenId()); | 
|             List<ShopReceiveAddress> shopReceiveList = shopReceiveAddressDao.selectByModel(params); | 
|             if(null != shopReceiveList && shopReceiveList.size()>0){ | 
|                 for (ShopReceiveAddress receiveAddre :shopReceiveList){ | 
|                     receiveAddre.setAddrDefault(2); | 
|                     shopReceiveAddressDao.updateByModel(receiveAddre); | 
|                 } | 
|             } | 
|         } | 
|   | 
|         int i = shopReceiveAddressDao.updateByModel(receiveAddress); | 
|   | 
|         if (i == 0) { | 
|             return new AjaxResult(AjaxResult.STATUS_FAIL, "修改失败"); | 
|         } | 
|         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功"); | 
|     } | 
|   | 
|     /** | 
|      * 根据经纬度和详细地址查询出省市区并返回给前端 | 
|      * @param | 
|      * @return | 
|      */ | 
|     @PostMapping("/findAddrByLogAndLat") | 
|     @ResponseBody | 
|     public AjaxResult getAddrByLogAndLat(@RequestBody ShopReceiveAddress receiveAddress) { | 
|         String addrLatitude = receiveAddress.getAddrLatitude(); | 
|         String addrLongitude = receiveAddress.getAddrLongitude(); | 
|         String addrRegion = receiveAddress.getAddrRegion(); | 
|         ShopReceiveAddress receAddress = new ShopReceiveAddress(); | 
|         if(null != addrLatitude && !"".equals(addrLatitude) && null != addrLongitude && !"".equals(addrLongitude)){ | 
|             try{ | 
|                 AddressUntilsPOJO address = AddressUntils.getAdd(addrLongitude, addrLatitude); | 
|                 //截取出详细地址 | 
|                 String replaceProvince = addrRegion.replace(address.getProvince(), ""); | 
|                 String replaceCity = replaceProvince.replace(address.getCity(), ""); | 
|                 String addrDetailaddr = replaceCity.replace(address.getDistrict(), ""); | 
|                 String addrReplace = addrDetailaddr.replace("()", ""); | 
|                 //详细地址 | 
|                 receAddress.setAddrDetailaddr(addrReplace); | 
|                 //所在地区 | 
|                 receAddress.setAddrRegion(address.getProvince()+address.getCity()+address.getDistrict()); | 
|             }catch (Exception e){ | 
|                 throw new GlobleException("通过经纬度查询省市区错误", e); | 
|             } | 
|   | 
|         } | 
|   | 
|         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(receAddress)); | 
|         return result; | 
|     } | 
|   | 
| } |