结算修改
This commit is contained in:
parent
48cf463236
commit
4ccd339437
|
|
@ -232,15 +232,6 @@
|
|||
form = layui.form,
|
||||
laydate = layui.laydate;
|
||||
|
||||
// 初始化日期选择器
|
||||
laydate.render({
|
||||
elem: '#startDate'
|
||||
});
|
||||
|
||||
laydate.render({
|
||||
elem: '#endDate'
|
||||
});
|
||||
|
||||
// 加载projectCost模块
|
||||
layui.use('projectCost', function(){
|
||||
var projectCost = layui.projectCost;
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -47,7 +47,7 @@
|
|||
AND start_time >= #{startTime}
|
||||
</if>
|
||||
<if test="endTime != null and endTime != ''">
|
||||
AND end_time <= #{endTime}
|
||||
AND end_time < DATE_ADD(#{endTime}, INTERVAL 1 DAY)
|
||||
</if>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.bonus.cost.beans;
|
|||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
@ -167,6 +168,10 @@ public class ProjectLeaseCostDetail {
|
|||
*/
|
||||
private Integer sequence;
|
||||
|
||||
private List<ProjectLeaseCostDetail> modifications;
|
||||
|
||||
private ProjectLeaseCostDetail modification;
|
||||
|
||||
/**
|
||||
* 查询关键字
|
||||
*/
|
||||
|
|
@ -443,5 +448,21 @@ public class ProjectLeaseCostDetail {
|
|||
public void setCalculationId(Integer 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -140,9 +140,9 @@ public class ProjectCostController extends BaseController<T> {
|
|||
return ar;
|
||||
}
|
||||
|
||||
@RequestMapping("editSettlement")
|
||||
@RequestMapping("submitModifications")
|
||||
@ResponseBody
|
||||
public AjaxRes editSettlement(@RequestBody ProjectLeaseCostDetail o) {
|
||||
public AjaxRes submitModifications(@RequestBody ProjectLeaseCostDetail o) {
|
||||
AjaxRes ar = getAjaxRes();
|
||||
try {
|
||||
int res = projectCostService.editSettlement(o);
|
||||
|
|
|
|||
|
|
@ -55,81 +55,86 @@ public class NewSettlementService {
|
|||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int editSettlement(ProjectLeaseCostDetail o) {
|
||||
//根据领料还是退料进行数据修改
|
||||
Byte operateType = o.getOperateType();
|
||||
if (Byte.valueOf("1").equals(operateType)) {
|
||||
int res = projectCostDao.editWfTaskRecord(o);
|
||||
if (res == 0) {
|
||||
throw new RuntimeException("修改领料数据失败!");
|
||||
}
|
||||
|
||||
} else if (Byte.valueOf("2").equals(operateType)) {
|
||||
int res = projectCostDao.editWfInfoRecord(o);
|
||||
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);
|
||||
//将结算数据保存更新
|
||||
List<Map<String, Object>> calculationResults = (List<Map<String, Object>>) newSettlement
|
||||
.get("calculationResults");
|
||||
|
||||
//总金额
|
||||
Double totalAmount = safeToDouble(newSettlement.get("totalAmount"), 0.0);
|
||||
//修改总金额
|
||||
int res = projectCostDao.editProjectCostCalculation(o.getCalculationId(), totalAmount);
|
||||
//删除之前的数据
|
||||
//1、现根据calculationId查询详情数据
|
||||
List<ProjectCostCalculationDetail> details = projectCostDao.queryCalculationDetails(o.getCalculationId());
|
||||
//2、根据详情数据删除工程费用计算结果时间段表
|
||||
for (ProjectCostCalculationDetail detail : details){
|
||||
projectCostDao.deleteCalculationSegments(detail.getId());
|
||||
}
|
||||
//3、删除详情数据
|
||||
projectCostDao.deleteCalculationDetails(o.getCalculationId());
|
||||
|
||||
// 保存计算结果明细和时间段
|
||||
if (calculationResults != null && !calculationResults.isEmpty()) {
|
||||
for (Map<String, Object> resultItem : calculationResults) {
|
||||
// 创建明细记录
|
||||
ProjectCostCalculationDetail detail = new ProjectCostCalculationDetail();
|
||||
detail.setCalculationId(o.getCalculationId());
|
||||
detail.setMachineTypeId(safeToInteger(resultItem.get("machineTypeId"), 0));
|
||||
detail.setMachineTypeName(safeToString(resultItem.get("machineTypeName"), ""));
|
||||
detail.setMachineModel(safeToString(resultItem.get("machineModel"), ""));
|
||||
detail.setMachineUnit(safeToString(resultItem.get("machineUnit"), ""));
|
||||
detail.setPrice(safeToDouble(resultItem.get("price"), 0.0));
|
||||
detail.setCurrentCount(safeToInteger(resultItem.get("currentCount"), 0));
|
||||
detail.setAmount(safeToDouble(resultItem.get("amount"), 0.0));
|
||||
detail.setFirstLeaseTime(safeToString(resultItem.get("firstLeaseTime"), ""));
|
||||
detail.setLastReturnTime(safeToString(resultItem.get("lastReturnTime"), ""));
|
||||
|
||||
// 保存明细记录
|
||||
projectCostDao.saveCalculationDetail(detail);
|
||||
Integer detailId = detail.getId();
|
||||
|
||||
// 保存时间段记录
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> segments = (List<Map<String, Object>>) resultItem.get("segments");
|
||||
if (segments != null && !segments.isEmpty()) {
|
||||
List<ProjectCostCalculationSegment> segmentList = new ArrayList<>();
|
||||
for (Map<String, Object> segmentItem : segments) {
|
||||
ProjectCostCalculationSegment segment = new ProjectCostCalculationSegment();
|
||||
segment.setCalculationDetailId(detailId);
|
||||
segment.setStartTime(safeToString(segmentItem.get("startTime"), ""));
|
||||
segment.setEndTime(safeToString(segmentItem.get("endTime"), ""));
|
||||
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);
|
||||
List<ProjectLeaseCostDetail> leaseDetails = o.getModifications();
|
||||
if (leaseDetails.size()>0){
|
||||
for (ProjectLeaseCostDetail leaseDetail : leaseDetails){
|
||||
//根据领料还是退料进行数据修改
|
||||
Byte operateType = leaseDetail.getOperateType();
|
||||
if (Byte.valueOf("1").equals(operateType)) {
|
||||
int res = projectCostDao.editWfTaskRecord(leaseDetail);
|
||||
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);
|
||||
//将结算数据保存更新
|
||||
List<Map<String, Object>> calculationResults = (List<Map<String, Object>>) newSettlement
|
||||
.get("calculationResults");
|
||||
|
||||
//总金额
|
||||
Double totalAmount = safeToDouble(newSettlement.get("totalAmount"), 0.0);
|
||||
//修改总金额
|
||||
int res = projectCostDao.editProjectCostCalculation(o.getCalculationId(), totalAmount);
|
||||
//删除之前的数据
|
||||
//1、现根据calculationId查询详情数据
|
||||
List<ProjectCostCalculationDetail> details = projectCostDao.queryCalculationDetails(o.getCalculationId());
|
||||
//2、根据详情数据删除工程费用计算结果时间段表
|
||||
for (ProjectCostCalculationDetail detail : details){
|
||||
projectCostDao.deleteCalculationSegments(detail.getId());
|
||||
}
|
||||
//3、删除详情数据
|
||||
projectCostDao.deleteCalculationDetails(o.getCalculationId());
|
||||
|
||||
// 保存计算结果明细和时间段
|
||||
if (calculationResults != null && !calculationResults.isEmpty()) {
|
||||
for (Map<String, Object> resultItem : calculationResults) {
|
||||
// 创建明细记录
|
||||
ProjectCostCalculationDetail detail = new ProjectCostCalculationDetail();
|
||||
detail.setCalculationId(o.getCalculationId());
|
||||
detail.setMachineTypeId(safeToInteger(resultItem.get("machineTypeId"), 0));
|
||||
detail.setMachineTypeName(safeToString(resultItem.get("machineTypeName"), ""));
|
||||
detail.setMachineModel(safeToString(resultItem.get("machineModel"), ""));
|
||||
detail.setMachineUnit(safeToString(resultItem.get("machineUnit"), ""));
|
||||
detail.setPrice(safeToDouble(resultItem.get("price"), 0.0));
|
||||
detail.setCurrentCount(safeToInteger(resultItem.get("currentCount"), 0));
|
||||
detail.setAmount(safeToDouble(resultItem.get("amount"), 0.0));
|
||||
detail.setFirstLeaseTime(safeToString(resultItem.get("firstLeaseTime"), ""));
|
||||
detail.setLastReturnTime(safeToString(resultItem.get("lastReturnTime"), ""));
|
||||
|
||||
// 保存明细记录
|
||||
projectCostDao.saveCalculationDetail(detail);
|
||||
Integer detailId = detail.getId();
|
||||
|
||||
// 保存时间段记录
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Map<String, Object>> segments = (List<Map<String, Object>>) resultItem.get("segments");
|
||||
if (segments != null && !segments.isEmpty()) {
|
||||
List<ProjectCostCalculationSegment> segmentList = new ArrayList<>();
|
||||
for (Map<String, Object> segmentItem : segments) {
|
||||
ProjectCostCalculationSegment segment = new ProjectCostCalculationSegment();
|
||||
segment.setCalculationDetailId(detailId);
|
||||
segment.setStartTime(safeToString(segmentItem.get("startTime"), ""));
|
||||
segment.setEndTime(safeToString(segmentItem.get("endTime"), ""));
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -146,7 +151,12 @@ public class NewSettlementService {
|
|||
List<ProjectLeaseCostDetail> leaseDetails = queryProjectLeaseDetails(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<>();
|
||||
if (leaseDetails != null) {
|
||||
|
|
@ -170,21 +180,21 @@ 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<>(); // 存储时间线上的数量变化
|
||||
List<Map<String, Object>> segments = new ArrayList<>(); // 存储各个时间段
|
||||
|
||||
|
||||
String machineTypeId = entry.getKey();
|
||||
List<ProjectLeaseCostDetail> items = entry.getValue();
|
||||
items.sort(Comparator.comparing(ProjectLeaseCostDetail::getOperateTime,
|
||||
Comparator.nullsFirst(Comparator.naturalOrder())));
|
||||
ProjectLeaseCostDetail firstItem = items.get(0);
|
||||
//
|
||||
//
|
||||
if("2402".equals(machineTypeId)) {
|
||||
System.err.println(machineTypeId);
|
||||
}
|
||||
|
|
@ -217,10 +227,10 @@ public class NewSettlementService {
|
|||
}
|
||||
}else {
|
||||
Object addObj = map.get("add");
|
||||
int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0
|
||||
Object delObj = map.get("del");
|
||||
int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0
|
||||
Object listObj = map.get("list");
|
||||
int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0
|
||||
Object delObj = map.get("del");
|
||||
int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0
|
||||
Object listObj = map.get("list");
|
||||
@SuppressWarnings("unchecked")
|
||||
List<ProjectLeaseCostDetail> list=(listObj != null) ?(List<ProjectLeaseCostDetail>) listObj:new ArrayList<ProjectLeaseCostDetail>();
|
||||
//从操作中获取到数据
|
||||
|
|
@ -248,76 +258,76 @@ public class NewSettlementService {
|
|||
LocalDateTime fasetStarTime=null;
|
||||
if(currentCount>0) {
|
||||
//如果之前有数据 则必须是条件的第天
|
||||
fasetStarTime=startDate;
|
||||
fasetStarTime=startDate;
|
||||
}
|
||||
double unitPrice = firstItem.getPrice() != null ? firstItem.getPrice() : 0;
|
||||
//直接循环获取数据
|
||||
// String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
|
||||
|
||||
|
||||
for (Map.Entry<String, Map<String, Object>> mapObject : maps.entrySet()) {
|
||||
Map<String, Object> mapData=mapObject.getValue();
|
||||
String key=mapObject.getKey();
|
||||
//从数据中获取到相关数据
|
||||
Object addObj = mapData.get("add");
|
||||
int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0
|
||||
Object delObj = mapData.get("del");
|
||||
int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0
|
||||
Object listObj = mapData.get("list");
|
||||
int addNum = (addObj != null) ? (int) addObj : 0; // 无值时给默认值0
|
||||
Object delObj = mapData.get("del");
|
||||
int delNum = (delObj != null) ? (int) delObj : 0; // 无值时给默认值0
|
||||
Object listObj = mapData.get("list");
|
||||
@SuppressWarnings("unchecked")
|
||||
List<ProjectLeaseCostDetail> dataList=(listObj != null) ?(List<ProjectLeaseCostDetail>) listObj:new ArrayList<ProjectLeaseCostDetail>();
|
||||
ProjectLeaseCostDetail itemData=dataList.get(dataList.size()-1);
|
||||
LocalDateTime operateTime = LocalDateTime.parse(itemData.getOperateTime(), INPUT_FORMATTER);
|
||||
System.out.println("日期:" + key);
|
||||
//正对两种特殊的情况 -一种是 操作在开始时间的
|
||||
//一种操作在结束时间的
|
||||
//操作在开始时间的
|
||||
if(key.equals(startTimeStr)) {
|
||||
//先把数量加上来
|
||||
currentCount=currentCount+addNum;
|
||||
//记录操作时间
|
||||
fasetStarTime=operateTime;
|
||||
//初始化时间只有领取的 -无退换的 则不需要计算 下方是有退料的 则需要将使用的时间计算出来
|
||||
if(delNum!=0) {
|
||||
//如果今天有退还的 并且是开始的时间必须要按照一天计算
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
add=false;
|
||||
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("days", daysBetween);
|
||||
totalItemAmount=totalItemAmount+segmentAmount;
|
||||
//计算数量
|
||||
currentCount=currentCount+addNum;
|
||||
segment.put("count", currentCount);
|
||||
segment.put("amount", segmentAmount);
|
||||
segments.add(segment);
|
||||
//下次计算进行减去今日退换的
|
||||
currentCount=currentCount-delNum;
|
||||
}
|
||||
}
|
||||
//操作在结束时间点
|
||||
}else if(key.equals(endTimeStr)) {
|
||||
|
||||
//存在之前领用的数据的 先将之前的数据计算出来
|
||||
if(currentCount>0) {
|
||||
//有领用的
|
||||
if(addNum>0) {
|
||||
//计算天数
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
daysBetween=1;
|
||||
add=false;
|
||||
}
|
||||
double segmentAmount = currentCount * unitPrice * daysBetween;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
System.out.println("日期:" + key);
|
||||
//正对两种特殊的情况 -一种是 操作在开始时间的
|
||||
//一种操作在结束时间的
|
||||
//操作在开始时间的
|
||||
if(key.equals(startTimeStr)) {
|
||||
//先把数量加上来
|
||||
currentCount=currentCount+addNum;
|
||||
//记录操作时间
|
||||
fasetStarTime=operateTime;
|
||||
//初始化时间只有领取的 -无退换的 则不需要计算 下方是有退料的 则需要将使用的时间计算出来
|
||||
if(delNum!=0) {
|
||||
//如果今天有退还的 并且是开始的时间必须要按照一天计算
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
add=false;
|
||||
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("days", daysBetween);
|
||||
totalItemAmount=totalItemAmount+segmentAmount;
|
||||
|
||||
//计算数量
|
||||
currentCount=currentCount+addNum;
|
||||
segment.put("count", currentCount);
|
||||
segment.put("amount", segmentAmount);
|
||||
segments.add(segment);
|
||||
//下次计算进行减去今日退换的
|
||||
currentCount=currentCount-delNum;
|
||||
}
|
||||
}
|
||||
//操作在结束时间点
|
||||
}else if(key.equals(endTimeStr)) {
|
||||
|
||||
//存在之前领用的数据的 先将之前的数据计算出来
|
||||
if(currentCount>0) {
|
||||
//有领用的
|
||||
if(addNum>0) {
|
||||
//计算天数
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
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);
|
||||
|
|
@ -334,14 +344,14 @@ public class NewSettlementService {
|
|||
segment2.put("amount", segmentAmount2);
|
||||
segments.add(segment2);
|
||||
totalItemAmount=totalItemAmount+segmentAmount2;
|
||||
}else {
|
||||
//计算天数
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(add) {
|
||||
daysBetween=daysBetween+1;
|
||||
}
|
||||
double segmentAmount = currentCount * unitPrice * daysBetween;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
}else {
|
||||
//计算天数
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(add) {
|
||||
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("days", daysBetween);
|
||||
|
|
@ -352,40 +362,40 @@ public class NewSettlementService {
|
|||
segment.put("amount", segmentAmount);
|
||||
segments.add(segment);
|
||||
fasetStarTime=operateTime;
|
||||
|
||||
}
|
||||
}else {
|
||||
if(fasetStarTime==null) {
|
||||
fasetStarTime=operateTime;
|
||||
}
|
||||
//计算数量
|
||||
|
||||
}
|
||||
}else {
|
||||
if(fasetStarTime==null) {
|
||||
fasetStarTime=operateTime;
|
||||
}
|
||||
//计算数量
|
||||
currentCount=currentCount+addNum;
|
||||
//计算最后一天的数据
|
||||
double segmentAmount = currentCount * unitPrice * 1;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
//计算最后一天的数据
|
||||
double segmentAmount = currentCount * unitPrice * 1;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
segment.put("startTime",fasetStarTime.toString());
|
||||
segment.put("endTime", operateTime.toString());
|
||||
segment.put("days", 1);
|
||||
totalItemAmount=totalItemAmount+segmentAmount;
|
||||
totalItemAmount=totalItemAmount+segmentAmount;
|
||||
segment.put("count", currentCount);
|
||||
segment.put("amount", segmentAmount);
|
||||
|
||||
|
||||
segments.add(segment);
|
||||
fasetStarTime=operateTime;
|
||||
}
|
||||
|
||||
}else {
|
||||
if(delNum>0) {
|
||||
//先把领取的
|
||||
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
daysBetween=1;
|
||||
add =false;
|
||||
}
|
||||
|
||||
double segmentAmount = currentCount * unitPrice * daysBetween;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
}
|
||||
|
||||
}else {
|
||||
if(delNum>0) {
|
||||
//先把领取的
|
||||
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
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);
|
||||
|
|
@ -394,11 +404,11 @@ public class NewSettlementService {
|
|||
segment.put("amount", segmentAmount);
|
||||
segments.add(segment);
|
||||
currentCount=currentCount+addNum;
|
||||
|
||||
|
||||
// 然后将领取的座位最后一天单独计算
|
||||
double segmentAmount2 = currentCount * unitPrice * 1;
|
||||
Map<String, Object> segment2 = new HashMap<>();
|
||||
LocalDateTime nextDayTime = operateTime.plusDays(1);
|
||||
LocalDateTime nextDayTime = operateTime.plusDays(1);
|
||||
segment2.put("startTime",operateTime.toString());
|
||||
segment2.put("endTime", nextDayTime.toString());
|
||||
segment2.put("days", 1);
|
||||
|
|
@ -409,67 +419,67 @@ public class NewSettlementService {
|
|||
//然后减去
|
||||
currentCount=currentCount-delNum;
|
||||
fasetStarTime=nextDayTime;
|
||||
|
||||
}else {
|
||||
//无之前的数据的 第一次进来的
|
||||
if(fasetStarTime==null) {
|
||||
currentCount=currentCount+addNum;
|
||||
fasetStarTime=operateTime;
|
||||
if(delNum!=0) {
|
||||
//如果今天有退还的 并且是开始的时间必须要按照一天计算
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
double segmentAmount = currentCount * unitPrice * daysBetween;
|
||||
daysBetween=daysBetween+1;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
segment.put("startTime",fasetStarTime.toString());
|
||||
segment.put("endTime", operateTime.toString());
|
||||
segment.put("days", daysBetween);
|
||||
totalItemAmount=totalItemAmount+segmentAmount;
|
||||
//计算数量
|
||||
currentCount=currentCount+addNum;
|
||||
segment.put("count", currentCount);
|
||||
segment.put("amount", segmentAmount);
|
||||
segments.add(segment);
|
||||
//下次计算进行减去今日退换的
|
||||
currentCount=currentCount-delNum;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
//处于中间的 之前有数据的
|
||||
//有添加数据的
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
daysBetween=daysBetween+1;
|
||||
add=false;
|
||||
}
|
||||
if(currentCount+addNum-addNum==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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}else {
|
||||
//无之前的数据的 第一次进来的
|
||||
if(fasetStarTime==null) {
|
||||
currentCount=currentCount+addNum;
|
||||
fasetStarTime=operateTime;
|
||||
if(delNum!=0) {
|
||||
//如果今天有退还的 并且是开始的时间必须要按照一天计算
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
double segmentAmount = currentCount * unitPrice * daysBetween;
|
||||
daysBetween=daysBetween+1;
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
segment.put("startTime",fasetStarTime.toString());
|
||||
segment.put("endTime", operateTime.toString());
|
||||
segment.put("days", daysBetween);
|
||||
totalItemAmount=totalItemAmount+segmentAmount;
|
||||
//计算数量
|
||||
currentCount=currentCount+addNum;
|
||||
segment.put("count", currentCount);
|
||||
segment.put("amount", segmentAmount);
|
||||
segments.add(segment);
|
||||
//下次计算进行减去今日退换的
|
||||
currentCount=currentCount-delNum;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
//处于中间的 之前有数据的
|
||||
//有添加数据的
|
||||
long daysBetween=getDay(fasetStarTime,operateTime);
|
||||
if(daysBetween==0) {
|
||||
daysBetween=daysBetween+1;
|
||||
add=false;
|
||||
}
|
||||
if(currentCount+addNum-addNum==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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
//如果还是存在数据--并且 最后一天未计算的
|
||||
String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
|
||||
|
|
@ -481,7 +491,7 @@ public class NewSettlementService {
|
|||
if(add) {
|
||||
daysBetween=daysBetween+1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Map<String, Object> segment = new HashMap<>();
|
||||
segment.put("startTime",fasetStarTime.toString());
|
||||
|
|
@ -512,20 +522,17 @@ public class NewSettlementService {
|
|||
}
|
||||
// 将原始明细按操作时间排序
|
||||
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());
|
||||
|
||||
|
||||
// 返回结果
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("details", sortedDetails); // 原始按时间排序的明细
|
||||
result.put("calculationResults", calculationResults); // 计算结果
|
||||
result.put("totalAmount", totalAmount); // 总金额
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 将local日期 转成当日日期
|
||||
* @param dateTime
|
||||
|
|
|
|||
Loading…
Reference in New Issue