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(); Integer order_item_inventory_lock = order_item_row.getOrder_item_inventory_lock();
String item_src_id = order_item_row.getItem_src_id(); 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)) { if (ObjectUtil.equal(1002, order_item_inventory_lock) && CheckUtil.isNotEmpty(item_src_id)) {
Long item_id = order_item_row.getItem_id(); Long item_id = order_item_row.getItem_id();
if (shopProductItemService.lockSkuStock(item_id, order_item_row.getOrder_item_quantity()) <= 0) { 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)); throw new ApiException(String.format(I18nUtil._("更改: %s 冻结库存失败!"), item_id));
} }
logger.debug("成功执行订单商品item_src_id:{} 锁定库存:{}", item_src_id, order_item_inventory_lock);
// RMK 第三方数据同步相关redis 给这个商品减去对应的库存 // RMK 第三方数据同步相关redis 给这个商品减去对应的库存
Map<String, Integer> stockDeltaMap = new HashMap<>(); Map<String, Integer> stockDeltaMap = new HashMap<>();
stockDeltaMap.put(item_src_id, -order_item_quantity); 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.ShopUserFavoritesItemService;
import com.suisung.mall.shop.user.service.ShopUserProductBrowseService; import com.suisung.mall.shop.user.service.ShopUserProductBrowseService;
import io.seata.spring.annotation.GlobalTransactional; import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -90,6 +91,7 @@ import static com.suisung.mall.common.utils.I18nUtil._;
* @author Xinze * @author Xinze
* @since 2021-04-07 * @since 2021-04-07
*/ */
@Slf4j
@Service @Service
public class ShopProductItemServiceImpl extends BaseServiceImpl<ShopProductItemMapper, ShopProductItem> implements ShopProductItemService { public class ShopProductItemServiceImpl extends BaseServiceImpl<ShopProductItemMapper, ShopProductItem> implements ShopProductItemService {
@ -2237,17 +2239,34 @@ public class ShopProductItemServiceImpl extends BaseServiceImpl<ShopProductItemM
} }
/** /**
* 锁定库存 * 锁定SKU库存
* *
* @param itemId * @param itemId 商品SKU ID
* @param cart_quantity * @param cartQuantity 购物车商品数量
* @return * @return 影响的行数1表示锁定成功0表示锁定失败库存不足
*/ */
@Override @Override
public int lockSkuStock(Long itemId, int cart_quantity) { public int lockSkuStock(Long itemId, int cartQuantity) {
int flag = this.baseMapper.lockSkuStock(itemId, cart_quantity); // 参数校验
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); 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 @Override