购物车物流规则匹配问题处理

This commit is contained in:
Chopper 2021-05-19 16:35:27 +08:00
parent edfd75d31b
commit 5ab2865f0d
5 changed files with 31 additions and 9 deletions

View File

@ -124,7 +124,7 @@ public enum ResultCode {
* 购物车
*/
CART_ERROR(30001, "读取结算页的购物车异常"),
GOODS_NOT_SUPPORT(30002, "以下商品不支持当前收货地址:"),
SHIPPING_NOT_APPLY(30005, "当前选择地址暂不支持配送!"),
/**
* 订单

View File

@ -53,6 +53,10 @@ public class TradeDTO implements Serializable {
@ApiModelProperty(value = "是否需要发票")
private Boolean needReceipt;
@ApiModelProperty(value = "不支持配送方式")
private List<CartSkuVO> notSupportFreight;
/**
* 购物车类型
*/

View File

@ -81,6 +81,7 @@ public class TradeBuilder {
*/
public TradeDTO buildTrade(CartTypeEnum checkedWay) {
TradeDTO tradeDTO = cartService.readDTO(checkedWay);
tradeDTO.setNotSupportFreight(null);
List<CartSkuVO> collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList());
//拼团类型订单预处理
if (checkedWay.equals(CartTypeEnum.PINTUAN)) {

View File

@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
@ -39,6 +40,7 @@ public class SkuFreightRender implements CartRenderStep {
return;
}
//循环渲染购物车商品运费价格
forSku:
for (CartSkuVO cartSkuVO : cartSkuVOS) {
String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId();
//如果商品设置卖家承担运费则跳出计算
@ -62,12 +64,20 @@ public class SkuFreightRender implements CartRenderStep {
//获取匹配的收货地址
for (FreightTemplateChild templateChild : freightTemplate.getFreightTemplateChildList()) {
//如果当前模版包含则返回
if (templateChild.getAreaId().indexOf(addressId) > 0) {
if (templateChild.getAreaId().contains(addressId)) {
freightTemplateChild = templateChild;
break;
}
}
if (freightTemplateChild == null) {
if (tradeDTO.getNotSupportFreight() == null) {
tradeDTO.setNotSupportFreight(new ArrayList<>());
}
tradeDTO.getNotSupportFreight().add(cartSkuVO);
continue forSku;
}
FreightTemplateChildDTO freightTemplateChildDTO = new FreightTemplateChildDTO(freightTemplateChild);
freightTemplateChildDTO.setPricingMethod(freightTemplate.getPricingMethod());

View File

@ -388,7 +388,6 @@ public class CartServiceImpl implements CartService {
TradeDTO tradeDTO = this.readDTO(cartTypeEnum);
MemberAddress memberAddress = memberAddressService.getById(shippingAddressId);
this.checkAddressScope(tradeDTO.getSkuList(), memberAddress);
tradeDTO.setMemberAddress(memberAddress);
this.resetTradeDTO(tradeDTO);
}
@ -487,9 +486,11 @@ public class CartServiceImpl implements CartService {
tradeDTO.setStoreRemark(tradeParams.getRemark());
//过滤勾选商品
List<CartSkuVO> collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList());
//校验收获地址
MemberAddress memberAddress = tradeDTO.getMemberAddress();
this.checkAddressScope(collect, memberAddress);
this.resetTradeDTO(tradeDTO);
//构建交易
Trade trade = tradeBuilder.createTrade(cartTypeEnum, tradeParams.getParentOrderSn());
this.cleanChecked(tradeDTO);
return trade;
@ -514,16 +515,22 @@ public class CartServiceImpl implements CartService {
}
String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId();
FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId);
String[] addressId = memberAddress.getConsigneeAddressIdPath().split(",");
//收货地址判定
forTemplates:
if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) {
FreightTemplateChild freightTemplateChild = freightTemplate.getFreightTemplateChildList().get(0);
// 检查当前配送地址的城市id是否存在与配送模版的城市id里面
if (!freightTemplateChild.getAreaId().contains(addressId[1])) {
throw new ServiceException("当前选择地址暂不支持配送!");
//获取市级别id
String addressId = memberAddress.getConsigneeAddressIdPath().split(",")[1];
//获取匹配的收货地址
for (FreightTemplateChild templateChild : freightTemplate.getFreightTemplateChildList()) {
//如果当前模版包含则返回
if (templateChild.getAreaId().contains(addressId)) {
break forTemplates;
}
}
throw new ServiceException(ResultCode.GOODS_NOT_SUPPORT, cartSkuVO.getGoodsSku().getGoodsName());
}
}
}