From 5ab2865f0d4b542606ccb871a83576071a7e21e9 Mon Sep 17 00:00:00 2001 From: Chopper Date: Wed, 19 May 2021 16:35:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6=E7=89=A9=E6=B5=81?= =?UTF-8?q?=E8=A7=84=E5=88=99=E5=8C=B9=E9=85=8D=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/common/enums/ResultCode.java | 2 +- .../order/cart/entity/dto/TradeDTO.java | 4 ++++ .../order/cart/render/TradeBuilder.java | 1 + .../cart/render/impl/SkuFreightRender.java | 14 ++++++++++++-- .../order/cart/service/CartServiceImpl.java | 19 +++++++++++++------ 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index f3f45311..0abac758 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -124,7 +124,7 @@ public enum ResultCode { * 购物车 */ CART_ERROR(30001, "读取结算页的购物车异常"), - + GOODS_NOT_SUPPORT(30002, "以下商品不支持当前收货地址:"), SHIPPING_NOT_APPLY(30005, "当前选择地址暂不支持配送!"), /** * 订单 diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java index fb9ae4e9..2781aacd 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java @@ -53,6 +53,10 @@ public class TradeDTO implements Serializable { @ApiModelProperty(value = "是否需要发票") private Boolean needReceipt; + + @ApiModelProperty(value = "不支持配送方式") + private List notSupportFreight; + /** * 购物车类型 */ diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java index 7ce7a955..4373206c 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java @@ -81,6 +81,7 @@ public class TradeBuilder { */ public TradeDTO buildTrade(CartTypeEnum checkedWay) { TradeDTO tradeDTO = cartService.readDTO(checkedWay); + tradeDTO.setNotSupportFreight(null); List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); //拼团类型订单预处理 if (checkedWay.equals(CartTypeEnum.PINTUAN)) { diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java index 0893e303..0ef0a395 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java @@ -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; /** @@ -35,10 +36,11 @@ public class SkuFreightRender implements CartRenderStep { List cartSkuVOS = tradeDTO.getSkuList(); //会员收货地址问题处理 MemberAddress memberAddress = tradeDTO.getMemberAddress(); - if(memberAddress==null){ + if (memberAddress == null) { 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()); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index 5659b911..7d05f2e6 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -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 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,15 +515,21 @@ 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()); + } } }