Преглед изворни кода

fix bug

release_toaliyun_real
xiaohanzi пре 5 година
родитељ
комит
d910d21b65
2 измењених фајлова са 41 додато и 31 уклоњено
  1. +30
    -30
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  2. +11
    -1
      mallinkService/src/main/java/com/iformall/utils/RedisLock.java

+ 30
- 30
mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java Прегледај датотеку

@@ -610,7 +610,7 @@ public class WxOrderServiceImpl implements WxOrderService {
long redisStock = redisLock.getCouponStock(Long.parseLong(couponIdStr)); long redisStock = redisLock.getCouponStock(Long.parseLong(couponIdStr));
if (redisStock<=0) { if (redisStock<=0) {
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券库存已为零!");
throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"券库存已为零!:"+couponIdStr);
} }
// 检查 优惠券 库存 // 检查 优惠券 库存
if (coupon.getRemainInventory() <= 0) { if (coupon.getRemainInventory() <= 0) {
@@ -1067,13 +1067,6 @@ public class WxOrderServiceImpl implements WxOrderService {


/// 储值卡信息添加 /// 储值卡信息添加
if (isCard) { if (isCard) {
//判断该transctionId是否已经存在,如果存在,则不添加
WxCardInfo cardInfoq = new WxCardInfo();
cardInfoq.setTransactionId(payOrder.getTransactionId());
List<WxCardInfo> cardInfoList = wxCardInfoMapper.findList(cardInfoq);
if (null != cardInfoList && cardInfoList.size() > 0) {
//do nothing
}else {
Integer fee = 0; Integer fee = 0;
WxCardInfo cardInfo = new WxCardInfo(); WxCardInfo cardInfo = new WxCardInfo();
cardInfo.setId(couponOrder.getId()); cardInfo.setId(couponOrder.getId());
@@ -1083,27 +1076,35 @@ public class WxOrderServiceImpl implements WxOrderService {
cardInfo.setSaleAmount(coupon.getSalePrice()); cardInfo.setSaleAmount(coupon.getSalePrice());
cardInfo.setRemainingAmount(coupon.getPrice()); cardInfo.setRemainingAmount(coupon.getPrice());
if (!coupon.checkIsFree()) { if (!coupon.checkIsFree()) {
// 有价卡
cardInfo.setTransactionId(payOrder.getTransactionId());
if (payOrder.getShareAmount() != null) {
// 开启分账
fee = payOrder.getPayAmount() - payOrder.getShareAmount();
cardInfo.setShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRateAmount(payOrder.getRateAmount());
} else {
// 未开启分账
fee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRate(), false);
Integer shareAmount = payOrder.getPayAmount() - fee;
cardInfo.setShareFeeAmount(shareAmount);
cardInfo.setRemainingShareFeeAmount(shareAmount);
if (payAccount.getRealRate() != null) {
int iRealChargeFee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRealRate(), true);
if (fee > iRealChargeFee) {
cardInfo.setRateAmount(fee - iRealChargeFee);
}
}
}
//判断该transctionId是否已经存在,如果存在,则不添加
WxCardInfo cardInfoq = new WxCardInfo();
cardInfoq.setTransactionId(payOrder.getTransactionId());
List<WxCardInfo> cardInfoList = wxCardInfoMapper.findList(cardInfoq);
if (null != cardInfoList && cardInfoList.size() > 0) {
//do nothing
}else {
// 有价卡
cardInfo.setTransactionId(payOrder.getTransactionId());
if (payOrder.getShareAmount() != null) {
// 开启分账
fee = payOrder.getPayAmount() - payOrder.getShareAmount();
cardInfo.setShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRateAmount(payOrder.getRateAmount());
} else {
// 未开启分账
fee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRate(), false);
Integer shareAmount = payOrder.getPayAmount() - fee;
cardInfo.setShareFeeAmount(shareAmount);
cardInfo.setRemainingShareFeeAmount(shareAmount);
if (payAccount.getRealRate() != null) {
int iRealChargeFee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRealRate(), true);
if (fee > iRealChargeFee) {
cardInfo.setRateAmount(fee - iRealChargeFee);
}
}
}
}
} else { } else {
// 免费卡 // 免费卡
cardInfo.setShareFeeAmount(0); cardInfo.setShareFeeAmount(0);
@@ -1130,7 +1131,6 @@ public class WxOrderServiceImpl implements WxOrderService {
} }
wxCardInfoMapper.insert(cardInfo); wxCardInfoMapper.insert(cardInfo);
} }
}
return couponOrder; return couponOrder;
} }




+ 11
- 1
mallinkService/src/main/java/com/iformall/utils/RedisLock.java Прегледај датотеку

@@ -133,6 +133,16 @@ public class RedisLock {
} }
public boolean hasCouponStockCache(long couponId) { public boolean hasCouponStockCache(long couponId) {
return stringRedisTemplate.hasKey(EnumCacheKey.COUPON_STOCK.getMessage()+String.valueOf(couponId));
//如果库存为零,这个时候同步一下数据库的库存,因为有的时候系统报错事务会胡滚,但是redis扣减库存执行了,所以为0的时候,跟数据库的同步一下
boolean booleanHasCache = stringRedisTemplate.hasKey(EnumCacheKey.COUPON_STOCK.getMessage()+String.valueOf(couponId));
if (booleanHasCache) {
long stockvalue = getCouponStock(couponId);
if (stockvalue > 0) {
return true;
}else {
return false;
}
}
return false;
} }
} }

Loading…
Откажи
Сачувај