|
@@ -1196,47 +1196,40 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
|
|
//说明管理费分多了,需要将多的退掉
|
|
//说明管理费分多了,需要将多的退掉
|
|
unAssignManagement = refundManagement.negate();
|
|
unAssignManagement = refundManagement.negate();
|
|
//删除未分配的管理费
|
|
//删除未分配的管理费
|
|
- deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
|
|
|
|
+ deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
|
|
//将部分分配的管理费计划金额改为实收金额
|
|
//将部分分配的管理费计划金额改为实收金额
|
|
updatePartAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
updatePartAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
} else if (refundManagement.compareTo(BigDecimal.ZERO) == 0) {
|
|
} else if (refundManagement.compareTo(BigDecimal.ZERO) == 0) {
|
|
//说明管理费正好,只需要处理未完成的计划
|
|
//说明管理费正好,只需要处理未完成的计划
|
|
//删除未分配的管理费
|
|
//删除未分配的管理费
|
|
- deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
|
|
|
|
+ deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
|
|
//将部分分配的管理费计划金额改为实收金额
|
|
//将部分分配的管理费计划金额改为实收金额
|
|
updatePartAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
updatePartAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
} else if (refundManagement.compareTo(BigDecimal.ZERO) < 0) {
|
|
} else if (refundManagement.compareTo(BigDecimal.ZERO) < 0) {
|
|
//说明管理费还需要补
|
|
//说明管理费还需要补
|
|
BigDecimal toAssignManagement = refundManagement.negate();
|
|
BigDecimal toAssignManagement = refundManagement.negate();
|
|
if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
- if (assignAmount.compareTo(toAssignManagement) >= 0) {
|
|
|
|
- //说明本次分的钱可以把管理费分完,增加一条管理费分配记录
|
|
|
|
- if (goodsAssignVo.getHasAssignInterest()) {
|
|
|
|
- //如果本次选择分管理费
|
|
|
|
|
|
+ //判断是否需要分配
|
|
|
|
+ if (goodsAssignVo.getHasAssignInterest()) {
|
|
|
|
+ if (assignAmount.compareTo(toAssignManagement) >= 0) {
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, toAssignManagement,
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, toAssignManagement,
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
financingManagementFee = financingManagementFee.add(toAssignManagement);
|
|
financingManagementFee = financingManagementFee.add(toAssignManagement);
|
|
assignAmount = assignAmount.subtract(toAssignManagement);
|
|
assignAmount = assignAmount.subtract(toAssignManagement);
|
|
- } else {
|
|
|
|
- //如果本次选择不分管理费
|
|
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, BigDecimal.ZERO,
|
|
|
|
- IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
|
|
- }
|
|
|
|
- } else if (assignAmount.compareTo(toAssignManagement) < 0) {
|
|
|
|
- //说明本次分的钱把管理费分不完,增加一条管理费分配记录
|
|
|
|
- if (goodsAssignVo.getHasAssignInterest()) {
|
|
|
|
- //如果本次选择分管理费
|
|
|
|
|
|
+ } else if (assignAmount.compareTo(toAssignManagement) < 0) {
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, assignAmount,
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, assignAmount,
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
financingManagementFee = financingManagementFee.add(assignAmount);
|
|
financingManagementFee = financingManagementFee.add(assignAmount);
|
|
|
|
+ //剩余未分配管理费
|
|
|
|
+ unAssignManagement = toAssignManagement.subtract(assignAmount);
|
|
assignAmount = BigDecimal.ZERO;
|
|
assignAmount = BigDecimal.ZERO;
|
|
- } else {
|
|
|
|
- //如果本次选择不分管理费
|
|
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, BigDecimal.ZERO,
|
|
|
|
- IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
|
|
}
|
|
}
|
|
- //剩余未分配管理费
|
|
|
|
- unAssignManagement = toAssignManagement.subtract(assignAmount);
|
|
|
|
|
|
+ } else {
|
|
|
|
+ //这种场景可能存在未分配的管理费,要删除分账日期之前的状态为计划中的数据
|
|
|
|
+ deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, ledgerDate);
|
|
|
|
+ //如果本次选择不分管理费
|
|
|
|
+ ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignManagement, BigDecimal.ZERO,
|
|
|
|
+ IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1249,46 +1242,41 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
|
|
//说明利息分多了,需要将多的退掉
|
|
//说明利息分多了,需要将多的退掉
|
|
unAssignInterest = refundInterest.negate();
|
|
unAssignInterest = refundInterest.negate();
|
|
//删除未分配的利息
|
|
//删除未分配的利息
|
|
- deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
|
|
|
|
+ deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
|
|
//将部分分配的利息计划金额改为实收金额
|
|
//将部分分配的利息计划金额改为实收金额
|
|
updatePartAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
updatePartAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
} else if (refundInterest.compareTo(BigDecimal.ZERO) == 0) {
|
|
} else if (refundInterest.compareTo(BigDecimal.ZERO) == 0) {
|
|
//删除未分配的利息
|
|
//删除未分配的利息
|
|
- deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
|
|
|
|
+ deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, null);
|
|
//将部分分配的利息计划金额改为实收金额
|
|
//将部分分配的利息计划金额改为实收金额
|
|
updatePartAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
updatePartAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
} else if (refundInterest.compareTo(BigDecimal.ZERO) < 0) {
|
|
} else if (refundInterest.compareTo(BigDecimal.ZERO) < 0) {
|
|
//说明利息还需要补
|
|
//说明利息还需要补
|
|
BigDecimal toAssignInterest = refundInterest.negate();
|
|
BigDecimal toAssignInterest = refundInterest.negate();
|
|
if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
- if (assignAmount.compareTo(toAssignInterest) >= 0) {
|
|
|
|
- //说明本次分的钱可以把管理费分完,增加一条利息分配记录(应分=实分)
|
|
|
|
- if (goodsAssignVo.getHasAssignInterest()) {
|
|
|
|
|
|
+ //判断是否需要分配
|
|
|
|
+ if (goodsAssignVo.getHasAssignInterest()) {
|
|
|
|
+ //如果需要分配利息
|
|
|
|
+ if (assignAmount.compareTo(toAssignInterest) >= 0) {
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, toAssignInterest,
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, toAssignInterest,
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
financeInterest = financeInterest.add(toAssignInterest);
|
|
financeInterest = financeInterest.add(toAssignInterest);
|
|
assignAmount = assignAmount.subtract(toAssignInterest);
|
|
assignAmount = assignAmount.subtract(toAssignInterest);
|
|
- } else {
|
|
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, BigDecimal.ZERO,
|
|
|
|
- IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
|
|
- }
|
|
|
|
- } else if (assignAmount.compareTo(toAssignInterest) < 0) {
|
|
|
|
- //说明本次分的钱把管理费分不完,增加一条利息分配记录(应分>实分)
|
|
|
|
- if (goodsAssignVo.getHasAssignInterest()) {
|
|
|
|
- //如果本次选择分利息
|
|
|
|
|
|
+ } else if (assignAmount.compareTo(toAssignInterest) < 0) {
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, assignAmount,
|
|
ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, assignAmount,
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
financeInterest = financeInterest.add(assignAmount);
|
|
financeInterest = financeInterest.add(assignAmount);
|
|
|
|
+ //剩余未分配利息
|
|
|
|
+ unAssignInterest = toAssignInterest.subtract(assignAmount);
|
|
assignAmount = BigDecimal.ZERO;
|
|
assignAmount = BigDecimal.ZERO;
|
|
- } else {
|
|
|
|
- //如果选择不分利息
|
|
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, assignAmount, BigDecimal.ZERO,
|
|
|
|
- IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
|
|
}
|
|
}
|
|
- //剩余未分配利息
|
|
|
|
- unAssignInterest = toAssignInterest.subtract(assignAmount);
|
|
|
|
|
|
+ } else {
|
|
|
|
+ //这种场景可能存在未分配的管理费,要删除分账日期之前的状态为计划中的数据
|
|
|
|
+ deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo, ledgerDate);
|
|
|
|
+ //如果不分配利息
|
|
|
|
+ ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, toAssignInterest, BigDecimal.ZERO,
|
|
|
|
+ IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
if (assignAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -1350,14 +1338,14 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
|
|
}
|
|
}
|
|
if (returnedAmount.compareTo(BigDecimal.ZERO) == 0) {
|
|
if (returnedAmount.compareTo(BigDecimal.ZERO) == 0) {
|
|
//说明此分配本金已经分完了
|
|
//说明此分配本金已经分完了
|
|
- if (unAssignInterest.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
|
|
|
+ if (unAssignInterest.compareTo(BigDecimal.ZERO) < 0) {
|
|
//将之前未分配的利息分完
|
|
//将之前未分配的利息分完
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignInterest, unAssignInterest,
|
|
|
|
|
|
+ ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignInterest, BigDecimal.ZERO,
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
}
|
|
}
|
|
- if (unAssignManagement.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
|
|
|
+ if (unAssignManagement.compareTo(BigDecimal.ZERO) < 0) {
|
|
//将之前未分配的管理费分完
|
|
//将之前未分配的管理费分完
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignManagement, unAssignManagement,
|
|
|
|
|
|
+ ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, unAssignManagement, BigDecimal.ZERO,
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
}
|
|
}
|
|
} else if (returnedAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
} else if (returnedAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -1384,9 +1372,7 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
|
|
if (surplusInterest.compareTo(BigDecimal.ZERO) != 0) {
|
|
if (surplusInterest.compareTo(BigDecimal.ZERO) != 0) {
|
|
PaymentCollectionPlanFactoring lastInterestFactoring = getLastPrincipalFactoring(allPlanFactoringList, interestDict, lastPlanDate);
|
|
PaymentCollectionPlanFactoring lastInterestFactoring = getLastPrincipalFactoring(allPlanFactoringList, interestDict, lastPlanDate);
|
|
if (lastInterestFactoring == null) {
|
|
if (lastInterestFactoring == null) {
|
|
- //这种场景可能存在未分配的利息,要删除
|
|
|
|
- deleteUnAssignList(interestFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, surplusInterest, BigDecimal.ZERO,
|
|
|
|
|
|
+ ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(lastPlanDate, surplusInterest, BigDecimal.ZERO,
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.INTEREST.getCode(), goodsAssignVo, 0));
|
|
} else {
|
|
} else {
|
|
lastInterestFactoring.setAmount(surplusInterest);
|
|
lastInterestFactoring.setAmount(surplusInterest);
|
|
@@ -1411,9 +1397,7 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
|
|
if (surplusManagement.compareTo(BigDecimal.ZERO) != 0) {
|
|
if (surplusManagement.compareTo(BigDecimal.ZERO) != 0) {
|
|
PaymentCollectionPlanFactoring lastManagementFactoring = getLastPrincipalFactoring(allPlanFactoringList, managementFeeDict, lastPlanDate);
|
|
PaymentCollectionPlanFactoring lastManagementFactoring = getLastPrincipalFactoring(allPlanFactoringList, managementFeeDict, lastPlanDate);
|
|
if (lastManagementFactoring == null) {
|
|
if (lastManagementFactoring == null) {
|
|
- //这种场景可能存在未分配的管理费,要删除
|
|
|
|
- deleteUnAssignList(managementFeeFactoringList, ledgerPlanFactoringAssignList, goodsAssignVo);
|
|
|
|
- ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(ledgerDate, surplusManagement, BigDecimal.ZERO,
|
|
|
|
|
|
+ ledgerPlanFactoringAssignList.add(addPlanFactoringInsertAssign(lastPlanDate, surplusManagement, BigDecimal.ZERO,
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
IncomeExpenditureTypeDict.ChildEnum.MANAGEMENT_FEE.getCode(), goodsAssignVo, 0));
|
|
} else {
|
|
} else {
|
|
lastManagementFactoring.setAmount(surplusManagement);
|
|
lastManagementFactoring.setAmount(surplusManagement);
|
|
@@ -1955,12 +1939,20 @@ public class LedgerManagementServiceImpl implements LedgerManagementService {
|
|
*
|
|
*
|
|
* @param planFactoringList
|
|
* @param planFactoringList
|
|
*/
|
|
*/
|
|
- private void deleteUnAssignList(List<PaymentCollectionPlanFactoring> planFactoringList,
|
|
|
|
- List<LedgerPlanFactoringAssign> ledgerPlanFactoringAssignList, LedgerFundGoodsAssign goodsAssign) {
|
|
|
|
|
|
+ private void deleteUnAssignList(List<PaymentCollectionPlanFactoring> planFactoringList, List<LedgerPlanFactoringAssign> ledgerPlanFactoringAssignList,
|
|
|
|
+ LedgerFundGoodsAssign goodsAssign, Date ledgerDate) {
|
|
if (CollectionUtil.isNotEmpty(planFactoringList)) {
|
|
if (CollectionUtil.isNotEmpty(planFactoringList)) {
|
|
- //退款的数据虽然没有实际收付但也不能删除
|
|
|
|
- planFactoringList.stream().filter(p -> CollectionUtil.isEmpty(p.getAmountAllocationList()) && p.getAmount().compareTo(BigDecimal.ZERO) > 0)
|
|
|
|
- .forEach(p -> ledgerPlanFactoringAssignList.add(addPlanFactoringDeleteAssign(p, goodsAssign, 0)));
|
|
|
|
|
|
+ if (ledgerDate == null) {
|
|
|
|
+ //退款的数据虽然没有实际收付但也不能删除
|
|
|
|
+ planFactoringList.stream().filter(p -> CollectionUtil.isEmpty(p.getAmountAllocationList()) && p.getAmount().compareTo(BigDecimal.ZERO) > 0)
|
|
|
|
+ .forEach(p -> ledgerPlanFactoringAssignList.add(addPlanFactoringDeleteAssign(p, goodsAssign, 0)));
|
|
|
|
+ } else {
|
|
|
|
+ //退款的数据虽然没有实际收付但也不能删除
|
|
|
|
+ planFactoringList.stream().filter(p -> CollectionUtil.isEmpty(p.getAmountAllocationList())
|
|
|
|
+ && p.getAmount().compareTo(BigDecimal.ZERO) > 0 && DateUtil.beginOfDay(p.getPlanDate()).compareTo(ledgerDate) <= 0)
|
|
|
|
+ .forEach(p -> ledgerPlanFactoringAssignList.add(addPlanFactoringDeleteAssign(p, goodsAssign, 0)));
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|