|
@@ -178,11 +178,52 @@ public class BizTakeStockPeriodController extends BaseController
|
|
|
//已生产的批次
|
|
|
List<BizDaywork> dayworkList = bizDayworkService.selectNeedTakeStock(bizTakeStockPeriod.getTenantId());
|
|
|
List<BizTaksStockLot> list = new ArrayList<>();
|
|
|
+ //获取已经完成的批次id
|
|
|
+ List<Long> lotIds =dayworkList.stream().filter(daywork -> daywork.getStatus() == 2).map(BizDaywork::getLotId).distinct().collect(Collectors.toList());
|
|
|
+ //根据批次id查询到对应批次的零存或领取信息
|
|
|
+ List<BizStorageRetrieval> storageRetrievalList = bizStorageRetrievalService.query().in("lot_id", lotIds).or().in("retrieval_lot_id", lotIds).list();
|
|
|
+ //根据批次id查询是否有入库信息
|
|
|
+ List<BizInboundOrderDetail> inboundOrderDetailList = bizInboundOrderDetailService.query().in("lot_id", lotIds).list();
|
|
|
+
|
|
|
+ // 创建映射,计算以完成批次的零存数量
|
|
|
+ Map<Long, Long> storageNumByLotId = storageRetrievalList.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ BizStorageRetrieval::getLotId,
|
|
|
+ Collectors.summingLong(BizStorageRetrieval::getStorageNum)
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 创建映射,计算以完成批次的领取数量
|
|
|
+ Map<Long, Long> storageNumByRetrievalLotId = storageRetrievalList.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ BizStorageRetrieval::getRetrievalLotId,
|
|
|
+ Collectors.summingLong(BizStorageRetrieval::getStorageNum)
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 提取所有入库批次ID到Set中以提高查找效率
|
|
|
+ Set<Long> inboundLotIds = inboundOrderDetailList.stream()
|
|
|
+ .map(BizInboundOrderDetail::getLotId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+
|
|
|
dayworkList.forEach(item -> {
|
|
|
-// BizDayworkItem conditions = new BizDayworkItem();
|
|
|
-// conditions.setDayworkId(item.getId());
|
|
|
-// BizDayworkItem latestItem = bizDayworkItemService.getLastItem(conditions);
|
|
|
+
|
|
|
BizTaksStockLot bizTaksStockLot = new BizTaksStockLot();
|
|
|
+
|
|
|
+ // 如果批次在目标集合中,则计算生产数量
|
|
|
+ if (lotIds.contains(item.getLotId())) {
|
|
|
+ Long retrievalNum = storageNumByRetrievalLotId.getOrDefault(item.getLotId(), 0L);//领取数量
|
|
|
+ Long storageNum = storageNumByLotId.getOrDefault(item.getLotId(), 0L);//零存数量
|
|
|
+
|
|
|
+ // 计算并设置生产数量
|
|
|
+ long calculatedProdNum = item.getProdNum() + retrievalNum - storageNum;
|
|
|
+ bizTaksStockLot.setProdNum(Math.toIntExact(calculatedProdNum));
|
|
|
+ } else {
|
|
|
+ // 不在目标集合中则保持原值
|
|
|
+ bizTaksStockLot.setProdNum(item.getProdNum());
|
|
|
+ }
|
|
|
+ // 如果批次ID在入库明细中存在,设置isEstablishInbound为1表示为已经创建入库单,否则为0
|
|
|
+ bizTaksStockLot.setIsEstablishInbound(inboundLotIds.contains(item.getLotId()) ? 1 : 0);
|
|
|
+
|
|
|
bizTaksStockLot.setStockYear(bizTakeStockPeriod.getStockYear());
|
|
|
bizTaksStockLot.setStockMonth(bizTakeStockPeriod.getStockMonth());
|
|
|
bizTaksStockLot.setDrawingNumber(item.getDrawingNumber());
|
|
@@ -204,7 +245,6 @@ public class BizTakeStockPeriodController extends BaseController
|
|
|
bizTaksStockLot.setProcessAlias(item.getProcessAlias());
|
|
|
bizTaksStockLot.setProcessId(item.getProcessId());
|
|
|
bizTaksStockLot.setTechnologicalProcessId(item.getTechnologicalProcessId());
|
|
|
- bizTaksStockLot.setProdNum(item.getProdNum());
|
|
|
bizTaksStockLot.setIsLast(item.getIsLast());
|
|
|
bizTaksStockLot.setIsWasteRecycling(item.getIsWasteRecycling());
|
|
|
bizTaksStockLot.setIsAmend(item.getIsAmend());
|
|
@@ -212,13 +252,9 @@ public class BizTakeStockPeriodController extends BaseController
|
|
|
bizTaksStockLot.setRemark(item.getRemark());
|
|
|
bizTaksStockLot.setStatus(item.getStatus());
|
|
|
bizTaksStockLot.setHasSpecial(item.getHasSpecial());
|
|
|
- bizTaksStockLot.setIsProductStatus(1);
|
|
|
+ bizTaksStockLot.setIsProductStatus(item.getStatus());
|
|
|
bizTaksStockLot.setOutsourceFormNo(item.getOutsourceFormNo());
|
|
|
bizTaksStockLot.setStatusLabel(item.getReportStatus());
|
|
|
-// if (latestItem != null) {
|
|
|
-// bizTaksStockLot.setOutsourceFormNo(latestItem.getOutsourceFormNo());
|
|
|
-// bizTaksStockLot.setStatusLabel(latestItem.getStatus());
|
|
|
-// }
|
|
|
|
|
|
list.add(bizTaksStockLot);
|
|
|
});
|