|
|
@@ -74,7 +74,10 @@ public class ProductOrderService {
|
|
|
if (!"on_shelf".equals(product.getStatus())) {
|
|
|
return Result.error("商品已下架");
|
|
|
}
|
|
|
- if (product.getStock() != null && product.getStock() < dto.getQuantity()) {
|
|
|
+ // 实物商品校验库存;虚拟商品/优惠券跳过库存检查
|
|
|
+ if ("physical".equals(product.getProductType())
|
|
|
+ && product.getStock() != null
|
|
|
+ && product.getStock() < dto.getQuantity()) {
|
|
|
return Result.error("库存不足");
|
|
|
}
|
|
|
|
|
|
@@ -122,7 +125,10 @@ public class ProductOrderService {
|
|
|
if (!"on_shelf".equals(product.getStatus())) {
|
|
|
return Result.error("商品已下架: " + product.getName());
|
|
|
}
|
|
|
- if (product.getStock() != null && product.getStock() < item.getQuantity()) {
|
|
|
+ // 实物商品校验库存;虚拟商品/优惠券跳过库存检查
|
|
|
+ if ("physical".equals(product.getProductType())
|
|
|
+ && product.getStock() != null
|
|
|
+ && product.getStock() < item.getQuantity()) {
|
|
|
return Result.error("库存不足: " + product.getName());
|
|
|
}
|
|
|
totalAmount += product.getPrice() * item.getQuantity();
|
|
|
@@ -186,16 +192,18 @@ public class ProductOrderService {
|
|
|
if (!"pending".equals(order.getStatus())) {
|
|
|
return Result.success("订单状态非待支付,跳过");
|
|
|
}
|
|
|
- // Deduct stock (optimistic lock - check return value)
|
|
|
- boolean stockOk = productService.decreaseStock(order.getProductId(), order.getQuantity());
|
|
|
- if (!stockOk) {
|
|
|
- log.error("库存扣减失败: orderNo={}, productId={}, quantity={}",
|
|
|
- orderNo, order.getProductId(), order.getQuantity());
|
|
|
- // Mark order abnormal - requires manual intervention
|
|
|
- order.setRemark("库存扣减失败");
|
|
|
- order.setUpdatedAt(new Date());
|
|
|
- orderMapper.updateById(order);
|
|
|
- throw new RuntimeException("库存不足");
|
|
|
+ // 仅对实物商品扣减库存;虚拟商品/优惠券无库存概念
|
|
|
+ Product paidProduct = productMapper.selectById(order.getProductId());
|
|
|
+ if (paidProduct != null && "physical".equals(paidProduct.getProductType())) {
|
|
|
+ boolean stockOk = productService.decreaseStock(order.getProductId(), order.getQuantity());
|
|
|
+ if (!stockOk) {
|
|
|
+ log.error("库存扣减失败: orderNo={}, productId={}, quantity={}",
|
|
|
+ orderNo, order.getProductId(), order.getQuantity());
|
|
|
+ order.setRemark("库存扣减失败");
|
|
|
+ order.setUpdatedAt(new Date());
|
|
|
+ orderMapper.updateById(order);
|
|
|
+ throw new RuntimeException("库存不足");
|
|
|
+ }
|
|
|
}
|
|
|
order.setStatus("paid");
|
|
|
order.setTransactionId(transactionId);
|