修复订单支付时由于商品库存不足引起订单创建失败问题,库存不足提示 xxx库存不足

This commit is contained in:
LionCity
2020-05-30 16:47:56 +08:00
parent 3576dfafc3
commit 90d217c583
3 changed files with 67 additions and 51 deletions

View File

@ -54,11 +54,7 @@ import co.yixiang.modules.shop.entity.YxStoreCart;
import co.yixiang.modules.shop.entity.YxStoreCouponUser;
import co.yixiang.modules.shop.mapper.YxStoreCartMapper;
import co.yixiang.modules.shop.mapper.YxStoreCouponUserMapper;
import co.yixiang.modules.shop.service.YxStoreCouponUserService;
import co.yixiang.modules.shop.service.YxStoreProductReplyService;
import co.yixiang.modules.shop.service.YxStoreProductService;
import co.yixiang.modules.shop.service.YxSystemConfigService;
import co.yixiang.modules.shop.service.YxSystemStoreService;
import co.yixiang.modules.shop.service.*;
import co.yixiang.modules.shop.web.vo.YxStoreCartQueryVo;
import co.yixiang.modules.shop.web.vo.YxSystemStoreQueryVo;
import co.yixiang.modules.user.entity.YxUser;
@ -172,7 +168,8 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<YxStoreOrderMapper,
@Autowired
private OrderMap orderMap;
@Autowired
private YxStoreCartService yxStoreCartService;
//@Autowired
//private MqProducer mqProducer;
@ -1255,6 +1252,10 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<YxStoreOrderMapper,
int bargainId = 0;
for (YxStoreCartQueryVo cart : cartInfo) {
yxStoreCartService.checkProductStock(uid,cart.getProductId(),cart.getCartNum(),
cart.getProductAttrUnique(), cart.getCombinationId(),cart.getSeckillId(),cart.getBargainId());
combinationId = cart.getCombinationId();
seckillId = cart.getSeckillId();
bargainId = cart.getBargainId();

View File

@ -44,5 +44,16 @@ public interface YxStoreCartService extends BaseService<YxStoreCart> {
*/
YxStoreCartQueryVo getYxStoreCartById(Serializable id);
/**
* 验证产品库存是否足够
* @param uid 用户ID
* @param productId 产品ID
* @param cartNum 购买数量
* @param productAttrUnique 商品属性Unique
* @param combinationId 拼团产品ID
* @param seckillId 秒杀产品ID
* @param bargainId 砍价产品ID
*/
void checkProductStock(int uid, int productId, int cartNum, String productAttrUnique,
int combinationId, int seckillId, int bargainId);
}

View File

@ -268,51 +268,8 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl<YxStoreCartMapper, Y
@Override
public int addCart(int uid, int productId, int cartNum, String productAttrUnique,
String type, int isNew, int combinationId, int seckillId, int bargainId) {
//todo 拼团
if(combinationId > 0){
boolean isStock = storeCombinationService.judgeCombinationStock(combinationId
,cartNum);
if(!isStock) throw new ErrorRequestException("该产品库存不足");
YxStoreCombination storeCombination = storeCombinationService.getCombination(combinationId);
if(ObjectUtil.isNull(storeCombination)) throw new ErrorRequestException("该产品已下架或删除");
}else if(seckillId > 0){//秒杀
YxStoreSeckill yxStoreSeckill = storeSeckillService.getSeckill(seckillId);
if(ObjectUtil.isNull(yxStoreSeckill)){
throw new ErrorRequestException("该产品已下架或删除");
}
if(yxStoreSeckill.getStock() < cartNum){
throw new ErrorRequestException("该产品库存不足");
}
int seckillOrderCount = storeOrderService.count(new QueryWrapper<YxStoreOrder>()
.eq("uid", uid).eq("paid",1).eq("seckill_id",seckillId));
if(yxStoreSeckill.getNum() <= seckillOrderCount || yxStoreSeckill.getNum() < cartNum){
throw new ErrorRequestException("每人限购:"+yxStoreSeckill.getNum()+"");
}
}else if(bargainId > 0){//砍价
YxStoreBargain yxStoreBargain = storeBargainService.getBargain(bargainId);
if(ObjectUtil.isNull(yxStoreBargain)){
throw new ErrorRequestException("该产品已下架或删除");
}
if(yxStoreBargain.getStock() < cartNum){
throw new ErrorRequestException("该产品库存不足");
}
}else{
YxStoreProductQueryVo productQueryVo = productService
.getYxStoreProductById(productId);
if(ObjectUtil.isNull(productQueryVo)){
throw new ErrorRequestException("该产品已下架或删除");
}
int stock = productService.getProductStock(productId,productAttrUnique);
if(stock < cartNum){
throw new ErrorRequestException("该产品库存不足"+cartNum);
}
}
checkProductStock(uid,productId,cartNum,productAttrUnique,combinationId,seckillId,bargainId);
QueryWrapper<YxStoreCart> wrapper = new QueryWrapper<>();
wrapper.eq("uid",uid).eq("type",type).eq("is_pay",0).eq("is_del",0)
.eq("product_id",productId)
@ -365,6 +322,53 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl<YxStoreCartMapper, Y
return yxStoreCartMapper.getYxStoreCartById(id);
}
@Override
public void checkProductStock(int uid, int productId, int cartNum, String productAttrUnique, int combinationId, int seckillId, int bargainId) {
//todo 拼团
if(combinationId > 0){
boolean isStock = storeCombinationService.judgeCombinationStock(combinationId
,cartNum);
if(!isStock) throw new ErrorRequestException("该产品库存不足");
YxStoreCombination storeCombination = storeCombinationService.getCombination(combinationId);
if(ObjectUtil.isNull(storeCombination)) throw new ErrorRequestException("该产品已下架或删除");
}else if(seckillId > 0){//秒杀
YxStoreSeckill yxStoreSeckill = storeSeckillService.getSeckill(seckillId);
if(ObjectUtil.isNull(yxStoreSeckill)){
throw new ErrorRequestException("该产品已下架或删除");
}
if(yxStoreSeckill.getStock() < cartNum){
throw new ErrorRequestException("该产品库存不足");
}
int seckillOrderCount = storeOrderService.count(new QueryWrapper<YxStoreOrder>()
.eq("uid", uid).eq("paid",1).eq("seckill_id",seckillId));
if(yxStoreSeckill.getNum() <= seckillOrderCount || yxStoreSeckill.getNum() < cartNum){
throw new ErrorRequestException("每人限购:"+yxStoreSeckill.getNum()+"");
}
}else if(bargainId > 0){//砍价
YxStoreBargain yxStoreBargain = storeBargainService.getBargain(bargainId);
if(ObjectUtil.isNull(yxStoreBargain)){
throw new ErrorRequestException("该产品已下架或删除");
}
if(yxStoreBargain.getStock() < cartNum){
throw new ErrorRequestException("该产品库存不足");
}
}else{
YxStoreProductQueryVo productQueryVo = productService
.getYxStoreProductById(productId);
if(ObjectUtil.isNull(productQueryVo)){
throw new ErrorRequestException("该产品已下架或删除");
}
int stock = productService.getProductStock(productId,productAttrUnique);
if(stock < cartNum){
throw new ErrorRequestException(productQueryVo.getStoreName()+"库存不足"+cartNum);
}
}
}
}