|
|
@ -3,10 +3,9 @@ package cc.yunxi.service.impl;
|
|
|
|
import cc.yunxi.common.domain.LambdaQueryWrapperX;
|
|
|
|
import cc.yunxi.common.domain.LambdaQueryWrapperX;
|
|
|
|
import cc.yunxi.common.exception.BizIllegalException;
|
|
|
|
import cc.yunxi.common.exception.BizIllegalException;
|
|
|
|
import cc.yunxi.common.utils.BeanUtils;
|
|
|
|
import cc.yunxi.common.utils.BeanUtils;
|
|
|
|
import cc.yunxi.domain.po.Client;
|
|
|
|
import cc.yunxi.common.utils.CollUtils;
|
|
|
|
import cc.yunxi.domain.po.ClientAddress;
|
|
|
|
import cc.yunxi.domain.po.ClientAddress;
|
|
|
|
import cc.yunxi.domain.vo.clientaddress.ClientAddressReqVO;
|
|
|
|
import cc.yunxi.domain.vo.clientaddress.ClientAddressReqVO;
|
|
|
|
import cc.yunxi.domain.vo.clientaddress.ClientAddressRespVO;
|
|
|
|
|
|
|
|
import cc.yunxi.mapper.ClientAddressMapper;
|
|
|
|
import cc.yunxi.mapper.ClientAddressMapper;
|
|
|
|
import cc.yunxi.service.IClientAddressService;
|
|
|
|
import cc.yunxi.service.IClientAddressService;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
@ -15,7 +14,6 @@ import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.validation.Valid;
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
@ -32,12 +30,17 @@ import java.util.List;
|
|
|
|
public class ClientAddressServiceImpl extends ServiceImpl<ClientAddressMapper, ClientAddress> implements IClientAddressService {
|
|
|
|
public class ClientAddressServiceImpl extends ServiceImpl<ClientAddressMapper, ClientAddress> implements IClientAddressService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final Integer LIMIT = 3; // 限制条数
|
|
|
|
private static final Integer LIMIT = 5; // 限制条数
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public List<ClientAddress> queryAddressList(String clientId) {
|
|
|
|
public List<ClientAddress> queryAddressList(String clientId) {
|
|
|
|
|
|
|
|
return queryAddressList(clientId, null);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<ClientAddress> queryAddressList(String clientId, String excludeId) {
|
|
|
|
LambdaQueryWrapperX<ClientAddress> wrapperX = new LambdaQueryWrapperX<>();
|
|
|
|
LambdaQueryWrapperX<ClientAddress> wrapperX = new LambdaQueryWrapperX<>();
|
|
|
|
wrapperX.eq(ClientAddress::getClientId, clientId).orderByDesc(ClientAddress::getIsDefault);
|
|
|
|
wrapperX.eq(ClientAddress::getClientId, clientId).orderByDesc(ClientAddress::getIsDefault);
|
|
|
|
|
|
|
|
wrapperX.neIfPresent(ClientAddress::getId, excludeId);
|
|
|
|
return list(wrapperX);
|
|
|
|
return list(wrapperX);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -56,9 +59,20 @@ public class ClientAddressServiceImpl extends ServiceImpl<ClientAddressMapper, C
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
public String addAddress(ClientAddressReqVO addressCreateVO) {
|
|
|
|
public String addAddress(ClientAddressReqVO addressCreateVO) {
|
|
|
|
ClientAddress clientAddress = BeanUtils.copyBean(addressCreateVO, ClientAddress.class);
|
|
|
|
ClientAddress clientAddress = BeanUtils.copyBean(addressCreateVO, ClientAddress.class, (s, t) -> {
|
|
|
|
|
|
|
|
t.setLongitude(s.getLocationDTO().getLongitude());
|
|
|
|
|
|
|
|
t.setLatitude(s.getLocationDTO().getLatitude());
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
List<ClientAddress> addressList = queryAddressList(addressCreateVO.getClientId());
|
|
|
|
|
|
|
|
if(addressList.size() > LIMIT) {
|
|
|
|
|
|
|
|
throw new BizIllegalException("地址最多为"+ LIMIT +"个");
|
|
|
|
|
|
|
|
}
|
|
|
|
if (addressCreateVO.getIsDefault() == 1) { // 添加为默认地址
|
|
|
|
if (addressCreateVO.getIsDefault() == 1) { // 添加为默认地址
|
|
|
|
this.changeDefaultAddress(addressCreateVO.getClientId());
|
|
|
|
this.changeDefaultAddress(addressList);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if(CollUtils.isEmpty(addressList)) {
|
|
|
|
|
|
|
|
throw new BizIllegalException("首地址必须为默认地址");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
clientAddress.setCreatorTime(LocalDateTime.now());
|
|
|
|
clientAddress.setCreatorTime(LocalDateTime.now());
|
|
|
|
this.save(clientAddress);
|
|
|
|
this.save(clientAddress);
|
|
|
@ -67,12 +81,22 @@ public class ClientAddressServiceImpl extends ServiceImpl<ClientAddressMapper, C
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
public void updateAddress(@Valid ClientAddressReqVO addressUpdateVO) {
|
|
|
|
public void updateAddress(ClientAddressReqVO addressUpdateVO) {
|
|
|
|
ClientAddress addressInfo = getAddressInfo(addressUpdateVO.getId());
|
|
|
|
ClientAddress addressInfo = getAddressInfo(addressUpdateVO.getId());
|
|
|
|
if (addressUpdateVO.getIsDefault() == 1) { // 修改为默认地址
|
|
|
|
if(!addressInfo.getIsDefault().equals(addressUpdateVO.getIsDefault())) {
|
|
|
|
this.changeDefaultAddress(addressInfo.getClientId());
|
|
|
|
List<ClientAddress> addressList = queryAddressList(addressInfo.getClientId(), addressUpdateVO.getId());
|
|
|
|
|
|
|
|
if (addressUpdateVO.getIsDefault() == 1) { // 修改为默认地址
|
|
|
|
|
|
|
|
this.changeDefaultAddress(addressList);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (addressList.stream().noneMatch(v -> v.getIsDefault() == 1)) {
|
|
|
|
|
|
|
|
throw new BizIllegalException("地址列表中需存在一个默认地址");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ClientAddress clientAddress = BeanUtils.copyBean(addressUpdateVO, ClientAddress.class);
|
|
|
|
ClientAddress clientAddress = BeanUtils.copyBean(addressUpdateVO, ClientAddress.class, (s, t) -> {
|
|
|
|
|
|
|
|
t.setLongitude(s.getLocationDTO().getLongitude());
|
|
|
|
|
|
|
|
t.setLatitude(s.getLocationDTO().getLatitude());
|
|
|
|
|
|
|
|
});
|
|
|
|
clientAddress.setUpdateTime(LocalDateTime.now());
|
|
|
|
clientAddress.setUpdateTime(LocalDateTime.now());
|
|
|
|
this.updateById(clientAddress);
|
|
|
|
this.updateById(clientAddress);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -89,8 +113,7 @@ public class ClientAddressServiceImpl extends ServiceImpl<ClientAddressMapper, C
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 动态切换默认地址
|
|
|
|
// 动态切换默认地址
|
|
|
|
private void changeDefaultAddress(String clientId) {
|
|
|
|
private void changeDefaultAddress(List<ClientAddress> clientAddresses) {
|
|
|
|
List<ClientAddress> clientAddresses = queryAddressList(clientId);
|
|
|
|
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
clientAddresses.forEach(v -> {
|
|
|
|
clientAddresses.forEach(v -> {
|
|
|
|
v.setIsDefault(0);
|
|
|
|
v.setIsDefault(0);
|
|
|
|