fix: 收款结算单列表不聚合已指定应付状态

This commit is contained in:
刘泉佳
2026-11-04 11:02:36 +08:00
parent aff59e8541
commit fbee521ff4
@@ -231,20 +231,24 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
} }
/** /**
* 填充已指定应付聚合态:按本页结算单一次批量查认领关系与收票登记,避免 N+1。 * 填充已指定应付聚合态(仅付款结算单):按本页结算单一次批量查认领关系与收票登记,避免 N+1。
* 聚合规则:任一指定失败 → failed;全部已指定 → assigned;其余(有认领但未指定/未推送)→ unspecified; * 聚合规则:任一指定失败 → failed;全部已指定 → assigned;其余(有认领但未指定/未推送)→ unspecified;
* 无认领收票或全部认领票无效不填充,前端展示"-" * 无认领收票或全部认领票无效不填充,前端展示"-"
* *
* @param rows 本页 VO 列表 * @param rows 本页 VO 列表
*/ */
private void fillKingdeeAssignStatus(List<FormalSettlementVO> rows) { private void fillKingdeeAssignStatus(List<FormalSettlementVO> rows) {
if (Func.isEmpty(rows)) { // 已指定应付仅付款结算单(先票后款 A302-6)有,收款结算单不参与聚合,避免无意义查询与字段下发
List<FormalSettlementVO> payableRows = rows.stream()
.filter(row -> "payable".equals(row.getSettlementType()))
.toList();
if (Func.isEmpty(payableRows)) {
return; return;
} }
List<InvoiceReceiptSettlement> relations = invoiceReceiptSettlementMapper.selectList( List<InvoiceReceiptSettlement> relations = invoiceReceiptSettlementMapper.selectList(
Wrappers.<InvoiceReceiptSettlement>lambdaQuery() Wrappers.<InvoiceReceiptSettlement>lambdaQuery()
.in(InvoiceReceiptSettlement::getFormalSettlementId, .in(InvoiceReceiptSettlement::getFormalSettlementId,
rows.stream().map(FormalSettlementVO::getId).filter(Objects::nonNull).toList())); payableRows.stream().map(FormalSettlementVO::getId).filter(Objects::nonNull).toList()));
if (relations.isEmpty()) { if (relations.isEmpty()) {
return; return;
} }
@@ -263,7 +267,7 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
receiptsBySettlement.computeIfAbsent(relation.getFormalSettlementId(), key -> new ArrayList<>()) receiptsBySettlement.computeIfAbsent(relation.getFormalSettlementId(), key -> new ArrayList<>())
.add(receipt); .add(receipt);
} }
for (FormalSettlementVO vo : rows) { for (FormalSettlementVO vo : payableRows) {
List<InvoiceReceipt> claimed = receiptsBySettlement.get(vo.getId()); List<InvoiceReceipt> claimed = receiptsBySettlement.get(vo.getId());
if (Func.isEmpty(claimed)) { if (Func.isEmpty(claimed)) {
continue; continue;