From e8a68cafb3b0dfb78f66ff240462edfd94e992e6 Mon Sep 17 00:00:00 2001 From: xhxu Date: Thu, 23 Sep 2021 18:39:23 +0800 Subject: [PATCH] wx_order add ShopingType --- .../controller/market/WxOrderController.java | 11 ++- .../WxCouponPasswordController.java | 4 +- .../domain/dto/OrderComposeSaveDto.java | 5 ++ .../enums/EnumOrderShopingStatus.java | 43 +++++++++++ .../iformall/enums/EnumOrderShopingType.java | 39 ++++++++++ .../com/iformall/service/WxOrderService.java | 16 ++-- .../service/impl/WxOrderServiceImpl.java | 73 ++++++++++--------- 7 files changed, 140 insertions(+), 51 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java index c08129702..a44fd7e08 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java @@ -15,10 +15,7 @@ import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.vo.WxMerchantSubsidyVo; import com.iformall.domain.vo.WxOrderQueryVo; -import com.iformall.enums.EnumCouponChannelStatus; -import com.iformall.enums.EnumCouponChannelType; -import com.iformall.enums.EnumPayWay; -import com.iformall.enums.EnumUserType; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCUserService; @@ -186,11 +183,13 @@ public class WxOrderController extends BaseController { if (coupon == null) { return new ResultData(ErrorCode.COUPON_IS_EMPTY); } - if (!wxOrderService.checkCouponIsFree(coupon)) { + if (!wxOrderService.checkCouponIsFree(coupon,null)) { return new ResultData(ErrorCode.COUPON_IS_NOT_FREE); } // 免费券 - order = wxOrderService.saveFreeOrderForCoupon(null,user, coupon, 1,orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null,EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT); + order = wxOrderService.saveFreeOrderForCoupon(null,user, coupon, 1, + orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null,EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT, + EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java index 73ed43c9f..06e89bbe6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java @@ -97,7 +97,9 @@ public class WxCouponPasswordController extends BaseController { // 3. 领取free coupon try { - WxOrder order = orderService.saveFreeOrderForCoupon(null,member, coupon, 1,null, formId, couponPassword.getId(),payWay); + WxOrder order = orderService.saveFreeOrderForCoupon(null,member, coupon, 1, + null, formId, couponPassword.getId(),payWay, + EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null); } catch (MallinkException e) { setCouponPasswordStatus(couponPassword, EnumCouponPasswordStatus.getEnum(pwdStatus)); logger.error(e.getMessage(),e); diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java index aeaa052a6..5fd68fa13 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/OrderComposeSaveDto.java @@ -1,5 +1,6 @@ package com.iformall.domain.dto; +import com.iformall.domain.po.UserBasicInfoAddress; import lombok.Data; import java.io.Serializable; @@ -14,6 +15,10 @@ public class OrderComposeSaveDto implements Serializable { OrderSaveDto signleOrder;//单个券/实物商品 int count;//购买数量 + + Integer shippingType = 0;//配送类型 + + UserBasicInfoAddress address;//配送地址 WxCoupon wxCoupon; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java new file mode 100644 index 000000000..463806a79 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingStatus.java @@ -0,0 +1,43 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumOrderShopingStatus { + + ONLINE_PURCHASE(0,"线上购买"),//不需要发货 + + WAIT_SELF_MENTION(14,"已备货,待自提"), + ALREADY_SELF_MENTION(15,"已自提"), + + WAIT_DISTRIBUTION(24,"已发货,待签收"), + ALREADY_DISTRIBUTION(25,"已签收") + ; + + public static EnumOrderShopingStatus getEnum(Integer code) { + for (EnumOrderShopingStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOrderShopingStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java new file mode 100644 index 000000000..145755007 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOrderShopingType.java @@ -0,0 +1,39 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ + +public enum EnumOrderShopingType { + + ONLINE_PURCHASE(0,"线上购买"), + SELF_MENTION(1,"自提"), + DISTRIBUTION(2,"配送") + ; + + public static EnumOrderShopingType getEnum(Integer code) { + for (EnumOrderShopingType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOrderShopingType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index 58cf67c6c..7159cafab 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -10,13 +10,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxBatchOrder; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.domain.vo.WxOrderCouponPressVo; @@ -212,13 +206,15 @@ public interface WxOrderService { * 订单处理 * 1. 检查coupon是否免费 */ - boolean checkCouponIsFree(WxCoupon coupon); + boolean checkCouponIsFree(WxCoupon coupon,Integer shippingType); // 2. 创建免费订单, 领取 couponOrder - WxOrder saveFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, Long couponChannelId, String formId, Long couponPasswordId,EnumPayWay payWay); + WxOrder saveFreeOrderForCoupon(WxComposeOrder composeOrder, WxCUserBasicInfo user, WxCoupon coupon, int couponNumber, + Long couponChannelId, String formId, Long couponPasswordId, EnumPayWay payWay, + Integer shippingType, UserBasicInfoAddress address); // 3. 创建有价订单 - WxOrder saveNoFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, Long couponChannelId, boolean isPress, Long orderGroupId, String formId); + WxOrder saveNoFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber,OrderComposeSaveDto orderdto); /** * 下订单成功后处理 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 2c6282c34..7a301a852 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -16,6 +16,7 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.iformall.domain.po.*; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.service.*; @@ -50,24 +51,6 @@ import com.iformall.common.ResultData; import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.dto.WxSharingOrderDto; -import com.iformall.domain.po.WxAppinfo; -import com.iformall.domain.po.WxBatchOrder; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCardInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponChannel; -import com.iformall.domain.po.WxCouponMerchant; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxCouponPassword; -import com.iformall.domain.po.WxCouponSend; -import com.iformall.domain.po.WxCreditHistory; -import com.iformall.domain.po.WxMerchant; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxOrderGroup; -import com.iformall.domain.po.WxOrderPress; -import com.iformall.domain.po.WxPayAccount; -import com.iformall.domain.po.WxPayOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; import com.iformall.exception.MallinkException; @@ -2028,9 +2011,12 @@ public class WxOrderServiceImpl implements WxOrderService { WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); // 是否砍价 WxOrder order = null; - if (checkCouponIsFree(coupon)) { + if (checkCouponIsFree(coupon,orderdto.getShippingType())) { // 免费券 - order = proxy.saveFreeOrderForCoupon(composeOrder,user, coupon,perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().getFormId(), null,payWay); + order = proxy.saveFreeOrderForCoupon(composeOrder,user, coupon,perCouponNumber, + orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().getFormId(), + null,payWay, + orderdto.getShippingType(),orderdto.getAddress()); if (order != null) { // 6. 下订单完成,发送内部消息 // 下订单完成,发送内部消息 @@ -2043,7 +2029,7 @@ public class WxOrderServiceImpl implements WxOrderService { } } else { // 有价券 - order = proxy.saveNoFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().isPressOrder(), orderdto.getSignleOrder().getOrderGroupId(), orderdto.getSignleOrder().getFormId()); + order = proxy.saveNoFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto); } // couponActionLog // try { @@ -2059,13 +2045,18 @@ public class WxOrderServiceImpl implements WxOrderService { @Override - public boolean checkCouponIsFree(WxCoupon coupon) { - return coupon.getSalePrice() == 0; + public boolean checkCouponIsFree(WxCoupon coupon,Integer shippingType) { + if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(shippingType)){ + return coupon.getSalePrice().intValue() + coupon.getFreightPrice().intValue() == 0; + } + return coupon.getSalePrice().intValue() == 0; } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override - public WxOrder saveFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, Long couponChannelId, String formId, Long couponPasswordId,EnumPayWay payWay) { + public WxOrder saveFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, + Long couponChannelId, String formId, Long couponPasswordId,EnumPayWay payWay, + Integer shippingType, UserBasicInfoAddress address) { WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); // 减库存操作 String couponIdStr = String.valueOf(coupon.getId()); @@ -2089,6 +2080,11 @@ public class WxOrderServiceImpl implements WxOrderService { record.setPayment(0); record.setFormId(formId); record.setOrderGroupId(0L); + + record.setShippingType(shippingType); + if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(shippingType)){ + record.setShippingAddress(JSON.toJSONString(address)); + } if (null != composeOrder) { record.setComposeOrderId(composeOrder.getMainOrderId()); if (EnumComposeOrder.childOrderIsSingle(composeOrder.getComposeOrderType())) { @@ -2120,7 +2116,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveNoFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, Long couponChannelId, boolean isPress, Long orderGroupId, String formId) { + public WxOrder saveNoFreeOrderForCoupon(WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber,OrderComposeSaveDto orderdto) { WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); String couponIdStr = String.valueOf(coupon.getId()); // 3. 减库存操作 @@ -2138,17 +2134,26 @@ public class WxOrderServiceImpl implements WxOrderService { // 4. 保存订单 Long orderNumber; // 4.1 券价格 - WxComposeChildOrderPrice price = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).getChildCouponOrderPrice(coupon, isPress, orderGroupId, couponNumber); + WxComposeChildOrderPrice price = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()) + .getChildCouponOrderPrice(coupon, orderdto.getSignleOrder().isPressOrder(), orderdto.getSignleOrder().getOrderGroupId(), couponNumber); - Integer orderStatus = OrderHelper.getOrderStatusWxCoupon(coupon, orderGroupId); + Integer orderStatus = OrderHelper.getOrderStatusWxCoupon(coupon, orderdto.getSignleOrder().getOrderGroupId()); // 4.2 保存订单 WxOrder record = new WxOrder(); record.setType(orderType); - record.setCouponChannelId(couponChannelId); - record.setOrderGroupId(orderGroupId); - record.setFormId(formId); - record.setPayment(price.getRealPayMent()); + record.setCouponChannelId(orderdto.getSignleOrder().getCouponChannelId()); + record.setOrderGroupId(orderdto.getSignleOrder().getOrderGroupId()); + record.setFormId(orderdto.getSignleOrder().getFormId()); + + record.setPayment(price.getRealPayMent()+coupon.getFreightPrice());//加运费 + record.setFreightPrice(coupon.getFreightPrice()); + + record.setShippingType(orderdto.getShippingType()); + if(EnumOrderShopingType.DISTRIBUTION.getCode().equals(orderdto.getShippingType())){ + record.setShippingAddress(JSON.toJSONString(orderdto.getAddress())); + } + record.setOrderStatus(orderStatus); record.setComposeOrderId(composeOrder.getMainOrderId()); if (EnumComposeOrder.childOrderIsSingle(composeOrder.getComposeOrderType())) { @@ -2159,13 +2164,13 @@ public class WxOrderServiceImpl implements WxOrderService { record.setCouponNumber(couponNumber); try { - orderNumber = proxy.saveNoFreeOrder(record, user, coupon, isPress); + orderNumber = proxy.saveNoFreeOrder(record, user, coupon, orderdto.getSignleOrder().isPressOrder()); } catch (Exception e) { logger.error("保存订单:" + e.getMessage(),e); throw new MallinkException(ErrorCode.ORDER_SAVE_ERR.getCode(),"["+coupon.getTitle()+"]订单保存错误,"+e.getMessage()); } - if (isPress) { + if (orderdto.getSignleOrder().isPressOrder()) { // 5. 第一次砍价 try { proxy.firstPress(record, user, coupon, orderNumber); @@ -2590,7 +2595,7 @@ public class WxOrderServiceImpl implements WxOrderService { } } - if (!checkCouponIsFree(coupon)) { + if (!checkCouponIsFree(coupon,null)) { // 有价,拼团检查 if (isOrderGroup(orderSaveDto.getOrderGroupId())) { checkOrderGroup(wxCUserBasicInfo, orderSaveDto.getOrderGroupId(),coupon,premsg);