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.FormalSettlement;
|
||||
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.InvoiceReceiptRecord;
|
||||
import org.springblade.transport.pojo.entity.InvoiceReceiptSettlement;
|
||||
@@ -981,7 +982,14 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
.eq(InvoiceReceipt::getApprovalStatus, TransportBusiConstant.APPROVED)
|
||||
.last("FOR UPDATE"));
|
||||
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()
|
||||
.eq(InvoiceReceiptSettlement::getFormalSettlementId, settlementId));
|
||||
for (InvoiceReceipt receipt : matchedReceipts) {
|
||||
@@ -991,9 +999,10 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
relation.setFormalSettlementNo(settlement.getFormalSettlementNo());
|
||||
relation.setSettlementAmount(money(settlement.getSettlementAmount()));
|
||||
relation.setReceivedInvoiceAmount(receivedAmount(settlementId, receipt.getId()));
|
||||
relation.setAllocatedInvoiceAmount(money(receipt.getInvoiceAmount()));
|
||||
relation.setAllocatedInvoiceAmount(
|
||||
matchedByInvoiceNo.getOrDefault(receipt.getInvoiceNo(), money(receipt.getInvoiceAmount())));
|
||||
settlementRelationMapper.insert(relation);
|
||||
log.info("结算单[{}]认领收票登记[{}]:全额认领 {}", settlement.getFormalSettlementNo(),
|
||||
log.info("结算单[{}]认领收票登记[{}]:分摊金额 {}", settlement.getFormalSettlementNo(),
|
||||
receipt.getInvoiceNo(), relation.getAllocatedInvoiceAmount());
|
||||
}
|
||||
refreshSettlementInvoiceStatus(settlementId);
|
||||
@@ -2105,7 +2114,7 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
FormalSettlement settlement = formalSettlementMapper.selectById(settlementId);
|
||||
if (settlement == null) return;
|
||||
BigDecimal invoiceAmount = receivedAmount(settlementId, null);
|
||||
// 先票后款全额认领:匹配金额=发票全额,可超过结算金额,覆盖即视为已完成收票
|
||||
// 匹配结算单金额支持手动修改:匹配合计(分摊金额之和)可超过结算金额,覆盖即视为已完成收票
|
||||
String invoiceStatus = invoiceAmount.compareTo(BigDecimal.ZERO) <= 0 ? "unreceived"
|
||||
: invoiceAmount.compareTo(money(settlement.getSettlementAmount())) >= 0 ? "completed" : "partial";
|
||||
settlement.setInvoiceAmount(invoiceAmount);
|
||||
|
||||
Reference in New Issue
Block a user