一键补货

This commit is contained in:
zhangji committed 2025-09-12 11:49:19 +08:00
1 parent 1c01a2fa09
commit e852d7f5e5
10 files changed
+108 -9

No files matched your search

@@ -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<Boolean> oneClickReplenishment(@RequestParam("deviceId") String deviceId) {
productSpuService.oneClickReplenishment(deviceId);
return success(true);
}
}
@@ -31,4 +31,8 @@ public interface ChannelMapper extends BaseMapperX<ChannelDO> {
default ChannelDO selectByDeviceIdAndCabinetChannel(String deviceId, String cabinetChannel){
return selectOne(ChannelDO::getDeviceId, deviceId, ChannelDO::getCabinetChannel, cabinetChannel);
}
default List<ChannelDO> getChannelListByDeviceid(String deviceId){
return selectList(ChannelDO::getDeviceId, deviceId);
}
}
@@ -87,10 +87,16 @@ public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> {
return selectList(ProductSkuDO::getCreator, creator);
}
default int updateSkuStockById(ProductSkuUpdateStockReqVO updateReqVO){
default int updateSkuStockIncrById(ProductSkuUpdateStockReqVO updateReqVO){
LambdaUpdateWrapper<ProductSkuDO> updateWrapper = new LambdaUpdateWrapper<ProductSkuDO>()
.setSql(" stock = stock +" + updateReqVO.getStock())
.eq(ProductSkuDO::getId, updateReqVO.getId());
return update(null, updateWrapper);
}
default int updateSkuStockById(ProductSkuUpdateStockReqVO updateSkuReqVO){
return update(null, new LambdaUpdateWrapper<ProductSkuDO>()
.eq(ProductSkuDO::getId, updateSkuReqVO.getId())
.set(ProductSkuDO::getStock, updateSkuReqVO.getStock()));
}
}
@@ -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<ProductSpuDO> {
return selectList(query);
}
default int updateSkuStock(ProductSkuUpdateStockReqVO updateReqVO){
default int updateSpuStockIncr(ProductSkuUpdateStockReqVO updateReqVO){
LambdaUpdateWrapper<ProductSpuDO> updateWrapper = new LambdaUpdateWrapper<ProductSpuDO>()
.setSql(" stock = stock +" + updateReqVO.getStock())
.eq(ProductSpuDO::getId, updateReqVO.getId());
@@ -229,4 +230,10 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
.eqIfPresent(ProductSpuDO::getDeviceId, deviceId);
return selectList(query);
}
default int updateSpuStockById(ProductSkuUpdateStockReqVO updateSpuReqVO){
return update(null, new LambdaUpdateWrapper<ProductSpuDO>()
.eq(ProductSpuDO::getId, updateSpuReqVO.getId())
.set(ProductSpuDO::getStock, updateSpuReqVO.getStock()));
}
}
@@ -57,4 +57,6 @@ public interface ChannelService {
ChannelImportRespVO importChannelList(List<ChannelImportExcelVO> list, Boolean updateSupport);
CommonResult<String> testChannel(Long id);
List<ChannelDO> getChannelListByDeviceid(String deviceId);
}
@@ -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<ChannelDO> getChannelListByDeviceid(String deviceId) {
return channelMapper.getChannelListByDeviceid(deviceId);
}
}
@@ -119,5 +119,7 @@ public interface ProductSkuService {
List<ProductSkuRespDTO> getSkuListByCreator(Long creator);
int updateSkuStockById(ProductSkuUpdateStockReqVO updateReqVO);
int updateSkuStockIncrById(ProductSkuUpdateStockReqVO updateReqVO);
int updateSkuStockById(ProductSkuUpdateStockReqVO updateSkuReqVO);
}
@@ -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
@@ -152,4 +152,6 @@ public interface ProductSpuService {
void updateSkuStock(ProductSkuUpdateStockReqVO updateReqVO);
List<ProductSpuDO> getSpuListByDeviceid(String deviceId);
void oneClickReplenishment(String deviceId);
}
@@ -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<ProductSpuDO> spuList = productSpuMapper.getSpuListByDeviceid(deviceId);
if (spuList == null|| spuList.isEmpty()) {
throw exception(SKU_NOT_EXISTS);
}
//查询货道列表
List<ChannelDO> channelList = channelService.getChannelListByDeviceid(deviceId);
if (channelList == null|| channelList.isEmpty()) {
throw exception(CHANNEL_NOT_EXISTS);
}
Map<String, ChannelDO> channelMap = convertMap(channelList, ChannelDO::getCabinetChannel);
for (ProductSpuDO spu : spuList) {
List<ProductSkuDO> 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) {