diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java
index b476d72..285b961 100644
--- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java
+++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java
@@ -217,12 +217,17 @@ public class OrderApplicationService {
// 计算商品金额并验证库存
goodsModel.calculateTotal();
goodsModel.validateQuantity();
+ CabinetCellEntity cabinetCellEntity = cabinetCellService.getById(goodsModel.getCellId());
+ if (cabinetCellEntity == null || cabinetCellEntity.getStock() < goodsModel.getQuantity()) {
+ throw new ApiException(ErrorCode.FAILED, "柜子库存不足");
+ }
// 保存订单商品
goodsModel.insert();
// 扣减库存
- deductGoodsStock(goodsModel.getGoodsId(), goodsModel.getQuantity(), goodsModel.getCellId());
+ // 改为收到支付成功后扣减库存
+// deductGoodsStock(goodsModel.getGoodsId(), goodsModel.getQuantity(), goodsModel.getCellId());
totalAmount = totalAmount.add(goodsModel.getTotalAmount());
}
@@ -233,24 +238,6 @@ public class OrderApplicationService {
orderModel.updateById();
}
- private void deductGoodsStock(Long goodsId, Integer quantity, Long cellId) {
- CabinetCellEntity cabinetCellEntity = cabinetCellService.getById(cellId);
- if (cabinetCellEntity == null || cabinetCellEntity.getStock() < quantity) {
- throw new ApiException(ErrorCode.FAILED, "柜子库存不足");
- }
-
- ShopGoodsEntity goods = goodsService.getById(goodsId);
- if (goods == null || goods.getStock() < quantity) {
- throw new ApiException(ErrorCode.FAILED, "商品库存不足");
- }
-
- // 扣减库存
- cabinetCellEntity.setStock(cabinetCellEntity.getStock() - quantity);
- cabinetCellService.updateById(cabinetCellEntity);
- goods.setStock(goods.getStock() - quantity);
- goodsService.updateById(goods);
- }
-
@Transactional
public void cancelOrder(Long orderId) {
OrderModel orderModel = orderModelFactory.loadById(orderId);
diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java
index a807897..aeed0b4 100644
--- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java
+++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java
@@ -5,6 +5,8 @@ import org.apache.ibatis.annotations.Select;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+
/**
*
* 订单商品明细表 Mapper 接口
@@ -18,4 +20,6 @@ public interface ShopOrderGoodsMapper extends BaseMapper {
@Select("SELECT * FROM shop_order_goods WHERE order_id = #{orderId} AND goods_id = #{goodsId} LIMIT 1")
ShopOrderGoodsEntity selectByOrderIdAndGoodsId(@Param("orderId") Long orderId, @Param("goodsId") Long goodsId);
+ @Select("SELECT * FROM shop_order_goods WHERE order_id = #{orderId} AND deleted = 0")
+ List selectByOrderId(@Param("orderId") Long orderId);
}
diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java
index cf6b3f7..78180f6 100644
--- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java
+++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java
@@ -2,6 +2,8 @@ package com.agileboot.domain.shop.order.db;
import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
/**
*
* 订单商品明细表 服务类
@@ -12,4 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ShopOrderGoodsService extends IService {
ShopOrderGoodsEntity getByOrderIdAndGoodsId(Long orderId, Long goodsId);
+
+ List selectByOrderId(Long orderId);
}
diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java
index 8279a31..ee37df4 100644
--- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java
+++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java
@@ -3,6 +3,8 @@ package com.agileboot.domain.shop.order.db;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
+import java.util.List;
+
/**
*
* 订单商品明细表 服务实现类
@@ -19,4 +21,9 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl selectByOrderId(Long orderId) {
+ return baseMapper.selectByOrderId(orderId);
+ }
+
}
diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java
index ccb92c8..55475ab 100644
--- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java
+++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModel.java
@@ -5,6 +5,10 @@ import cn.hutool.core.date.DateUtil;
import com.agileboot.common.config.AgileBootConfig;
import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode;
+import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity;
+import com.agileboot.domain.cabinet.cell.db.CabinetCellService;
+import com.agileboot.domain.shop.goods.db.ShopGoodsEntity;
+import com.agileboot.domain.shop.goods.db.ShopGoodsService;
import com.agileboot.domain.shop.order.db.ShopOrderEntity;
import com.agileboot.domain.shop.order.db.ShopOrderGoodsService;
import com.agileboot.domain.shop.order.db.ShopOrderService;
@@ -21,18 +25,23 @@ public class OrderModel extends ShopOrderEntity {
private ShopOrderService orderService;
private ShopOrderGoodsService orderGoodsService;
+ private CabinetCellService cabinetCellService;
+ private ShopGoodsService goodsService;
public OrderModel(ShopOrderEntity entity, ShopOrderService orderService,
- ShopOrderGoodsService orderGoodsService) {
- this(orderService, orderGoodsService);
+ ShopOrderGoodsService orderGoodsService, CabinetCellService cabinetCellService, ShopGoodsService goodsService) {
+ this(orderService, orderGoodsService, cabinetCellService, goodsService);
if (entity != null) {
BeanUtil.copyProperties(entity, this);
}
}
- public OrderModel(ShopOrderService orderService, ShopOrderGoodsService orderGoodsService) {
+ public OrderModel(ShopOrderService orderService, ShopOrderGoodsService orderGoodsService,
+ CabinetCellService cabinetCellService, ShopGoodsService goodsService) {
this.orderService = orderService;
this.orderGoodsService = orderGoodsService;
+ this.cabinetCellService = cabinetCellService;
+ this.goodsService = goodsService;
}
public void calculateTotalAmount(List goodsIds) {
@@ -85,6 +94,11 @@ public class OrderModel extends ShopOrderEntity {
log.error("支付时间转换失败", e);
}
this.updateById();
+
+ orderGoodsService.selectByOrderId(this.getOrderId()).forEach(orderGoods -> {
+ // 扣减库存
+ deductGoodsStock(orderGoods.getGoodsId(), orderGoods.getQuantity(), orderGoods.getCellId());
+ });
}
public void handleRefundSuccess() {
@@ -92,4 +106,22 @@ public class OrderModel extends ShopOrderEntity {
this.setPayStatus(4);
this.updateById();
}
+
+ private void deductGoodsStock(Long goodsId, Integer quantity, Long cellId) {
+ CabinetCellEntity cabinetCellEntity = cabinetCellService.getById(cellId);
+ if (cabinetCellEntity == null || cabinetCellEntity.getStock() < quantity) {
+ throw new ApiException(ErrorCode.FAILED, "柜子库存不足");
+ }
+
+ ShopGoodsEntity goods = goodsService.getById(goodsId);
+ if (goods == null || goods.getStock() < quantity) {
+ throw new ApiException(ErrorCode.FAILED, "商品库存不足");
+ }
+
+ // 扣减库存
+ cabinetCellEntity.setStock(cabinetCellEntity.getStock() - quantity);
+ cabinetCellService.updateById(cabinetCellEntity);
+ goods.setStock(goods.getStock() - quantity);
+ goodsService.updateById(goods);
+ }
}
\ No newline at end of file
diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModelFactory.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModelFactory.java
index 97e66fa..6173ed6 100644
--- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModelFactory.java
+++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/model/OrderModelFactory.java
@@ -2,6 +2,8 @@ package com.agileboot.domain.shop.order.model;
import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode;
+import com.agileboot.domain.cabinet.cell.db.CabinetCellService;
+import com.agileboot.domain.shop.goods.db.ShopGoodsService;
import com.agileboot.domain.shop.order.db.ShopOrderEntity;
import com.agileboot.domain.shop.order.db.ShopOrderGoodsService;
import com.agileboot.domain.shop.order.db.ShopOrderService;
@@ -14,13 +16,15 @@ public class OrderModelFactory {
private final ShopOrderService orderService;
private final ShopOrderGoodsService orderGoodsService;
+ private final CabinetCellService cabinetCellService;
+ private final ShopGoodsService goodsService;
public OrderModel create(ShopOrderEntity entity) {
- return new OrderModel(entity, orderService, orderGoodsService);
+ return new OrderModel(entity, orderService, orderGoodsService, cabinetCellService, goodsService);
}
public OrderModel create() {
- return new OrderModel(orderService, orderGoodsService);
+ return new OrderModel(orderService, orderGoodsService, cabinetCellService, goodsService);
}
public OrderModel loadById(Long orderId) {
@@ -28,6 +32,6 @@ public class OrderModelFactory {
if (entity == null) {
throw new ApiException(ErrorCode.Business.COMMON_OBJECT_NOT_FOUND, orderId, "订单");
}
- return new OrderModel(entity, orderService, orderGoodsService);
+ return new OrderModel(entity, orderService, orderGoodsService, cabinetCellService, goodsService);
}
}
\ No newline at end of file