| package com.xzx.gc.order.service;  | 
|   | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.comparator.PropertyComparator;  | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.util.StrUtil;  | 
| import com.xzx.gc.common.Result;  | 
| import com.xzx.gc.common.constant.Constants;  | 
| import com.xzx.gc.common.constant.UserEnum;  | 
| import com.xzx.gc.common.dto.gdmap.GdReverseGEODto;  | 
| import com.xzx.gc.common.utils.BusinessUtil;  | 
| import com.xzx.gc.common.utils.gdmap.GdMapUtil;  | 
| import com.xzx.gc.entity.*;  | 
| import com.xzx.gc.order.mapper.AddressLevelInfoMapper;  | 
| import com.xzx.gc.order.mapper.AddressMapper;  | 
| import com.xzx.gc.order.mapper.OrderMapper;  | 
| import lombok.extern.slf4j.Slf4j;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.stereotype.Service;  | 
| import org.springframework.transaction.annotation.Transactional;  | 
| import tk.mybatis.mapper.entity.Example;  | 
|   | 
| import java.util.List;  | 
| import java.util.stream.Collectors;  | 
|   | 
| @Service  | 
| @Slf4j  | 
| @Transactional  | 
| public class AddressService {  | 
|     @Autowired  | 
|     private AddressMapper addressMapper;  | 
|   | 
|     @Autowired  | 
|     private BusinessUtil businessUtil;  | 
|   | 
|     @Autowired  | 
|     private AddressLevelInfoMapper addressLevelInfoMapper;  | 
|   | 
|     @Autowired  | 
|     private UserService userService;  | 
|     @Autowired  | 
|     private OrderMapper orderMapper;  | 
|     /**  | 
|      * 查询所有经纬度为空的地址  | 
|      * @return  | 
|      */  | 
|     public List<AddressInfo> findWithLonNull(){  | 
|         AddressInfo addressInfo=new AddressInfo();  | 
|         addressInfo.setDelFlag(Convert.toStr(Constants.DEL_NOT_FLAG));  | 
|         List<AddressInfo> select = addressMapper.select(addressInfo);  | 
|         if(CollUtil.isNotEmpty(select)){  | 
|             select.removeIf(next -> StrUtil.isNotBlank(next.getLongitude()) && !"0".equals(next.getLongitude().trim()));  | 
|             return select;  | 
|         }  | 
|         return null;  | 
|     }  | 
|   | 
|     public AddressInfo findById(String addressId) {  | 
|         return addressMapper.selectByPrimaryKey(addressId);  | 
|     }  | 
|   | 
|   | 
|   | 
|   | 
|     public AddressInfo findByUserId(String userId) {  | 
|         AddressInfo addressInfo=new AddressInfo();  | 
|         addressInfo.setUserId(userId);  | 
|         addressInfo.setFlag("1");  | 
|         List<AddressInfo> select = addressMapper.select(addressInfo);  | 
|         if(CollUtil.isNotEmpty(select)) {  | 
|             List<AddressInfo> collect = select.stream().filter(x -> x.getDelFlag().equals("0")).collect(Collectors.toList());  | 
|             if (CollUtil.isNotEmpty(collect)) {  | 
|                 return collect.get(0);  | 
|             } else {  | 
|                 CollUtil.sort(select, new PropertyComparator<>("createTime").reversed());  | 
|                 return select.get(0);  | 
|             }  | 
|         }else{  | 
|             UserInfo byId = userService.findById(userId);  | 
|             if(StrUtil.isNotBlank(byId.getLatitude())){  | 
|                 AddressInfo addressInfo1 = getByLon(byId.getLongitude(),byId.getLatitude());  | 
|                 if (addressInfo1 != null) return addressInfo1;  | 
|             }  | 
|         }  | 
|         return null;  | 
|     }  | 
|   | 
|     public AddressInfo getByLon(String lon,String lan) {  | 
|         GdReverseGEODto gdReverseGEODto = new GdReverseGEODto();  | 
|         gdReverseGEODto.setLocation(lon + "," + lan);  | 
|         Result areaInfo = GdMapUtil.getAreaInfo(gdReverseGEODto, 0);  | 
|         if (areaInfo.getCode() == 0) {  | 
|             AddressInfo addressInfo1 = (AddressInfo) areaInfo.getData();  | 
|             AddressLevelInfo addressLevelInfo = new AddressLevelInfo();  | 
|             addressLevelInfo.setAdcode(addressInfo1.getAdcode());  | 
| //            log.trace("地址CODE码:{}",addressInfo1.getAdcode());  | 
|             AddressLevelInfo addressLevelInfo1 = addressLevelInfoMapper.selectOne(addressLevelInfo);  | 
|             if(addressLevelInfo1!=null) {  | 
|                 addressInfo1.setTownshipId(addressLevelInfo1.getLevel3Id());  | 
|                 addressInfo1.setProvinceId(addressLevelInfo1.getLevel1Id());  | 
|                 addressInfo1.setCityId(addressLevelInfo1.getLevel2Id());  | 
|                 return addressInfo1;  | 
|             }  | 
|         }  | 
|         return null;  | 
|     }  | 
|   | 
|     private List<AddressLevelInfo> findByAny(AddressLevelInfo addressLevelInfo) {  | 
|         if(StrUtil.isNotBlank(addressLevelInfo.getLevel3Name())){  | 
|             addressLevelInfo.setLevel3Name(businessUtil.changeArea(addressLevelInfo.getLevel3Name()));  | 
|         }  | 
|   | 
|         List<AddressLevelInfo> addressLevelInfos = addressLevelInfoMapper.select(addressLevelInfo);  | 
|         if(CollUtil.isNotEmpty(addressLevelInfos)){  | 
|             for (AddressLevelInfo levelInfo : addressLevelInfos) {  | 
|                 levelInfo.setLevel3Name(businessUtil.changeArea(levelInfo.getLevel3Name()));  | 
|             }  | 
|         }  | 
|         return addressLevelInfos;  | 
|     }  | 
|   | 
|   | 
|   | 
|   | 
|     public void deleteByUserId(String userId){  | 
|         AddressInfo addressInfo = new AddressInfo();  | 
|         addressInfo.setDelFlag(Constants.DEL_FLAG+"");  | 
|         Example example = new Example(AddressInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("userId", userId);  | 
|         addressMapper.updateByExampleSelective(addressInfo,example);  | 
|     }  | 
|   | 
|   | 
| }  |