|
@@ -3,7 +3,6 @@ package com.fjhx.wms.service.stock.impl;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
-import com.fjhx.item.service.product.impl.ProductInfoServiceImpl;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
|
|
|
import com.fjhx.wms.entity.stock.po.Stock;
|
|
|
import com.fjhx.wms.entity.stock.po.StockJournal;
|
|
@@ -16,14 +15,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockSelectDto;
|
|
|
import com.obs.services.internal.ServiceException;
|
|
|
import com.ruoyi.common.core.domain.BaseSelectDto;
|
|
|
-import org.apache.logging.log4j.core.util.Assert;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.fjhx.wms.entity.stock.vo.StockVo;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockDto;
|
|
|
-import cn.hutool.core.bean.BeanUtil;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
@@ -54,53 +51,79 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
public Page<StockVo> getPage(StockSelectDto dto) {
|
|
|
IWrapper<Stock> wrapper = getWrapper();
|
|
|
wrapper.orderByDesc("s", Stock::getId);
|
|
|
- wrapper.eq(Stock::getWarehouseId,dto.getId());
|
|
|
- wrapper.like(Stock::getQuantity,dto.getKeyword());
|
|
|
+ wrapper.eq(Stock::getWarehouseId, dto.getId());
|
|
|
+ wrapper.like(Stock::getQuantity, dto.getKeyword());
|
|
|
|
|
|
Page<StockVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
List<StockVo> stockVos = page.getRecords();
|
|
|
//获取产品id列表
|
|
|
List<Long> productIds = stockVos.stream().map(Stock::getProductId).collect(Collectors.toList());
|
|
|
- List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
|
|
|
- Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
|
|
|
- Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
|
|
|
- for (StockVo stockVo : stockVos){
|
|
|
- ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
|
|
|
- stockVo.setType(productInfo.getType());
|
|
|
- stockVo.setProductName(productInfo.getName());
|
|
|
+ if (ObjectUtil.isNotEmpty(productIds)) {
|
|
|
+ List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
|
|
|
+ Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
|
|
|
+ Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
|
|
|
+ for (StockVo stockVo : stockVos) {
|
|
|
+ ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
|
|
|
+ stockVo.setType(productInfo.getType());
|
|
|
+ stockVo.setProductName(productInfo.getName());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return page;
|
|
|
- //库存查询改到这
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<StockVo> detail(BaseSelectDto dto) {
|
|
|
- List<Stock> list = list(q->q.eq(ObjectUtil.isNotEmpty(dto.getId()),Stock::getWarehouseId,dto.getId()).like(ObjectUtil.isNotEmpty(dto.getKeyword()),Stock::getQuantity,dto.getKeyword()));
|
|
|
- List<StockVo> stockVos = BeanUtil.copyToList(list, StockVo.class);
|
|
|
- //获取产品id列表
|
|
|
- List<Long> productIds = list.stream().map(Stock::getProductId).collect(Collectors.toList());
|
|
|
- List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
|
|
|
- Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
|
|
|
- Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
|
|
|
- for (StockVo stockVo : stockVos){
|
|
|
- ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
|
|
|
- stockVo.setType(productInfo.getType());
|
|
|
- stockVo.setProductName(productInfo.getName());
|
|
|
- }
|
|
|
- return stockVos;
|
|
|
+ public Stock detail(StockDto dto) {
|
|
|
+ return getOne(q->q.eq(Stock::getWarehouseId,dto.getWarehouseId()).eq(Stock::getProductId,dto.getProductId()));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void add(StockDto stockDto) {
|
|
|
- ModifyInventory(1, stockDto);
|
|
|
+ //创建出入库记录
|
|
|
+ StockJournal stockJournal = new StockJournal();
|
|
|
+ stockJournal.setType(stockDto.getType());
|
|
|
+ stockJournal.setWarehouseId(stockDto.getWarehouseId());
|
|
|
+ stockJournal.setBusinessId(stockDto.getBusinessId());
|
|
|
+ //保存出入库记录
|
|
|
+ stockJournalService.save(stockJournal);
|
|
|
+ //操作库存
|
|
|
+ List<StockJournalDetails> stockJournalDetailsList = ModifyInventory(stockJournal.getId(), 1, stockDto.getList(), stockDto.getWarehouseId());
|
|
|
+ //保存出入库明细
|
|
|
+ stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void edit(StockDto stockDto) {
|
|
|
- ModifyInventory(2, stockDto);
|
|
|
+ //创建出入库记录
|
|
|
+ StockJournal stockJournal = new StockJournal();
|
|
|
+ stockJournal.setType(stockDto.getType());
|
|
|
+ stockJournal.setWarehouseId(stockDto.getWarehouseId());
|
|
|
+ stockJournal.setBusinessId(stockDto.getBusinessId());
|
|
|
+ //保存出入库记录
|
|
|
+ stockJournalService.save(stockJournal);
|
|
|
+ //操作库存
|
|
|
+ List<StockJournalDetails> stockJournalDetailsList = ModifyInventory(stockJournal.getId(), 2, stockDto.getList(), stockDto.getWarehouseId());
|
|
|
+ //保存出入库明细
|
|
|
+ stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void stockTransfer(StockDto stockDto) {
|
|
|
+ //创建出入库记录
|
|
|
+ StockJournal stockJournal = new StockJournal();
|
|
|
+ stockJournal.setType(3);
|
|
|
+ stockJournal.setWarehouseId(stockDto.getWarehouseId());
|
|
|
+ stockJournal.setToWarehouseId(stockDto.getToWarehouseId());
|
|
|
+ //保存出入库记录
|
|
|
+ stockJournalService.save(stockJournal);
|
|
|
+ //操作库存
|
|
|
+ List<StockJournalDetails> stockJournalDetailsList = ModifyInventory(stockJournal.getId(), 2, stockDto.getList(), stockDto.getWarehouseId());
|
|
|
+ ModifyInventory(stockJournal.getId(), 1, stockDto.getList(), stockDto.getToWarehouseId());
|
|
|
+ //保存出入库明细
|
|
|
+ stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -111,27 +134,28 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
/**
|
|
|
* 操作库存通用方法
|
|
|
*
|
|
|
- * @param type 1为手动入库操作 2为手动出库操作
|
|
|
+ * @param stockJournalId 出入库记录id
|
|
|
+ * @param type 1入库 2出库
|
|
|
*/
|
|
|
- public void ModifyInventory(int type, StockDto stockDto) {
|
|
|
- //创建出入库记录
|
|
|
- StockJournal stockJournal = new StockJournal();
|
|
|
- stockJournal.setType(type);
|
|
|
- stockJournal.setWarehouseId(stockDto.getWarehouseId());
|
|
|
- stockJournalService.save(stockJournal);
|
|
|
+ public List<StockJournalDetails> ModifyInventory(Long stockJournalId, int type, List<Stock> list, Long warehouseId) {
|
|
|
+ List<Stock> data = new ArrayList<>();
|
|
|
|
|
|
//获取现有库存
|
|
|
- List<Long> productIds = stockDto.getList().stream().map(Stock::getProductId).collect(Collectors.toList());
|
|
|
- List<Stock> stockList = list(q->q.in(Stock::getProductId,productIds).eq(Stock::getWarehouseId,stockDto.getWarehouseId()));
|
|
|
+ List<Long> productIds = list.stream().map(Stock::getProductId).collect(Collectors.toList());
|
|
|
+ List<Stock> stockList = list(q -> q.in(Stock::getProductId, productIds).eq(Stock::getWarehouseId, warehouseId));
|
|
|
Map<Long, Stock> stockMap = stockList.stream().collect(Collectors.groupingBy(Stock::getProductId,
|
|
|
Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
|
|
|
|
|
|
List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
|
|
|
- for (Stock stock : stockDto.getList()) {
|
|
|
- stock.setWarehouseId(stockDto.getWarehouseId());
|
|
|
+ for (Stock stock : list) {
|
|
|
+ Stock newStocks = new Stock();
|
|
|
+ newStocks.setWarehouseId(warehouseId);
|
|
|
+ newStocks.setProductId(stock.getProductId());
|
|
|
+ newStocks.setQuantity(stock.getQuantity());
|
|
|
|
|
|
//合并库存数量
|
|
|
Stock oldStocks = stockMap.get(stock.getProductId());
|
|
|
+ //用来存储操作数据
|
|
|
if (ObjectUtil.isNotEmpty(oldStocks)) {
|
|
|
BigDecimal quantity = oldStocks.getQuantity();
|
|
|
if (type == 1) {
|
|
@@ -146,21 +170,26 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
} else {
|
|
|
throw new ServiceException("未知库存操作类型");
|
|
|
}
|
|
|
- stock.setId(oldStocks.getId());
|
|
|
- stock.setQuantity(quantity);
|
|
|
+ newStocks.setId(oldStocks.getId());
|
|
|
+ newStocks.setQuantity(quantity);
|
|
|
} else if (type == 2) {
|
|
|
throw new ServiceException("以下商品库存不存在,无法出库:" + stock.getProductId());
|
|
|
}
|
|
|
+
|
|
|
+ data.add(newStocks);
|
|
|
//创建出入库明细
|
|
|
StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
|
|
|
- stockJournalDetails.setStockJournalId(stockJournal.getId());
|
|
|
+ stockJournalDetails.setStockJournalId(stockJournalId);
|
|
|
stockJournalDetails.setProductId(stock.getProductId());
|
|
|
stockJournalDetails.setQuantity(stock.getQuantity());
|
|
|
stockJournalDetailsList.add(stockJournalDetails);
|
|
|
}
|
|
|
- stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
//操作库存
|
|
|
- saveOrUpdateBatch(stockDto.getList());
|
|
|
+ saveOrUpdateBatch(data);
|
|
|
+
|
|
|
+ //返回库存操作明细列表
|
|
|
+ return stockJournalDetailsList;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|