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 findWithLonNull(){ AddressInfo addressInfo=new AddressInfo(); addressInfo.setDelFlag(Convert.toStr(Constants.DEL_NOT_FLAG)); List 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 select = addressMapper.select(addressInfo); if(CollUtil.isNotEmpty(select)) { List 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 findByAny(AddressLevelInfo addressLevelInfo) { if(StrUtil.isNotBlank(addressLevelInfo.getLevel3Name())){ addressLevelInfo.setLevel3Name(businessUtil.changeArea(addressLevelInfo.getLevel3Name())); } List 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); } }