|
@@ -1,5 +1,6 @@
|
|
|
package com.fjhx.wms.service.stock.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson2.JSONArray;
|
|
@@ -342,10 +343,13 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
@Override
|
|
|
@DSTransactional
|
|
|
public void add(StockDto stockDto) {
|
|
|
+ JournalType journalType = Objects.equals(stockDto.getType(), 1) ? JournalType.MANUAL_IN : JournalType.MANUAL_OUT;
|
|
|
+ InOutType inOutType = journalType.getType();
|
|
|
+
|
|
|
//创建出入库记录
|
|
|
StockJournal stockJournal = new StockJournal();
|
|
|
stockJournal.setOpType(stockDto.getType());
|
|
|
- stockJournal.setType(stockDto.getType());
|
|
|
+ stockJournal.setType(journalType.getDetailType());
|
|
|
stockJournal.setCode(stockDto.getType() == 1 ? CodeEnum.SIN_CODE.getCode() : CodeEnum.SOUT_CODE.getCode());
|
|
|
stockJournal.setWarehouseId(stockDto.getWarehouseId());
|
|
|
stockJournal.setBusinessId(stockDto.getBusinessId());
|
|
@@ -363,56 +367,21 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
stockJournalDetailsList.add(stockJournalDetails);
|
|
|
}
|
|
|
//操作库存
|
|
|
- ModifyInventory(1, stockDto.getList(), stockDto.getWarehouseId());
|
|
|
-
|
|
|
-
|
|
|
-// changeStock(stockDto.getList());
|
|
|
+ List<InOutBo> inOutBoList = BeanUtil.copyToList(list, InOutBo.class);
|
|
|
+ changeStock(inOutBoList, stockDto.getWarehouseId(), journalType);
|
|
|
|
|
|
//保存出入库明细
|
|
|
stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
|
|
|
//修改可用库存
|
|
|
- List<InOutBo> inOutBoList = new ArrayList<>();
|
|
|
- InOutType inOutType = Objects.equals(stockDto.getType(), 1) ? InOutType.IN : InOutType.OUT;
|
|
|
ProductAvailableRecordType productAvailableRecordType = inOutType.equals(InOutType.IN) ? ProductAvailableRecordType.HAND_IN : ProductAvailableRecordType.HAND_OUT;
|
|
|
-
|
|
|
- for (Stock stock : list) {
|
|
|
- InOutBo inOutBo = new InOutBo();
|
|
|
- inOutBo.setProductId(stock.getProductId());
|
|
|
- inOutBo.setQuantity(stock.getQuantity());
|
|
|
- inOutBoList.add(inOutBo);
|
|
|
- }
|
|
|
-
|
|
|
productInfoService.editAvailableQuantity(inOutBoList, inOutType, null, productAvailableRecordType, SecurityUtils.getCompanyId());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@DSTransactional
|
|
|
public void edit(StockDto stockDto) {
|
|
|
- //创建出入库记录
|
|
|
- StockJournal stockJournal = new StockJournal();
|
|
|
- stockJournal.setOpType(stockDto.getType());
|
|
|
- stockJournal.setCode(stockDto.getType() == 1 ? CodeEnum.SIN_CODE.getCode() : CodeEnum.SOUT_CODE.getCode());
|
|
|
- stockJournal.setType(stockDto.getType());
|
|
|
- stockJournal.setWarehouseId(stockDto.getWarehouseId());
|
|
|
- stockJournal.setBusinessId(stockDto.getBusinessId());
|
|
|
- //保存出入库记录
|
|
|
- stockJournalService.save(stockJournal);
|
|
|
- //操作库存
|
|
|
- List<Stock> list = stockDto.getList();
|
|
|
- List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
|
|
|
- for (Stock stock : list) {
|
|
|
- //创建出入库明细
|
|
|
- StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
|
|
|
- stockJournalDetails.setStockJournalId(stockJournal.getId());
|
|
|
- stockJournalDetails.setProductId(stock.getProductId());
|
|
|
- stockJournalDetails.setQuantity(stock.getQuantity());
|
|
|
- stockJournalDetails.setBusinessDetailsId(stock.getId());
|
|
|
- stockJournalDetailsList.add(stockJournalDetails);
|
|
|
- }
|
|
|
- ModifyInventory(2, stockDto.getList(), stockDto.getWarehouseId());
|
|
|
- //保存出入库明细
|
|
|
- stockJournalDetailsService.saveBatch(stockJournalDetailsList);
|
|
|
+ add(stockDto);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -420,58 +389,57 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
this.removeById(id);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 操作库存通用方法
|
|
|
- *
|
|
|
- * @param type 1入库 2出库 3维多利亚冻结库存入库 4维多利亚待出库次品库存
|
|
|
- */
|
|
|
- @Override
|
|
|
- public synchronized void ModifyInventory(int type, List<Stock> list, Long warehouseId) {
|
|
|
- List<Stock> data = new ArrayList<>();
|
|
|
-
|
|
|
- //获取现有库存
|
|
|
- List<Long> productIds = list.stream().map(Stock::getProductId).collect(Collectors.toList());
|
|
|
- Map<Long, Stock> stockMap = this.mapKEntity(Stock::getProductId, q -> q.in(Stock::getProductId, productIds).eq(Stock::getWarehouseId, warehouseId));
|
|
|
-
|
|
|
- for (Stock stock : list) {
|
|
|
- //忽略操作数量为0的记录 避免出现出入库记录为0的条目
|
|
|
- if (BigDecimal.ZERO.compareTo(stock.getQuantity()) == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- Stock oldStocks = stockMap.get(stock.getProductId());
|
|
|
- //如果库存不存在 就创建一条空库存
|
|
|
- if (ObjectUtil.isEmpty(oldStocks)) {
|
|
|
- oldStocks = new Stock();
|
|
|
- oldStocks.setProductId(stock.getProductId());
|
|
|
- oldStocks.setWarehouseId(warehouseId);
|
|
|
- oldStocks.setQuantity(BigDecimal.ZERO);
|
|
|
- }
|
|
|
-
|
|
|
- if (type == 1) {
|
|
|
- //入库库存相加
|
|
|
- BigDecimal quantity = oldStocks.getQuantity().add(stock.getQuantity());
|
|
|
- oldStocks.setQuantity(quantity);
|
|
|
- } else if (type == 2) {
|
|
|
- //出库库存相减
|
|
|
- ProductInfo productInfo = productInfoService.getById(stock.getProductId());
|
|
|
- if (productInfo == null) {
|
|
|
- throw new ServiceException("产品id:" + stock.getProductId() + "不存在");
|
|
|
- }
|
|
|
- BigDecimal quantity = oldStocks.getQuantity().subtract(stock.getQuantity());
|
|
|
- if (quantity.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- throw new ServiceException("以下商品库存不足,无法出库:" + productInfo.getName());
|
|
|
- }
|
|
|
- oldStocks.setQuantity(quantity);
|
|
|
- } else {
|
|
|
- throw new ServiceException("未知库存操作类型");
|
|
|
- }
|
|
|
- data.add(oldStocks);
|
|
|
-
|
|
|
- }
|
|
|
- //操作库存
|
|
|
- saveOrUpdateBatch(data);
|
|
|
- }
|
|
|
+// /**
|
|
|
+// * 操作库存通用方法
|
|
|
+// *
|
|
|
+// * @param type 1入库 2出库 3维多利亚冻结库存入库 4维多利亚待出库次品库存
|
|
|
+// */
|
|
|
+// public synchronized void ModifyInventory(int type, List<Stock> list, Long warehouseId) {
|
|
|
+// List<Stock> data = new ArrayList<>();
|
|
|
+//
|
|
|
+// //获取现有库存
|
|
|
+// List<Long> productIds = list.stream().map(Stock::getProductId).collect(Collectors.toList());
|
|
|
+// Map<Long, Stock> stockMap = this.mapKEntity(Stock::getProductId, q -> q.in(Stock::getProductId, productIds).eq(Stock::getWarehouseId, warehouseId));
|
|
|
+//
|
|
|
+// for (Stock stock : list) {
|
|
|
+// //忽略操作数量为0的记录 避免出现出入库记录为0的条目
|
|
|
+// if (BigDecimal.ZERO.compareTo(stock.getQuantity()) == 0) {
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+//
|
|
|
+// Stock oldStocks = stockMap.get(stock.getProductId());
|
|
|
+// //如果库存不存在 就创建一条空库存
|
|
|
+// if (ObjectUtil.isEmpty(oldStocks)) {
|
|
|
+// oldStocks = new Stock();
|
|
|
+// oldStocks.setProductId(stock.getProductId());
|
|
|
+// oldStocks.setWarehouseId(warehouseId);
|
|
|
+// oldStocks.setQuantity(BigDecimal.ZERO);
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (type == 1) {
|
|
|
+// //入库库存相加
|
|
|
+// BigDecimal quantity = oldStocks.getQuantity().add(stock.getQuantity());
|
|
|
+// oldStocks.setQuantity(quantity);
|
|
|
+// } else if (type == 2) {
|
|
|
+// //出库库存相减
|
|
|
+// ProductInfo productInfo = productInfoService.getById(stock.getProductId());
|
|
|
+// if (productInfo == null) {
|
|
|
+// throw new ServiceException("产品id:" + stock.getProductId() + "不存在");
|
|
|
+// }
|
|
|
+// BigDecimal quantity = oldStocks.getQuantity().subtract(stock.getQuantity());
|
|
|
+// if (quantity.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+// throw new ServiceException("以下商品库存不足,无法出库:" + productInfo.getName());
|
|
|
+// }
|
|
|
+// oldStocks.setQuantity(quantity);
|
|
|
+// } else {
|
|
|
+// throw new ServiceException("未知库存操作类型");
|
|
|
+// }
|
|
|
+// data.add(oldStocks);
|
|
|
+//
|
|
|
+// }
|
|
|
+// //操作库存
|
|
|
+// saveOrUpdateBatch(data);
|
|
|
+// }
|
|
|
|
|
|
/**
|
|
|
* 次品转良品
|
|
@@ -540,7 +508,14 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
/**
|
|
|
* 改变库存数量
|
|
|
*/
|
|
|
- private synchronized void changeStock(List<? extends InOutBo> list, Long warehouseId, JournalType journalType) {
|
|
|
+ @Override
|
|
|
+ public synchronized void changeStock(List<? extends InOutBo> list, Long warehouseId, JournalType journalType) {
|
|
|
+ Warehouse warehouse = warehouseService.getById(warehouseId);
|
|
|
+ if (ObjectUtil.isEmpty(warehouse)) {
|
|
|
+ throw new ServiceException("仓库不存在");
|
|
|
+ }
|
|
|
+ //获取归属公司id
|
|
|
+ Long companyId = warehouse.getCompanyId();
|
|
|
|
|
|
Map<Long, BigDecimal> map = list.stream().collect(Collectors.toMap(
|
|
|
InOutBo::getProductId,
|
|
@@ -550,13 +525,14 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
|
|
|
if (journalType.getType().equals(InOutType.IN)) {
|
|
|
map.forEach((productId, quantity) -> {
|
|
|
- Stock stock = getOne(q -> q.eq(Stock::getProductId, productId).eq(Stock::getWarehouseId, warehouseId));
|
|
|
+ Stock stock = getOne(q -> q.eq(Stock::getProductId, productId).eq(Stock::getWarehouseId, warehouseId).eq(Stock::getCompanyId, companyId));
|
|
|
|
|
|
if (stock == null) {
|
|
|
stock = new Stock();
|
|
|
stock.setWarehouseId(warehouseId);
|
|
|
stock.setProductId(productId);
|
|
|
stock.setQuantity(quantity);
|
|
|
+ stock.setCompanyId(companyId);
|
|
|
save(stock);
|
|
|
} else {
|
|
|
Long stockId = stock.getId();
|
|
@@ -572,6 +548,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
.setSql("quantity = quantity - '" + quantity + "'")
|
|
|
.eq(Stock::getProductId, productId)
|
|
|
.eq(Stock::getWarehouseId, warehouseId)
|
|
|
+ .eq(Stock::getCompanyId, companyId)
|
|
|
.apply("quantity - {0} >= 0", quantity)
|
|
|
);
|
|
|
|