From 631ff33f7a01e7fa343bba2cee521300f489a9a3 Mon Sep 17 00:00:00 2001 From: haozq <1611483981@qq.com> Date: Tue, 3 Feb 2026 12:36:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E7=AE=97=E7=9A=84bug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cost/service/NewSettlementService.java | 107 +++++++++++------- 1 file changed, 67 insertions(+), 40 deletions(-) diff --git a/src/com/bonus/cost/service/NewSettlementService.java b/src/com/bonus/cost/service/NewSettlementService.java index ef0d51a..4010c63 100644 --- a/src/com/bonus/cost/service/NewSettlementService.java +++ b/src/com/bonus/cost/service/NewSettlementService.java @@ -192,9 +192,10 @@ public class NewSettlementService { Comparator.nullsFirst(Comparator.naturalOrder()))); ProjectLeaseCostDetail firstItem = items.get(0); // - if("1143".equals(machineTypeId)) { + if("612".equals(machineTypeId)) { System.err.println(machineTypeId); } + System.err.println(machineTypeId); double totalItemAmount = 0.0; //循环逻辑处理 //默认在操作日期之前 存量 @@ -383,48 +384,74 @@ public class NewSettlementService { }else { if(delNum>0) { - String fasetStarTimeStr1 = formatLocalDateTimeToDate(fasetStarTime); - String operateTimeStr = formatLocalDateTimeToDate(operateTime); - if(fasetStarTimeStr1.equals(operateTimeStr)) { - operateTime = operateTime.plusDays(1); - } - //先把领取的 - long daysBetween=getDay(fasetStarTime,operateTime); - if(daysBetween==0) { - daysBetween=1; - add =false; - } + if(fasetStarTime==null &¤tCount==0) { + fasetStarTime=operateTime; + currentCount=currentCount+addNum; + // 然后将领取的座位最后一天单独计算 + double segmentAmount2 = currentCount * unitPrice * 1; + Map segment2 = new HashMap<>(); + LocalDateTime nextDayTime = operateTime.plusDays(1); + segment2.put("startTime",operateTime.toString()); + segment2.put("endTime", nextDayTime.toString()); + segment2.put("days", 1); + segment2.put("count", currentCount); + segment2.put("amount", segmentAmount2); + segments.add(segment2); + totalItemAmount=totalItemAmount+segmentAmount2; + //然后减去 + currentCount=currentCount-delNum; + fasetStarTime=nextDayTime; + String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime); + if(fasetStarTimeStr.equals(endTimeStr)) { + isLast=true; + } + }else { + String fasetStarTimeStr1 = formatLocalDateTimeToDate(fasetStarTime); + String operateTimeStr = formatLocalDateTimeToDate(operateTime); + if(fasetStarTimeStr1.equals(operateTimeStr)) { + operateTime = operateTime.plusDays(1); + } + //先把领取的 + long daysBetween=getDay(fasetStarTime,operateTime); + if(daysBetween==0) { + daysBetween=1; + add =false; + } + + double segmentAmount = currentCount * unitPrice * daysBetween; + Map segment = new HashMap<>(); + segment.put("startTime",fasetStarTime.toString()); + segment.put("endTime", operateTime.toString()); + segment.put("days", daysBetween); + totalItemAmount=totalItemAmount+segmentAmount; + segment.put("count", currentCount); + segment.put("amount", segmentAmount); + segments.add(segment); + + currentCount=currentCount+addNum; - double segmentAmount = currentCount * unitPrice * daysBetween; - Map segment = new HashMap<>(); - segment.put("startTime",fasetStarTime.toString()); - segment.put("endTime", operateTime.toString()); - segment.put("days", daysBetween); - totalItemAmount=totalItemAmount+segmentAmount; - segment.put("count", currentCount); - segment.put("amount", segmentAmount); - segments.add(segment); - currentCount=currentCount+addNum; - - // 然后将领取的座位最后一天单独计算 - double segmentAmount2 = currentCount * unitPrice * 1; - Map segment2 = new HashMap<>(); - LocalDateTime nextDayTime = operateTime.plusDays(1); - segment2.put("startTime",operateTime.toString()); - segment2.put("endTime", nextDayTime.toString()); - segment2.put("days", 1); - segment2.put("count", currentCount); - segment2.put("amount", segmentAmount2); - segments.add(segment2); - totalItemAmount=totalItemAmount+segmentAmount2; - //然后减去 - currentCount=currentCount-delNum; - fasetStarTime=nextDayTime; - String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime); - if(fasetStarTimeStr.equals(endTimeStr)) { - isLast=true; + // 然后将领取的座位最后一天单独计算 + double segmentAmount2 = currentCount * unitPrice * 1; + Map segment2 = new HashMap<>(); + LocalDateTime nextDayTime = operateTime.plusDays(1); + segment2.put("startTime",operateTime.toString()); + segment2.put("endTime", nextDayTime.toString()); + segment2.put("days", 1); + segment2.put("count", currentCount); + segment2.put("amount", segmentAmount2); + segments.add(segment2); + totalItemAmount=totalItemAmount+segmentAmount2; + //然后减去 + currentCount=currentCount-delNum; + fasetStarTime=nextDayTime; + String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime); + if(fasetStarTimeStr.equals(endTimeStr)) { + isLast=true; + + } } + }else { //无之前的数据的 第一次进来的 if(fasetStarTime==null) {