修复进度bug
parent
f19b70f1d0
commit
d2ae4b63c6
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -30,6 +30,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)
|
||||
self.base_url = APP_CONFIG['base_url'].rstrip('/')
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -57,8 +57,8 @@ const MeetingFormDrawer = ({ open, onClose, onSuccess, meetingId = null }) => {
|
|||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="参会人员" name="attendee_ids" rules={[{ required: true, message: '请选择参会人员' }]}>
|
||||
<Select mode="multiple" placeholder="选择参会人">
|
||||
<Form.Item label="参会人员" name="attendee_ids">
|
||||
<Select mode="multiple" placeholder="可不选参会人">
|
||||
{users.map((u) => (
|
||||
<Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -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 = () => {
|
|||
</Col>
|
||||
</Row>
|
||||
|
||||
<Form.Item label="参会人员" name="attendee_ids" rules={[{ required: true, message: '请选择参会人员' }]}>
|
||||
<Select mode="multiple" size="large" placeholder="选择参会人">
|
||||
<Form.Item label="参会人员" name="attendee_ids">
|
||||
<Select mode="multiple" size="large" placeholder="可不选参会人">
|
||||
{users.map(u => <Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>)}
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
|
|
|||
|
|
@ -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 = () => {
|
|||
</Col>
|
||||
</Row>
|
||||
|
||||
<Form.Item label="参会人员" name="attendee_ids" rules={[{ required: true, message: '请选择参会人员' }]}>
|
||||
<Select mode="multiple" size="large" placeholder="选择参会人">
|
||||
<Form.Item label="参会人员" name="attendee_ids">
|
||||
<Select mode="multiple" size="large" placeholder="可不选参会人">
|
||||
{users.map(u => <Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>)}
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
|
|
|||
Loading…
Reference in New Issue