From cbed988f4a817d725230d2ed731275de6f4167a7 Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Wed, 22 Oct 2025 17:33:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=91=E8=B4=A7=E5=90=8E?= =?UTF-8?q?=E7=9A=84=E8=93=9D=E9=A9=B0=E7=B3=BB=E7=BB=9F=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E6=89=A3=E5=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SFExpressApiServiceImpl.java | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index 9262529c..72c559f3 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -24,6 +24,7 @@ import com.suisung.mall.common.domain.UserDto; import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.modules.order.ShopOrderBase; import com.suisung.mall.common.modules.order.ShopOrderItem; +import com.suisung.mall.common.modules.product.ShopProductItem; import com.suisung.mall.common.modules.store.ShopMchEntry; import com.suisung.mall.common.modules.store.ShopStoreSameCityTransportBase; import com.suisung.mall.common.modules.store.ShopStoreSfOrder; @@ -36,6 +37,7 @@ import com.suisung.mall.shop.order.service.ShopOrderBaseService; import com.suisung.mall.shop.order.service.ShopOrderInfoService; import com.suisung.mall.shop.order.service.ShopOrderItemService; import com.suisung.mall.shop.order.service.ShopOrderReturnService; +import com.suisung.mall.shop.product.service.ShopProductItemService; import com.suisung.mall.shop.sfexpress.service.SFExpressApiService; import com.suisung.mall.shop.store.service.ShopMchEntryService; import com.suisung.mall.shop.store.service.ShopStoreSameCityTransportBaseService; @@ -57,6 +59,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static com.suisung.mall.common.utils.I18nUtil._; + @Service public class SFExpressApiServiceImpl implements SFExpressApiService { private static final Logger logger = LoggerFactory.getLogger(SFExpressApiServiceImpl.class); @@ -112,6 +116,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { @Autowired private ShopOrderItemService shopOrderItemService; + @Autowired + private ShopProductItemService shopProductItemService; + /** * 创建顺丰同店铺-连锁店铺 * @@ -1020,14 +1027,17 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { //出库扣减思迅库存star // RMK 第三方数据同步相关:redis 给这个商品减去对应的库存 QueryWrapper itemQueryWrapper = new QueryWrapper<>(); - String order_id = shopStoreSfOrder.getShop_order_id(); + String order_id=shopStoreSfOrder.getShop_order_id(); itemQueryWrapper.eq("order_id", order_id); List order_item_rows = shopOrderItemService.find(itemQueryWrapper); - if (!order_item_rows.isEmpty()) { + if(picking(order_item_rows)){ + logger.info("顺丰发货商品扣减库存成功"); + } + if(!order_item_rows.isEmpty()){ for (ShopOrderItem shopOrderItem : order_item_rows) { Map stockDeltaMap = new HashMap<>(); - String item_src_id = shopOrderItem.getItem_src_id(); - Integer order_item_quantity = shopOrderItem.getOrder_item_quantity(); + String item_src_id= shopOrderItem.getItem_src_id(); + Integer order_item_quantity=shopOrderItem.getOrder_item_quantity(); stockDeltaMap.put(item_src_id + "-" + shopStoreSfOrder.getShop_order_id(), -order_item_quantity); syncThirdDataService.incrProductStockToRedis(stockDeltaMap); } @@ -1185,6 +1195,9 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { QueryWrapper itemQueryWrapper = new QueryWrapper<>(); itemQueryWrapper.eq("order_id", orderId); List order_item_rows = shopOrderItemService.find(itemQueryWrapper); + if(picking(order_item_rows)){ + logger.info("自行发货商品扣减库存成功"); + } if(!order_item_rows.isEmpty()){ for (ShopOrderItem shopOrderItem : order_item_rows) { Map stockDeltaMap = new HashMap<>(); @@ -1203,6 +1216,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { * 商家自行配送完成订单 * @param shopOrderId */ + @Override public CommonResult selFinishOrder(String shopOrderId) { Integer orderStatus = StateCode.ORDER_STATE_RECEIVED; //已签收 ShopOrderBase shopOrderBase = checkedOrder(shopOrderId); @@ -1218,6 +1232,36 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { return CommonResult.success("操作成功"); } + /** + * 根据订单列表扣除商品库存 + * @param order_item_rows + * @return + */ + public boolean picking(List order_item_rows){ + logger.info("出库商品扣除库存--开始"); + List updateProductItems = new ArrayList<>(); + for (ShopOrderItem shopOrderItem : order_item_rows) { + Long item_id = Long.valueOf(shopOrderItem.getItem_src_id()); + ShopProductItem productItem = shopProductItemService.get(item_id); + if (productItem == null) { + throw new ApiException(String.format(_("SKU【%s】不存在!"), item_id)); + } + Integer item_change_quantity=shopOrderItem.getOrder_item_quantity()*-1; + Integer quantity = productItem.getItem_quantity() + item_change_quantity; + if (quantity.compareTo(0) < 0) { + quantity = 0; + } + productItem.setItem_quantity(quantity); + //防止负数 + Integer tmp_quantity = productItem.getItem_quantity_frozen() + item_change_quantity.intValue(); + if (tmp_quantity.compareTo(0) < 0) { + tmp_quantity = 0; + } + productItem.setItem_quantity_frozen(tmp_quantity); + updateProductItems.add(productItem); + } + return shopProductItemService.updateBatchById(updateProductItems,updateProductItems.size()); + } // 私有方法