|
@@ -73,6 +73,7 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicLong;
|
|
@@ -4904,49 +4905,62 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
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));
|
|
|
+ // 使用 DateTimeFormatter 将 String 转换为 LocalDate 类型
|
|
|
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+
|
|
|
+ // 按照 createTime(yyyy-MM-dd)分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByDate = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getCreateTime() != null)
|
|
|
+ .collect(Collectors.groupingBy(b -> dateFormatter.format(b.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())));
|
|
|
|
|
|
- // 一次遍历,构造 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);
|
|
|
+ for (Map.Entry<String, List<BilletBasicInfo>> dateEntry : groupedByDate.entrySet()) {
|
|
|
+ List<BilletBasicInfo> dateBillets = dateEntry.getValue();
|
|
|
|
|
|
- int count = billets.size(); // 计算数据条数
|
|
|
- // 取第一个 spec 值
|
|
|
- String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+ // 解析日期字符串为 LocalDate
|
|
|
+ LocalDate createDate = LocalDate.parse(dateEntry.getKey(), dateFormatter);
|
|
|
|
|
|
- // 创建 SizeDetail
|
|
|
- StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.SizeDetail();
|
|
|
- sizeDetail.setSize(length);
|
|
|
- sizeDetail.setSizeWeight(totalWeight);
|
|
|
- sizeDetail.setSizeAmount(count);
|
|
|
- sizeDetailsList.add(sizeDetail);
|
|
|
+ // 按照 length 再分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = dateBillets.stream()
|
|
|
+ .filter(b -> b.getLength() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
|
|
|
- // 创建 RollSendDetail
|
|
|
- StorageCenterHeatNoInvoicingVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoInvoicingVO.RollSendDetail();
|
|
|
- rollSendDetail.setSize(length);
|
|
|
- rollSendDetail.setWeight(totalWeight);
|
|
|
- rollSendDetail.setAmount(count);
|
|
|
- rollSendDetail.setSpec(spec);
|
|
|
- rollSendDetailList.add(rollSendDetail);
|
|
|
- });
|
|
|
+ groupedByLength.forEach((length, billets) -> {
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
|
- // 赋值给 rollOneHeatNo
|
|
|
+ int count = billets.size();
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 添加 SizeDetail(汇总一次即可,不需重复)
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 添加每一条按日期分组的 RollSendDetail
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoInvoicingVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+
|
|
|
+ // 设置 createDate,只保留日期部分
|
|
|
+ rollSendDetail.setCreateTime(java.sql.Date.valueOf(createDate)); // 只保留日期部分,清除时间部分
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 最终赋值给 rollOneHeatNo
|
|
|
rollOneHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
rollOneHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
-
|
|
|
storageCenterHeatNoInvoicingVO.setRollClubOneDetails(rollOneHeatNo);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if (groupedByBelongTable.containsKey("roll_height")) {
|
|
@@ -4963,49 +4977,62 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
|
|
|
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));
|
|
|
+ // 使用 DateTimeFormatter 将 String 转换为 LocalDate 类型
|
|
|
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+
|
|
|
+ // 按照 createTime(yyyy-MM-dd)分组
|
|
|
+ Map<String, List<BilletBasicInfo>> groupedByDate = billetBasicInfos.stream()
|
|
|
+ .filter(b -> b.getCreateTime() != null)
|
|
|
+ .collect(Collectors.groupingBy(b -> dateFormatter.format(b.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())));
|
|
|
|
|
|
- // 一次遍历,构造 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);
|
|
|
+ for (Map.Entry<String, List<BilletBasicInfo>> dateEntry : groupedByDate.entrySet()) {
|
|
|
+ List<BilletBasicInfo> dateBillets = dateEntry.getValue();
|
|
|
|
|
|
- int count = billets.size(); // 计算数据条数
|
|
|
- // 取第一个 spec 值
|
|
|
- String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+ // 解析日期字符串为 LocalDate
|
|
|
+ LocalDate createDate = LocalDate.parse(dateEntry.getKey(), dateFormatter);
|
|
|
|
|
|
- // 创建 SizeDetail
|
|
|
- StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.SizeDetail();
|
|
|
- sizeDetail.setSize(length);
|
|
|
- sizeDetail.setSizeWeight(totalWeight);
|
|
|
- sizeDetail.setSizeAmount(count);
|
|
|
- sizeDetailsList.add(sizeDetail);
|
|
|
+ // 按照 length 再分组
|
|
|
+ Map<Integer, List<BilletBasicInfo>> groupedByLength = dateBillets.stream()
|
|
|
+ .filter(b -> b.getLength() != null)
|
|
|
+ .collect(Collectors.groupingBy(BilletBasicInfo::getLength));
|
|
|
|
|
|
- // 创建 RollSendDetail
|
|
|
- StorageCenterHeatNoInvoicingVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoInvoicingVO.RollSendDetail();
|
|
|
- rollSendDetail.setSize(length);
|
|
|
- rollSendDetail.setWeight(totalWeight);
|
|
|
- rollSendDetail.setAmount(count);
|
|
|
- rollSendDetail.setSpec(spec);
|
|
|
- rollSendDetailList.add(rollSendDetail);
|
|
|
- });
|
|
|
+ groupedByLength.forEach((length, billets) -> {
|
|
|
+ BigDecimal totalWeight = billets.stream()
|
|
|
+ .map(BilletBasicInfo::getBilletWeight)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .map(BigDecimal::valueOf)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
|
- // 赋值给 rollHeightHeatNo
|
|
|
+ int count = billets.size();
|
|
|
+ String spec = Optional.ofNullable(billets.get(0).getSpec()).orElse("Unknown");
|
|
|
+
|
|
|
+ // 添加 SizeDetail(汇总一次即可,不需重复)
|
|
|
+ StorageCenterHeatNoInvoicingVO.SizeDetail sizeDetail = new StorageCenterHeatNoInvoicingVO.SizeDetail();
|
|
|
+ sizeDetail.setSize(length);
|
|
|
+ sizeDetail.setSizeAmount(count);
|
|
|
+ sizeDetail.setSizeWeight(totalWeight);
|
|
|
+ sizeDetailsList.add(sizeDetail);
|
|
|
+
|
|
|
+ // 添加每一条按日期分组的 RollSendDetail
|
|
|
+ StorageCenterHeatNoInvoicingVO.RollSendDetail rollSendDetail = new StorageCenterHeatNoInvoicingVO.RollSendDetail();
|
|
|
+ rollSendDetail.setSize(length);
|
|
|
+ rollSendDetail.setWeight(totalWeight);
|
|
|
+ rollSendDetail.setAmount(count);
|
|
|
+ rollSendDetail.setSpec(spec);
|
|
|
+
|
|
|
+ // 设置 createDate,只保留日期部分
|
|
|
+ rollSendDetail.setCreateTime(java.sql.Date.valueOf(createDate)); // 只保留日期部分,清除时间部分
|
|
|
+ rollSendDetailList.add(rollSendDetail);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 最终赋值给 rollHeightHeatNo
|
|
|
rollHeightHeatNo.setSizeDetails(sizeDetailsList);
|
|
|
rollHeightHeatNo.setRollSendDetails(rollSendDetailList);
|
|
|
-
|
|
|
storageCenterHeatNoInvoicingVO.setRollHeightDetails(rollHeightHeatNo);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|