From 5756cd9b2df83b0ccd24fec4bfa63cd30ce64042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Tue, 27 Oct 2026 18:20:05 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E5=90=88=E5=90=8C=E6=8E=A5=E5=8F=A3=E4=B8=BA=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=A3=E5=86=B3N+1=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PreSettlementServiceImpl.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java index f9bdc3a9..6b0247ca 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java @@ -94,6 +94,7 @@ import java.util.Objects; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 预结算单服务实现类 @@ -232,13 +233,34 @@ public class PreSettlementServiceImpl extends BaseServiceImpl contracts = contractManageService.list(wrapper).stream() - .filter(this::isAvailableContract).toList(); + .filter(contract -> contract.getProjectId() != null + && List.of("客户合同", "承运商合同").contains(contract.getContractCategory()) + && contractManageService.isUsableForSettlement(contract)) + .toList(); + if (contracts.isEmpty()) return List.of(); + // 项目与客户均批量查询,避免逐条 N+1 查询导致接口超时 Set projectIds = contracts.stream().map(ContractManage::getProjectId) - .filter(Objects::nonNull).collect(Collectors.toSet()); - Map projectById = Func.isEmpty(projectIds) ? Map.of() - : projectApplyService.listByIds(projectIds).stream() + .collect(Collectors.toSet()); + Map projectById = projectApplyService.listByIds(projectIds).stream() .collect(Collectors.toMap(ProjectApply::getId, Function.identity())); - return contracts.stream().map(contract -> { + Set partyNames = contracts.stream() + .flatMap(contract -> Stream.of(contract.getPartyA(), contract.getPartyB())) + .filter(Func::isNotEmpty).collect(Collectors.toSet()); + Set approvedCustomers = customerArchiveService.list(Wrappers.lambdaQuery() + .eq(CustomerArchive::getIsDeleted, 0) + .eq(CustomerArchive::getStatus, 1) + .eq(CustomerArchive::getApprovalStatus, "approved") + .in(CustomerArchive::getFullName, partyNames)) + .stream().map(CustomerArchive::getFullName).collect(Collectors.toSet()); + return contracts.stream() + .filter(contract -> { + ProjectApply project = projectById.get(contract.getProjectId()); + return project != null && !Objects.equals(project.getIsDeleted(), 1) + && List.of("approved", "change_approved").contains(project.getApprovalStatus()) + && approvedCustomers.contains(contract.getPartyA()) + && approvedCustomers.contains(contract.getPartyB()); + }) + .map(contract -> { ProjectApply project = projectById.get(contract.getProjectId()); Map result = new LinkedHashMap<>(); result.put("id", contract.getId()); @@ -1325,19 +1347,6 @@ public class PreSettlementServiceImpl extends BaseServiceImpl contractFeeTypeMap(Long contractId) { ContractManage contract = contractId == null ? null : contractManageService.getById(contractId); Map result = new LinkedHashMap<>();