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);
|
}
|
|
|
}
|