结算修复

This commit is contained in:
马三炮 2026-01-29 13:21:30 +08:00
parent 0a55d87aae
commit be36d03fce
1 changed files with 66 additions and 36 deletions

View File

@ -180,10 +180,7 @@ public class NewSettlementService {
//结束时间-转成日期 //结束时间-转成日期
LocalDateTime startDate = LocalDateTime.parse(startTimeStr + "T00:00:00"); LocalDateTime startDate = LocalDateTime.parse(startTimeStr + "T00:00:00");
LocalDateTime endDate = LocalDateTime.parse(endTimeStr + "T23:59:59"); LocalDateTime endDate = LocalDateTime.parse(endTimeStr + "T23:59:59");
double totalAmount = 0.0; double totalAmount = 0.0;
//计算金额 //计算金额
for (Map.Entry<String, List<ProjectLeaseCostDetail>> entry : groupedByMachineType.entrySet()) { for (Map.Entry<String, List<ProjectLeaseCostDetail>> entry : groupedByMachineType.entrySet()) {
Map<String, Object> timeLineData = new HashMap<>(); // 存储时间线上的数量变化 Map<String, Object> timeLineData = new HashMap<>(); // 存储时间线上的数量变化
@ -195,7 +192,7 @@ public class NewSettlementService {
Comparator.nullsFirst(Comparator.naturalOrder()))); Comparator.nullsFirst(Comparator.naturalOrder())));
ProjectLeaseCostDetail firstItem = items.get(0); ProjectLeaseCostDetail firstItem = items.get(0);
// //
if("2402".equals(machineTypeId)) { if("1143".equals(machineTypeId)) {
System.err.println(machineTypeId); System.err.println(machineTypeId);
} }
double totalItemAmount = 0.0; double totalItemAmount = 0.0;
@ -263,7 +260,7 @@ public class NewSettlementService {
double unitPrice = firstItem.getPrice() != null ? firstItem.getPrice() : 0; double unitPrice = firstItem.getPrice() != null ? firstItem.getPrice() : 0;
//直接循环获取数据 //直接循环获取数据
// String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime); // String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
boolean isLast=false;
for (Map.Entry<String, Map<String, Object>> mapObject : maps.entrySet()) { for (Map.Entry<String, Map<String, Object>> mapObject : maps.entrySet()) {
Map<String, Object> mapData=mapObject.getValue(); Map<String, Object> mapData=mapObject.getValue();
String key=mapObject.getKey(); String key=mapObject.getKey();
@ -288,15 +285,15 @@ public class NewSettlementService {
fasetStarTime=operateTime; fasetStarTime=operateTime;
//初始化时间只有领取的 -无退换的 则不需要计算 下方是有退料的 则需要将使用的时间计算出来 //初始化时间只有领取的 -无退换的 则不需要计算 下方是有退料的 则需要将使用的时间计算出来
if(delNum!=0) { if(delNum!=0) {
//如果今天有退还的 并且是开始的时间必须要按照一天计算 LocalDateTime nextDayTime = operateTime.plusDays(1);
long daysBetween=getDay(fasetStarTime,operateTime); fasetStarTime=nextDayTime;
if(daysBetween==0) { //如果今天有退还的 并且是开始的时间必须要按照一天计算
add=false; long daysBetween=getDay(fasetStarTime,nextDayTime);
daysBetween=daysBetween+1; daysBetween=daysBetween+1;
double segmentAmount = currentCount * unitPrice * daysBetween; double segmentAmount = currentCount * unitPrice * daysBetween;
Map<String, Object> segment = new HashMap<>(); Map<String, Object> segment = new HashMap<>();
segment.put("startTime",fasetStarTime.toString()); segment.put("startTime",fasetStarTime.toString());
segment.put("endTime", operateTime.toString()); segment.put("endTime", nextDayTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
totalItemAmount=totalItemAmount+segmentAmount; totalItemAmount=totalItemAmount+segmentAmount;
//计算数量 //计算数量
@ -306,11 +303,11 @@ public class NewSettlementService {
segments.add(segment); segments.add(segment);
//下次计算进行减去今日退换的 //下次计算进行减去今日退换的
currentCount=currentCount-delNum; currentCount=currentCount-delNum;
}
} }
//操作在结束时间点 //操作在结束时间点
}else if(key.equals(endTimeStr)) { }else if(key.equals(endTimeStr)) {
isLast=false;
//存在之前领用的数据的 先将之前的数据计算出来 //存在之前领用的数据的 先将之前的数据计算出来
if(currentCount>0) { if(currentCount>0) {
//有领用的 //有领用的
@ -386,8 +383,12 @@ public class NewSettlementService {
}else { }else {
if(delNum>0) { if(delNum>0) {
String fasetStarTimeStr1 = formatLocalDateTimeToDate(fasetStarTime);
String operateTimeStr = formatLocalDateTimeToDate(operateTime);
if(fasetStarTimeStr1.equals(operateTimeStr)) {
operateTime = operateTime.plusDays(1);
}
//先把领取的 //先把领取的
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(daysBetween==0) { if(daysBetween==0) {
daysBetween=1; daysBetween=1;
@ -419,7 +420,11 @@ public class NewSettlementService {
//然后减去 //然后减去
currentCount=currentCount-delNum; currentCount=currentCount-delNum;
fasetStarTime=nextDayTime; fasetStarTime=nextDayTime;
String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
if(fasetStarTimeStr.equals(endTimeStr)) {
isLast=true;
}
}else { }else {
//无之前的数据的 第一次进来的 //无之前的数据的 第一次进来的
if(fasetStarTime==null) { if(fasetStarTime==null) {
@ -446,6 +451,12 @@ public class NewSettlementService {
} }
} }
}else { }else {
String fasetStarTimeStr1 = formatLocalDateTimeToDate(fasetStarTime);
String operateTimeStr = formatLocalDateTimeToDate(operateTime);
if(fasetStarTimeStr1.equals(operateTimeStr)) {
operateTime = operateTime.plusDays(1);
}
//处于中间的 之前有数据的 //处于中间的 之前有数据的
//有添加数据的 //有添加数据的
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
@ -453,36 +464,55 @@ public class NewSettlementService {
daysBetween=daysBetween+1; daysBetween=daysBetween+1;
add=false; add=false;
} }
if(currentCount+addNum-addNum==0) { if(currentCount+addNum-delNum==0) {
daysBetween=daysBetween+1; daysBetween=daysBetween+1;
add=false; add=false;
} }
if(currentCount==0) {
double segmentAmount = currentCount * unitPrice * daysBetween; fasetStarTime=operateTime;
Map<String, Object> segment = new HashMap<>(); currentCount=currentCount+addNum;
segment.put("startTime",fasetStarTime.toString()); }else {
segment.put("endTime", operateTime.toString()); double segmentAmount = currentCount * unitPrice * daysBetween;
segment.put("days", daysBetween); Map<String, Object> segment = new HashMap<>();
totalItemAmount=totalItemAmount+segmentAmount; segment.put("startTime",fasetStarTime.toString());
segment.put("count", currentCount); segment.put("endTime", operateTime.toString());
segment.put("amount", segmentAmount); segment.put("days", daysBetween);
segments.add(segment); totalItemAmount=totalItemAmount+segmentAmount;
fasetStarTime=operateTime; segment.put("count", currentCount);
//将数量减少-或者添加 segment.put("amount", segmentAmount);
currentCount=currentCount+addNum; segments.add(segment);
currentCount=currentCount-delNum; fasetStarTime=operateTime;
//将数量减少-或者添加
currentCount=currentCount+addNum;
currentCount=currentCount-delNum;
String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
if(fasetStarTimeStr.equals(endTimeStr)) {
isLast=true;
}
}
} }
} }
} }
} }
//如果还是存在数据--并且 最后一天未计算的
String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime); String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
//加上的数据刚好 是最后一天的
if(currentCount>0 &&fasetStarTimeStr.equals(endTimeStr) && isLast) {
Map<String, Object> segment = new HashMap<>();
segment.put("startTime",fasetStarTime.toString());
segment.put("endTime", endDate.toString());
segment.put("days", 1);
double segmentAmount3 = currentCount * unitPrice * 1;
totalItemAmount=totalItemAmount+segmentAmount3;
segment.put("count", currentCount);
segment.put("amount", segmentAmount3);
segments.add(segment);
}
//如果还是存在数据--并且 最后一天未计算的
if(currentCount>0 && !fasetStarTimeStr.equals(endTimeStr)) { if(currentCount>0 && !fasetStarTimeStr.equals(endTimeStr)) {
long daysBetween=getDay(fasetStarTime,endDate); long daysBetween=getDay(fasetStarTime,endDate);
if(daysBetween==0) { if(daysBetween==0) {