|
|
@ -8,6 +8,7 @@ import cc.hiver.mall.common.constant.StockConstant; |
|
|
import cc.hiver.mall.dao.mapper.StockMapper; |
|
|
import cc.hiver.mall.dao.mapper.StockMapper; |
|
|
import cc.hiver.mall.entity.*; |
|
|
import cc.hiver.mall.entity.*; |
|
|
import cc.hiver.mall.pojo.vo.PurchaseVo; |
|
|
import cc.hiver.mall.pojo.vo.PurchaseVo; |
|
|
|
|
|
import cc.hiver.mall.pojo.vo.ShopStockVo; |
|
|
import cc.hiver.mall.service.mybatis.*; |
|
|
import cc.hiver.mall.service.mybatis.*; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
@ -37,6 +38,9 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
@Autowired |
|
|
@Autowired |
|
|
private StockService stockService; |
|
|
private StockService stockService; |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
private StockMapper stockMapper; |
|
|
|
|
|
|
|
|
@Autowired |
|
|
@Autowired |
|
|
private SecurityUtil securityUtil; |
|
|
private SecurityUtil securityUtil; |
|
|
|
|
|
|
|
|
@ -161,7 +165,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
// 需要新增的履历集合
|
|
|
// 需要新增的履历集合
|
|
|
final List<StockLog> stockLogAddList = new ArrayList<>(); |
|
|
final List<StockLog> stockLogAddList = new ArrayList<>(); |
|
|
// 需要更新的商品信息集合
|
|
|
// 需要更新的商品信息集合
|
|
|
List<Product> updateProductList = new ArrayList<>(); |
|
|
final List<Product> updateProductList = new ArrayList<>(); |
|
|
// 需要修改的商品信息集合,商品中的平均采购价需要计算
|
|
|
// 需要修改的商品信息集合,商品中的平均采购价需要计算
|
|
|
final List<String> productIdList = new ArrayList<>(); |
|
|
final List<String> productIdList = new ArrayList<>(); |
|
|
for (PurchaseDetail purchaseDetail : purchaseDetails) { |
|
|
for (PurchaseDetail purchaseDetail : purchaseDetails) { |
|
|
@ -264,7 +268,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
//1. 计算库存
|
|
|
//1. 计算库存
|
|
|
if (stockMap.containsKey(stockLog.getAttributeList())) { |
|
|
if (stockMap.containsKey(stockLog.getAttributeList())) { |
|
|
//存在库存则修改库存数量
|
|
|
//存在库存则修改库存数量
|
|
|
Stock stock = stockMap.get(stockLog.getAttributeList()); |
|
|
final Stock stock = stockMap.get(stockLog.getAttributeList()); |
|
|
stockCount = stock.getStockCount() != null ? stock.getStockCount() : 0; |
|
|
stockCount = stock.getStockCount() != null ? stock.getStockCount() : 0; |
|
|
if (purchaseDetail.getPurchasePrice() != null) { |
|
|
if (purchaseDetail.getPurchasePrice() != null) { |
|
|
//有采购价才更新库存
|
|
|
//有采购价才更新库存
|
|
|
@ -276,7 +280,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
// 实时更新库存信息
|
|
|
// 实时更新库存信息
|
|
|
if (purchaseDetail.getPurchasePrice() != null) { |
|
|
if (purchaseDetail.getPurchasePrice() != null) { |
|
|
// 有采购价才更新库存
|
|
|
// 有采购价才更新库存
|
|
|
Stock stock = new Stock(); |
|
|
final Stock stock = new Stock(); |
|
|
//没有则新建库存数据
|
|
|
//没有则新建库存数据
|
|
|
// BeanUtils.copyBeanProp(stock, purchaseDetail);
|
|
|
// BeanUtils.copyBeanProp(stock, purchaseDetail);
|
|
|
// 这里不能把商品的id同步过来
|
|
|
// 这里不能把商品的id同步过来
|
|
|
@ -332,6 +336,14 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 待入库入库,维护价格等相关信息 |
|
|
|
|
|
* |
|
|
|
|
|
* @param purchaseVo |
|
|
|
|
|
* @return Result |
|
|
|
|
|
* @author 王富康 |
|
|
|
|
|
* @date 2023/11/21 |
|
|
|
|
|
*/ |
|
|
@Override |
|
|
@Override |
|
|
public Result putInPrice(PurchaseVo purchaseVo) { |
|
|
public Result putInPrice(PurchaseVo purchaseVo) { |
|
|
|
|
|
|
|
|
@ -341,7 +353,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
final User user = securityUtil.getCurrUser(); |
|
|
final User user = securityUtil.getCurrUser(); |
|
|
|
|
|
|
|
|
// 入库单主表信息
|
|
|
// 入库单主表信息
|
|
|
Purchase putInPurchase = purchaseVo.getPurchase(); |
|
|
final Purchase putInPurchase = purchaseVo.getPurchase(); |
|
|
final String id = putInPurchase.getId(); |
|
|
final String id = putInPurchase.getId(); |
|
|
final Purchase purchase = purchaseService.getById(id); |
|
|
final Purchase purchase = purchaseService.getById(id); |
|
|
purchase.setUpdateTime(new Date()); |
|
|
purchase.setUpdateTime(new Date()); |
|
|
@ -357,7 +369,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
// 获取前台入库商品信息
|
|
|
// 获取前台入库商品信息
|
|
|
final List<PurchaseDetail> purchaseDetails = purchaseVo.getPurchaseDetails(); |
|
|
final List<PurchaseDetail> purchaseDetails = purchaseVo.getPurchaseDetails(); |
|
|
// 需要更新的商品信息集合
|
|
|
// 需要更新的商品信息集合
|
|
|
List<Product> updateProductList = new ArrayList<>(); |
|
|
final List<Product> updateProductList = new ArrayList<>(); |
|
|
// 需要修改的商品信息集合,商品中的平均采购价需要计算
|
|
|
// 需要修改的商品信息集合,商品中的平均采购价需要计算
|
|
|
final List<String> productIdList = new ArrayList<>(); |
|
|
final List<String> productIdList = new ArrayList<>(); |
|
|
for (PurchaseDetail purchaseDetail : purchaseDetails) { |
|
|
for (PurchaseDetail purchaseDetail : purchaseDetails) { |
|
|
@ -446,13 +458,13 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
//1. 计算库存
|
|
|
//1. 计算库存
|
|
|
if (stockMap.containsKey(stockLog.getAttributeList())) { |
|
|
if (stockMap.containsKey(stockLog.getAttributeList())) { |
|
|
//存在库存则修改库存数量
|
|
|
//存在库存则修改库存数量
|
|
|
Stock stock = stockMap.get(stockLog.getAttributeList()); |
|
|
final Stock stock = stockMap.get(stockLog.getAttributeList()); |
|
|
stockCount = stock.getStockCount() != null ? stock.getStockCount() : 0; |
|
|
stockCount = stock.getStockCount() != null ? stock.getStockCount() : 0; |
|
|
stock.setStockCount(stockCount + stockLog.getProductCount()); |
|
|
stock.setStockCount(stockCount + stockLog.getProductCount()); |
|
|
// 实时更新库存信息
|
|
|
// 实时更新库存信息
|
|
|
stockService.saveOrUpdate(stock); |
|
|
stockService.saveOrUpdate(stock); |
|
|
} else { |
|
|
} else { |
|
|
Stock stock = new Stock(); |
|
|
final Stock stock = new Stock(); |
|
|
//没有则新建库存数据
|
|
|
//没有则新建库存数据
|
|
|
// BeanUtils.copyBeanProp(stock, purchaseDetail);
|
|
|
// BeanUtils.copyBeanProp(stock, purchaseDetail);
|
|
|
// 这里不能把商品的id同步过来
|
|
|
// 这里不能把商品的id同步过来
|
|
|
@ -492,4 +504,79 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 获取某店铺的库存管理顶部信息 |
|
|
|
|
|
* @author 王富康 |
|
|
|
|
|
* @date 2023/11/21 |
|
|
|
|
|
* @return ShopStockVo |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
|
|
|
public ShopStockVo getShopStock() { |
|
|
|
|
|
final ShopStockVo shopStockVo = new ShopStockVo(); |
|
|
|
|
|
// 获取该店的商品信息
|
|
|
|
|
|
final List<Product> productListOfShop = productService.getProductListOfShop(); |
|
|
|
|
|
// 方便后边计算
|
|
|
|
|
|
final Map<String, Product> productMap = new HashMap<>(); |
|
|
|
|
|
// 获取该店的库存信息
|
|
|
|
|
|
final List<Stock> stockList = stockService.stockListOfShop(); |
|
|
|
|
|
// 1. 商品数
|
|
|
|
|
|
shopStockVo.setProductCount(productListOfShop.size()); |
|
|
|
|
|
// 2. 尾货预警
|
|
|
|
|
|
int salesWeekCount = 0; |
|
|
|
|
|
for (Product product : productListOfShop) { |
|
|
|
|
|
final Date salesWeek = product.getSalesWeek(); |
|
|
|
|
|
final boolean after = salesWeek.before(new Date()); |
|
|
|
|
|
if (after) { |
|
|
|
|
|
//超过尾货预警日期,数量加1
|
|
|
|
|
|
salesWeekCount++; |
|
|
|
|
|
} |
|
|
|
|
|
productMap.putIfAbsent(product.getId(), product); |
|
|
|
|
|
} |
|
|
|
|
|
shopStockVo.setSalesWeekCount(salesWeekCount); |
|
|
|
|
|
|
|
|
|
|
|
// 3. 库存预警
|
|
|
|
|
|
int tailWarnCount = 0; |
|
|
|
|
|
// 4. 库存数
|
|
|
|
|
|
int stockCount = 0; |
|
|
|
|
|
// 5. 库存成本
|
|
|
|
|
|
BigDecimal stockCost = new BigDecimal(0); |
|
|
|
|
|
for (Stock stock : stockList) { |
|
|
|
|
|
|
|
|
|
|
|
final Product product = productMap.get(stock.getProductId()); |
|
|
|
|
|
// 商品的库存预警
|
|
|
|
|
|
final Integer tailWarn = product.getTailWarn(); |
|
|
|
|
|
//平均采购价
|
|
|
|
|
|
final BigDecimal purchasePrice = product.getPurchasePrice(); |
|
|
|
|
|
final Integer thisStockCount = stock.getStockCount(); |
|
|
|
|
|
// 计算成本,负数按0计算
|
|
|
|
|
|
if (thisStockCount > 0) { |
|
|
|
|
|
final BigDecimal thisStockCost = purchasePrice.multiply(BigDecimal.valueOf(thisStockCount)); |
|
|
|
|
|
stockCost = stockCost.add(thisStockCost); |
|
|
|
|
|
} |
|
|
|
|
|
// 计算库存数
|
|
|
|
|
|
stockCount += thisStockCount; |
|
|
|
|
|
// 计算达到库存预警的规格数量
|
|
|
|
|
|
if (tailWarn > thisStockCount) { |
|
|
|
|
|
tailWarnCount++; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
shopStockVo.setTailWarnCount(tailWarnCount); |
|
|
|
|
|
shopStockVo.setStockCount(stockCount); |
|
|
|
|
|
shopStockVo.setStockCost(stockCost); |
|
|
|
|
|
return shopStockVo; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 获取该店的库存信息 |
|
|
|
|
|
* @author 王富康 |
|
|
|
|
|
* @date 2023/11/21 |
|
|
|
|
|
* @return List<Stock> |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
|
|
|
public List<Stock> stockListOfShop() { |
|
|
|
|
|
// shopId从缓存中设置
|
|
|
|
|
|
final String shopId = securityUtil.getShopId(); |
|
|
|
|
|
return stockMapper.stockListOfShop(shopId); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|