结算修改
This commit is contained in:
parent
48cf463236
commit
4ccd339437
|
|
@ -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;
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -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 <= #{endTime}
|
AND end_time < DATE_ADD(#{endTime}, INTERVAL 1 DAY)
|
||||||
</if>
|
</if>
|
||||||
ORDER BY create_time DESC
|
ORDER BY create_time DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -146,7 +151,12 @@ public class NewSettlementService {
|
||||||
List<ProjectLeaseCostDetail> leaseDetails = queryProjectLeaseDetails(o);
|
List<ProjectLeaseCostDetail> leaseDetails = queryProjectLeaseDetails(o);
|
||||||
// 获取退料明细
|
// 获取退料明细
|
||||||
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) {
|
||||||
|
|
@ -170,21 +180,21 @@ 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<>(); // 存储时间线上的数量变化
|
||||||
List<Map<String, Object>> segments = new ArrayList<>(); // 存储各个时间段
|
List<Map<String, Object>> segments = new ArrayList<>(); // 存储各个时间段
|
||||||
|
|
||||||
String machineTypeId = entry.getKey();
|
String machineTypeId = entry.getKey();
|
||||||
List<ProjectLeaseCostDetail> items = entry.getValue();
|
List<ProjectLeaseCostDetail> items = entry.getValue();
|
||||||
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,76 +258,76 @@ 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;
|
||||||
//直接循环获取数据
|
//直接循环获取数据
|
||||||
// String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
|
// String fasetStarTimeStr = formatLocalDateTimeToDate(fasetStarTime);
|
||||||
|
|
||||||
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();
|
||||||
//从数据中获取到相关数据
|
//从数据中获取到相关数据
|
||||||
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("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("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;
|
||||||
|
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("count", currentCount);
|
||||||
segment.put("amount", segmentAmount);
|
segment.put("amount", segmentAmount);
|
||||||
segments.add(segment);
|
segments.add(segment);
|
||||||
|
|
@ -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);
|
||||||
|
|
@ -352,40 +362,40 @@ public class NewSettlementService {
|
||||||
segment.put("amount", segmentAmount);
|
segment.put("amount", segmentAmount);
|
||||||
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);
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}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);
|
||||||
|
|
@ -394,11 +404,11 @@ public class NewSettlementService {
|
||||||
segment.put("amount", segmentAmount);
|
segment.put("amount", segmentAmount);
|
||||||
segments.add(segment);
|
segments.add(segment);
|
||||||
currentCount=currentCount+addNum;
|
currentCount=currentCount+addNum;
|
||||||
|
|
||||||
// 然后将领取的座位最后一天单独计算
|
// 然后将领取的座位最后一天单独计算
|
||||||
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);
|
||||||
|
|
@ -409,67 +419,67 @@ 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);
|
||||||
|
|
@ -481,7 +491,7 @@ public class NewSettlementService {
|
||||||
if(add) {
|
if(add) {
|
||||||
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());
|
||||||
|
|
@ -512,20 +522,17 @@ 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());
|
||||||
|
|
||||||
// 返回结果
|
// 返回结果
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
result.put("details", sortedDetails); // 原始按时间排序的明细
|
result.put("details", sortedDetails); // 原始按时间排序的明细
|
||||||
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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue