From e4272a331eb7541b842569c2c071c8cfca70bdd3 Mon Sep 17 00:00:00 2001 From: gongbiao Date: Mon, 6 May 2019 15:00:20 +0800 Subject: [PATCH] =?UTF-8?q?[C=E7=AB=AF][=E4=BF=AE=E6=94=B9][=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=94=AF=E4=BB=98=E8=AE=A2=E5=8D=95=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=AD]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/common/ErrorCode.java | 1 + .../service/impl/WxOrderServiceImpl.java | 66 +++++++++---------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 5fe465a34..23ac73bcd 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -149,6 +149,7 @@ public enum ErrorCode{ ORDER_HAD_CANCEL(3009, "订单已取消"), ORDER_PRESS_IS_OVERTIME(3010, "砍价已过期"), ORDER_PRESS_IS_COMPLETE(3011, "砍价已完成"), + ORDER_UNPAID(3012, "您有未支付的订单"), /** * 卡券 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 c8166f27e..2fb3b84e1 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -176,66 +176,49 @@ public class WxOrderServiceImpl implements WxOrderService { } - private int getUserCouponOrderCount(WxCUser user, WxCoupon counpon) { + private int getUserOrderCount(WxCUser user, WxCoupon counpon) { // 用户购买的券包数量 // + Order 待支付 - // + couponOrder ---待使用 - int countOrder = 0, countCouponOrder = 0; - - //拼团 - if (counpon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) { - try { - WxOrder orderQ = new WxOrder(); - orderQ.setTenantId(user.getTenantId()); - orderQ.setProductId(counpon.getId()); - orderQ.setType(EnumOrderType.COUPON.getCode()); - orderQ.setcUserId(user.getId()); - List statusS = new ArrayList<>(); - statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); - statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); - statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); - statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); - orderQ.setStatusS(statusS); - return wxOrderMapper.countList(orderQ); - } catch (Exception e) { - logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL); - } - } - try { WxOrder orderQ = new WxOrder(); orderQ.setTenantId(user.getTenantId()); orderQ.setProductId(counpon.getId()); orderQ.setType(EnumOrderType.COUPON.getCode()); orderQ.setcUserId(user.getId()); - List statusS = new ArrayList(); + List statusS = new ArrayList<>(); statusS.add(EnumOrderStatus.ORDER_STATUS_PRESSING.getCode()); - statusS.add(EnumOrderStatus.ORDER_STATUS_PRESS_COMPLETE.getCode()); //砍价券专有状态 - statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode());//砍价券专有状态 + statusS.add(EnumOrderStatus.ORDER_STATUS_PRESS_COMPLETE.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); orderQ.setStatusS(statusS); - countOrder = wxOrderMapper.countList(orderQ); + return wxOrderMapper.countList(orderQ); } catch (Exception e) { logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.ORDER_IS_FAIL); } + } + + private int getUserCouponOrderCount(WxCUser user, WxCoupon counpon) { + // 用户购买的券包数量 + // + couponOrder ---待使用 try { WxCouponOrder couponOrderQ = new WxCouponOrder(); couponOrderQ.setTenantId(user.getTenantId()); couponOrderQ.setCouponId(counpon.getId()); couponOrderQ.setcUserId(user.getId()); - if (counpon.getSendType().equals(EnumCouponSendType.PASSIVE)) + if (counpon.getSendType().equals(EnumCouponSendType.PASSIVE)) { couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); - countCouponOrder = wxCouponOrderMapper.findCount(couponOrderQ); + } + return wxCouponOrderMapper.findCount(couponOrderQ); } catch (Exception e) { logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.ORDER_IS_FAIL); } - return countOrder + countCouponOrder; } + private void stockReduce(WxCUser user, WxCoupon coupon, String couponIdStr) { long time = System.currentTimeMillis() + RedisLock.TIMEOUT; String timeStr = String.valueOf(time); @@ -253,16 +236,30 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY); } - // check 购买是否超限 + // 检查是否未支付订单 int count = 0; try { - count = getUserCouponOrderCount(user, coupon); + count = getUserOrderCount(user, coupon); } catch (Exception e) { //解锁 redisLock.unlock(couponIdStr, timeStr); throw new MallinkException(ErrorCode.DB_FAIL); } + if (count > 0) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + logger.error("此券购买数量已超限, couponId: " + couponIdStr + ", count: " + count); + throw new MallinkException(ErrorCode.ORDER_UNPAID); + } + //检查已购买数量 + try { + count = getUserCouponOrderCount(user, coupon); + } catch (Exception e) { + //解锁 + redisLock.unlock(couponIdStr, timeStr); + throw new MallinkException(ErrorCode.DB_FAIL); + } if (count >= coupon.getUseLimitQuantity()) { //解锁 redisLock.unlock(couponIdStr, timeStr); @@ -270,7 +267,6 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.ORDER_IS_LIMITED); } - try { WxCoupon updateRecord = new WxCoupon(); updateRecord.setId(coupon.getId());