结算修改

This commit is contained in:
hayu 2026-01-28 20:52:18 +08:00
parent 48cf463236
commit 4ccd339437
7 changed files with 271 additions and 252 deletions

View File

@ -232,15 +232,6 @@
form = layui.form, form = layui.form,
laydate = layui.laydate; laydate = layui.laydate;
// 初始化日期选择器
laydate.render({
elem: '#startDate'
});
laydate.render({
elem: '#endDate'
});
// 加载projectCost模块 // 加载projectCost模块
layui.use('projectCost', function(){ layui.use('projectCost', function(){
var projectCost = layui.projectCost; var projectCost = layui.projectCost;

View File

@ -47,7 +47,7 @@
AND start_time >= #{startTime} AND start_time >= #{startTime}
</if> </if>
<if test="endTime != null and endTime != ''"> <if test="endTime != null and endTime != ''">
AND end_time &lt;= #{endTime} AND end_time &lt; DATE_ADD(#{endTime}, INTERVAL 1 DAY)
</if> </if>
ORDER BY create_time DESC ORDER BY create_time DESC
</select> </select>

View File

@ -3,6 +3,7 @@ package com.bonus.cost.beans;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -167,6 +168,10 @@ public class ProjectLeaseCostDetail {
*/ */
private Integer sequence; private Integer sequence;
private List<ProjectLeaseCostDetail> modifications;
private ProjectLeaseCostDetail modification;
/** /**
* 查询关键字 * 查询关键字
*/ */
@ -443,5 +448,21 @@ public class ProjectLeaseCostDetail {
public void setCalculationId(Integer calculationId) { public void setCalculationId(Integer calculationId) {
this.calculationId = calculationId; this.calculationId = calculationId;
} }
public List<ProjectLeaseCostDetail> getModifications() {
return modifications;
}
public void setModifications(List<ProjectLeaseCostDetail> modifications) {
this.modifications = modifications;
}
public ProjectLeaseCostDetail getModification() {
return modification;
}
public void setModification(ProjectLeaseCostDetail modification) {
this.modification = modification;
}
} }

View File

@ -140,9 +140,9 @@ public class ProjectCostController extends BaseController<T> {
return ar; return ar;
} }
@RequestMapping("editSettlement") @RequestMapping("submitModifications")
@ResponseBody @ResponseBody
public AjaxRes editSettlement(@RequestBody ProjectLeaseCostDetail o) { public AjaxRes submitModifications(@RequestBody ProjectLeaseCostDetail o) {
AjaxRes ar = getAjaxRes(); AjaxRes ar = getAjaxRes();
try { try {
int res = projectCostService.editSettlement(o); int res = projectCostService.editSettlement(o);

View File

@ -55,81 +55,86 @@ public class NewSettlementService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int editSettlement(ProjectLeaseCostDetail o) { public int editSettlement(ProjectLeaseCostDetail o) {
//根据领料还是退料进行数据修改 List<ProjectLeaseCostDetail> leaseDetails = o.getModifications();
Byte operateType = o.getOperateType(); if (leaseDetails.size()>0){
if (Byte.valueOf("1").equals(operateType)) { for (ProjectLeaseCostDetail leaseDetail : leaseDetails){
int res = projectCostDao.editWfTaskRecord(o); //根据领料还是退料进行数据修改
if (res == 0) { Byte operateType = leaseDetail.getOperateType();
throw new RuntimeException("修改领料数据失败!"); if (Byte.valueOf("1").equals(operateType)) {
} int res = projectCostDao.editWfTaskRecord(leaseDetail);
if (res == 0) {
} else if (Byte.valueOf("2").equals(operateType)) { throw new RuntimeException("修改领料数据失败!");
int res = projectCostDao.editWfInfoRecord(o); }
if (res == 0) {
throw new RuntimeException("修改退料数据失败!"); } else if (Byte.valueOf("2").equals(operateType)) {
} int res = projectCostDao.editWfInfoRecord(leaseDetail);
} if (res == 0) {
//调用结算计算逻辑 throw new RuntimeException("修改退料数据失败!");
ProjectLeaseCostDetail bean = new ProjectLeaseCostDetail(); }
bean.setProjectId(o.getProjectId()); }
bean.setStartTime(o.getStartTime()); }
bean.setEndTime(o.getEndTime()); //调用结算计算逻辑
Map<String, Object> newSettlement = getNewSettlement(bean); ProjectLeaseCostDetail bean = new ProjectLeaseCostDetail();
//将结算数据保存更新 bean.setProjectId(o.getProjectId());
List<Map<String, Object>> calculationResults = (List<Map<String, Object>>) newSettlement bean.setStartTime(o.getStartTime());
.get("calculationResults"); bean.setEndTime(o.getEndTime());
Map<String, Object> newSettlement = getNewSettlement(bean);
//总金额 //将结算数据保存更新
Double totalAmount = safeToDouble(newSettlement.get("totalAmount"), 0.0); List<Map<String, Object>> calculationResults = (List<Map<String, Object>>) newSettlement
//修改总金额 .get("calculationResults");
int res = projectCostDao.editProjectCostCalculation(o.getCalculationId(), totalAmount);
//删除之前的数据 //总金额
//1现根据calculationId查询详情数据 Double totalAmount = safeToDouble(newSettlement.get("totalAmount"), 0.0);
List<ProjectCostCalculationDetail> details = projectCostDao.queryCalculationDetails(o.getCalculationId()); //修改总金额
//2根据详情数据删除工程费用计算结果时间段表 int res = projectCostDao.editProjectCostCalculation(o.getCalculationId(), totalAmount);
for (ProjectCostCalculationDetail detail : details){ //删除之前的数据
projectCostDao.deleteCalculationSegments(detail.getId()); //1现根据calculationId查询详情数据
} List<ProjectCostCalculationDetail> details = projectCostDao.queryCalculationDetails(o.getCalculationId());
//3删除详情数据 //2根据详情数据删除工程费用计算结果时间段表
projectCostDao.deleteCalculationDetails(o.getCalculationId()); for (ProjectCostCalculationDetail detail : details){
projectCostDao.deleteCalculationSegments(detail.getId());
// 保存计算结果明细和时间段 }
if (calculationResults != null && !calculationResults.isEmpty()) { //3删除详情数据
for (Map<String, Object> resultItem : calculationResults) { projectCostDao.deleteCalculationDetails(o.getCalculationId());
// 创建明细记录
ProjectCostCalculationDetail detail = new ProjectCostCalculationDetail(); // 保存计算结果明细和时间段
detail.setCalculationId(o.getCalculationId()); if (calculationResults != null && !calculationResults.isEmpty()) {
detail.setMachineTypeId(safeToInteger(resultItem.get("machineTypeId"), 0)); for (Map<String, Object> resultItem : calculationResults) {
detail.setMachineTypeName(safeToString(resultItem.get("machineTypeName"), "")); // 创建明细记录
detail.setMachineModel(safeToString(resultItem.get("machineModel"), "")); ProjectCostCalculationDetail detail = new ProjectCostCalculationDetail();
detail.setMachineUnit(safeToString(resultItem.get("machineUnit"), "")); detail.setCalculationId(o.getCalculationId());
detail.setPrice(safeToDouble(resultItem.get("price"), 0.0)); detail.setMachineTypeId(safeToInteger(resultItem.get("machineTypeId"), 0));
detail.setCurrentCount(safeToInteger(resultItem.get("currentCount"), 0)); detail.setMachineTypeName(safeToString(resultItem.get("machineTypeName"), ""));
detail.setAmount(safeToDouble(resultItem.get("amount"), 0.0)); detail.setMachineModel(safeToString(resultItem.get("machineModel"), ""));
detail.setFirstLeaseTime(safeToString(resultItem.get("firstLeaseTime"), "")); detail.setMachineUnit(safeToString(resultItem.get("machineUnit"), ""));
detail.setLastReturnTime(safeToString(resultItem.get("lastReturnTime"), "")); detail.setPrice(safeToDouble(resultItem.get("price"), 0.0));
detail.setCurrentCount(safeToInteger(resultItem.get("currentCount"), 0));
// 保存明细记录 detail.setAmount(safeToDouble(resultItem.get("amount"), 0.0));
projectCostDao.saveCalculationDetail(detail); detail.setFirstLeaseTime(safeToString(resultItem.get("firstLeaseTime"), ""));
Integer detailId = detail.getId(); detail.setLastReturnTime(safeToString(resultItem.get("lastReturnTime"), ""));
// 保存时间段记录 // 保存明细记录
@SuppressWarnings("unchecked") projectCostDao.saveCalculationDetail(detail);
List<Map<String, Object>> segments = (List<Map<String, Object>>) resultItem.get("segments"); Integer detailId = detail.getId();
if (segments != null && !segments.isEmpty()) {
List<ProjectCostCalculationSegment> segmentList = new ArrayList<>(); // 保存时间段记录
for (Map<String, Object> segmentItem : segments) { @SuppressWarnings("unchecked")
ProjectCostCalculationSegment segment = new ProjectCostCalculationSegment(); List<Map<String, Object>> segments = (List<Map<String, Object>>) resultItem.get("segments");
segment.setCalculationDetailId(detailId); if (segments != null && !segments.isEmpty()) {
segment.setStartTime(safeToString(segmentItem.get("startTime"), "")); List<ProjectCostCalculationSegment> segmentList = new ArrayList<>();
segment.setEndTime(safeToString(segmentItem.get("endTime"), "")); for (Map<String, Object> segmentItem : segments) {
segment.setDays(safeToInteger(segmentItem.get("days"), 0)); ProjectCostCalculationSegment segment = new ProjectCostCalculationSegment();
segment.setCount(safeToInteger(segmentItem.get("count"), 0)); segment.setCalculationDetailId(detailId);
segment.setAmount(safeToDouble(segmentItem.get("amount"), 0.0)); segment.setStartTime(safeToString(segmentItem.get("startTime"), ""));
segment.setEndTime(safeToString(segmentItem.get("endTime"), ""));
segmentList.add(segment); segment.setDays(safeToInteger(segmentItem.get("days"), 0));
segment.setCount(safeToInteger(segmentItem.get("count"), 0));
segment.setAmount(safeToDouble(segmentItem.get("amount"), 0.0));
segmentList.add(segment);
}
projectCostDao.saveCalculationSegments(segmentList);
} }
projectCostDao.saveCalculationSegments(segmentList);
} }
} }
} }
@ -147,6 +152,11 @@ public class NewSettlementService {
// 获取退料明细 // 获取退料明细
List<ProjectLeaseCostDetail> returnDetails = queryProjectReturnDetails(o); List<ProjectLeaseCostDetail> returnDetails = queryProjectReturnDetails(o);
//计算逻辑
return settlementLogic(o,leaseDetails,returnDetails);
}
public Map<String, Object> settlementLogic(ProjectLeaseCostDetail o,List<ProjectLeaseCostDetail> leaseDetails,List<ProjectLeaseCostDetail> returnDetails){
// 创建一个新的列表来存储合并后的结果 // 创建一个新的列表来存储合并后的结果
List<ProjectLeaseCostDetail> mergedList = new ArrayList<>(); List<ProjectLeaseCostDetail> mergedList = new ArrayList<>();
if (leaseDetails != null) { if (leaseDetails != null) {
@ -184,7 +194,7 @@ public class NewSettlementService {
items.sort(Comparator.comparing(ProjectLeaseCostDetail::getOperateTime, items.sort(Comparator.comparing(ProjectLeaseCostDetail::getOperateTime,
Comparator.nullsFirst(Comparator.naturalOrder()))); Comparator.nullsFirst(Comparator.naturalOrder())));
ProjectLeaseCostDetail firstItem = items.get(0); ProjectLeaseCostDetail firstItem = items.get(0);
// //
if("2402".equals(machineTypeId)) { if("2402".equals(machineTypeId)) {
System.err.println(machineTypeId); System.err.println(machineTypeId);
} }
@ -217,10 +227,10 @@ public class NewSettlementService {
} }
}else { }else {
Object addObj = map.get("add"); Object addObj = map.get("add");
int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0 int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0
Object delObj = map.get("del"); Object delObj = map.get("del");
int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0 int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0
Object listObj = map.get("list"); Object listObj = map.get("list");
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<ProjectLeaseCostDetail> list=(listObj != null) ?(List<ProjectLeaseCostDetail>) listObj:new ArrayList<ProjectLeaseCostDetail>(); List<ProjectLeaseCostDetail> list=(listObj != null) ?(List<ProjectLeaseCostDetail>) listObj:new ArrayList<ProjectLeaseCostDetail>();
//从操作中获取到数据 //从操作中获取到数据
@ -248,7 +258,7 @@ public class NewSettlementService {
LocalDateTime fasetStarTime=null; LocalDateTime fasetStarTime=null;
if(currentCount>0) { if(currentCount>0) {
//如果之前有数据 则必须是条件的第天 //如果之前有数据 则必须是条件的第天
fasetStarTime=startDate; fasetStarTime=startDate;
} }
double unitPrice = firstItem.getPrice() != null ? firstItem.getPrice() : 0; double unitPrice = firstItem.getPrice() != null ? firstItem.getPrice() : 0;
//直接循环获取数据 //直接循环获取数据
@ -259,60 +269,60 @@ public class NewSettlementService {
String key=mapObject.getKey(); String key=mapObject.getKey();
//从数据中获取到相关数据 //从数据中获取到相关数据
Object addObj = mapData.get("add"); Object addObj = mapData.get("add");
int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0 int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0
Object delObj = mapData.get("del"); Object delObj = mapData.get("del");
int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0 int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0
Object listObj = mapData.get("list"); Object listObj = mapData.get("list");
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<ProjectLeaseCostDetail> dataList=(listObj != null) ?(List<ProjectLeaseCostDetail>) listObj:new ArrayList<ProjectLeaseCostDetail>(); List<ProjectLeaseCostDetail> dataList=(listObj != null) ?(List<ProjectLeaseCostDetail>) listObj:new ArrayList<ProjectLeaseCostDetail>();
ProjectLeaseCostDetail itemData=dataList.get(dataList.size()-1); ProjectLeaseCostDetail itemData=dataList.get(dataList.size()-1);
LocalDateTime operateTime = LocalDateTime.parse(itemData.getOperateTime(), INPUT_FORMATTER); LocalDateTime operateTime = LocalDateTime.parse(itemData.getOperateTime(), INPUT_FORMATTER);
System.out.println("日期:" + key); System.out.println("日期:" + key);
//正对两种特殊的情况 -一种是 操作在开始时间的 //正对两种特殊的情况 -一种是 操作在开始时间的
//一种操作在结束时间的 //一种操作在结束时间的
//操作在开始时间的 //操作在开始时间的
if(key.equals(startTimeStr)) { if(key.equals(startTimeStr)) {
//先把数量加上来 //先把数量加上来
currentCount=currentCount+addNum; currentCount=currentCount+addNum;
//记录操作时间 //记录操作时间
fasetStarTime=operateTime; fasetStarTime=operateTime;
//初始化时间只有领取的 -无退换的 则不需要计算 下方是有退料的 则需要将使用的时间计算出来 //初始化时间只有领取的 -无退换的 则不需要计算 下方是有退料的 则需要将使用的时间计算出来
if(delNum!=0) { if(delNum!=0) {
//如果今天有退还的 并且是开始的时间必须要按照一天计算 //如果今天有退还的 并且是开始的时间必须要按照一天计算
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(daysBetween==0) { if(daysBetween==0) {
add=false; add=false;
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", operateTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
totalItemAmount=totalItemAmount+segmentAmount; totalItemAmount=totalItemAmount+segmentAmount;
//计算数量 //计算数量
currentCount=currentCount+addNum; currentCount=currentCount+addNum;
segment.put("count", currentCount); segment.put("count", currentCount);
segment.put("amount", segmentAmount); segment.put("amount", segmentAmount);
segments.add(segment); segments.add(segment);
//下次计算进行减去今日退换的 //下次计算进行减去今日退换的
currentCount=currentCount-delNum; currentCount=currentCount-delNum;
} }
} }
//操作在结束时间点 //操作在结束时间点
}else if(key.equals(endTimeStr)) { }else if(key.equals(endTimeStr)) {
//存在之前领用的数据的 先将之前的数据计算出来 //存在之前领用的数据的 先将之前的数据计算出来
if(currentCount>0) { if(currentCount>0) {
//有领用的 //有领用的
if(addNum>0) { if(addNum>0) {
//计算天数 //计算天数
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(daysBetween==0) { if(daysBetween==0) {
daysBetween=1; daysBetween=1;
add=false; add=false;
} }
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", operateTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
@ -334,14 +344,14 @@ public class NewSettlementService {
segment2.put("amount", segmentAmount2); segment2.put("amount", segmentAmount2);
segments.add(segment2); segments.add(segment2);
totalItemAmount=totalItemAmount+segmentAmount2; totalItemAmount=totalItemAmount+segmentAmount2;
}else { }else {
//计算天数 //计算天数
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(add) { if(add) {
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", operateTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
@ -353,16 +363,16 @@ public class NewSettlementService {
segments.add(segment); segments.add(segment);
fasetStarTime=operateTime; fasetStarTime=operateTime;
} }
}else { }else {
if(fasetStarTime==null) { if(fasetStarTime==null) {
fasetStarTime=operateTime; fasetStarTime=operateTime;
} }
//计算数量 //计算数量
currentCount=currentCount+addNum; currentCount=currentCount+addNum;
//计算最后一天的数据 //计算最后一天的数据
double segmentAmount = currentCount * unitPrice * 1; double segmentAmount = currentCount * unitPrice * 1;
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", operateTime.toString());
segment.put("days", 1); segment.put("days", 1);
@ -372,20 +382,20 @@ public class NewSettlementService {
segments.add(segment); segments.add(segment);
fasetStarTime=operateTime; fasetStarTime=operateTime;
} }
}else { }else {
if(delNum>0) { if(delNum>0) {
//先把领取的 //先把领取的
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(daysBetween==0) { if(daysBetween==0) {
daysBetween=1; daysBetween=1;
add =false; add =false;
} }
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", operateTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
@ -398,7 +408,7 @@ public class NewSettlementService {
// 然后将领取的座位最后一天单独计算 // 然后将领取的座位最后一天单独计算
double segmentAmount2 = currentCount * unitPrice * 1; double segmentAmount2 = currentCount * unitPrice * 1;
Map<String, Object> segment2 = new HashMap<>(); Map<String, Object> segment2 = new HashMap<>();
LocalDateTime nextDayTime = operateTime.plusDays(1); LocalDateTime nextDayTime = operateTime.plusDays(1);
segment2.put("startTime",operateTime.toString()); segment2.put("startTime",operateTime.toString());
segment2.put("endTime", nextDayTime.toString()); segment2.put("endTime", nextDayTime.toString());
segment2.put("days", 1); segment2.put("days", 1);
@ -410,66 +420,66 @@ public class NewSettlementService {
currentCount=currentCount-delNum; currentCount=currentCount-delNum;
fasetStarTime=nextDayTime; fasetStarTime=nextDayTime;
}else { }else {
//无之前的数据的 第一次进来的 //无之前的数据的 第一次进来的
if(fasetStarTime==null) { if(fasetStarTime==null) {
currentCount=currentCount+addNum; currentCount=currentCount+addNum;
fasetStarTime=operateTime; fasetStarTime=operateTime;
if(delNum!=0) { if(delNum!=0) {
//如果今天有退还的 并且是开始的时间必须要按照一天计算 //如果今天有退还的 并且是开始的时间必须要按照一天计算
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(daysBetween==0) { if(daysBetween==0) {
double segmentAmount = currentCount * unitPrice * daysBetween; double segmentAmount = currentCount * unitPrice * daysBetween;
daysBetween=daysBetween+1; daysBetween=daysBetween+1;
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", operateTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
totalItemAmount=totalItemAmount+segmentAmount; totalItemAmount=totalItemAmount+segmentAmount;
//计算数量 //计算数量
currentCount=currentCount+addNum; currentCount=currentCount+addNum;
segment.put("count", currentCount); segment.put("count", currentCount);
segment.put("amount", segmentAmount); segment.put("amount", segmentAmount);
segments.add(segment); segments.add(segment);
//下次计算进行减去今日退换的 //下次计算进行减去今日退换的
currentCount=currentCount-delNum; currentCount=currentCount-delNum;
} }
} }
}else { }else {
//处于中间的 之前有数据的 //处于中间的 之前有数据的
//有添加数据的 //有添加数据的
long daysBetween=getDay(fasetStarTime,operateTime); long daysBetween=getDay(fasetStarTime,operateTime);
if(daysBetween==0) { if(daysBetween==0) {
daysBetween=daysBetween+1; daysBetween=daysBetween+1;
add=false; add=false;
} }
if(currentCount+addNum-addNum==0) { if(currentCount+addNum-addNum==0) {
daysBetween=daysBetween+1; daysBetween=daysBetween+1;
add=false; add=false;
} }
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", operateTime.toString());
segment.put("days", daysBetween); segment.put("days", daysBetween);
totalItemAmount=totalItemAmount+segmentAmount; totalItemAmount=totalItemAmount+segmentAmount;
segment.put("count", currentCount); segment.put("count", currentCount);
segment.put("amount", segmentAmount); segment.put("amount", segmentAmount);
segments.add(segment); segments.add(segment);
fasetStarTime=operateTime; fasetStarTime=operateTime;
//将数量减少-或者添加 //将数量减少-或者添加
currentCount=currentCount+addNum; currentCount=currentCount+addNum;
currentCount=currentCount-delNum; currentCount=currentCount-delNum;
} }
} }
} }
} }
//如果还是存在数据--并且 最后一天未计算的 //如果还是存在数据--并且 最后一天未计算的
String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime); String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
@ -512,7 +522,7 @@ public class NewSettlementService {
} }
// 将原始明细按操作时间排序 // 将原始明细按操作时间排序
List<ProjectLeaseCostDetail> sortedDetails = mergedList.stream().filter(Objects::nonNull).sorted(Comparator List<ProjectLeaseCostDetail> sortedDetails = mergedList.stream().filter(Objects::nonNull).sorted(Comparator
.comparing(ProjectLeaseCostDetail::getOperateTime, Comparator.nullsFirst(Comparator.naturalOrder()))) .comparing(ProjectLeaseCostDetail::getOperateTime, Comparator.nullsFirst(Comparator.naturalOrder())))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 返回结果 // 返回结果
@ -521,11 +531,8 @@ public class NewSettlementService {
result.put("calculationResults", calculationResults); // 计算结果 result.put("calculationResults", calculationResults); // 计算结果
result.put("totalAmount", totalAmount); // 总金额 result.put("totalAmount", totalAmount); // 总金额
return result; return result;
} }
/** /**
* 将local日期 转成当日日期 * 将local日期 转成当日日期
* @param dateTime * @param dateTime