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