Commit 714f0be5476bdd3d9a971a567709cd1392d77a7f
1 parent
a55ca877
【代码修复】MALL:更新库存时,同时更新销量,和 taobao 保持一致的逻辑
Showing
2 changed files
with
20 additions
and
7 deletions
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/sku/ProductSkuMapper.java
| ... | ... | @@ -26,7 +26,7 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> { |
| 26 | 26 | } |
| 27 | 27 | |
| 28 | 28 | /** |
| 29 | - * 更新 SKU 库存(增加) | |
| 29 | + * 更新 SKU 库存(增加)、销量(减少) | |
| 30 | 30 | * |
| 31 | 31 | * @param id 编号 |
| 32 | 32 | * @param incrCount 增加库存(正数) |
| ... | ... | @@ -34,13 +34,14 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> { |
| 34 | 34 | default void updateStockIncr(Long id, Integer incrCount) { |
| 35 | 35 | Assert.isTrue(incrCount > 0); |
| 36 | 36 | LambdaUpdateWrapper<ProductSkuDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<ProductSkuDO>() |
| 37 | - .setSql(" stock = stock + " + incrCount) | |
| 37 | + .setSql(" stock = stock + " + incrCount | |
| 38 | + + ", sales_count = sales_count - " + incrCount) | |
| 38 | 39 | .eq(ProductSkuDO::getId, id); |
| 39 | 40 | update(null, lambdaUpdateWrapper); |
| 40 | 41 | } |
| 41 | 42 | |
| 42 | 43 | /** |
| 43 | - * 更新 SKU 库存(减少) | |
| 44 | + * 更新 SKU 库存(减少)、销量(增加) | |
| 44 | 45 | * |
| 45 | 46 | * @param id 编号 |
| 46 | 47 | * @param incrCount 减少库存(负数) |
| ... | ... | @@ -48,10 +49,12 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> { |
| 48 | 49 | */ |
| 49 | 50 | default int updateStockDecr(Long id, Integer incrCount) { |
| 50 | 51 | Assert.isTrue(incrCount < 0); |
| 52 | + incrCount = - incrCount; // 取正 | |
| 51 | 53 | LambdaUpdateWrapper<ProductSkuDO> updateWrapper = new LambdaUpdateWrapper<ProductSkuDO>() |
| 52 | - .setSql(" stock = stock + " + incrCount) // 负数,所以使用 + 号 | |
| 54 | + .setSql(" stock = stock - " + incrCount | |
| 55 | + + ", sales_count = sales_count + " + incrCount) | |
| 53 | 56 | .eq(ProductSkuDO::getId, id) |
| 54 | - .ge(ProductSkuDO::getStock, -incrCount); // cas 逻辑 | |
| 57 | + .ge(ProductSkuDO::getStock, incrCount); | |
| 55 | 58 | return update(null, updateWrapper); |
| 56 | 59 | } |
| 57 | 60 | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java
| ... | ... | @@ -85,9 +85,19 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> { |
| 85 | 85 | * @param incrCount 增加的库存数量 |
| 86 | 86 | */ |
| 87 | 87 | default void updateStock(Long id, Integer incrCount) { |
| 88 | + // 拼接 SQL | |
| 89 | + if (incrCount == 0) { | |
| 90 | + return; | |
| 91 | + } | |
| 92 | + String sql; | |
| 93 | + if (incrCount > 0) { | |
| 94 | + sql = " stock = stock + " + incrCount + ", sales_count = sales_count - " + incrCount; | |
| 95 | + } else { | |
| 96 | + sql = " stock = stock - " + Math.abs(incrCount) + ", sales_count = sales_count + " + Math.abs(incrCount); | |
| 97 | + } | |
| 98 | + // 执行更新 | |
| 88 | 99 | LambdaUpdateWrapper<ProductSpuDO> updateWrapper = new LambdaUpdateWrapper<ProductSpuDO>() |
| 89 | - // 负数,所以使用 + 号 | |
| 90 | - .setSql(" stock = stock +" + incrCount) | |
| 100 | + .setSql(sql) | |
| 91 | 101 | .eq(ProductSpuDO::getId, id); |
| 92 | 102 | update(null, updateWrapper); |
| 93 | 103 | } | ... | ... |