This commit is contained in:
liyj 2025-09-24 14:46:56 +08:00
commit 69f71cc856
2 changed files with 30 additions and 7 deletions

View File

@ -3287,6 +3287,8 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
Integer order_item_inventory_lock = order_item_row.getOrder_item_inventory_lock();
String item_src_id = order_item_row.getItem_src_id();
logger.debug("尝试执行订单商品item_src_id:{} 锁定库存:{}", item_src_id, order_item_inventory_lock);
if (ObjectUtil.equal(1002, order_item_inventory_lock) && CheckUtil.isNotEmpty(item_src_id)) {
Long item_id = order_item_row.getItem_id();
if (shopProductItemService.lockSkuStock(item_id, order_item_row.getOrder_item_quantity()) <= 0) {
@ -3294,6 +3296,8 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl<ShopOrderBaseMappe
throw new ApiException(String.format(I18nUtil._("更改: %s 冻结库存失败!"), item_id));
}
logger.debug("成功执行订单商品item_src_id:{} 锁定库存:{}", item_src_id, order_item_inventory_lock);
// RMK 第三方数据同步相关redis 给这个商品减去对应的库存
Map<String, Integer> stockDeltaMap = new HashMap<>();
stockDeltaMap.put(item_src_id, -order_item_quantity);

View File

@ -59,6 +59,7 @@ import com.suisung.mall.shop.store.service.*;
import com.suisung.mall.shop.user.service.ShopUserFavoritesItemService;
import com.suisung.mall.shop.user.service.ShopUserProductBrowseService;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -90,6 +91,7 @@ import static com.suisung.mall.common.utils.I18nUtil._;
* @author Xinze
* @since 2021-04-07
*/
@Slf4j
@Service
public class ShopProductItemServiceImpl extends BaseServiceImpl<ShopProductItemMapper, ShopProductItem> implements ShopProductItemService {
@ -2237,17 +2239,34 @@ public class ShopProductItemServiceImpl extends BaseServiceImpl<ShopProductItemM
}
/**
* 锁定库存
* 锁定SKU库存
*
* @param itemId
* @param cart_quantity
* @return
* @param itemId 商品SKU ID
* @param cartQuantity 购物车商品数量
* @return 影响的行数1表示锁定成功0表示锁定失败库存不足
*/
@Override
public int lockSkuStock(Long itemId, int cart_quantity) {
int flag = this.baseMapper.lockSkuStock(itemId, cart_quantity);
public int lockSkuStock(Long itemId, int cartQuantity) {
// 参数校验
if (itemId == null || cartQuantity <= 0) {
log.warn("锁定SKU库存参数异常: itemId={}, cartQuantity={}", itemId, cartQuantity);
return 0;
}
// 调用Mapper方法锁定库存
int affectedRows = this.baseMapper.lockSkuStock(itemId, cartQuantity);
// 清理SKU库存缓存
cleanSkuStockCache(itemId);
return flag;
// 记录库存锁定操作日志
if (affectedRows > 0) {
log.debug("SKU库存锁定成功: itemId={}, cartQuantity={}, affectedRows={}", itemId, cartQuantity, affectedRows);
} else {
log.warn("SKU库存锁定失败可能库存不足: itemId={}, cartQuantity={}", itemId, cartQuantity);
}
return affectedRows;
}
@Override