|
@@ -15,6 +15,8 @@ import org.jeecg.common.util.DateUtils;
|
|
|
import org.jeecg.common.util.oConvertUtils;
|
|
|
import org.jeecg.modules.actualControl.billetActual.billetActual.entity.BilletBasicInfo;
|
|
|
import org.jeecg.modules.actualControl.billetActual.billetActual.service.IBilletBasicInfoService;
|
|
|
+import org.jeecg.modules.actualControl.heatsActuals.entity.HeatsActuals;
|
|
|
+import org.jeecg.modules.actualControl.heatsActuals.service.IHeatsActualsService;
|
|
|
import org.jeecg.modules.billet.billetAutoTmp.entity.BilletAutoTmp;
|
|
|
import org.jeecg.modules.billet.billetAutoTmp.service.IBilletAutoTmpService;
|
|
|
import org.jeecg.modules.billet.billetHotsend.entity.BilletHotsend;
|
|
@@ -47,6 +49,7 @@ import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippDetailsService
|
|
|
import org.jeecg.modules.billet.rollOutShipp.service.IRollOutShippService;
|
|
|
import org.jeecg.modules.billet.stackingAndLoadingVehicles.entity.StackingAndLoadingVehicles;
|
|
|
import org.jeecg.modules.billet.stackingAndLoadingVehicles.entity.StackingUpLog;
|
|
|
+import org.jeecg.modules.billet.stackingAndLoadingVehicles.mapper.StackingAndLoadingVehiclesMapper;
|
|
|
import org.jeecg.modules.billet.stackingAndLoadingVehicles.service.IStackingUpLogService;
|
|
|
import org.jeecg.modules.billet.storageBill.dto.StorageCenterQueryDTO;
|
|
|
import org.jeecg.modules.billet.storageBill.entity.*;
|
|
@@ -140,6 +143,12 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
|
|
|
@Autowired
|
|
|
private IStackingUpLogService stackingUpLogService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IHeatsActualsService heatsActualsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private StackingAndLoadingVehiclesMapper stackingAndLoadingVehiclesMapper;
|
|
|
|
|
|
@Override
|
|
|
public void departHandle(BilletHotsendDetailsVo billetHotsendDetailsVo) {
|
|
@@ -3581,8 +3590,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
return storageCenterCarDetailVO;
|
|
|
}
|
|
|
|
|
|
- List<String> heatNoList = Arrays.asList(bill.getHeatNo().split(","));
|
|
|
-
|
|
|
List<StorageCenterCarDetailVO.heatNoInfo> heatNoInfos = new ArrayList<>();
|
|
|
List<StorageCenterCarDetailVO.heatNoDetail> heatNoDetails = new ArrayList<>();
|
|
|
|
|
@@ -3605,12 +3612,22 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
.stream().collect(Collectors.groupingBy(RollOutShippDetails::getHeatNo));
|
|
|
}
|
|
|
|
|
|
+ // **获取所有的炉号 (HeatNo),去重**
|
|
|
+ Set<String> allHeatNos = new HashSet<>();
|
|
|
+
|
|
|
+ allHeatNos.addAll(rollClubTwoMap.keySet());
|
|
|
+ allHeatNos.addAll(rollClubThreeMap.keySet());
|
|
|
+ allHeatNos.addAll(rollOutShippMap.keySet());
|
|
|
+
|
|
|
+
|
|
|
// **遍历 heatNoList 进行处理**
|
|
|
- for (String s : heatNoList) {
|
|
|
+ for (String s : allHeatNos) {
|
|
|
+
|
|
|
+ List<StorageCenterCarDetailVO.assemblyNumberDetail> handleSizeList = new ArrayList<>();
|
|
|
+
|
|
|
StorageCenterCarDetailVO.heatNoDetail heatNoDetail = new StorageCenterCarDetailVO.heatNoDetail();
|
|
|
heatNoDetail.setHeatNo(s);
|
|
|
List<StorageCenterCarDetailVO.assemblyNumberDetail> assemblyNumberDetails = new ArrayList<>();
|
|
|
- List<StorageCenterCarDetailVO.assemblyNumberDetail> handleSizeList = new ArrayList<>();
|
|
|
|
|
|
List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoMap.get(s);
|
|
|
List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeMap.get(s);
|
|
@@ -3770,6 +3787,887 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
return storageCenterCarDetailVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public StorageCenterHeatNoVO storageCenterHeatNoInfo(StorageCenterQueryDTO queryDTO) {
|
|
|
+ StorageCenterHeatNoVO storageCenterHeatNoVO = new StorageCenterHeatNoVO();
|
|
|
+ if (queryDTO == null || queryDTO.getCurrentDate() == null) {
|
|
|
+ return storageCenterHeatNoVO; // 直接返回空对象,避免后续 NPE
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询 HeatsActuals 数据
|
|
|
+ LambdaQueryWrapper<HeatsActuals> billQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ billQueryWrapper.between(HeatsActuals::getCreateTime,
|
|
|
+ DateUtils.getStartOfDay(queryDTO.getCurrentDate()),
|
|
|
+ DateUtils.getEndOfDay(queryDTO.getCurrentDate()))
|
|
|
+ .orderByDesc(HeatsActuals::getCreateTime); // 按 createTime 降序排列;
|
|
|
+
|
|
|
+ List<HeatsActuals> heatsActuals = heatsActualsService.list(billQueryWrapper);
|
|
|
+ if (oConvertUtils.listIsEmpty(heatsActuals)) {
|
|
|
+ return storageCenterHeatNoVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取 heatNo 集合
|
|
|
+ List<String> heatNoList = heatsActuals.stream()
|
|
|
+ .map(HeatsActuals::getHeatsCode)
|
|
|
+ .filter(Objects::nonNull) // 避免空值
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ storageCenterHeatNoVO.setHeatNoTotalNum(heatNoList.size());
|
|
|
+
|
|
|
+ // 查询 BilletBasicInfo 数据
|
|
|
+ LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ basicInfoQueryWrapper.in(BilletBasicInfo::getHeatNo, heatNoList);
|
|
|
+
|
|
|
+ List<BilletBasicInfo> list = billetBasicInfoService.list(basicInfoQueryWrapper);
|
|
|
+ if (oConvertUtils.listIsEmpty(list)) {
|
|
|
+ return storageCenterHeatNoVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = list.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ storageCenterHeatNoVO.setAmountTotal(list.size());
|
|
|
+ storageCenterHeatNoVO.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 按照 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = list.stream()
|
|
|
+ .filter(b -> b.getLength() != null) // 先过滤掉 null,防止 NPE
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoVO.SizeDetail> sizeDetails = groupedByLength.entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ Integer length = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 创建 SizeDetail
|
|
|
+ StorageCenterHeatNoVO.SizeDetail sizeDetail = new StorageCenterHeatNoVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(billets.size());
|
|
|
+
|
|
|
+ return sizeDetail;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ storageCenterHeatNoVO.setSizeDetails(sizeDetails);
|
|
|
+
|
|
|
+ // 按照 heatNo 分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByHeatNo = list.stream()
|
|
|
+ .filter(b -> b.getHeatNo() != null) // 先过滤掉 null
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getHeatNo));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoVO.HeatNoDetail> heatNoDetails = groupedByHeatNo.entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ String heatNo = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ Integer ccmNo = Optional.ofNullable(billets.get(0).getCcmNo()).orElse(0);
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 创建 HeatNoDetail
|
|
|
+ StorageCenterHeatNoVO.HeatNoDetail heatNoDetail = new StorageCenterHeatNoVO.HeatNoDetail();
|
|
|
+ heatNoDetail.setHeatNo(heatNo);
|
|
|
+ heatNoDetail.setCcmNo(ccmNo);
|
|
|
+ heatNoDetail.setHeatNoWeight(totalWeight);
|
|
|
+ heatNoDetail.setHeatNoAmount(billets.size());
|
|
|
+
|
|
|
+ return heatNoDetail;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ storageCenterHeatNoVO.setHeatNoDetails(heatNoDetails);
|
|
|
+
|
|
|
+ return storageCenterHeatNoVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public StorageCenterHeatNoDetailVO storageCenterByHeatNo(String heatNo) {
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO storageCenterHeatNoDetailVO = new StorageCenterHeatNoDetailVO();
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.RollOneHeatNo rollOneHeatNo = new StorageCenterHeatNoDetailVO.RollOneHeatNo();
|
|
|
+ StorageCenterHeatNoDetailVO.RollTwoHeatNo rollTwoHeatNo = new StorageCenterHeatNoDetailVO.RollTwoHeatNo();
|
|
|
+ StorageCenterHeatNoDetailVO.RollThreeHeatNo rollThreeHeatNo = new StorageCenterHeatNoDetailVO.RollThreeHeatNo();
|
|
|
+ StorageCenterHeatNoDetailVO.RollHeightHeatNo rollHeightHeatNo = new StorageCenterHeatNoDetailVO.RollHeightHeatNo();
|
|
|
+ StorageCenterHeatNoDetailVO.RollOutHeatNo rollOutHeatNo = new StorageCenterHeatNoDetailVO.RollOutHeatNo();
|
|
|
+ StorageCenterHeatNoDetailVO.StackHeatNo stackHeatNo = new StorageCenterHeatNoDetailVO.StackHeatNo();
|
|
|
+ StorageCenterHeatNoDetailVO.UnknownHeatNo unknownHeatNo = new StorageCenterHeatNoDetailVO.UnknownHeatNo();
|
|
|
+
|
|
|
+
|
|
|
+ // 查询 BilletBasicInfo 数据
|
|
|
+ LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ basicInfoQueryWrapper.eq(BilletBasicInfo::getHeatNo, heatNo);
|
|
|
+
|
|
|
+ List<BilletBasicInfo> list = billetBasicInfoService.list(basicInfoQueryWrapper);
|
|
|
+ if (oConvertUtils.listIsEmpty(list)) {
|
|
|
+ return storageCenterHeatNoDetailVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 按照 belongTable 分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByBelongTable = list.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ b -> Optional.ofNullable(b.getBelongTable()).orElse("unknown") // 处理 null 值
|
|
|
+ ));
|
|
|
+
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("roll_club_one")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_club_one");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ rollOneHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ rollOneHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 按照 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null) // 先过滤掉 null,防止 NPE
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ // 一次遍历,构造 sizeDetailsList 和 rollSendDetailList
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = new ArrayList<>();
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollSendDetail> rollSendDetailList = new ArrayList<>();
|
|
|
+
|
|
|
+ groupedByLength.forEach((length, billets) -> {
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ int count = billets.size(); // 计算数据条数
|
|
|
+ // 取第一个 spec 值
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 创建 SizeDetail
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 创建 RollSendDetail
|
|
|
+ StorageCenterHeatNoDetailVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoDetailVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 赋值给 rollOneHeatNo
|
|
|
+ rollOneHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ rollOneHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
+
|
|
|
+ storageCenterHeatNoDetailVO.setRollClubOneDetails(rollOneHeatNo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("roll_height")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_height");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ rollHeightHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ rollHeightHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 按照 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null) // 先过滤掉 null,防止 NPE
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ // 一次遍历,构造 sizeDetailsList 和 rollSendDetailList
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = new ArrayList<>();
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollSendDetail> rollSendDetailList = new ArrayList<>();
|
|
|
+
|
|
|
+ groupedByLength.forEach((length, billets) -> {
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ int count = billets.size(); // 计算数据条数
|
|
|
+ // 取第一个 spec 值
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 创建 SizeDetail
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 创建 RollSendDetail
|
|
|
+ StorageCenterHeatNoDetailVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoDetailVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 赋值给 rollOneHeatNo
|
|
|
+ rollOneHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ rollOneHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
+
|
|
|
+ storageCenterHeatNoDetailVO.setRollClubOneDetails(rollOneHeatNo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("unknown")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("unknown");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ unknownHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ unknownHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 按照 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null) // 先过滤掉 null,防止 NPE
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ // 一次遍历,构造 sizeDetailsList 和 rollSendDetailList
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = new ArrayList<>();
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollSendDetail> rollSendDetailList = new ArrayList<>();
|
|
|
+
|
|
|
+ groupedByLength.forEach((length, billets) -> {
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ int count = billets.size(); // 计算数据条数
|
|
|
+ // 取第一个 spec 值
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 创建 SizeDetail
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 创建 RollSendDetail
|
|
|
+ StorageCenterHeatNoDetailVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoDetailVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 赋值给 unknownHeatNo
|
|
|
+ unknownHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ unknownHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
+
|
|
|
+ storageCenterHeatNoDetailVO.setUnknownDetails(unknownHeatNo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("roll_club_two")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_club_two");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ rollTwoHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ rollTwoHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 批量查询 StorageBill,避免 for 循环里重复查询
|
|
|
+ Set<String> assemblyNumbers = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getAssemblyNumber)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 只查询这些组坯号的 StorageBill
|
|
|
+ Map<String, StorageBill> storageBillMap = new HashMap<>();
|
|
|
+
|
|
|
+ // 遍历所有组坯号,使用 `like` 添加查询条件
|
|
|
+ if (!assemblyNumbers.isEmpty()) {
|
|
|
+ LambdaQueryWrapper<StorageBill> billQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ billQueryWrapper.and(wrapper -> {
|
|
|
+ for (String assemblyNumber : assemblyNumbers) {
|
|
|
+ wrapper.or().like(StorageBill::getAssemblyNumber, assemblyNumber);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<StorageBill> storageBillList = storageBillMapper.selectList(billQueryWrapper);
|
|
|
+
|
|
|
+ storageBillMap = storageBillList.stream()
|
|
|
+ .collect(Collectors.toMap(StorageBill::getAssemblyNumber, Function.identity(), (a, b) -> a));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = groupedByLength.entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ Integer length = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(billets.size());
|
|
|
+
|
|
|
+ return sizeDetail;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ rollTwoHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+
|
|
|
+ // 按 组坯号 (assemblyNumber) 分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByAssemblyNumber = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getAssemblyNumber() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollChargeDetail> rollChargeDetails = new ArrayList<>();
|
|
|
+
|
|
|
+ for (Map.Entry<String, List<BilletBasicInfo>> entry : groupedByAssemblyNumber.entrySet()) {
|
|
|
+ String assemblyNumber = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ if (billets == null || billets.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer size = Optional.ofNullable(billets.get(0).getLength()).orElse(0);
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 直接从 Map 获取 StorageBill 信息,避免多次查询数据库
|
|
|
+ String licensePlate = storageBillMap.entrySet().stream()
|
|
|
+ .filter(entryPlate -> Arrays.asList(entryPlate.getKey().split(",")).contains(assemblyNumber))
|
|
|
+ .map(entryPlate -> entryPlate.getValue().getLicensePlate())
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知车牌");
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail rollChargeDetail = new StorageCenterHeatNoDetailVO.RollChargeDetail();
|
|
|
+ rollChargeDetail.setSize(size);
|
|
|
+ rollChargeDetail.setSpec(spec);
|
|
|
+ rollChargeDetail.setWeight(totalWeight);
|
|
|
+ rollChargeDetail.setAmount(billets.size());
|
|
|
+ rollChargeDetail.setLicensePlate(licensePlate);
|
|
|
+
|
|
|
+ rollChargeDetails.add(rollChargeDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 licensePlate 分组并累加 amount 和 weight
|
|
|
+ Map<String, StorageCenterHeatNoDetailVO.RollChargeDetail> groupedByLicensePlate = rollChargeDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail::getLicensePlate,
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail newDetail = new StorageCenterHeatNoDetailVO.RollChargeDetail();
|
|
|
+ newDetail.setSize(detail.getSize()); // 这里可以选择合适的 size 逻辑
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setLicensePlate(detail.getLicensePlate());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight())); // BigDecimal 累加
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List 并赋值
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollChargeDetail> mergedRollChargeDetails = new ArrayList<>(groupedByLicensePlate.values());
|
|
|
+
|
|
|
+ rollTwoHeatNo.setRollChargeDetails(mergedRollChargeDetails);
|
|
|
+ rollTwoHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ storageCenterHeatNoDetailVO.setRollClubTwoDetails(rollTwoHeatNo);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("roll_club_three")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_club_three");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ rollThreeHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ rollThreeHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 批量查询 StorageBill,避免 for 循环里重复查询
|
|
|
+ Set<String> assemblyNumbers = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getAssemblyNumber)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 只查询这些组坯号的 StorageBill
|
|
|
+ Map<String, StorageBill> storageBillMap = new HashMap<>();
|
|
|
+
|
|
|
+ // 遍历所有组坯号,使用 `like` 添加查询条件
|
|
|
+ if (!assemblyNumbers.isEmpty()) {
|
|
|
+ LambdaQueryWrapper<StorageBill> billQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ billQueryWrapper.and(wrapper -> {
|
|
|
+ for (String assemblyNumber : assemblyNumbers) {
|
|
|
+ wrapper.or().like(StorageBill::getAssemblyNumber, assemblyNumber);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<StorageBill> storageBillList = storageBillMapper.selectList(billQueryWrapper);
|
|
|
+
|
|
|
+ storageBillMap = storageBillList.stream()
|
|
|
+ .collect(Collectors.toMap(StorageBill::getAssemblyNumber, Function.identity(), (a, b) -> a));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = groupedByLength.entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ Integer length = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(billets.size());
|
|
|
+
|
|
|
+ return sizeDetail;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ rollThreeHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+
|
|
|
+ // 按 组坯号 (assemblyNumber) 分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByAssemblyNumber = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getAssemblyNumber() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollChargeDetail> rollChargeDetails = new ArrayList<>();
|
|
|
+
|
|
|
+ for (Map.Entry<String, List<BilletBasicInfo>> entry : groupedByAssemblyNumber.entrySet()) {
|
|
|
+ String assemblyNumber = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ if (billets == null || billets.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer size = Optional.ofNullable(billets.get(0).getLength()).orElse(0);
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 直接从 Map 获取 StorageBill 信息,避免多次查询数据库
|
|
|
+ String licensePlate = storageBillMap.entrySet().stream()
|
|
|
+ .filter(entryPlate -> Arrays.asList(entryPlate.getKey().split(",")).contains(assemblyNumber))
|
|
|
+ .map(entryPlate -> entryPlate.getValue().getLicensePlate())
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知车牌");
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail rollChargeDetail = new StorageCenterHeatNoDetailVO.RollChargeDetail();
|
|
|
+ rollChargeDetail.setSize(size);
|
|
|
+ rollChargeDetail.setSpec(spec);
|
|
|
+ rollChargeDetail.setWeight(totalWeight);
|
|
|
+ rollChargeDetail.setAmount(billets.size());
|
|
|
+ rollChargeDetail.setLicensePlate(licensePlate);
|
|
|
+
|
|
|
+ rollChargeDetails.add(rollChargeDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 licensePlate 分组并累加 amount 和 weight
|
|
|
+ Map<String, StorageCenterHeatNoDetailVO.RollChargeDetail> groupedByLicensePlate = rollChargeDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail::getLicensePlate,
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail newDetail = new StorageCenterHeatNoDetailVO.RollChargeDetail();
|
|
|
+ newDetail.setSize(detail.getSize()); // 这里可以选择合适的 size 逻辑
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setLicensePlate(detail.getLicensePlate());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight())); // BigDecimal 累加
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List 并赋值
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollChargeDetail> mergedRollChargeDetails = new ArrayList<>(groupedByLicensePlate.values());
|
|
|
+
|
|
|
+ rollThreeHeatNo.setRollChargeDetails(mergedRollChargeDetails);
|
|
|
+ rollThreeHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ storageCenterHeatNoDetailVO.setRollClubThreeDetails(rollThreeHeatNo);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("roll_out_shipp")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("roll_out_shipp");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ rollOutHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ rollOutHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 批量查询 StorageBill,避免 for 循环里重复查询
|
|
|
+ Set<String> assemblyNumbers = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getAssemblyNumber)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 只查询这些组坯号的 StorageBill
|
|
|
+ Map<String, StorageBill> storageBillMap = new HashMap<>();
|
|
|
+
|
|
|
+ // 遍历所有组坯号,使用 `like` 添加查询条件
|
|
|
+ if (!assemblyNumbers.isEmpty()) {
|
|
|
+ LambdaQueryWrapper<StorageBill> billQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ billQueryWrapper.and(wrapper -> {
|
|
|
+ for (String assemblyNumber : assemblyNumbers) {
|
|
|
+ wrapper.or().like(StorageBill::getAssemblyNumber, assemblyNumber);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<StorageBill> storageBillList = storageBillMapper.selectList(billQueryWrapper);
|
|
|
+
|
|
|
+ storageBillMap = storageBillList.stream()
|
|
|
+ .collect(Collectors.toMap(StorageBill::getAssemblyNumber, Function.identity(), (a, b) -> a));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = groupedByLength.entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ Integer length = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(billets.size());
|
|
|
+
|
|
|
+ return sizeDetail;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ rollOutHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+
|
|
|
+ // 按 组坯号 (assemblyNumber) 分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByAssemblyNumber = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getAssemblyNumber() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollChargeDetail> rollChargeDetails = new ArrayList<>();
|
|
|
+
|
|
|
+ for (Map.Entry<String, List<BilletBasicInfo>> entry : groupedByAssemblyNumber.entrySet()) {
|
|
|
+ String assemblyNumber = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ if (billets == null || billets.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer size = Optional.ofNullable(billets.get(0).getLength()).orElse(0);
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 直接从 Map 获取 StorageBill 信息,避免多次查询数据库
|
|
|
+ String licensePlate = storageBillMap.entrySet().stream()
|
|
|
+ .filter(entryPlate -> Arrays.asList(entryPlate.getKey().split(",")).contains(assemblyNumber))
|
|
|
+ .map(entryPlate -> entryPlate.getValue().getLicensePlate())
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知车牌");
|
|
|
+
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail rollChargeDetail = new StorageCenterHeatNoDetailVO.RollChargeDetail();
|
|
|
+ rollChargeDetail.setSize(size);
|
|
|
+ rollChargeDetail.setSpec(spec);
|
|
|
+ rollChargeDetail.setWeight(totalWeight);
|
|
|
+ rollChargeDetail.setAmount(billets.size());
|
|
|
+ rollChargeDetail.setLicensePlate(licensePlate);
|
|
|
+
|
|
|
+ rollChargeDetails.add(rollChargeDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 licensePlate 分组并累加 amount 和 weight
|
|
|
+ Map<String, StorageCenterHeatNoDetailVO.RollChargeDetail> groupedByLicensePlate = rollChargeDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail::getLicensePlate,
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoDetailVO.RollChargeDetail newDetail = new StorageCenterHeatNoDetailVO.RollChargeDetail();
|
|
|
+ newDetail.setSize(detail.getSize()); // 这里可以选择合适的 size 逻辑
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setLicensePlate(detail.getLicensePlate());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight())); // BigDecimal 累加
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List 并赋值
|
|
|
+ List<StorageCenterHeatNoDetailVO.RollChargeDetail> mergedRollChargeDetails = new ArrayList<>(groupedByLicensePlate.values());
|
|
|
+
|
|
|
+ rollOutHeatNo.setRollChargeDetails(mergedRollChargeDetails);
|
|
|
+ rollOutHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ storageCenterHeatNoDetailVO.setRollOutShippDetails(rollOutHeatNo);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (groupedByBelongTable.containsKey("stacking_and_loading_vehicles")) {
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billetBasicInfos = groupedByBelongTable.get("stacking_and_loading_vehicles");
|
|
|
+
|
|
|
+ // 计算总重量 & 总条数
|
|
|
+ BigDecimal totalBlankOutput = billetBasicInfos.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ stackHeatNo.setTotalAmount(billetBasicInfos.size());
|
|
|
+ stackHeatNo.setTotalWeight(totalBlankOutput);
|
|
|
+
|
|
|
+ // 按照 getLength 分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getLength() != null) // 先过滤掉 null,防止 NPE
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.SizeDetail> sizeDetailsList = groupedByLength.entrySet().stream()
|
|
|
+ .map(entry -> {
|
|
|
+ Integer length = entry.getKey();
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 创建 SizeDetail
|
|
|
+ StorageCenterHeatNoDetailVO.SizeDetail sizeDetail = new StorageCenterHeatNoDetailVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(billets.size());
|
|
|
+
|
|
|
+ return sizeDetail;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ stackHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByHeatNoAndBilletNo = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getHeatNo() != null && b.getBilletNo() != null) // 先过滤掉 null,防止 NPE
|
|
|
+ .collect(Collectors.groupingBy(b -> b.getHeatNo() + "_" + b.getBilletNo()));
|
|
|
+
|
|
|
+
|
|
|
+ List<StorageCenterHeatNoDetailVO.StackingVehiclesDetail> stackingVehiclesDetails = new ArrayList<>();
|
|
|
+
|
|
|
+ for (Map.Entry<String, List<BilletBasicInfo>> entry : groupedByHeatNoAndBilletNo.entrySet()) {
|
|
|
+ String key = entry.getKey(); // 获取拼接的 key
|
|
|
+ String[] parts = key.split("_", 2); // 以 "_" 分割 key,限制最多分割 2 部分
|
|
|
+ String splitHeatNo = parts.length > 0 ? parts[0] : "Unknown"; // 获取 HeatNo
|
|
|
+ String billetNo = parts.length > 1 ? parts[1] : "Unknown"; // 获取 BilletNo
|
|
|
+
|
|
|
+ List<BilletBasicInfo> billets = entry.getValue();
|
|
|
+ if (billets == null || billets.isEmpty()) {
|
|
|
+ continue; // 避免空数据
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<StackingAndLoadingVehicles> stackingLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ stackingLambdaQueryWrapper
|
|
|
+ .like(StackingAndLoadingVehicles::getHeatNo, splitHeatNo) // heatNo 模糊匹配
|
|
|
+ .like(StackingAndLoadingVehicles::getBilletNos, billetNo); // billetNos 模糊匹配
|
|
|
+
|
|
|
+ List<StackingAndLoadingVehicles> stackingAndLoadingVehicles = stackingAndLoadingVehiclesMapper.selectList(stackingLambdaQueryWrapper);
|
|
|
+
|
|
|
+ // 默认值
|
|
|
+ String stackAddr = "未知";
|
|
|
+ String layer = "未知";
|
|
|
+ String address = "未知";
|
|
|
+ String size = "未知";
|
|
|
+
|
|
|
+ if (!stackingAndLoadingVehicles.isEmpty()) {
|
|
|
+ stackAddr = stackingAndLoadingVehicles.get(0).getStackAddr();
|
|
|
+ layer = stackingAndLoadingVehicles.get(0).getLayer();
|
|
|
+ address = stackingAndLoadingVehicles.get(0).getAddress();
|
|
|
+ size = stackingAndLoadingVehicles.get(0).getSize();
|
|
|
+ }
|
|
|
+
|
|
|
+// Integer size = Optional.ofNullable(billets.get(0).getLength()).orElse(0); // 避免 NullPointerException
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown"); // 避免 null 赋值
|
|
|
+
|
|
|
+ // 计算 weight 总和
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ // 创建 RollChargeDetail
|
|
|
+ StorageCenterHeatNoDetailVO.StackingVehiclesDetail stackingVehiclesDetail = new StorageCenterHeatNoDetailVO.StackingVehiclesDetail();
|
|
|
+ stackingVehiclesDetail.setSize(size);
|
|
|
+ stackingVehiclesDetail.setSpec(spec);
|
|
|
+ stackingVehiclesDetail.setWeight(totalWeight);
|
|
|
+ stackingVehiclesDetail.setAmount(billets.size());
|
|
|
+ stackingVehiclesDetail.setStackAddr(stackAddr);
|
|
|
+ stackingVehiclesDetail.setLayer(layer);
|
|
|
+ stackingVehiclesDetail.setAddress(address);
|
|
|
+
|
|
|
+ stackingVehiclesDetails.add(stackingVehiclesDetail);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 先对 stackDetails 进行分组
|
|
|
+ Map<String, StorageCenterHeatNoDetailVO.StackingVehiclesDetail> groupedStackDetails = stackingVehiclesDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ // key: stackAddr + layer + address 作为分组依据
|
|
|
+ detail -> detail.getStackAddr() + "_" + detail.getLayer() + "_" + detail.getAddress(),
|
|
|
+ // value: 原始数据
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoDetailVO.StackingVehiclesDetail newDetail = new StorageCenterHeatNoDetailVO.StackingVehiclesDetail();
|
|
|
+ newDetail.setSize(detail.getSize());
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setStackAddr(detail.getStackAddr());
|
|
|
+ newDetail.setLayer(detail.getLayer());
|
|
|
+ newDetail.setAddress(detail.getAddress());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ // 合并逻辑:累加 amount 和 weight
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight()));
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List,并按照 layer 和 address 进行排序
|
|
|
+ List<StorageCenterHeatNoDetailVO.StackingVehiclesDetail> mergedStackDetails = groupedStackDetails.values().stream()
|
|
|
+ .sorted(Comparator.comparing(StorageCenterHeatNoDetailVO.StackingVehiclesDetail::getLayer)
|
|
|
+ .thenComparing(StorageCenterHeatNoDetailVO.StackingVehiclesDetail::getAddress)) // 先按 layer,再按 address 排序
|
|
|
+ .collect(Collectors.toList());// 转换为 List
|
|
|
+
|
|
|
+ // 更新 stackHeatNo
|
|
|
+ stackHeatNo.setStackDetails(mergedStackDetails);
|
|
|
+
|
|
|
+ stackHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+
|
|
|
+ storageCenterHeatNoDetailVO.setStackingVehicles(stackHeatNo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return storageCenterHeatNoDetailVO;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// 计算整数总和的方法
|
|
|
private int calculateIntSum(List<DestinationStatisticsDetails> list) {
|
|
@@ -5510,11 +6408,14 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
.map(bill -> {
|
|
|
StorageCenterCarVO.RollDetail rollDetail = new StorageCenterCarVO.RollDetail();
|
|
|
rollDetail.setStorageBillId(bill.getId());
|
|
|
+ rollDetail.setCcmNo(bill.getCcmNo());
|
|
|
+ rollDetail.setCarAllNum(bill.getCarAllNum());
|
|
|
rollDetail.setRollAmount(bill.getAmountTotal());
|
|
|
rollDetail.setLicensePlate(bill.getLicensePlate());
|
|
|
rollDetail.setType("热装");
|
|
|
return rollDetail;
|
|
|
})
|
|
|
+ .sorted(Comparator.comparing(StorageCenterCarVO.RollDetail::getCarAllNum))
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
}
|