|
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -143,7 +144,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
|
|
|
@Autowired
|
|
|
private IStackingUpLogService stackingUpLogService;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
private IHeatsActualsService heatsActualsService;
|
|
|
|
|
@@ -3882,6 +3883,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
List<BilletBasicInfo> billets = entry.getValue();
|
|
|
|
|
|
Integer ccmNo = Optional.ofNullable(billets.get(0).getCcmNo()).orElse(0);
|
|
|
+ String shift = Optional.ofNullable(billets.get(0).getShift()).orElse("0");
|
|
|
+ String shiftGroup = Optional.ofNullable(billets.get(0).getShiftGroup()).orElse("0");
|
|
|
|
|
|
// 计算 weight 总和
|
|
|
BigDecimal totalWeight = billets.stream()
|
|
@@ -3894,6 +3897,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
StorageCenterHeatNoVO.HeatNoDetail heatNoDetail = new StorageCenterHeatNoVO.HeatNoDetail();
|
|
|
heatNoDetail.setHeatNo(heatNo);
|
|
|
heatNoDetail.setCcmNo(ccmNo);
|
|
|
+ heatNoDetail.setShift(shift);
|
|
|
+ heatNoDetail.setShiftGroup(shiftGroup);
|
|
|
heatNoDetail.setHeatNoWeight(totalWeight);
|
|
|
heatNoDetail.setHeatNoAmount(billets.size());
|
|
|
|
|
@@ -3906,6 +3911,123 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
return storageCenterHeatNoVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Page<StorageCenterInvoicingVO> storageCenterInvoicingInfo(StorageCenterQueryDTO queryDTO) {
|
|
|
+ int pageNo = Optional.ofNullable(queryDTO.getPageNo()).orElse(1);
|
|
|
+ int pageSize = Optional.ofNullable(queryDTO.getPageSize()).orElse(10);
|
|
|
+
|
|
|
+ // 分页查询 HeatsActuals
|
|
|
+ Page<HeatsActuals> heatsPage = new Page<>(pageNo, pageSize);
|
|
|
+ LambdaQueryWrapper<HeatsActuals> billQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if (StringUtils.isNotBlank(queryDTO.getCcmNo())) {
|
|
|
+ billQueryWrapper.eq(HeatsActuals::getCasterCode, queryDTO.getCcmNo());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(queryDTO.getHeatsCode())) {
|
|
|
+ billQueryWrapper.eq(HeatsActuals::getHeatsCode, queryDTO.getHeatsCode());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(queryDTO.getShift())) {
|
|
|
+ billQueryWrapper.eq(HeatsActuals::getShift, queryDTO.getShift());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(queryDTO.getShiftGroup())) {
|
|
|
+ billQueryWrapper.eq(HeatsActuals::getShiftGroup, queryDTO.getShiftGroup());
|
|
|
+ }
|
|
|
+ Date beginDate = queryDTO.getCreateTimeBegin();
|
|
|
+ Date endDate = queryDTO.getCreateTimeEnd();
|
|
|
+ if (beginDate != null) {
|
|
|
+ billQueryWrapper.ge(HeatsActuals::getCreateTime, DateUtils.getStartOfDayByDate(beginDate));
|
|
|
+ }
|
|
|
+ if (endDate != null) {
|
|
|
+ billQueryWrapper.le(HeatsActuals::getCreateTime, DateUtils.getEndOfDayByDate(endDate));
|
|
|
+ }
|
|
|
+ billQueryWrapper.orderByDesc(HeatsActuals::getCreateTime);
|
|
|
+
|
|
|
+ Page<HeatsActuals> pageResult = heatsActualsService.page(heatsPage, billQueryWrapper);
|
|
|
+ List<HeatsActuals> heatsActuals = pageResult.getRecords();
|
|
|
+ if (heatsActuals.isEmpty()) {
|
|
|
+ return new Page<>(pageNo, pageSize, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取 heatNo 集合
|
|
|
+ List<String> heatNoList = heatsActuals.stream()
|
|
|
+ .map(HeatsActuals::getHeatsCode)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 查询 BilletBasicInfo 数据
|
|
|
+ LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ basicInfoQueryWrapper.in(BilletBasicInfo::getHeatNo, heatNoList);
|
|
|
+ List<BilletBasicInfo> billetList = billetBasicInfoService.list(basicInfoQueryWrapper);
|
|
|
+
|
|
|
+ // heatNo 分组统计
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByHeatNo = billetList.stream()
|
|
|
+ .filter(b -> b.getHeatNo() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getHeatNo));
|
|
|
+
|
|
|
+ List<StorageCenterInvoicingVO> resultList = heatsActuals.stream()
|
|
|
+ .map(heat -> {
|
|
|
+ String heatNo = heat.getHeatsCode();
|
|
|
+ List<BilletBasicInfo> billets = groupedByHeatNo.getOrDefault(heatNo, Collections.emptyList());
|
|
|
+
|
|
|
+ // 汇总重量
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ Integer ccmNo = Optional.ofNullable(heat.getCasterCode()).map(Integer::valueOf).orElse(0);
|
|
|
+
|
|
|
+ StorageCenterInvoicingVO.HeatNoDetail heatNoDetail = new StorageCenterInvoicingVO.HeatNoDetail();
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO storageCenterHeatNoInvoicingVO = storageCenterInvoicingByHeatNo(heatNo);
|
|
|
+
|
|
|
+ BigDecimal sumWeight = BigDecimal.ZERO;
|
|
|
+ int sumAmount = 0;
|
|
|
+
|
|
|
+ if (storageCenterHeatNoInvoicingVO != null) {
|
|
|
+ if (storageCenterHeatNoInvoicingVO.getRollClubOneDetails() != null) {
|
|
|
+ sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubOneDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
|
|
|
+ sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubOneDetails().getTotalAmount()).orElse(0);
|
|
|
+ }
|
|
|
+ if (storageCenterHeatNoInvoicingVO.getRollClubTwoDetails() != null) {
|
|
|
+ sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
|
|
|
+ sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubTwoDetails().getTotalAmount()).orElse(0);
|
|
|
+ }
|
|
|
+ if (storageCenterHeatNoInvoicingVO.getRollClubThreeDetails() != null) {
|
|
|
+ sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
|
|
|
+ sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollClubThreeDetails().getTotalAmount()).orElse(0);
|
|
|
+ }
|
|
|
+ if (storageCenterHeatNoInvoicingVO.getRollHeightDetails() != null) {
|
|
|
+ sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollHeightDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
|
|
|
+ sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollHeightDetails().getTotalAmount()).orElse(0);
|
|
|
+ }
|
|
|
+ if (storageCenterHeatNoInvoicingVO.getRollOutShippDetails() != null) {
|
|
|
+ sumWeight = sumWeight.add(Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollOutShippDetails().getTotalWeight()).orElse(BigDecimal.ZERO));
|
|
|
+ sumAmount += Optional.ofNullable(storageCenterHeatNoInvoicingVO.getRollOutShippDetails().getTotalAmount()).orElse(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置热号基础信息
|
|
|
+ heatNoDetail.setHeatNo(heatNo);
|
|
|
+ heatNoDetail.setCcmNo(ccmNo);
|
|
|
+ heatNoDetail.setHeatNoWeight(sumWeight);
|
|
|
+ heatNoDetail.setHeatNoAmount(sumAmount);
|
|
|
+
|
|
|
+ StorageCenterInvoicingVO vo = new StorageCenterInvoicingVO();
|
|
|
+ vo.setHeatNoDetails(Collections.singletonList(heatNoDetail));
|
|
|
+ vo.setStorageCenterHeatNoInvoicing(storageCenterHeatNoInvoicingVO);
|
|
|
+ return vo;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ Page<StorageCenterInvoicingVO> resultPage = new Page<>(pageNo, pageSize, pageResult.getTotal());
|
|
|
+ resultPage.setRecords(resultList);
|
|
|
+
|
|
|
+ return resultPage;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public StorageCenterHeatNoDetailVO storageCenterByHeatNo(String heatNo) {
|
|
@@ -4676,6 +4798,829 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
return storageCenterHeatNoDetailVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public StorageCenterHeatNoInvoicingVO storageCenterInvoicingByHeatNo(String heatNo) {
|
|
|
+ StorageCenterHeatNoInvoicingVO storageCenterHeatNoInvoicingVO = new StorageCenterHeatNoInvoicingVO();
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollOneHeatNo rollOneHeatNo = new StorageCenterHeatNoInvoicingVO.RollOneHeatNo();
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollTwoHeatNo rollTwoHeatNo = new StorageCenterHeatNoInvoicingVO.RollTwoHeatNo();
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollThreeHeatNo rollThreeHeatNo = new StorageCenterHeatNoInvoicingVO.RollThreeHeatNo();
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollHeightHeatNo rollHeightHeatNo = new StorageCenterHeatNoInvoicingVO.RollHeightHeatNo();
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollOutHeatNo rollOutHeatNo = new StorageCenterHeatNoInvoicingVO.RollOutHeatNo();
|
|
|
+// StorageCenterHeatNoInvoicingVO.StackHeatNo stackHeatNo = new StorageCenterHeatNoDetailVO.StackHeatNo();
|
|
|
+// StorageCenterHeatNoInvoicingVO.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 storageCenterHeatNoInvoicingVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 按照 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<StorageCenterHeatNoInvoicingVO.SizeDetail> sizeDetailsList = new ArrayList<>();
|
|
|
+ List<StorageCenterHeatNoInvoicingVO.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
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 创建 RollSendDetail
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoInvoicingVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 赋值给 rollOneHeatNo
|
|
|
+ rollOneHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ rollOneHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
+
|
|
|
+ storageCenterHeatNoInvoicingVO.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<StorageCenterHeatNoInvoicingVO.SizeDetail> sizeDetailsList = new ArrayList<>();
|
|
|
+ List<StorageCenterHeatNoInvoicingVO.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
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 创建 RollSendDetail
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoInvoicingVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 赋值给 rollHeightHeatNo
|
|
|
+ rollHeightHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ rollHeightHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
+
|
|
|
+ storageCenterHeatNoInvoicingVO.setRollHeightDetails(rollHeightHeatNo);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// 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<StorageCenterHeatNoInvoicingVO.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);
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.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<StorageCenterHeatNoInvoicingVO.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);
|
|
|
+
|
|
|
+ // 查找所有匹配当前 assemblyNumber 的 StorageBill
|
|
|
+ List<StorageBill> matchedStorageBills = storageBillMap.entrySet().stream()
|
|
|
+ .filter(entryPlate -> Arrays.asList(entryPlate.getKey().split(",")).contains(assemblyNumber))
|
|
|
+ .map(Map.Entry::getValue)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ String licensePlate = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getLicensePlate)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知车牌");
|
|
|
+
|
|
|
+ String btype = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getBtype)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知类型");
|
|
|
+
|
|
|
+ Date createTime = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getCreateTime)
|
|
|
+ .findFirst()
|
|
|
+ .orElse(new Date());
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail rollChargeDetail = new StorageCenterHeatNoInvoicingVO.RollChargeDetail();
|
|
|
+ rollChargeDetail.setSize(size);
|
|
|
+ rollChargeDetail.setSpec(spec);
|
|
|
+ rollChargeDetail.setWeight(totalWeight);
|
|
|
+ rollChargeDetail.setAmount(billets.size());
|
|
|
+ rollChargeDetail.setLicensePlate(licensePlate);
|
|
|
+ rollChargeDetail.setBtype(btype);
|
|
|
+ rollChargeDetail.setCreateTime(createTime);
|
|
|
+
|
|
|
+ rollChargeDetails.add(rollChargeDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 licensePlate 分组并累加 amount 和 weight
|
|
|
+ Map<String, StorageCenterHeatNoInvoicingVO.RollChargeDetail> groupedByLicensePlate = rollChargeDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail::getLicensePlate,
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail newDetail = new StorageCenterHeatNoInvoicingVO.RollChargeDetail();
|
|
|
+ newDetail.setSize(detail.getSize()); // 这里可以选择合适的 size 逻辑
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setLicensePlate(detail.getLicensePlate());
|
|
|
+ newDetail.setBtype(detail.getBtype());
|
|
|
+ newDetail.setCreateTime(detail.getCreateTime());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight())); // BigDecimal 累加
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List 并赋值
|
|
|
+ List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> mergedRollChargeDetails = new ArrayList<>(groupedByLicensePlate.values());
|
|
|
+
|
|
|
+ rollTwoHeatNo.setRollChargeDetails(mergedRollChargeDetails);
|
|
|
+ rollTwoHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ storageCenterHeatNoInvoicingVO.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<StorageCenterHeatNoInvoicingVO.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);
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.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<StorageCenterHeatNoInvoicingVO.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);
|
|
|
+
|
|
|
+
|
|
|
+ // 查找所有匹配当前 assemblyNumber 的 StorageBill
|
|
|
+ List<StorageBill> matchedStorageBills = storageBillMap.entrySet().stream()
|
|
|
+ .filter(entryPlate -> Arrays.asList(entryPlate.getKey().split(",")).contains(assemblyNumber))
|
|
|
+ .map(Map.Entry::getValue)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ String licensePlate = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getLicensePlate)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知车牌");
|
|
|
+
|
|
|
+ String btype = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getBtype)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知类型");
|
|
|
+
|
|
|
+ Date createTime = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getCreateTime)
|
|
|
+ .findFirst()
|
|
|
+ .orElse(new Date());
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail rollChargeDetail = new StorageCenterHeatNoInvoicingVO.RollChargeDetail();
|
|
|
+ rollChargeDetail.setSize(size);
|
|
|
+ rollChargeDetail.setSpec(spec);
|
|
|
+ rollChargeDetail.setWeight(totalWeight);
|
|
|
+ rollChargeDetail.setAmount(billets.size());
|
|
|
+ rollChargeDetail.setLicensePlate(licensePlate);
|
|
|
+ rollChargeDetail.setBtype(btype);
|
|
|
+ rollChargeDetail.setCreateTime(createTime);
|
|
|
+
|
|
|
+ rollChargeDetails.add(rollChargeDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 licensePlate 分组并累加 amount 和 weight
|
|
|
+ Map<String, StorageCenterHeatNoInvoicingVO.RollChargeDetail> groupedByLicensePlate = rollChargeDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail::getLicensePlate,
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail newDetail = new StorageCenterHeatNoInvoicingVO.RollChargeDetail();
|
|
|
+ newDetail.setSize(detail.getSize()); // 这里可以选择合适的 size 逻辑
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setLicensePlate(detail.getLicensePlate());
|
|
|
+ newDetail.setBtype(detail.getBtype());
|
|
|
+ newDetail.setCreateTime(detail.getCreateTime());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight())); // BigDecimal 累加
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List 并赋值
|
|
|
+ List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> mergedRollChargeDetails = new ArrayList<>(groupedByLicensePlate.values());
|
|
|
+
|
|
|
+ rollThreeHeatNo.setRollChargeDetails(mergedRollChargeDetails);
|
|
|
+ rollThreeHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ storageCenterHeatNoInvoicingVO.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<StorageCenterHeatNoInvoicingVO.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);
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.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<StorageCenterHeatNoInvoicingVO.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);
|
|
|
+
|
|
|
+ // 查找所有匹配当前 assemblyNumber 的 StorageBill
|
|
|
+ List<StorageBill> matchedStorageBills = storageBillMap.entrySet().stream()
|
|
|
+ .filter(entryPlate -> Arrays.asList(entryPlate.getKey().split(",")).contains(assemblyNumber))
|
|
|
+ .map(Map.Entry::getValue)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ String licensePlate = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getLicensePlate)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知车牌");
|
|
|
+
|
|
|
+ String btype = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getBtype)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("未知类型");
|
|
|
+
|
|
|
+ Date createTime = matchedStorageBills.stream()
|
|
|
+ .map(StorageBill::getCreateTime)
|
|
|
+ .findFirst()
|
|
|
+ .orElse(new Date());
|
|
|
+
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail rollChargeDetail = new StorageCenterHeatNoInvoicingVO.RollChargeDetail();
|
|
|
+ rollChargeDetail.setSize(size);
|
|
|
+ rollChargeDetail.setSpec(spec);
|
|
|
+ rollChargeDetail.setWeight(totalWeight);
|
|
|
+ rollChargeDetail.setAmount(billets.size());
|
|
|
+ rollChargeDetail.setLicensePlate(licensePlate);
|
|
|
+ rollChargeDetail.setBtype(btype);
|
|
|
+ rollChargeDetail.setCreateTime(createTime);
|
|
|
+
|
|
|
+ rollChargeDetails.add(rollChargeDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按 licensePlate 分组并累加 amount 和 weight
|
|
|
+ Map<String, StorageCenterHeatNoInvoicingVO.RollChargeDetail> groupedByLicensePlate = rollChargeDetails.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail::getLicensePlate,
|
|
|
+ detail -> {
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollChargeDetail newDetail = new StorageCenterHeatNoInvoicingVO.RollChargeDetail();
|
|
|
+ newDetail.setSize(detail.getSize()); // 这里可以选择合适的 size 逻辑
|
|
|
+ newDetail.setSpec(detail.getSpec());
|
|
|
+ newDetail.setWeight(detail.getWeight());
|
|
|
+ newDetail.setAmount(detail.getAmount());
|
|
|
+ newDetail.setLicensePlate(detail.getLicensePlate());
|
|
|
+ newDetail.setBtype(detail.getBtype());
|
|
|
+ newDetail.setCreateTime(detail.getCreateTime());
|
|
|
+ return newDetail;
|
|
|
+ },
|
|
|
+ (existing, newDetail) -> {
|
|
|
+ existing.setAmount(existing.getAmount() + newDetail.getAmount());
|
|
|
+ existing.setWeight(existing.getWeight().add(newDetail.getWeight())); // BigDecimal 累加
|
|
|
+ return existing;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 转换为 List 并赋值
|
|
|
+ List<StorageCenterHeatNoInvoicingVO.RollChargeDetail> mergedRollChargeDetails = new ArrayList<>(groupedByLicensePlate.values());
|
|
|
+
|
|
|
+ rollOutHeatNo.setRollChargeDetails(mergedRollChargeDetails);
|
|
|
+ rollOutHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
+ storageCenterHeatNoInvoicingVO.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 = "未知";
|
|
|
+//
|
|
|
+// 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 storageCenterHeatNoInvoicingVO;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// 计算整数总和的方法
|
|
|
private int calculateIntSum(List<DestinationStatisticsDetails> list) {
|
|
@@ -6422,6 +7367,8 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
rollDetail.setLicensePlate(bill.getLicensePlate());
|
|
|
rollDetail.setOutTime(bill.getOutTime());
|
|
|
rollDetail.setType("热装");
|
|
|
+ rollDetail.setShift(bill.getShift());
|
|
|
+ rollDetail.setShiftGroup(bill.getShiftGroup());
|
|
|
return rollDetail;
|
|
|
}).sorted(Comparator.comparing(StorageCenterCarVO.RollDetail::getOutTime, Comparator.nullsLast(Comparator.reverseOrder()))).collect(Collectors.toList());
|
|
|
}
|