| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- from io import BytesIO
- from fastapi import APIRouter, HTTPException
- from starlette.responses import StreamingResponse
- from app.apis.base import Response
- from app.models.ai_meeting_minutes import AIMeetingMinutesRecord, AIMeetingConversation, AIMeetingConversationModel, \
- AIMeetingMinutesRecordModel, AIMeetingSpeecher
- from app.services.ai_meeting_minutes import AIMeetingMinutesRecordService,AIMeetingConversationService
- from app.models.common import Page
- from app.utils.common import generate_word_document
- router = APIRouter()
- @router.get("/ai_conversation/{conversation_id}")
- async def get_ai_meeting_conversation(conversation_id: str):
- return await AIMeetingConversationService.get_ai_meeting_conversation(conversation_id)
- @router.post("/ai_conversation/{meeting_id}/list")
- async def list_ai_meeting_conversations(meeting_id:str, page: Page):
- return await AIMeetingConversationService.list_ai_meeting_conversations(meeting_id, page)
- @router.post("/ai_conversation/{meeting_id}")
- async def create_ai_meeting_conversation(meeting_id: str, ai_meeting_conversation: AIMeetingConversationModel):
- ai_meeting_conversation.meeting_id = meeting_id
- ai_meeting_conversation = ai_meeting_conversation.get_create()
- res_ai_meeting_conversation = await AIMeetingConversationService.create_ai_meeting_conversation(ai_meeting_conversation)
- return {"id": res_ai_meeting_conversation.id}
- @router.put("/ai_conversation/{meeting_id}")
- async def update_ai_meeting_conversation(meeting_id: int, ai_meeting_conversation: AIMeetingConversationModel):
- ai_meeting_conversation.id = meeting_id
- await AIMeetingConversationService.update_ai_meeting_conversation(ai_meeting_conversation)
- return {"id": ai_meeting_conversation.id}
- @router.post("/ai_minutes/{meeting_id}/list", response_model=Response)
- async def list_ai_meeting_minutes_records(meeting_id: str, page: Page):
- page.page_size = 1000
- data_list = await AIMeetingMinutesRecordService.list_ai_meeting_minutes_records(meeting_id, page)
- return Response(code=200, msg="success", data={"total": 0,
- "rows": [i.to_dict() for i in data_list]})
- @router.post("/ai_minutes/conversation", response_model=Response)
- async def ai_meeting_minutes_conversation(minutes_record: AIMeetingMinutesRecordModel):
- data = {}
- status_code = 200
- msg = "success"
- await AIMeetingMinutesRecordService.create_ai_meeting_minutes_record(
- AIMeetingMinutesRecordModel(meeting_id=minutes_record.meeting_id, content=minutes_record.message,
- speecher=AIMeetingSpeecher.USER))
- new_minutes_record = await AIMeetingMinutesRecordService.edit_meeting_summary(minutes_record.get_conversation())
- if new_minutes_record:
- print(new_minutes_record)
- minutes = await AIMeetingMinutesRecordService.create_ai_meeting_minutes_record(AIMeetingMinutesRecordModel(meeting_id=minutes_record.meeting_id, content=new_minutes_record.get("edited_summary"), speecher=AIMeetingSpeecher.AI))
- data = minutes.to_dict()
- else:
- status_code= 400
- msg = "会议纪要信息异常!"
- return Response(code=status_code, msg=msg, data=data)
- @router.post("/ai_minutes/regenerate", response_model=Response)
- async def ai_meeting_minutes_regenerate(minutes_record: AIMeetingMinutesRecordModel):
- data = {}
- status_code = 200
- msg = "success"
- # await AIMeetingMinutesRecordService.update_ai_meeting_minutes(minutes_record.get_update())
- new_minutes_record = await AIMeetingMinutesRecordService.edit_meeting_summary(minutes_record.get_regenerate())
- if new_minutes_record:
- print(new_minutes_record)
- minutes = await AIMeetingMinutesRecordService.update_ai_meeting_minutes(AIMeetingMinutesRecordModel(id=minutes_record.id, content=new_minutes_record.get("edited_summary")))
- data = minutes.to_dict()
- else:
- status_code= 400
- msg = "会议纪要信息异常!"
- return Response(code=status_code, msg=msg, data=data)
- @router.get("/ai_minutes/{meeting_id}/download", response_model=Response)
- async def ai_meeting_minutes_generate_docx(meeting_id: str):
- data_list = await AIMeetingMinutesRecordService.ai_meeting_minutes_new_record(meeting_id, Page(page_size=1))
- if data_list:
- # 创建 Word 文档
- doc = await generate_word_document(data_list[0].content)
- # 保存到内存缓冲区
- buffer = BytesIO()
- doc.save(buffer)
- buffer.seek(0)
- # 返回文件流
- return StreamingResponse(buffer,
- media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- headers={"Content-Disposition": f"attachment; filename={data_list[0].id}.docx"})
- raise HTTPException(status_code=400, detail="Failed to generate Word document")
|