feat: 结算单认领分摊金额改取手动匹配金额
This commit is contained in:
+13
-4
@@ -75,6 +75,7 @@ import org.springblade.transport.pojo.entity.CustomerContact;
|
|||||||
import org.springblade.transport.pojo.entity.CustomerInvoiceInfo;
|
import org.springblade.transport.pojo.entity.CustomerInvoiceInfo;
|
||||||
import org.springblade.transport.pojo.entity.FormalSettlement;
|
import org.springblade.transport.pojo.entity.FormalSettlement;
|
||||||
import org.springblade.transport.pojo.entity.FormalSettlementDetail;
|
import org.springblade.transport.pojo.entity.FormalSettlementDetail;
|
||||||
|
import org.springblade.transport.pojo.entity.FormalSettlementInvoice;
|
||||||
import org.springblade.transport.pojo.entity.InvoiceReceipt;
|
import org.springblade.transport.pojo.entity.InvoiceReceipt;
|
||||||
import org.springblade.transport.pojo.entity.InvoiceReceiptRecord;
|
import org.springblade.transport.pojo.entity.InvoiceReceiptRecord;
|
||||||
import org.springblade.transport.pojo.entity.InvoiceReceiptSettlement;
|
import org.springblade.transport.pojo.entity.InvoiceReceiptSettlement;
|
||||||
@@ -981,7 +982,14 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
|||||||
.eq(InvoiceReceipt::getApprovalStatus, TransportBusiConstant.APPROVED)
|
.eq(InvoiceReceipt::getApprovalStatus, TransportBusiConstant.APPROVED)
|
||||||
.last("FOR UPDATE"));
|
.last("FOR UPDATE"));
|
||||||
this.checkSingleSettlementClaim(settlement, matchedReceipts);
|
this.checkSingleSettlementClaim(settlement, matchedReceipts);
|
||||||
// 重建本结算单认领关系(删旧建新,认领金额=发票金额全额认领)
|
// 重建本结算单认领关系(删旧建新):分摊金额取发票行的匹配结算单金额(支持手动修改),未匹配到的回退发票全额
|
||||||
|
Map<String, BigDecimal> matchedByInvoiceNo = formalSettlementInvoiceMapper.selectList(
|
||||||
|
Wrappers.<FormalSettlementInvoice>lambdaQuery()
|
||||||
|
.eq(FormalSettlementInvoice::getFormalSettlementId, settlementId))
|
||||||
|
.stream()
|
||||||
|
.filter(row -> Func.isNotBlank(row.getInvoiceNo()))
|
||||||
|
.collect(Collectors.toMap(FormalSettlementInvoice::getInvoiceNo,
|
||||||
|
row -> money(row.getMatchedAmount()), (left, right) -> left));
|
||||||
settlementRelationMapper.delete(Wrappers.<InvoiceReceiptSettlement>lambdaQuery()
|
settlementRelationMapper.delete(Wrappers.<InvoiceReceiptSettlement>lambdaQuery()
|
||||||
.eq(InvoiceReceiptSettlement::getFormalSettlementId, settlementId));
|
.eq(InvoiceReceiptSettlement::getFormalSettlementId, settlementId));
|
||||||
for (InvoiceReceipt receipt : matchedReceipts) {
|
for (InvoiceReceipt receipt : matchedReceipts) {
|
||||||
@@ -991,9 +999,10 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
|||||||
relation.setFormalSettlementNo(settlement.getFormalSettlementNo());
|
relation.setFormalSettlementNo(settlement.getFormalSettlementNo());
|
||||||
relation.setSettlementAmount(money(settlement.getSettlementAmount()));
|
relation.setSettlementAmount(money(settlement.getSettlementAmount()));
|
||||||
relation.setReceivedInvoiceAmount(receivedAmount(settlementId, receipt.getId()));
|
relation.setReceivedInvoiceAmount(receivedAmount(settlementId, receipt.getId()));
|
||||||
relation.setAllocatedInvoiceAmount(money(receipt.getInvoiceAmount()));
|
relation.setAllocatedInvoiceAmount(
|
||||||
|
matchedByInvoiceNo.getOrDefault(receipt.getInvoiceNo(), money(receipt.getInvoiceAmount())));
|
||||||
settlementRelationMapper.insert(relation);
|
settlementRelationMapper.insert(relation);
|
||||||
log.info("结算单[{}]认领收票登记[{}]:全额认领 {}", settlement.getFormalSettlementNo(),
|
log.info("结算单[{}]认领收票登记[{}]:分摊金额 {}", settlement.getFormalSettlementNo(),
|
||||||
receipt.getInvoiceNo(), relation.getAllocatedInvoiceAmount());
|
receipt.getInvoiceNo(), relation.getAllocatedInvoiceAmount());
|
||||||
}
|
}
|
||||||
refreshSettlementInvoiceStatus(settlementId);
|
refreshSettlementInvoiceStatus(settlementId);
|
||||||
@@ -2105,7 +2114,7 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
|||||||
FormalSettlement settlement = formalSettlementMapper.selectById(settlementId);
|
FormalSettlement settlement = formalSettlementMapper.selectById(settlementId);
|
||||||
if (settlement == null) return;
|
if (settlement == null) return;
|
||||||
BigDecimal invoiceAmount = receivedAmount(settlementId, null);
|
BigDecimal invoiceAmount = receivedAmount(settlementId, null);
|
||||||
// 先票后款全额认领:匹配金额=发票全额,可超过结算金额,覆盖即视为已完成收票
|
// 匹配结算单金额支持手动修改:匹配合计(分摊金额之和)可超过结算金额,覆盖即视为已完成收票
|
||||||
String invoiceStatus = invoiceAmount.compareTo(BigDecimal.ZERO) <= 0 ? "unreceived"
|
String invoiceStatus = invoiceAmount.compareTo(BigDecimal.ZERO) <= 0 ? "unreceived"
|
||||||
: invoiceAmount.compareTo(money(settlement.getSettlementAmount())) >= 0 ? "completed" : "partial";
|
: invoiceAmount.compareTo(money(settlement.getSettlementAmount())) >= 0 ? "completed" : "partial";
|
||||||
settlement.setInvoiceAmount(invoiceAmount);
|
settlement.setInvoiceAmount(invoiceAmount);
|
||||||
|
|||||||
Reference in New Issue
Block a user