结算修复
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 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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue