From 8e9dee08642a4e71b5e2b7ab646709f966d84aa3 Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 8 Oct 2021 17:39:18 +0800 Subject: [PATCH] update gift --- .../java/com/iformall/common/ErrorCode.java | 2 + .../java/com/iformall/enums/EnumPayWay.java | 3 +- .../com/iformall/service/WxOrderService.java | 2 +- .../service/impl/WxOrderServiceImpl.java | 37 +++++----- .../service/impl/WxPayOrderServiceImpl.java | 9 ++- .../service/order/OrderAdapterService.java | 7 +- .../order/impl/SingleOrderAdapterService.java | 7 +- .../batch/BaseBatchOrderAdapterService.java | 9 +++ .../CouponPackageOrderAdapterService.java | 73 ++++++++++++++++--- ...umberOneOrderBatchOrderAdapterService.java | 7 +- ...umberOneOrderBatchOrderAdapterService.java | 7 +- 11 files changed, 109 insertions(+), 54 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 850a09594..b4275898c 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -223,6 +223,8 @@ public enum ErrorCode{ COUPON_HANDSEL_VERIFY(4010, "商户发券异常"), COUPON_MANJIAN_USE_PRICE_NO_ALLOW_(4011, "满减券金额不符合条件"), COUPON_ORDER_TYPE_NOT_SUPPORTED(4012, "券类型不支持"), + COUPON_ORDER_SEND_ERROR(4013, "券包发卷失败"), + COUPON_ORDER_DATE_ERROR(4014, "券包数据异常"), /** * 商品 diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java index e9717a7ca..f302edc7b 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java @@ -21,7 +21,8 @@ public enum EnumPayWay { PAY_WAY_NOT_UNPAY_BATCH_SEND(96, "后台批量发券,无需支付",null,null,null), PAY_WAY_NOT_UNPAY_TRADE(97, "交易发券,无需支付",null,null,null), PAY_WAY_NOT_UNPAY_PASSWD(98, "根据卡密兑换卡,无需支付",null,null,null), - PAY_WAY_NOT_UNPAY_CREDIT(99, "积分兑换券,无需支付",null,null,null) + PAY_WAY_NOT_UNPAY_CREDIT(99, "积分兑换券,无需支付",null,null,null), + PAY_WAY_NOT_UNPAY_GIFTLIST(100, "卷包兑换券,无需支付",null,null,null) ; public static EnumPayWay getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index 9842d0848..2c0b459ac 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -91,7 +91,7 @@ public interface WxOrderService { * @param updateOrder * @return */ - int couponOrderSuccess(WxOrder updateOrder); + WxCouponOrder couponOrderSuccess(WxOrder updateOrder); /** * microPayOrderSuccess 刷卡支付成功 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 e117b7b83..e64f05663 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1290,20 +1290,22 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.COUPON_IS_NOT_FREE.getCode(), coupon.getTitle() + ErrorCode.COUPON_IS_NOT_FREE.getMessage()); } - if (Objects.nonNull(wxCouponSendVo) && Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSendVo.getSendType())) { - // 商户注券减库存操作 - try { - stockMerchantReduce(user, coupon, couponIdStr, wxCouponSendVo); - }catch(Exception e) { - throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); - } - } else { - // 减库存操作 - try { - stockReduce(false,user, coupon, couponIdStr,1); - }catch(Exception e) { - throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); - } + if(!EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST.equals(payWay)){ + if (Objects.nonNull(wxCouponSendVo) && Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSendVo.getSendType())) { + // 商户注券减库存操作 + try { + stockMerchantReduce(user, coupon, couponIdStr, wxCouponSendVo); + }catch(Exception e) { + throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); + } + } else { + // 减库存操作 + try { + stockReduce(false,user, coupon, couponIdStr,1); + }catch(Exception e) { + throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); + } + } } int payment = coupon.getSalePrice(); @@ -1355,7 +1357,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public int couponOrderSuccess(WxOrder updateOrder) { + public WxCouponOrder couponOrderSuccess(WxOrder updateOrder) { Date currentDate = new Date(); // 检查券相关 WxCoupon coupon = wxCouponMapper.selectById(updateOrder.getProductId(),updateOrder.getTenantId()); @@ -1392,14 +1394,11 @@ public class WxOrderServiceImpl implements WxOrderService { // 创建couponOrder try { - createCouponOrder(updateOrder, user, coupon, null,null,null,null); + return createCouponOrder(updateOrder, user, coupon, null,null,null,null); } catch (Exception e) { logger.error("创建券包:" + e.getMessage()); throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); } - - - return ret; } private void sendInsideOrderSuccessMsg(WxOrder updateOrder, WxCoupon coupon, WxCUserBasicInfo user) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 3c92ea37a..3d7cec53a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -896,14 +896,15 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } else { // 普通券, 修改订单状态 try { - wxOrderService.couponOrderSuccess(order); + WxCouponOrder couponOrder = wxOrderService.couponOrderSuccess(order); + + orderFactory.getOrderAdapterService(record.getComposeOrder()).doOthersAfterPaySuccess(order, record,couponOrder); + } catch (Exception e) { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); } - - orderFactory.getOrderAdapterService(record.getComposeOrder()).doOthersAfterPaySuccess(order, record); - + // 下订单完成,发送内部消息 try { wxOrderService.sendOrderSuccessActionMsg(order); diff --git a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java index 34eb9689d..17f8a2847 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java @@ -3,10 +3,7 @@ package com.iformall.service.order; import java.util.List; import com.iformall.domain.dto.OrderComposeSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxPayOrder; +import com.iformall.domain.po.*; import com.iformall.enums.EnumPayWay; import com.iformall.service.order.entity.WxComposeChildOrderPrice; import com.iformall.service.order.entity.WxComposeOrder; @@ -71,5 +68,5 @@ public interface OrderAdapterService { * @param order * @param record */ - void doOthersAfterPaySuccess(WxOrder order,WxPayOrder record); + void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder); } diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java index 0176a0c15..5aafceb07 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java @@ -3,15 +3,12 @@ package com.iformall.service.order.impl; import java.util.ArrayList; import java.util.List; +import com.iformall.domain.po.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.iformall.domain.dto.OrderComposeSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumOrderShopingType; import com.iformall.enums.EnumPayWay; @@ -87,7 +84,7 @@ public class SingleOrderAdapterService implements OrderAdapterService { } @Override - public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java index 4c0cbdd8f..95413cd6b 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import com.iformall.mapper.WxCouponMapper; +import com.iformall.mapper.WxCouponOrderMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -38,6 +40,13 @@ public abstract class BaseBatchOrderAdapterService implements OrderAdapterServic WxBatchOrderMapper wxBatchOrderMapper; @Autowired WxOrderMapper wxOrderMapper; + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + @Autowired + WxCouponMapper wxCouponMapper; + @Autowired + WxOrderService wxOrderService; + @Override public WxComposeChildOrderPrice getChildCouponOrderPrice(OrderComposeSaveDto orderdto,WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber) { diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java index a9b9291fc..18c5b5187 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java @@ -1,16 +1,24 @@ package com.iformall.service.order.impl.batch; +import java.util.Date; import java.util.List; +import java.util.Objects; + +import com.aliyun.openservices.shade.com.alibaba.fastjson.JSON; +import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.WxCouponSendVo; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.iformall.domain.dto.OrderComposeSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxPayOrder; -import com.iformall.enums.EnumComposeOrder; -import com.iformall.enums.EnumPayWay; import com.iformall.service.order.entity.WxComposeOrder; /** * 券包批量下单 @@ -19,6 +27,8 @@ import com.iformall.service.order.entity.WxComposeOrder; */ @Service public class CouponPackageOrderAdapterService extends BaseBatchOrderAdapterService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override @@ -47,9 +57,54 @@ public class CouponPackageOrderAdapterService extends BaseBatchOrderAdapterServi } @Override - public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { - //手动核销发券 - + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { + WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(), couponOrder.getTenantId()); + if (wxCoupon == null || !EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType())) { + logger.error("券包: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + if (StringUtils.isBlank(wxCoupon.getGiftList())){ + logger.error("券包: coupon-" + wxCoupon.getId() + "数据异常" + "couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_DATE_ERROR); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { + logger.error("已过期: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { + logger.error("已退款: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { + logger.error("已经核销过的券: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) { + logger.error("券已被预核销: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); + } + + //核销券包 + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_C.getCode()); + couponOrder.setUpdateDate(new Date()); + int num = wxCouponOrderMapper.updateVerifyCouponOrder(couponOrder); + if (num != 1) { + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + try { + List longs = JSON.parseArray(wxCoupon.getGiftList(), Long.class); + //发券包子券 + for (Long couponId:longs) { + wxOrderService.sendFreeCouponToUser(couponOrder.getCUserId(),couponOrder,couponId,null,EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST,null,null); + } + } catch (MallinkException e) { + throw e; + } catch (Exception e){ + throw new MallinkException(ErrorCode.COUPON_ORDER_SEND_ERROR.getCode(), couponOrder.getCouponName() + ErrorCode.COUPON_ORDER_SEND_ERROR.getMessage() ); + } + } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java index f3981b0c5..afe134bd5 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java @@ -3,13 +3,10 @@ package com.iformall.service.order.impl.batch; import java.util.List; +import com.iformall.domain.po.*; import org.springframework.stereotype.Service; import com.iformall.domain.dto.OrderComposeSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumPayWay; import com.iformall.service.order.entity.WxComposeOrder; @@ -44,7 +41,7 @@ public class MulityNumberOneOrderBatchOrderAdapterService extends BaseBatchOrder } @Override - public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java index ae55fe9c5..7ef91fe6e 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java @@ -2,13 +2,10 @@ package com.iformall.service.order.impl.batch; import java.util.List; +import com.iformall.domain.po.*; import org.springframework.stereotype.Service; import com.iformall.domain.dto.OrderComposeSaveDto; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumComposeOrder; import com.iformall.enums.EnumPayWay; import com.iformall.service.order.entity.WxComposeOrder; @@ -43,7 +40,7 @@ public class OneNumberOneOrderBatchOrderAdapterService extends BaseBatchOrderAda } @Override - public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record, WxCouponOrder couponOrder) { }