From eb6d66c27912baa24cd39097955490214f794b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E4=B8=89=E7=82=AE?= <15856818120@163.com> Date: Thu, 22 Jan 2026 15:24:01 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E6=96=99=E6=98=8E=E7=BB=86=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=90=88=E5=B9=B6=E5=90=8C=E4=B8=80=E5=A4=A9=E5=90=8C?= =?UTF-8?q?=E4=B8=80=E5=9E=8B=E5=8F=B7=E6=9C=BA=E5=85=B7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cost/service/ProjectCostServiceImpl.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/com/bonus/cost/service/ProjectCostServiceImpl.java b/src/com/bonus/cost/service/ProjectCostServiceImpl.java index b2eeeaf..26f0ad7 100644 --- a/src/com/bonus/cost/service/ProjectCostServiceImpl.java +++ b/src/com/bonus/cost/service/ProjectCostServiceImpl.java @@ -28,7 +28,6 @@ import org.springframework.transaction.annotation.Transactional; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URLEncoder; -import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -849,7 +848,7 @@ public class ProjectCostServiceImpl implements ProjectCostService { List leaseDetails = queryProjectLeaseDetails(queryParam); List returnDetails = queryProjectReturnDetails(queryParam); //计算差额 - calculateMaterialDifference(leaseDetails, returnDetails); + leaseDetails =calculateMaterialDifference(leaseDetails, returnDetails); List allDetails = new ArrayList<>(); if (leaseDetails != null) { allDetails.addAll(leaseDetails); @@ -1000,9 +999,45 @@ public class ProjectCostServiceImpl implements ProjectCostService { BigDecimal.valueOf(detail.getReturnNum()) : BigDecimal.ZERO; totalReturn = totalReturn.add(returnQty); } + List leasesNew = new ArrayList<>(); + + // 使用 Map 按日期分组,同一天的合并一起 + Map mergedMap = new LinkedHashMap<>(); + + for (ProjectLeaseCostDetail detail : leases) { + if ("牵张设备".equals(detail.getMachineCodeName()) ||"施工机械".equals(detail.getMachineCodeName()) ||"仪器设备".equals(detail.getMachineCodeName())){ + leasesNew.add(detail); + }else { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String dateOnly = detail.getOperateTime().substring(0, 10); + LocalDate dateKey = LocalDate.parse(dateOnly, + formatter); + if (mergedMap.containsKey(dateKey)) { + // 已存在该日期的记录,合并数量 + ProjectLeaseCostDetail existing = mergedMap.get(dateKey); + + // 累加 leaseNum + existing.setLeaseNum( + (existing.getLeaseNum() != null ? existing.getLeaseNum() : 0) + + (detail.getLeaseNum() != null ? detail.getLeaseNum() : 0) + ); + + } else { + // 新日期的记录,创建副本(避免修改原对象) + mergedMap.put(dateKey, detail); + } + } + + } + + //保存合并后的数据 + for (Map.Entry entry : mergedMap.entrySet()) { + ProjectLeaseCostDetail materialLeases = entry.getValue(); + leasesNew.add(materialLeases); + } // 按时间顺序处理每次领料 - for (ProjectLeaseCostDetail lease : leases) { + for (ProjectLeaseCostDetail lease : leasesNew) { //比较当前退料数量和领料数量 if(BigDecimal.valueOf(lease.getLeaseNum()).compareTo(totalReturn)>=0){ @@ -1894,8 +1929,6 @@ public class ProjectCostServiceImpl implements ProjectCostService { // 获取所有物资的领退记录 List details = calculation.getDetails(); if (details != null && !details.isEmpty()) { - int index = 1; - int index2 = 1; for (ProjectCostCalculationDetail detail : details) { List operRecords = detail.getDetails(); if (operRecords != null && !operRecords.isEmpty()) { @@ -1916,7 +1949,7 @@ public class ProjectCostServiceImpl implements ProjectCostService { row.put("新编码", record.getMachineCode()); row.put("单位", record.getMachineUnit()); row.put("数量", record.getOperateType() == 1 ? record.getLeaseNum() : record.getReturnNum()); - row.put("差额", record.getDifferenceQuantity().compareTo(BigDecimal.valueOf(record.getLeaseNum())) > 0 ? record.getLeaseNum():record.getDifferenceQuantity()); + row.put("差额", record.getDifferenceQuantity()); row.put("租赁单位", record.getBsName()); row.put("备注",null); dataList.add(row);