|
|
|
|
@ -407,18 +407,30 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
normalizedItems.add(sourceItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (defaultZero(sourceItem.getCount()).compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
|
|
throw exception(STOCK_OUT_PRODUCT_COUNT_EMPTY);
|
|
|
|
|
}
|
|
|
|
|
Map<StockOutPalletGroupKey, ErpStockOutSaveReqVOItem> itemMap = new LinkedHashMap<>();
|
|
|
|
|
Map<StockOutPalletGroupKey, List<ErpStockOutSaveReqVOItem.PalletItem>> palletMap = new LinkedHashMap<>();
|
|
|
|
|
BigDecimal palletTotalCount = BigDecimal.ZERO;
|
|
|
|
|
for (ErpStockOutSaveReqVOItem.PalletItem pallet : sourceItem.getPallets()) {
|
|
|
|
|
Long warehouseId = pallet.getWarehouseId() != null ? pallet.getWarehouseId() : sourceItem.getWarehouseId();
|
|
|
|
|
Long areaId = pallet.getAreaId() != null ? pallet.getAreaId() : sourceItem.getAreaId();
|
|
|
|
|
StockOutPalletGroupKey key = new StockOutPalletGroupKey(warehouseId, areaId);
|
|
|
|
|
ErpStockOutSaveReqVOItem targetItem = itemMap.computeIfAbsent(key,
|
|
|
|
|
item -> copyStockOutItem(sourceItem, warehouseId, areaId));
|
|
|
|
|
targetItem.setCount(defaultZero(targetItem.getCount()).add(resolvePalletCount(pallet)));
|
|
|
|
|
BigDecimal palletCount = resolvePalletCount(pallet, sourceItem);
|
|
|
|
|
if (palletCount.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
|
|
throw exception(STOCK_OUT_PRODUCT_PALLET_COUNT_EMPTY, pallet.getPalletId());
|
|
|
|
|
}
|
|
|
|
|
palletTotalCount = palletTotalCount.add(palletCount);
|
|
|
|
|
targetItem.setCount(defaultZero(targetItem.getCount()).add(palletCount));
|
|
|
|
|
targetItem.setPackageCount(defaultZero(targetItem.getPackageCount()).add(defaultZero(pallet.getPackageCount())));
|
|
|
|
|
palletMap.computeIfAbsent(key, item -> new ArrayList<>()).add(pallet);
|
|
|
|
|
}
|
|
|
|
|
if (defaultZero(sourceItem.getCount()).compareTo(palletTotalCount) != 0) {
|
|
|
|
|
throw exception(STOCK_OUT_PRODUCT_COUNT_NOT_MATCH, sourceItem.getCount(), palletTotalCount);
|
|
|
|
|
}
|
|
|
|
|
itemMap.forEach((key, item) -> {
|
|
|
|
|
item.setPallets(palletMap.getOrDefault(key, Collections.emptyList()));
|
|
|
|
|
normalizedItems.add(item);
|
|
|
|
|
@ -438,8 +450,18 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
return targetItem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private BigDecimal resolvePalletCount(ErpStockOutSaveReqVOItem.PalletItem pallet) {
|
|
|
|
|
return defaultZero(pallet.getCount());
|
|
|
|
|
private BigDecimal resolvePalletCount(ErpStockOutSaveReqVOItem.PalletItem pallet,
|
|
|
|
|
ErpStockOutSaveReqVOItem item) {
|
|
|
|
|
if (pallet.getCount() != null && pallet.getCount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
|
return pallet.getCount();
|
|
|
|
|
}
|
|
|
|
|
if (pallet.getPackageCount() != null && item.getPackageQuantity() != null) {
|
|
|
|
|
return pallet.getPackageCount().multiply(item.getPackageQuantity());
|
|
|
|
|
}
|
|
|
|
|
if (CollUtil.size(item.getPallets()) == 1) {
|
|
|
|
|
return defaultZero(item.getCount());
|
|
|
|
|
}
|
|
|
|
|
return BigDecimal.ZERO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static class StockOutPalletGroupKey {
|
|
|
|
|
@ -616,6 +638,7 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
convertSet(list, ErpStockOutSaveReqVOItem::getAreaId));
|
|
|
|
|
return convertList(list, item -> BeanUtils.toBean(item, ErpStockOutItemDO.class, target -> target
|
|
|
|
|
.setAreaName(areaMap.containsKey(target.getAreaId()) ? areaMap.get(target.getAreaId()).getAreaName() : null)
|
|
|
|
|
.setProductName(productMap.get(target.getProductId()).getName())
|
|
|
|
|
.setProductUnitId(productMap.get(target.getProductId()).getUnitId())
|
|
|
|
|
.setTotalPrice(MoneyUtils.priceMultiply(target.getProductPrice(), target.getCount()))
|
|
|
|
|
.setOutUsageType(item.getOutUsageType())
|
|
|
|
|
@ -710,7 +733,7 @@ public class ErpStockOutServiceImpl implements ErpStockOutService {
|
|
|
|
|
.palletId(pallet.getPalletId())
|
|
|
|
|
.warehouseId(pallet.getWarehouseId() != null ? pallet.getWarehouseId() : stockOutItem.getWarehouseId())
|
|
|
|
|
.areaId(pallet.getAreaId() != null ? pallet.getAreaId() : stockOutItem.getAreaId())
|
|
|
|
|
.count(resolvePalletCount(pallet))
|
|
|
|
|
.count(resolvePalletCount(pallet, reqItem))
|
|
|
|
|
.packageCount(defaultZero(pallet.getPackageCount()))
|
|
|
|
|
.build()));
|
|
|
|
|
}
|
|
|
|
|
|