From 4814ca202d3aedbcb9ddf2a348a391fe1b869a9c Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Thu, 6 Nov 2025 09:30:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=80=E6=AC=BE=E6=96=B0=E5=A2=9E=E6=80=BB?= =?UTF-8?q?=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sync/service/SyncThirdDataService.java | 4 +++- .../impl/SyncThirdDataServiceImpl.java | 19 ++++++++++++++----- sql/shop/dev/20251106_dml.sql | 1 + 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 sql/shop/dev/20251106_dml.sql diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java index 8857053c..01fec6db 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/SyncThirdDataService.java @@ -20,6 +20,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; @@ -138,8 +139,9 @@ public interface SyncThirdDataService { * * @param stockDeltaMap key 为商品唯一key,value 为库存增降量 例如 {"1234567890123": 100, "1234567890124": 50} 库存数为正负整数,单位可能是个数或重量(克) * 数量为正数时,库存数增加;数量为负数时,库存数减少 + * itemReturnAmount 退货时输入 */ - void incrProductStockToRedis(Map stockDeltaMap); + void incrProductStockToRedis(Map stockDeltaMap, BigDecimal itemReturnAmount); /** diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java index 7fee550a..cd95608a 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java @@ -903,12 +903,13 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements ProductQuantityConsumption productQuantityConsumption=new ProductQuantityConsumption(); String productKey= (String) k; String[] productKeyArrys=productKey.split("-"); - if(productKeyArrys.length!=3){ + if(productKeyArrys.length!=4){ return; } String productNumber=productKeyArrys[0]; String orderId=productKeyArrys[1]; String unitPrice=productKeyArrys[2]; + String saleAmount=productKeyArrys[3]; productQuantityConsumption.setConsumeId(IdUtil.getSnowflakeNextIdStr()); productQuantityConsumption.setOrderId(orderId); productQuantityConsumption.setProductNumber(productNumber); @@ -916,6 +917,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements productQuantityConsumption.setStoreId(Integer.valueOf(storeId)); productQuantityConsumption.setStatus(0); productQuantityConsumption.setUnitPrice(new BigDecimal(unitPrice)); + productQuantityConsumption.setSaleAmount(new BigDecimal(saleAmount)); productQuantityConsumptionList.add(productQuantityConsumption); }); return productQuantityConsumptionList; @@ -926,7 +928,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements } @Override - public void incrProductStockToRedis(Map stockDeltaMap) { + public void incrProductStockToRedis(Map stockDeltaMap, BigDecimal itemReturnAmount) { // 校验参数,避免空指针 if (CollectionUtil.isEmpty(stockDeltaMap)) { return; @@ -972,11 +974,12 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements continue; } } - cn.hutool.json.JSONArray array_item_spec= JSONUtil.parseArray(spuItem.getItem_spec()); + cn.hutool.json.JSONArray array_item_spec = JSONUtil.parseArray(spuItem.getItem_spec()); logger.info("array_item_spec:{}",array_item_spec); logger.info("key:{},Product_number:{}",key,itemId); if(array_item_spec.isEmpty()){ - redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPrice, delta.doubleValue()); + BigDecimal saleAmount=new BigDecimal(unitPrice).multiply(new BigDecimal(delta)); + redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPrice+"-"+saleAmount.toPlainString(), delta.doubleValue()); logger.info("存储无规格库存成功"); continue; } @@ -986,9 +989,15 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements BigDecimal unitWeight = itemQuarytys[0]; BigDecimal itemQuaryty = itemQuarytys[1]; BigDecimal unitPriceBg=new BigDecimal(unitPrice).divide(unitWeight,4, RoundingMode.HALF_UP); + + if(ObjectUtil.isNotNull(itemReturnAmount)){//退货 + itemQuaryty=itemReturnAmount.divide(unitPriceBg,4,RoundingMode.HALF_UP); + }else { + itemReturnAmount=unitPriceBg.multiply(itemQuaryty); + } logger.info("unitWeight-{};itemQuaryty-{};unitPriceBg-{}",unitWeight,itemQuaryty,unitPriceBg); // 使用 Redis 的 HINCRBY 保证原子性和高性能 - redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPriceBg.toPlainString(), itemQuaryty.doubleValue()); + redisTemplate.opsForHash().increment(key, itemId+"-"+orderId+"-"+unitPriceBg.toPlainString()+"-"+itemReturnAmount.toPlainString(), itemQuaryty.doubleValue()); logger.info("存储有规格库存成功",itemId+"-"+orderId+"-"+unitPriceBg.toPlainString()); } catch (Exception e) { logger.error("库存累计失败,productKey={}, delta={}, error={}", productKey, delta, e.getMessage(), e); diff --git a/sql/shop/dev/20251106_dml.sql b/sql/shop/dev/20251106_dml.sql new file mode 100644 index 00000000..8cabf5c2 --- /dev/null +++ b/sql/shop/dev/20251106_dml.sql @@ -0,0 +1 @@ +alter table product_quantity_consumption add column sale_amount decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单总额'; \ No newline at end of file