From 65b6dbd1d971f83b811d4f9b1907e8bfe17f3ff7 Mon Sep 17 00:00:00 2001 From: dzq Date: Fri, 18 Apr 2025 16:27:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=BA=93=E5=AD=98=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=95=86=E5=93=81=E5=92=8C=E6=9F=9C=E6=9C=BA?= =?UTF-8?q?=E6=A0=BC=E5=8F=A3=E5=BA=93=E5=AD=98=E5=90=8C=E6=AD=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复了商品和柜机格口库存不同步的问题,确保在订单创建和退货审批时,商品库存和柜机格口库存能够正确扣减和增加。具体修改包括: 1. 在订单创建时,同时扣减商品和柜机格口的库存。 2. 在退货审批时,同时增加商品和柜机格口的库存。 3. 更新SQL查询以包含柜机格口的库存信息。 --- .../approval/ReturnApprovalApplicationService.java | 8 ++++++++ .../domain/shop/goods/db/ShopGoodsMapper.java | 5 ++++- .../domain/shop/order/OrderApplicationService.java | 13 +++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index 46b16bd..65b041a 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -2,6 +2,8 @@ package com.agileboot.domain.shop.approval; import com.agileboot.common.constant.PayApiConstants; import com.agileboot.common.core.page.PageDTO; +import com.agileboot.domain.cabinet.cell.model.CabinetCellModel; +import com.agileboot.domain.cabinet.cell.model.CabinetCellModelFactory; import com.agileboot.domain.common.command.BulkOperationCommand; import com.agileboot.domain.qywx.accessToken.AccessTokenApplicationService; import com.agileboot.domain.qywx.accessToken.db.QyAccessTokenEntity; @@ -59,6 +61,7 @@ public class ReturnApprovalApplicationService { private final AuthCorpInfoApplicationService authCorpInfoApplicationService; private final AccessTokenApplicationService accessTokenApplicationService; private final QyUserService qyUserService; + private final CabinetCellModelFactory cabinetCellModelFactory; /** * 获取退货审批列表 @@ -167,6 +170,11 @@ public class ReturnApprovalApplicationService { GoodsModel goodsModel = goodsModelFactory.loadById(orderGoodsModel.getGoodsId()); goodsModel.setStock(goodsModel.getStock() + orderGoodsModel.getQuantity()); goodsModel.updateById(); + + // 更新格口库存 + CabinetCellModel cabinetCellModel = cabinetCellModelFactory.loadById(orderGoodsModel.getCellId()); + cabinetCellModel.setStock(cabinetCellModel.getStock() + orderGoodsModel.getQuantity()); + cabinetCellModel.updateById(); } /** diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java index 7a43c3f..3d4f156 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsMapper.java @@ -63,7 +63,10 @@ public interface ShopGoodsMapper extends BaseMapper { * 查询商品及其关联的柜机格口信息 * @return 商品列表 */ - @Select("SELECT g.*, sc.cabinet_id, sc.cabinet_name, cc.cell_id " + + @Select("SELECT g.goods_id, g.goods_name, g.category_id, g.price, " + + "g.status, g.cover_img, g.goods_detail, " + + "g.creator_id, g.create_time, g.updater_id, g.update_time, g.remark, g.deleted, " + + "sc.cabinet_id, sc.cabinet_name, cc.stock, cc.cell_id " + "FROM shop_goods g " + "LEFT JOIN cabinet_cell cc ON g.goods_id = cc.goods_id " + "LEFT JOIN smart_cabinet sc ON cc.cabinet_id = sc.cabinet_id " + 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 e62b9e7..1ddd67b 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 @@ -197,7 +197,7 @@ public class OrderApplicationService { goodsModel.insert(); // 扣减库存 - deductGoodsStock(goodsModel.getGoodsId(), goodsModel.getQuantity()); + deductGoodsStock(goodsModel.getGoodsId(), goodsModel.getQuantity(), goodsModel.getCellId()); totalAmount = totalAmount.add(goodsModel.getTotalAmount()); } @@ -208,11 +208,20 @@ public class OrderApplicationService { orderModel.updateById(); } - private void deductGoodsStock(Long goodsId, Integer quantity) { + 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); }