diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InvoiceReceiptController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InvoiceReceiptController.java index beaa3ce5..c9b69ba9 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InvoiceReceiptController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/InvoiceReceiptController.java @@ -204,9 +204,9 @@ public class InvoiceReceiptController extends BladeController { @GetMapping("/claim-candidates") @ApiOperationSupport(order = 18) - @Operation(summary = "结算单认领收票单候选(先票后款:审批通过且未被有效应付结算单认领)") - public R> claimCandidates(@RequestParam(required = false) String keyword) { - return R.data(invoiceReceiptService.claimCandidates(keyword)); + @Operation(summary = "结算单认领收票单候选分页(先票后款:审批通过且未被有效应付结算单认领)") + public R> claimCandidates(@RequestParam(required = false) String keyword, Query pageQuery) { + return R.data(invoiceReceiptService.claimCandidates(keyword, Condition.getPage(pageQuery))); } @GetMapping("/claimed-list") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IInvoiceReceiptService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IInvoiceReceiptService.java index 4791acdb..0e546a1b 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IInvoiceReceiptService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IInvoiceReceiptService.java @@ -137,12 +137,13 @@ public interface IInvoiceReceiptService extends BaseService { /** * 结算单认领收票单候选(先票后款路径A/B 选票数据源):审批通过 + 未被有效应付结算单认领, - * 关键字匹配发票号/销方/购方,最多 200 条 + * 关键字匹配发票号/销方/购方,分页返回 * * @param keyword 关键字(发票号/销方/购方),空不过滤 - * @return 候选收票登记 + * @param page 分页参数 + * @return 候选收票登记分页 */ - List claimCandidates(String keyword); + IPage claimCandidates(String keyword, IPage page); /** * 结算单已认领收票登记列表(先票后款:发票登记对话框打开时回显已认领票): diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceReceiptServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceReceiptServiceImpl.java index d95f5e37..ab22b0d4 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceReceiptServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/InvoiceReceiptServiceImpl.java @@ -938,24 +938,19 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl claimCandidates(String keyword) { + public IPage claimCandidates(String keyword, IPage page) { String trimmedKeyword = StringUtil.isBlank(keyword) ? null : keyword.trim(); - List approved = list(Wrappers.lambdaQuery() + // 排除已被有效应付结算单(未删除+启用+应付类型)认领的票,关系仍指向作废结算单的可重新选 + String claimedReceiptSubSql = "SELECT r.invoice_receipt_id FROM blade_invoice_receipt_settlement r" + + " INNER JOIN blade_formal_settlement s ON s.id = r.formal_settlement_id" + + " WHERE s.is_deleted = 0 AND s.status = 1 AND s.settlement_type = 'payable'"; + return page(page, Wrappers.lambdaQuery() .eq(InvoiceReceipt::getApprovalStatus, TransportBusiConstant.APPROVED) .and(Func.isNotBlank(trimmedKeyword), item -> item.like(InvoiceReceipt::getInvoiceNo, trimmedKeyword) .or().like(InvoiceReceipt::getIssuerName, trimmedKeyword) .or().like(InvoiceReceipt::getReceiverName, trimmedKeyword)) - .orderByDesc(InvoiceReceipt::getCreateTime) - .last("LIMIT 200")); - if (approved.isEmpty()) { - return List.of(); - } - // 排除已被有效应付结算单认领的票(关系仍指向作废结算单的可重新选) - List relations = settlementRelationMapper.selectList( - Wrappers.lambdaQuery().in(InvoiceReceiptSettlement::getInvoiceReceiptId, - approved.stream().map(InvoiceReceipt::getId).toList())); - List claimedReceiptIds = this.claimedReceiptIds(relations); - return approved.stream().filter(receipt -> !claimedReceiptIds.contains(receipt.getId())).toList(); + .notInSql(InvoiceReceipt::getId, claimedReceiptSubSql) + .orderByDesc(InvoiceReceipt::getCreateTime)); } @Override @@ -1066,27 +1061,6 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl claimedReceiptIds(List relations) { - if (relations.isEmpty()) { - return List.of(); - } - List settlementIds = relations.stream() - .map(InvoiceReceiptSettlement::getFormalSettlementId).filter(Objects::nonNull).distinct().toList(); - Set activeSettlementIds = settlementIds.isEmpty() ? Set.of() - : formalSettlementMapper.selectBatchIds(settlementIds).stream() - .filter(settlement -> !Objects.equals(settlement.getIsDeleted(), 1) - && Objects.equals(settlement.getStatus(), 1) - && "payable".equals(settlement.getSettlementType())) - .map(FormalSettlement::getId).collect(Collectors.toSet()); - if (activeSettlementIds.isEmpty()) { - return List.of(); - } - return relations.stream() - .filter(relation -> activeSettlementIds.contains(relation.getFormalSettlementId())) - .map(InvoiceReceiptSettlement::getInvoiceReceiptId).distinct().toList(); - } - /** 一票一结算单校验:认领票已挂其他有效应付结算单时拦截(指向本结算单的旧关系即将重建,不参与校验) */ private void checkSingleSettlementClaim(FormalSettlement settlement, List receipts) { if (receipts.isEmpty()) {