diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java index 2961b1e..1aaad30 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java @@ -161,4 +161,12 @@ public class ProductSpuController { return success(true); } + @PutMapping("/one-click-replenishment") + @Operation(summary = "一键补货 SPU Stock") + @PreAuthorize("@ss.hasPermission('product:spu:update')") + public CommonResult oneClickReplenishment(@RequestParam("deviceId") String deviceId) { + productSpuService.oneClickReplenishment(deviceId); + return success(true); + } + } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/channel/ChannelMapper.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/channel/ChannelMapper.java index 0d9190b..01b7494 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/channel/ChannelMapper.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/channel/ChannelMapper.java @@ -31,4 +31,8 @@ public interface ChannelMapper extends BaseMapperX { default ChannelDO selectByDeviceIdAndCabinetChannel(String deviceId, String cabinetChannel){ return selectOne(ChannelDO::getDeviceId, deviceId, ChannelDO::getCabinetChannel, cabinetChannel); } + + default List getChannelListByDeviceid(String deviceId){ + return selectList(ChannelDO::getDeviceId, deviceId); + } } \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/sku/ProductSkuMapper.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/sku/ProductSkuMapper.java index e10de1d..9fab2b9 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/sku/ProductSkuMapper.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/sku/ProductSkuMapper.java @@ -87,10 +87,16 @@ public interface ProductSkuMapper extends BaseMapperX { return selectList(ProductSkuDO::getCreator, creator); } - default int updateSkuStockById(ProductSkuUpdateStockReqVO updateReqVO){ + default int updateSkuStockIncrById(ProductSkuUpdateStockReqVO updateReqVO){ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .setSql(" stock = stock +" + updateReqVO.getStock()) .eq(ProductSkuDO::getId, updateReqVO.getId()); return update(null, updateWrapper); } + + default int updateSkuStockById(ProductSkuUpdateStockReqVO updateSkuReqVO){ + return update(null, new LambdaUpdateWrapper() + .eq(ProductSkuDO::getId, updateSkuReqVO.getId()) + .set(ProductSkuDO::getStock, updateSkuReqVO.getStock())); + } } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java index 04d36f6..fcf27e1 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO; import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSkuUpdateStockReqVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; +import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.enums.ProductConstants; @@ -217,7 +218,7 @@ public interface ProductSpuMapper extends BaseMapperX { return selectList(query); } - default int updateSkuStock(ProductSkuUpdateStockReqVO updateReqVO){ + default int updateSpuStockIncr(ProductSkuUpdateStockReqVO updateReqVO){ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .setSql(" stock = stock +" + updateReqVO.getStock()) .eq(ProductSpuDO::getId, updateReqVO.getId()); @@ -229,4 +230,10 @@ public interface ProductSpuMapper extends BaseMapperX { .eqIfPresent(ProductSpuDO::getDeviceId, deviceId); return selectList(query); } + + default int updateSpuStockById(ProductSkuUpdateStockReqVO updateSpuReqVO){ + return update(null, new LambdaUpdateWrapper() + .eq(ProductSpuDO::getId, updateSpuReqVO.getId()) + .set(ProductSpuDO::getStock, updateSpuReqVO.getStock())); + } } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelService.java index 07319c6..4a883f3 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelService.java @@ -57,4 +57,6 @@ public interface ChannelService { ChannelImportRespVO importChannelList(List list, Boolean updateSupport); CommonResult testChannel(Long id); + + List getChannelListByDeviceid(String deviceId); } \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelServiceImpl.java index cedb14a..af49cee 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/channel/ChannelServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -193,4 +194,9 @@ public class ChannelServiceImpl implements ChannelService { } } + @Override + public List getChannelListByDeviceid(String deviceId) { + return channelMapper.getChannelListByDeviceid(deviceId); + } + } \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuService.java index e70456a..9a47673 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuService.java @@ -119,5 +119,7 @@ public interface ProductSkuService { List getSkuListByCreator(Long creator); - int updateSkuStockById(ProductSkuUpdateStockReqVO updateReqVO); + int updateSkuStockIncrById(ProductSkuUpdateStockReqVO updateReqVO); + + int updateSkuStockById(ProductSkuUpdateStockReqVO updateSkuReqVO); } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java index 948dfc6..0f5257f 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java @@ -230,8 +230,13 @@ public class ProductSkuServiceImpl implements ProductSkuService { } @Override - public int updateSkuStockById(ProductSkuUpdateStockReqVO updateReqVO) { - return productSkuMapper.updateSkuStockById(updateReqVO); + public int updateSkuStockIncrById(ProductSkuUpdateStockReqVO updateReqVO) { + return productSkuMapper.updateSkuStockIncrById(updateReqVO); + } + + @Override + public int updateSkuStockById(ProductSkuUpdateStockReqVO updateSkuReqVO) { + return productSkuMapper.updateSkuStockById(updateSkuReqVO); } @Override diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java index 42f417d..4f4547b 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java @@ -152,4 +152,6 @@ public interface ProductSpuService { void updateSkuStock(ProductSkuUpdateStockReqVO updateReqVO); List getSpuListByDeviceid(String deviceId); + + void oneClickReplenishment(String deviceId); } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java index fb1267c..7fb1758 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*; import cn.iocoder.yudao.module.product.controller.admin.stocklog.vo.StockLogSaveReqVO; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO; +import cn.iocoder.yudao.module.product.dal.dataobject.channel.ChannelDO; import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuCreatorDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; @@ -18,6 +19,7 @@ import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; import cn.iocoder.yudao.module.product.service.brand.ProductBrandService; import cn.iocoder.yudao.module.product.service.category.ProductCategoryService; +import cn.iocoder.yudao.module.product.service.channel.ChannelService; import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; import cn.iocoder.yudao.module.product.service.stocklog.StockLogService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; @@ -62,6 +64,9 @@ public class ProductSpuServiceImpl implements ProductSpuService { @Resource private AdminUserApi adminUserApi; + @Resource + private ChannelService channelService; + @Override @Transactional(rollbackFor = Exception.class) public Long createSpu(ProductSpuSaveReqVO createReqVO) { @@ -185,14 +190,14 @@ public class ProductSpuServiceImpl implements ProductSpuService { } ProductSpuDO productSpuDO = productSpuMapper.selectById(skuDO.getSpuId()); // 更新 SKU 库存 - productSkuService.updateSkuStockById(updateReqVO); + productSkuService.updateSkuStockIncrById(updateReqVO); // 更新 SPU 库存 - int i =productSpuMapper.updateSkuStock(updateReqVO.setId(productSpuDO.getId())); + int i =productSpuMapper.updateSpuStockIncr(updateReqVO.setId(productSpuDO.getId())); if (i>0){ - AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(productSpuDO.getCreator())); +// AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(productSpuDO.getCreator())); //添加库存log StockLogSaveReqVO stockLogSaveReqVO = new StockLogSaveReqVO(); - stockLogSaveReqVO.setDeviceId(user.getDeviceId()); + stockLogSaveReqVO.setDeviceId(productSpuDO.getDeviceId()); stockLogSaveReqVO.setSpuName(productSpuDO.getName()); stockLogSaveReqVO.setBarCode(skuDO.getBarCode()); stockLogSaveReqVO.setCabinetChannel(skuDO.getCabinetChannel()); @@ -208,6 +213,58 @@ public class ProductSpuServiceImpl implements ProductSpuService { return productSpuMapper.getSpuListByDeviceid(deviceId); } + @Override + public void oneClickReplenishment(String deviceId) { + //商品列表 + List spuList = productSpuMapper.getSpuListByDeviceid(deviceId); + if (spuList == null|| spuList.isEmpty()) { + throw exception(SKU_NOT_EXISTS); + } + //查询货道列表 + List channelList = channelService.getChannelListByDeviceid(deviceId); + if (channelList == null|| channelList.isEmpty()) { + throw exception(CHANNEL_NOT_EXISTS); + } + Map channelMap = convertMap(channelList, ChannelDO::getCabinetChannel); + for (ProductSpuDO spu : spuList) { + List skuListBySpuId = productSkuService.getSkuListBySpuId(spu.getId()); + if (skuListBySpuId == null|| skuListBySpuId.isEmpty()){ + throw exception(SKU_NOT_EXISTS); + } + ProductSkuUpdateStockReqVO updateSpuReqVO= new ProductSkuUpdateStockReqVO(); + updateSpuReqVO.setId(spu.getId()); + updateSpuReqVO.setStock(0); + for (ProductSkuDO sku : skuListBySpuId) { + ChannelDO channelDO = channelMap.get(sku.getCabinetChannel()); + if (channelDO == null){ + throw exception(CHANNEL_NOT_EXISTS); + } + // 更新 SKU 库存 + ProductSkuUpdateStockReqVO updateSkuReqVO= new ProductSkuUpdateStockReqVO(); + updateSkuReqVO.setId(sku.getId()); + updateSkuReqVO.setStock(channelDO.getMaxNum()); + int i=productSkuService.updateSkuStockById(updateSkuReqVO); + if (i>0){ + //添加库存log + StockLogSaveReqVO stockLogSaveReqVO = new StockLogSaveReqVO(); + stockLogSaveReqVO.setDeviceId(spu.getDeviceId()); + stockLogSaveReqVO.setSpuName(spu.getName()); + stockLogSaveReqVO.setBarCode(sku.getBarCode()); + stockLogSaveReqVO.setCabinetChannel(sku.getCabinetChannel()); + stockLogSaveReqVO.setCount(updateSkuReqVO.getStock()); + stockLogSaveReqVO.setOldStock(sku.getStock()); + stockLogSaveReqVO.setNewStock(updateSkuReqVO.getStock()); + stockLogService.createStockLog(stockLogSaveReqVO); + updateSpuReqVO.setStock(updateSpuReqVO.getStock()+channelDO.getMaxNum()); + } + } + // 更新 SPU 库存 + if (updateSpuReqVO.getStock()>0){ + productSpuMapper.updateSpuStockById(updateSpuReqVO); + } + } + } + @Override @Transactional(rollbackFor = Exception.class) public void deleteSpu(Long id) {