修复进度bug
parent
f19b70f1d0
commit
d2ae4b63c6
|
|
@ -104,7 +104,7 @@ class TranscriptSegment(BaseModel):
|
||||||
class CreateMeetingRequest(BaseModel):
|
class CreateMeetingRequest(BaseModel):
|
||||||
title: str
|
title: str
|
||||||
meeting_time: datetime.datetime
|
meeting_time: datetime.datetime
|
||||||
attendee_ids: List[int]
|
attendee_ids: List[int] = Field(default_factory=list)
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
tags: Optional[str] = None # 逗号分隔
|
tags: Optional[str] = None # 逗号分隔
|
||||||
prompt_id: Optional[int] = None
|
prompt_id: Optional[int] = None
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,9 @@ class _DefaultTimeoutSession(requests.Session):
|
||||||
class AsyncTranscriptionService:
|
class AsyncTranscriptionService:
|
||||||
"""异步转录服务类"""
|
"""异步转录服务类"""
|
||||||
|
|
||||||
|
PREPROCESS_COMPLETED_PROGRESS = 50
|
||||||
|
TRANSCRIPTION_COMPLETED_PROGRESS = 100
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.redis_client = redis.Redis(**REDIS_CONFIG)
|
self.redis_client = redis.Redis(**REDIS_CONFIG)
|
||||||
self.base_url = APP_CONFIG['base_url'].rstrip('/')
|
self.base_url = APP_CONFIG['base_url'].rstrip('/')
|
||||||
|
|
@ -230,7 +233,7 @@ class AsyncTranscriptionService:
|
||||||
'meeting_id': str(meeting_id),
|
'meeting_id': str(meeting_id),
|
||||||
'file_url': file_url,
|
'file_url': file_url,
|
||||||
'status': 'pending',
|
'status': 'pending',
|
||||||
'progress': '0',
|
'progress': str(self.PREPROCESS_COMPLETED_PROGRESS),
|
||||||
'created_at': current_time,
|
'created_at': current_time,
|
||||||
'updated_at': current_time
|
'updated_at': current_time
|
||||||
}
|
}
|
||||||
|
|
@ -528,9 +531,10 @@ class AsyncTranscriptionService:
|
||||||
def _calculate_progress(self, paraformer_status: str) -> int:
|
def _calculate_progress(self, paraformer_status: str) -> int:
|
||||||
"""根据Paraformer状态计算进度"""
|
"""根据Paraformer状态计算进度"""
|
||||||
progress_mapping = {
|
progress_mapping = {
|
||||||
'PENDING': 10,
|
# 预处理完成后,转录任务进入云侧排队/执行阶段,统一展示为 50。
|
||||||
'RUNNING': 50,
|
'PENDING': self.PREPROCESS_COMPLETED_PROGRESS,
|
||||||
'SUCCEEDED': 100,
|
'RUNNING': self.PREPROCESS_COMPLETED_PROGRESS,
|
||||||
|
'SUCCEEDED': self.TRANSCRIPTION_COMPLETED_PROGRESS,
|
||||||
'FAILED': 0
|
'FAILED': 0
|
||||||
}
|
}
|
||||||
return progress_mapping.get(paraformer_status, 0)
|
return progress_mapping.get(paraformer_status, 0)
|
||||||
|
|
@ -547,18 +551,31 @@ class AsyncTranscriptionService:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""
|
"""
|
||||||
UPDATE transcript_tasks
|
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
|
completed_at = NULL, error_message = NULL
|
||||||
WHERE task_id = %s
|
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:
|
else:
|
||||||
insert_task_query = """
|
insert_task_query = """
|
||||||
INSERT INTO transcript_tasks (task_id, paraformer_task_id, meeting_id, status, progress, created_at)
|
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()
|
connection.commit()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,12 @@ class AudioUploadTaskService:
|
||||||
f"applied={preprocess_result.applied}"
|
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
|
handoff_to_audio_service = True
|
||||||
result = handle_audio_upload(
|
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):
|
def update_meeting(meeting_id: int, meeting_request: UpdateMeetingRequest, current_user: dict):
|
||||||
with get_db_connection() as connection:
|
with get_db_connection() as connection:
|
||||||
cursor = connection.cursor(dictionary=True)
|
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()
|
meeting = cursor.fetchone()
|
||||||
if not meeting:
|
if not meeting:
|
||||||
return create_api_response(code="404", message="Meeting not found")
|
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.title,
|
||||||
meeting_request.meeting_time,
|
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.tags,
|
||||||
meeting_request.prompt_id if meeting_request.prompt_id is not None else meeting['prompt_id'],
|
meeting_request.prompt_id if meeting_request.prompt_id is not None else meeting['prompt_id'],
|
||||||
meeting_id,
|
meeting_id,
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@ const MeetingFormDrawer = ({ open, onClose, onSuccess, meetingId = null }) => {
|
||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
<Form.Item label="参会人员" name="attendee_ids" rules={[{ required: true, message: '请选择参会人员' }]}>
|
<Form.Item label="参会人员" name="attendee_ids">
|
||||||
<Select mode="multiple" placeholder="选择参会人">
|
<Select mode="multiple" placeholder="可不选参会人">
|
||||||
{users.map((u) => (
|
{users.map((u) => (
|
||||||
<Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>
|
<Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>
|
||||||
))}
|
))}
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ const CreateMeeting = () => {
|
||||||
const payload = {
|
const payload = {
|
||||||
...values,
|
...values,
|
||||||
meeting_time: values.meeting_time.format('YYYY-MM-DD HH:mm:ss'),
|
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(',') || ''
|
tags: values.tags?.join(',') || ''
|
||||||
};
|
};
|
||||||
const res = await httpService.post(buildApiUrl(API_ENDPOINTS.MEETINGS.CREATE), payload);
|
const res = await httpService.post(buildApiUrl(API_ENDPOINTS.MEETINGS.CREATE), payload);
|
||||||
|
|
@ -162,8 +162,8 @@ const CreateMeeting = () => {
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
<Form.Item label="参会人员" name="attendee_ids" rules={[{ required: true, message: '请选择参会人员' }]}>
|
<Form.Item label="参会人员" name="attendee_ids">
|
||||||
<Select mode="multiple" size="large" placeholder="选择参会人">
|
<Select mode="multiple" size="large" placeholder="可不选参会人">
|
||||||
{users.map(u => <Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>)}
|
{users.map(u => <Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>)}
|
||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ const EditMeeting = () => {
|
||||||
const payload = {
|
const payload = {
|
||||||
...values,
|
...values,
|
||||||
meeting_time: values.meeting_time.format('YYYY-MM-DD HH:mm:ss'),
|
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(',') || ''
|
tags: values.tags?.join(',') || ''
|
||||||
};
|
};
|
||||||
await httpService.put(buildApiUrl(API_ENDPOINTS.MEETINGS.UPDATE(meeting_id)), payload);
|
await httpService.put(buildApiUrl(API_ENDPOINTS.MEETINGS.UPDATE(meeting_id)), payload);
|
||||||
|
|
@ -99,8 +99,8 @@ const EditMeeting = () => {
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
<Form.Item label="参会人员" name="attendee_ids" rules={[{ required: true, message: '请选择参会人员' }]}>
|
<Form.Item label="参会人员" name="attendee_ids">
|
||||||
<Select mode="multiple" size="large" placeholder="选择参会人">
|
<Select mode="multiple" size="large" placeholder="可不选参会人">
|
||||||
{users.map(u => <Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>)}
|
{users.map(u => <Select.Option key={u.user_id} value={u.user_id}>{u.caption}</Select.Option>)}
|
||||||
</Select>
|
</Select>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue