|
@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
import com.yonge.cooleshow.mall.common.exception.Asserts;
|
|
import com.yonge.cooleshow.mall.common.exception.Asserts;
|
|
|
|
+import com.yonge.cooleshow.mbg.dto.PmsSkuStockDto;
|
|
import com.yonge.cooleshow.mbg.mapper.*;
|
|
import com.yonge.cooleshow.mbg.mapper.*;
|
|
import com.yonge.cooleshow.mbg.model.*;
|
|
import com.yonge.cooleshow.mbg.model.*;
|
|
import com.yonge.cooleshow.portal.dao.PortalProductDao;
|
|
import com.yonge.cooleshow.portal.dao.PortalProductDao;
|
|
@@ -23,7 +24,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
-import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -99,13 +99,75 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
|
|
PmsSkuStockExample skuExample = new PmsSkuStockExample();
|
|
PmsSkuStockExample skuExample = new PmsSkuStockExample();
|
|
skuExample.createCriteria().andProductIdIn(productIdList);
|
|
skuExample.createCriteria().andProductIdIn(productIdList);
|
|
List<PmsSkuStock> skuStockList = skuStockMapper.selectByExample(skuExample);
|
|
List<PmsSkuStock> skuStockList = skuStockMapper.selectByExample(skuExample);
|
|
|
|
+ skuStockList = updateProductSkuStock(skuStockList);
|
|
Map<Long, List<PmsSkuStock>> collect = skuStockList.stream()
|
|
Map<Long, List<PmsSkuStock>> collect = skuStockList.stream()
|
|
.collect(Collectors.groupingBy(PmsSkuStock::getProductId));
|
|
.collect(Collectors.groupingBy(PmsSkuStock::getProductId));
|
|
for (PmsProduct pmsProduct : pmsProducts) {
|
|
for (PmsProduct pmsProduct : pmsProducts) {
|
|
pmsProduct.setSkuStockList(collect.get(pmsProduct.getId()));
|
|
pmsProduct.setSkuStockList(collect.get(pmsProduct.getId()));
|
|
}
|
|
}
|
|
- return pmsProducts;
|
|
|
|
|
|
|
|
|
|
+ return updateProductStock(pmsProducts);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public List<PmsSkuStock> updateProductSkuStock(List<PmsSkuStock> skuStocks) {
|
|
|
|
+ if (CollectionUtils.isEmpty(skuStocks)) {
|
|
|
|
+ return new ArrayList<>();
|
|
|
|
+ }
|
|
|
|
+ // 从进货清单中 获取剩余库存数量
|
|
|
|
+ List<Long> productIds = skuStocks.stream().map(PmsSkuStock::getProductId).distinct().collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ // 计算库存数据
|
|
|
|
+ List<PmsSkuStockDto.PmsSkuStockStock> skuStockStocks = skuStockMapper.getSkuStockByProductIds(productIds);
|
|
|
|
+
|
|
|
|
+ // Convert to map
|
|
|
|
+ Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> map = skuStockStocks.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getProductId, Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getId)));
|
|
|
|
+
|
|
|
|
+ // Merge
|
|
|
|
+ for (PmsSkuStock skuStock : skuStocks) {
|
|
|
|
+ Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>> skuStockStock = map.get(skuStock.getProductId());
|
|
|
|
+ if (!CollectionUtils.isEmpty(skuStockStock)) {
|
|
|
|
+ List<PmsSkuStockDto.PmsSkuStockStock> pmsSkuStockStocks = skuStockStock.get(skuStock.getId());
|
|
|
|
+ if (CollectionUtils.isEmpty(pmsSkuStockStocks)) {
|
|
|
|
+ skuStock.setLockStock(0);
|
|
|
|
+ skuStock.setStock(0);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ skuStock.setStock(pmsSkuStockStocks.stream().mapToInt(item -> item.getInternalStock() + item.getTaxStock()).sum());
|
|
|
|
+ skuStock.setLockStock(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ return skuStocks;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<PmsProduct> updateProductStock(List<PmsProduct> pmsProducts) {
|
|
|
|
+ if (CollectionUtils.isEmpty(pmsProducts)) {
|
|
|
|
+ return new ArrayList<>();
|
|
|
|
+ }
|
|
|
|
+ // 从进货清单中 获取剩余库存数量
|
|
|
|
+ List<Long> productIds = pmsProducts.stream().map(PmsProduct::getId).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ // 计算库存数据
|
|
|
|
+ List<PmsSkuStockDto.PmsSkuStockStock> skuStockStocks = skuStockMapper.getSkuStockByProductIds(productIds);
|
|
|
|
+
|
|
|
|
+ // Convert to map
|
|
|
|
+ Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>> skuStockStockMap = skuStockStocks.stream().collect(Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getProductId));
|
|
|
|
+
|
|
|
|
+ // Merge
|
|
|
|
+ for (PmsProduct pmsProduct : pmsProducts) {
|
|
|
|
+ List<PmsSkuStockDto.PmsSkuStockStock> skuStockStock = skuStockStockMap.get(pmsProduct.getId());
|
|
|
|
+ if (!CollectionUtils.isEmpty(skuStockStock)) {
|
|
|
|
+ pmsProduct.setStock(skuStockStock.stream().mapToInt(PmsSkuStockDto.PmsSkuStockStock::getInternalStock).sum() + skuStockStock.stream().mapToInt(PmsSkuStockDto.PmsSkuStockStock::getTaxStock).sum());
|
|
|
|
+ pmsProduct.setLockStock(0);
|
|
|
|
+ } else {
|
|
|
|
+ pmsProduct.setStock(0);
|
|
|
|
+ pmsProduct.setLockStock(0);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return pmsProducts;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -145,7 +207,11 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
|
|
PmsPortalProductDetail result = new PmsPortalProductDetail();
|
|
PmsPortalProductDetail result = new PmsPortalProductDetail();
|
|
//获取商品信息
|
|
//获取商品信息
|
|
PmsProduct product = productMapper.selectByPrimaryKey(id);
|
|
PmsProduct product = productMapper.selectByPrimaryKey(id);
|
|
- result.setProduct(product);
|
|
|
|
|
|
+ if (product == null) {
|
|
|
|
+ Asserts.fail("商品不存在");
|
|
|
|
+ }
|
|
|
|
+ List<PmsProduct> pmsProducts = updateProductStock(CollUtil.newArrayList(product));
|
|
|
|
+ result.setProduct(pmsProducts.get(0));
|
|
//获取品牌信息
|
|
//获取品牌信息
|
|
PmsBrand brand = brandMapper.selectByPrimaryKey(product.getBrandId());
|
|
PmsBrand brand = brandMapper.selectByPrimaryKey(product.getBrandId());
|
|
result.setBrand(brand);
|
|
result.setBrand(brand);
|
|
@@ -167,6 +233,7 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
|
|
PmsSkuStockExample skuExample = new PmsSkuStockExample();
|
|
PmsSkuStockExample skuExample = new PmsSkuStockExample();
|
|
skuExample.createCriteria().andProductIdEqualTo(product.getId());
|
|
skuExample.createCriteria().andProductIdEqualTo(product.getId());
|
|
List<PmsSkuStock> skuStockList = skuStockMapper.selectByExample(skuExample);
|
|
List<PmsSkuStock> skuStockList = skuStockMapper.selectByExample(skuExample);
|
|
|
|
+ skuStockList = updateProductSkuStock(skuStockList);
|
|
result.setSkuStockList(skuStockList);
|
|
result.setSkuStockList(skuStockList);
|
|
//商品阶梯价格设置
|
|
//商品阶梯价格设置
|
|
if(product.getPromotionType()==3){
|
|
if(product.getPromotionType()==3){
|
|
@@ -219,58 +286,58 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
|
|
@Override
|
|
@Override
|
|
@Transactional
|
|
@Transactional
|
|
public void reduceStock(List<StockOperateModel> model, String stockType) {
|
|
public void reduceStock(List<StockOperateModel> model, String stockType) {
|
|
-
|
|
|
|
- // 商品库存变动
|
|
|
|
- List<ProductStock> productList = new ArrayList<>();
|
|
|
|
- Map<Long, List<StockOperateModel>> collect = model.stream().collect(Collectors.groupingBy(
|
|
|
|
- StockOperateModel::getProductId));
|
|
|
|
- for (Map.Entry<Long, List<StockOperateModel>> entry : collect.entrySet()) {
|
|
|
|
- ProductStock productStock = new ProductStock();
|
|
|
|
- List<StockOperateModel> value = entry.getValue();
|
|
|
|
- if (CollectionUtils.isEmpty(value)) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- int sum = value.stream().mapToInt(StockOperateModel::getCount).sum();
|
|
|
|
- productStock.setProductId(entry.getKey());
|
|
|
|
- productStock.setStock(sum);
|
|
|
|
- productList.add(productStock);
|
|
|
|
- }
|
|
|
|
- switch (stockType) {
|
|
|
|
- case "lock" :
|
|
|
|
- // sku库存锁定
|
|
|
|
- for (StockOperateModel stockOperateModel : model) {
|
|
|
|
- int i = skuStockMapper.lockStock(stockOperateModel.getProductSkuId(), stockOperateModel.getCount());
|
|
|
|
- if (i ==0) {
|
|
|
|
- Asserts.fail("库存不足");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // 商品扣减锁定
|
|
|
|
- for (ProductStock product : productList) {
|
|
|
|
- if (product.getStock() > 0) {
|
|
|
|
- int i = pmsProductMapper.lockStock(product.getProductId(), product.getStock());
|
|
|
|
- if (i == 0) {
|
|
|
|
- Asserts.fail("库存不足");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case "unlock" :
|
|
|
|
- // 解锁sku库存
|
|
|
|
- portalProductDao.unlockSku(model);
|
|
|
|
-
|
|
|
|
- // 解锁商品库存
|
|
|
|
- portalProductDao.unlockProduct(productList);
|
|
|
|
- break;
|
|
|
|
- case "reduce" :
|
|
|
|
- // 扣减sku库存
|
|
|
|
- portalProductDao.reduceSku(model);
|
|
|
|
-
|
|
|
|
- // 扣减商品库存
|
|
|
|
- portalProductDao.updateProductStock(productList);
|
|
|
|
- break;
|
|
|
|
- default: break;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+//
|
|
|
|
+// // 商品库存变动
|
|
|
|
+// List<ProductStock> productList = new ArrayList<>();
|
|
|
|
+// Map<Long, List<StockOperateModel>> collect = model.stream().collect(Collectors.groupingBy(
|
|
|
|
+// StockOperateModel::getProductId));
|
|
|
|
+// for (Map.Entry<Long, List<StockOperateModel>> entry : collect.entrySet()) {
|
|
|
|
+// ProductStock productStock = new ProductStock();
|
|
|
|
+// List<StockOperateModel> value = entry.getValue();
|
|
|
|
+// if (CollectionUtils.isEmpty(value)) {
|
|
|
|
+// continue;
|
|
|
|
+// }
|
|
|
|
+// int sum = value.stream().mapToInt(StockOperateModel::getCount).sum();
|
|
|
|
+// productStock.setProductId(entry.getKey());
|
|
|
|
+// productStock.setStock(sum);
|
|
|
|
+// productList.add(productStock);
|
|
|
|
+// }
|
|
|
|
+// switch (stockType) {
|
|
|
|
+// case "lock" :
|
|
|
|
+// // sku库存锁定
|
|
|
|
+// for (StockOperateModel stockOperateModel : model) {
|
|
|
|
+// int i = skuStockMapper.lockStock(stockOperateModel.getProductSkuId(), stockOperateModel.getCount());
|
|
|
|
+// if (i ==0) {
|
|
|
|
+// Asserts.fail("库存不足");
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// // 商品扣减锁定
|
|
|
|
+// for (ProductStock product : productList) {
|
|
|
|
+// if (product.getStock() > 0) {
|
|
|
|
+// int i = pmsProductMapper.lockStock(product.getProductId(), product.getStock());
|
|
|
|
+// if (i == 0) {
|
|
|
|
+// Asserts.fail("库存不足");
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// break;
|
|
|
|
+// case "unlock" :
|
|
|
|
+// // 解锁sku库存
|
|
|
|
+// portalProductDao.unlockSku(model);
|
|
|
|
+//
|
|
|
|
+// // 解锁商品库存
|
|
|
|
+// portalProductDao.unlockProduct(productList);
|
|
|
|
+// break;
|
|
|
|
+// case "reduce" :
|
|
|
|
+// // 扣减sku库存
|
|
|
|
+// portalProductDao.reduceSku(model);
|
|
|
|
+//
|
|
|
|
+// // 扣减商品库存
|
|
|
|
+// portalProductDao.updateProductStock(productList);
|
|
|
|
+// break;
|
|
|
|
+// default: break;
|
|
|
|
+//
|
|
|
|
+// }
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|