From d2ae4b63c6d45cb79ffbf6931b5bc2013daaf50e Mon Sep 17 00:00:00 2001 From: "mula.liu" Date: Wed, 15 Apr 2026 14:25:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=9B=E5=BA=A6bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/models/models.py | 2 +- .../services/async_transcription_service.py | 33 ++++++++++++++----- .../app/services/audio_upload_task_service.py | 7 +++- backend/app/services/meeting_service.py | 4 +-- frontend/src/components/MeetingFormDrawer.jsx | 4 +-- frontend/src/pages/CreateMeeting.jsx | 6 ++-- frontend/src/pages/EditMeeting.jsx | 6 ++-- 7 files changed, 42 insertions(+), 20 deletions(-) diff --git a/backend/app/models/models.py b/backend/app/models/models.py index d7eeb42..53cda0d 100644 --- a/backend/app/models/models.py +++ b/backend/app/models/models.py @@ -104,7 +104,7 @@ class TranscriptSegment(BaseModel): class CreateMeetingRequest(BaseModel): title: str meeting_time: datetime.datetime - attendee_ids: List[int] + attendee_ids: List[int] = Field(default_factory=list) description: Optional[str] = None tags: Optional[str] = None # 逗号分隔 prompt_id: Optional[int] = None diff --git a/backend/app/services/async_transcription_service.py b/backend/app/services/async_transcription_service.py index 6b22815..c6870f5 100644 --- a/backend/app/services/async_transcription_service.py +++ b/backend/app/services/async_transcription_service.py @@ -29,6 +29,9 @@ class _DefaultTimeoutSession(requests.Session): class AsyncTranscriptionService: """异步转录服务类""" + + PREPROCESS_COMPLETED_PROGRESS = 50 + TRANSCRIPTION_COMPLETED_PROGRESS = 100 def __init__(self): self.redis_client = redis.Redis(**REDIS_CONFIG) @@ -230,7 +233,7 @@ class AsyncTranscriptionService: 'meeting_id': str(meeting_id), 'file_url': file_url, 'status': 'pending', - 'progress': '0', + 'progress': str(self.PREPROCESS_COMPLETED_PROGRESS), 'created_at': current_time, 'updated_at': current_time } @@ -528,9 +531,10 @@ class AsyncTranscriptionService: def _calculate_progress(self, paraformer_status: str) -> int: """根据Paraformer状态计算进度""" progress_mapping = { - 'PENDING': 10, - 'RUNNING': 50, - 'SUCCEEDED': 100, + # 预处理完成后,转录任务进入云侧排队/执行阶段,统一展示为 50。 + 'PENDING': self.PREPROCESS_COMPLETED_PROGRESS, + 'RUNNING': self.PREPROCESS_COMPLETED_PROGRESS, + 'SUCCEEDED': self.TRANSCRIPTION_COMPLETED_PROGRESS, 'FAILED': 0 } return progress_mapping.get(paraformer_status, 0) @@ -547,18 +551,31 @@ class AsyncTranscriptionService: cursor.execute( """ UPDATE transcript_tasks - SET paraformer_task_id = %s, meeting_id = %s, status = 'pending', progress = 0, + SET paraformer_task_id = %s, meeting_id = %s, status = 'pending', progress = %s, completed_at = NULL, error_message = NULL WHERE task_id = %s """, - (paraformer_task_id, meeting_id, business_task_id), + ( + paraformer_task_id, + meeting_id, + self.PREPROCESS_COMPLETED_PROGRESS, + business_task_id, + ), ) else: insert_task_query = """ INSERT INTO transcript_tasks (task_id, paraformer_task_id, meeting_id, status, progress, created_at) - VALUES (%s, %s, %s, 'pending', 0, NOW()) + VALUES (%s, %s, %s, 'pending', %s, NOW()) """ - cursor.execute(insert_task_query, (business_task_id, paraformer_task_id, meeting_id)) + cursor.execute( + insert_task_query, + ( + business_task_id, + paraformer_task_id, + meeting_id, + self.PREPROCESS_COMPLETED_PROGRESS, + ), + ) connection.commit() cursor.close() diff --git a/backend/app/services/audio_upload_task_service.py b/backend/app/services/audio_upload_task_service.py index b1aeb58..c5d35d1 100644 --- a/backend/app/services/audio_upload_task_service.py +++ b/backend/app/services/audio_upload_task_service.py @@ -87,7 +87,12 @@ class AudioUploadTaskService: f"applied={preprocess_result.applied}" ) - self.transcription_service.update_local_processing_task(task_id, "processing", 40, None) + self.transcription_service.update_local_processing_task( + task_id, + "processing", + self.transcription_service.PREPROCESS_COMPLETED_PROGRESS, + None, + ) handoff_to_audio_service = True result = handle_audio_upload( diff --git a/backend/app/services/meeting_service.py b/backend/app/services/meeting_service.py index 53cdddb..5ceaeb0 100644 --- a/backend/app/services/meeting_service.py +++ b/backend/app/services/meeting_service.py @@ -570,7 +570,7 @@ def create_meeting(meeting_request: CreateMeetingRequest, current_user: dict): def update_meeting(meeting_id: int, meeting_request: UpdateMeetingRequest, current_user: dict): with get_db_connection() as connection: cursor = connection.cursor(dictionary=True) - cursor.execute("SELECT user_id, prompt_id FROM meetings WHERE meeting_id = %s", (meeting_id,)) + cursor.execute("SELECT user_id, prompt_id, summary FROM meetings WHERE meeting_id = %s", (meeting_id,)) meeting = cursor.fetchone() if not meeting: return create_api_response(code="404", message="Meeting not found") @@ -585,7 +585,7 @@ def update_meeting(meeting_id: int, meeting_request: UpdateMeetingRequest, curre ( meeting_request.title, meeting_request.meeting_time, - meeting_request.summary, + meeting_request.summary if meeting_request.summary is not None else meeting['summary'], meeting_request.tags, meeting_request.prompt_id if meeting_request.prompt_id is not None else meeting['prompt_id'], meeting_id, diff --git a/frontend/src/components/MeetingFormDrawer.jsx b/frontend/src/components/MeetingFormDrawer.jsx index f05d46b..8bbe5be 100644 --- a/frontend/src/components/MeetingFormDrawer.jsx +++ b/frontend/src/components/MeetingFormDrawer.jsx @@ -57,8 +57,8 @@ const MeetingFormDrawer = ({ open, onClose, onSuccess, meetingId = null }) => { - - {users.map((u) => ( {u.caption} ))} diff --git a/frontend/src/pages/CreateMeeting.jsx b/frontend/src/pages/CreateMeeting.jsx index 397d559..3e5293f 100644 --- a/frontend/src/pages/CreateMeeting.jsx +++ b/frontend/src/pages/CreateMeeting.jsx @@ -90,7 +90,7 @@ const CreateMeeting = () => { const payload = { ...values, meeting_time: values.meeting_time.format('YYYY-MM-DD HH:mm:ss'), - attendee_ids: values.attendee_ids, + attendee_ids: values.attendee_ids || [], tags: values.tags?.join(',') || '' }; const res = await httpService.post(buildApiUrl(API_ENDPOINTS.MEETINGS.CREATE), payload); @@ -162,8 +162,8 @@ const CreateMeeting = () => { - - {users.map(u => {u.caption})} diff --git a/frontend/src/pages/EditMeeting.jsx b/frontend/src/pages/EditMeeting.jsx index 492b0d3..788c694 100644 --- a/frontend/src/pages/EditMeeting.jsx +++ b/frontend/src/pages/EditMeeting.jsx @@ -58,7 +58,7 @@ const EditMeeting = () => { const payload = { ...values, meeting_time: values.meeting_time.format('YYYY-MM-DD HH:mm:ss'), - attendee_ids: values.attendee_ids, + attendee_ids: values.attendee_ids || [], tags: values.tags?.join(',') || '' }; await httpService.put(buildApiUrl(API_ENDPOINTS.MEETINGS.UPDATE(meeting_id)), payload); @@ -99,8 +99,8 @@ const EditMeeting = () => { - - {users.map(u => {u.caption})}