|
@@ -12,8 +12,10 @@ import com.fjhx.common.constant.SourceConstant;
|
|
|
import com.fjhx.common.utils.Assert;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
|
|
|
import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
|
|
|
import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
|
|
|
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
|
|
|
import com.fjhx.wms.entity.stock.dto.StockWaitDto;
|
|
@@ -213,7 +215,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
StockWaitDto stockWaitDto = BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDto.class);
|
|
|
stockWaitDto.setId(stockWaitDetails.getStockWaitId());
|
|
|
stockWaitDto.setStockWaitDetailsList(Collections.singletonList(BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDetails.class)));
|
|
|
- this.addByWdly(stockWaitDto);
|
|
|
+ this.add1(stockWaitDto);
|
|
|
|
|
|
//如果是采购退货 修改采购退货状态
|
|
|
StockWait stockWait = this.getById(stockWaitDto.getId());
|
|
@@ -226,7 +228,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
- public void addByWdly(StockWaitDto stockWaitDto) {
|
|
|
+ public void add1(StockWaitDto stockWaitDto) {
|
|
|
Assert.notEmpty(stockWaitDto.getId(), "待出入库id不能为空");
|
|
|
Assert.notEmpty(stockWaitDto.getWarehouseId(), "仓库id不能为空");
|
|
|
|
|
@@ -245,6 +247,62 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
stockWait.setVictoriatouristJson(JSONObject.toJSONString(json, JSONWriter.Feature.WriteLongAsString));
|
|
|
updateById(stockWait);
|
|
|
|
|
|
+ //如果业务类型是 采购到货入库 计算结存单价[结存单价=(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)]
|
|
|
+ if (StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
+ //获取待入库明细信息
|
|
|
+ List<Long> swdId = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
|
|
|
+ List<StockWaitDetails> oldStockWaitDetailsList = stockWaitDetailsService.listByIds(swdId);
|
|
|
+ Map<Long, StockWaitDetails> oldStockWaitDetailsMap = oldStockWaitDetailsList.stream()
|
|
|
+ .collect(Collectors.toMap(StockWaitDetails::getId, Function.identity()));
|
|
|
+
|
|
|
+ List<Long> productIds = oldStockWaitDetailsList.stream().map(StockWaitDetails::getProductId).collect(Collectors.toList());
|
|
|
+ //获取库存消息
|
|
|
+ Map<Long, Stock> stockMap = stockService.mapKEntity(Stock::getProductId, q -> q
|
|
|
+ .eq(Stock::getWarehouseId, stockWaitDto.getWarehouseId())
|
|
|
+ .in(Stock::getProductId, productIds));
|
|
|
+ //获取到货明细信息
|
|
|
+ List<Long> arrivalDetailsIds = oldStockWaitDetailsList.stream().map(StockWaitDetails::getBusinessDetailsId).collect(Collectors.toList());
|
|
|
+ List<ArrivalDetailPo> arrivalDetailList = myPurchaseService.getArrivalDetailList(arrivalDetailsIds);
|
|
|
+ Assert.notEmpty(arrivalDetailList, "到货明细信息为空");
|
|
|
+ Map<Long, ArrivalDetailPo> arrivalDetailPoMap = arrivalDetailList.stream().collect(Collectors.toMap(ArrivalDetailPo::getId, Function.identity()));
|
|
|
+ //获取采购明细信息
|
|
|
+ List<Long> purchaseDetailIds = arrivalDetailList.stream().map(ArrivalDetailPo::getPurchaseDetailId).collect(Collectors.toList());
|
|
|
+ List<PurchaseDetailPo> purchaseDetailList = myPurchaseService.getPurchaseDetailList(purchaseDetailIds);
|
|
|
+ Assert.notEmpty(arrivalDetailList, "采购明细信息为空");
|
|
|
+ Map<Long, PurchaseDetailPo> purchaseDetailPoMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetailPo::getId, Function.identity()));
|
|
|
+
|
|
|
+ List<Stock> stockList1 = new ArrayList<>();
|
|
|
+ for (StockWaitDetails stockWaitDetails : stockWaitDetailsDtoList) {
|
|
|
+ StockWaitDetails oldStockWaitDetails = oldStockWaitDetailsMap.get(stockWaitDetails.getId());
|
|
|
+ Assert.notEmpty(oldStockWaitDetails, "查询不到待入库明细信息");
|
|
|
+ //获取到货信息
|
|
|
+ ArrivalDetailPo arrivalDetailPo = arrivalDetailPoMap.get(oldStockWaitDetails.getBusinessDetailsId());
|
|
|
+ Assert.notEmpty(arrivalDetailPo, "查询不到到货明细信息");
|
|
|
+ //获取采购信息
|
|
|
+ PurchaseDetailPo purchaseDetailPo = purchaseDetailPoMap.get(arrivalDetailPo.getPurchaseDetailId());
|
|
|
+ Assert.notEmpty(arrivalDetailPo, "查询不到采购明细信息");
|
|
|
+ //获取库存信息
|
|
|
+ Stock stock = stockMap.get(oldStockWaitDetails.getProductId());
|
|
|
+ if (ObjectUtil.isEmpty(stock)) {
|
|
|
+ stock = new Stock();
|
|
|
+ stock.setWarehouseId(stockWaitDto.getWarehouseId());
|
|
|
+ stock.setProductId(oldStockWaitDetails.getProductId());
|
|
|
+ stock.setQuantity(BigDecimal.ZERO);
|
|
|
+ stock.setUnitPrice(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ //计算结存单价 结存单价=(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)
|
|
|
+ BigDecimal multiply = stock.getUnitPrice().multiply(stock.getQuantity());//结存单价*库存数量
|
|
|
+ BigDecimal multiply1 = purchaseDetailPo.getPrice().multiply(stockWaitDetails.getQuantity());//采购单价*入库数量
|
|
|
+ BigDecimal add = multiply.add(multiply1);//(结存单价*库存数量+采购单价*入库数量)
|
|
|
+ BigDecimal add1 = stock.getQuantity().add(stockWaitDetails.getQuantity());//库存数量+入库数量
|
|
|
+ BigDecimal divide = add.divide(add1, 4, BigDecimal.ROUND_HALF_UP);//(结存单价*库存数量+采购单价*入库数量)/(库存数量+入库数量)
|
|
|
+ stock.setUnitPrice(divide);
|
|
|
+
|
|
|
+ stockList1.add(stock);
|
|
|
+ }
|
|
|
+ stockService.saveOrUpdateBatch(stockList1);
|
|
|
+ }
|
|
|
+
|
|
|
//操作库存
|
|
|
List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
|
|
|
Map<Long, StockWaitDetails> oldStockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));
|