|
|
|
@@ -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<Integer> 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<Integer> statusS = new ArrayList<Integer>(); |
|
|
|
List<Integer> 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()); |
|
|
|
|