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<>();