feat: 认领收票单候选接口改为分页查询
This commit is contained in:
+3
-3
@@ -204,9 +204,9 @@ public class InvoiceReceiptController extends BladeController {
|
||||
|
||||
@GetMapping("/claim-candidates")
|
||||
@ApiOperationSupport(order = 18)
|
||||
@Operation(summary = "结算单认领收票单候选(先票后款:审批通过且未被有效应付结算单认领)")
|
||||
public R<List<InvoiceReceipt>> claimCandidates(@RequestParam(required = false) String keyword) {
|
||||
return R.data(invoiceReceiptService.claimCandidates(keyword));
|
||||
@Operation(summary = "结算单认领收票单候选分页(先票后款:审批通过且未被有效应付结算单认领)")
|
||||
public R<IPage<InvoiceReceipt>> claimCandidates(@RequestParam(required = false) String keyword, Query pageQuery) {
|
||||
return R.data(invoiceReceiptService.claimCandidates(keyword, Condition.getPage(pageQuery)));
|
||||
}
|
||||
|
||||
@GetMapping("/claimed-list")
|
||||
|
||||
+4
-3
@@ -137,12 +137,13 @@ public interface IInvoiceReceiptService extends BaseService<InvoiceReceipt> {
|
||||
|
||||
/**
|
||||
* 结算单认领收票单候选(先票后款路径A/B 选票数据源):审批通过 + 未被有效应付结算单认领,
|
||||
* 关键字匹配发票号/销方/购方,最多 200 条
|
||||
* 关键字匹配发票号/销方/购方,分页返回
|
||||
*
|
||||
* @param keyword 关键字(发票号/销方/购方),空不过滤
|
||||
* @return 候选收票登记
|
||||
* @param page 分页参数
|
||||
* @return 候选收票登记分页
|
||||
*/
|
||||
List<InvoiceReceipt> claimCandidates(String keyword);
|
||||
IPage<InvoiceReceipt> claimCandidates(String keyword, IPage<InvoiceReceipt> page);
|
||||
|
||||
/**
|
||||
* 结算单已认领收票登记列表(先票后款:发票登记对话框打开时回显已认领票):
|
||||
|
||||
+8
-34
@@ -938,24 +938,19 @@ public class InvoiceReceiptServiceImpl extends BaseServiceImpl<InvoiceReceiptMap
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InvoiceReceipt> claimCandidates(String keyword) {
|
||||
public IPage<InvoiceReceipt> claimCandidates(String keyword, IPage<InvoiceReceipt> page) {
|
||||
String trimmedKeyword = StringUtil.isBlank(keyword) ? null : keyword.trim();
|
||||
List<InvoiceReceipt> approved = list(Wrappers.<InvoiceReceipt>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.<InvoiceReceipt>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<InvoiceReceiptSettlement> relations = settlementRelationMapper.selectList(
|
||||
Wrappers.<InvoiceReceiptSettlement>lambdaQuery().in(InvoiceReceiptSettlement::getInvoiceReceiptId,
|
||||
approved.stream().map(InvoiceReceipt::getId).toList()));
|
||||
List<Long> 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<InvoiceReceiptMap
|
||||
}
|
||||
}
|
||||
|
||||
/** 关系表中仍指向有效应付结算单(未作废应付类型)的登记id:这些票不允许再被其他结算单认领 */
|
||||
private List<Long> claimedReceiptIds(List<InvoiceReceiptSettlement> relations) {
|
||||
if (relations.isEmpty()) {
|
||||
return List.of();
|
||||
}
|
||||
List<Long> settlementIds = relations.stream()
|
||||
.map(InvoiceReceiptSettlement::getFormalSettlementId).filter(Objects::nonNull).distinct().toList();
|
||||
Set<Long> 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<InvoiceReceipt> receipts) {
|
||||
if (receipts.isEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user