Files
AIclinicalresearch/frontend-v2/src/modules/asl/hooks/useScreeningResults.ts
HaHafeng b64896a307 feat(deploy): Complete PostgreSQL migration and Docker image build
Summary:
- PostgreSQL database migration to RDS completed (90MB SQL, 11 schemas)
- Frontend Nginx Docker image built and pushed to ACR (v1.0, ~50MB)
- Python microservice Docker image built and pushed to ACR (v1.0, 1.12GB)
- Created 3 deployment documentation files

Docker Configuration Files:
- frontend-v2/Dockerfile: Multi-stage build with nginx:alpine
- frontend-v2/.dockerignore: Optimize build context
- frontend-v2/nginx.conf: SPA routing and API proxy
- frontend-v2/docker-entrypoint.sh: Dynamic env injection
- extraction_service/Dockerfile: Multi-stage build with Aliyun Debian mirror
- extraction_service/.dockerignore: Optimize build context
- extraction_service/requirements-prod.txt: Production dependencies (removed Nougat)

Deployment Documentation:
- docs/05-部署文档/00-部署进度总览.md: One-stop deployment status overview
- docs/05-部署文档/07-前端Nginx-SAE部署操作手册.md: Frontend deployment guide
- docs/05-部署文档/08-PostgreSQL数据库部署操作手册.md: Database deployment guide
- docs/00-系统总体设计/00-系统当前状态与开发指南.md: Updated with deployment status

Database Migration:
- RDS instance: pgm-2zex1m2y3r23hdn5 (2C4G, PostgreSQL 15.0)
- Database: ai_clinical_research
- Schemas: 11 business schemas migrated successfully
- Data: 3 users, 2 projects, 1204 literatures verified
- Backup: rds_init_20251224_154529.sql (90MB)

Docker Images:
- Frontend: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
- Python: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0

Key Achievements:
- Resolved Docker Hub network issues (using generic tags)
- Fixed 30 TypeScript compilation errors
- Removed Nougat OCR to reduce image size by 1.5GB
- Used Aliyun Debian mirror to resolve apt-get network issues
- Implemented multi-stage builds for optimization

Next Steps:
- Deploy Python microservice to SAE
- Build Node.js backend Docker image
- Deploy Node.js backend to SAE
- Deploy frontend Nginx to SAE
- End-to-end verification testing

Status: Docker images ready, SAE deployment pending
2025-12-24 18:21:55 +08:00

81 lines
1.9 KiB
TypeScript

/**
* 筛选结果列表Hook
* 用于获取和管理筛选结果列表(支持分页和筛选)
*/
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { message } from 'antd';
import { aslApi } from '../api';
interface UseScreeningResultsOptions {
projectId: string;
page?: number;
pageSize?: number;
filter?: 'all' | 'conflict' | 'included' | 'excluded' | 'reviewed';
enabled?: boolean;
}
/**
* 使用筛选结果Hook
*/
export function useScreeningResults({
projectId,
page = 1,
pageSize = 50,
filter = 'all',
enabled = true,
}: UseScreeningResultsOptions) {
const queryClient = useQueryClient();
// 查询筛选结果列表
const { data, isLoading, error, refetch } = useQuery({
queryKey: ['screening-results', projectId, page, pageSize, filter],
queryFn: () => aslApi.getScreeningResultsList(projectId, { page, pageSize, filter }),
enabled: enabled && !!projectId,
staleTime: 1000 * 30, // 30秒内认为数据是新鲜的
});
const results = (data as any)?.data?.items || [];
const total = (data as any)?.data?.total || 0;
const totalPages = (data as any)?.data?.totalPages || 0;
// 人工复核Mutation
const reviewMutation = useMutation({
mutationFn: ({ resultId, decision, note }: {
resultId: string;
decision: 'include' | 'exclude';
note?: string;
}) => aslApi.reviewScreeningResult(resultId, { decision, note }),
onSuccess: () => {
// 刷新列表
queryClient.invalidateQueries({ queryKey: ['screening-results', projectId] });
message.success('复核提交成功');
},
onError: (error: any) => {
message.error(`复核失败: ${error.message}`);
},
});
return {
results,
total,
totalPages,
page,
pageSize,
isLoading,
error,
refetch,
// 人工复核方法
review: reviewMutation.mutate,
isReviewing: reviewMutation.isPending,
};
}