diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index 5e6a6f897..08cdd0bcc 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -171,7 +171,7 @@ public class WxCardPayController extends BaseController { logger.error("卡不存在: " + cardIdStr); return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); } - return saveCardPayOrder(false,cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + return saveCardPayOrder(cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); } public ResultData savePasswordCardPayOrder(String cardIdStr,String totalFeeStr) { @@ -203,10 +203,10 @@ public class WxCardPayController extends BaseController { } WxCardInfo carInfo = wxCardInfoService.cardCreateByOffline(couponPassword, coupon); - return saveCardPayOrder(true,Constant.defaultCUserId,carInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + return saveCardPayOrder(Constant.defaultCUserId,carInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); } - private ResultData saveCardPayOrder(boolean reduceStock,Long cUserId,WxCardInfo cardInfo,WxMerchantBUser merchantBUser,String totalFeeStr,EnumPayWay payWay) { + private ResultData saveCardPayOrder(Long cUserId,WxCardInfo cardInfo,WxMerchantBUser merchantBUser,String totalFeeStr,EnumPayWay payWay) { if (EnumCardInfoStatus.STOP.getCode().intValue() == cardInfo.getStatus().intValue()) { return new ResultData(ErrorCode.CARD_IS_NOT_FOUND.getCode(),"卡已被禁用."); @@ -279,12 +279,8 @@ public class WxCardPayController extends BaseController { record.setRemark("操作于["+payWay.getMessage()+"("+payWay.getCode()+")]"); Integer couponNumber = null; - if (reduceStock) { - couponNumber = 1; - } - try { - return wxCardSpendService.createCardSpend(record, order, couponMerchant,couponNumber,payWay); + return wxCardSpendService.createCardSpend(record, order, couponMerchant,payWay); } catch (MallinkException e) { logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java index cccb1ba03..13d2c869d 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -188,7 +188,7 @@ public class WxCardPayController extends BaseController { record.setRemark("操作于["+payWay.getMessage()+"("+payWay.getCode()+")]"); try { - return wxCardSpendService.createCardSpend(record, order, couponMerchant,null,payWay); + return wxCardSpendService.createCardSpend(record, order, couponMerchant,payWay); } catch (MallinkException e) { logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java b/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java index 9978bc017..6aad1ce79 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java @@ -28,7 +28,7 @@ public interface WxCardSpendService { * @param order * @return */ - ResultData createCardSpend(WxCardSpend record, WxOrder order, WxCouponMerchant couponMerchant,Integer reduceCouponNumber,EnumPayWay payWay); + ResultData createCardSpend(WxCardSpend record, WxOrder order, WxCouponMerchant couponMerchant,EnumPayWay payWay); /** * 根据实体查询分页列表 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java index 23b70583f..d1fa51a93 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -3,7 +3,9 @@ package com.iformall.service.impl; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; +import com.iformall.common.ResultData; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCardInfo; import com.iformall.domain.po.WxCoupon; @@ -14,11 +16,14 @@ import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCardVo; import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.domain.vo.WxCouponPasswordVo; +import com.iformall.enums.EnumCacheKey; +import com.iformall.enums.EnumCardInfoStatus; import com.iformall.enums.EnumCardInfoType; import com.iformall.enums.EnumCouponPasswordStatus; import com.iformall.enums.EnumCouponPasswordSupport; import com.iformall.enums.EnumCouponType; import com.iformall.enums.EnumYesOrNo; +import com.iformall.exception.MallinkException; import com.iformall.mapper.WxCardInfoMapper; import com.iformall.mapper.WxCouponChannelMapper; import com.iformall.mapper.WxCouponMapper; @@ -27,6 +32,7 @@ import com.iformall.mapper.WxCouponPasswordMapper; import com.iformall.service.ExcelService; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCardInfoService; +import com.iformall.service.WxCouponService; import com.iformall.utils.Constant; import com.iformall.utils.RedisLock; @@ -59,9 +65,6 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Autowired WxCouponChannelMapper wxCouponChannelMapper; - @Autowired - RedisLock redisLock; - @Autowired WxCouponPasswordMapper couponPasswordMapper; @@ -75,6 +78,13 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Autowired WxCouponOrderMapper wxCouponOrderMapper; + @Lazy + @Autowired + WxCouponService wxCouponService; + + @Autowired + RedisLock redisLock; + @Override @@ -302,6 +312,7 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { cardInfo.setRemainingShareFeeAmount(0); cardInfo.setRateAmount(0); cardInfo.setType(EnumCardInfoType.CARD.getCode()); + cardInfo.setStatus(EnumCardInfoStatus.NORMAL.getCode()); if (coupon.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) { WxCouponPassword updateCPwd = new WxCouponPassword(); updateCPwd.setId(couponPassword.getId()); @@ -318,6 +329,14 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { cardInfo.setUpdateDate(new Date()); cardInfo.setSupportTransfer(coupon.getSupportTransfer()); wxCardInfoMapper.insert(cardInfo); + + //扣减库存 + wxCouponService.reduceRemainInventory(coupon,coupon.getId(),1); + long stock = redisLock.decrease(EnumCacheKey.COUPON_STOCK.getMessage()+coupon.getId(), 1); + if (stock < 0 ) { + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(),"库存不足"); + } + } redisLock.unlock("cardInfoLockSet_"+couponPassword.getId(), timeStr); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index ffb5d03e2..c8eb9ec07 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -93,13 +93,6 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { @Autowired WxCouponChannelMapper wxCouponChannelMapper; - @Lazy - @Autowired - WxCouponService wxCouponService; - - @Autowired - RedisLock redisLock; - @Override public WxCouponMerchant checkMerchantInCoupon(WxCardInfo cardInfo, Long merchantId) { WxCouponMerchant couponMerchant = null; @@ -118,7 +111,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public ResultData createCardSpend(WxCardSpend record, WxOrder order, WxCouponMerchant couponMerchant,Integer reduceCouponNumber,EnumPayWay payWay) { + public ResultData createCardSpend(WxCardSpend record, WxOrder order, WxCouponMerchant couponMerchant,EnumPayWay payWay) { Date curDate = new Date(); final IdWorker idWorker = IdWorker.get(); // 1. get card info @@ -148,15 +141,6 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { if(payAccount == null){ return new ResultData(ErrorCode.API_KEY_NOT_FOUND); } - - //扣减库存 - if (null != reduceCouponNumber && reduceCouponNumber > 0) { - wxCouponService.reduceRemainInventory(coupon,coupon.getId(),reduceCouponNumber); - long stock = redisLock.decrease(EnumCacheKey.COUPON_STOCK.getMessage()+coupon.getId(), reduceCouponNumber); - if (stock < 0 ) { - return new ResultData(ErrorCode.API_KEY_NOT_FOUND.getCode(),"库存不足"); - } - } // 4. 扣减计算 Double paymentD = 1.0 * cardInfo.getSaleAmount() * record.getDeductionAmount() / cardInfo.getAmount();