You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					65 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					65 lines
				
				2.5 KiB
			| 
								 
											10 months ago
										 
									 | 
							
								from sqlalchemy import desc, delete, func, select, update
							 | 
						||
| 
								 | 
							
								from sqlalchemy.ext.asyncio import AsyncSession
							 | 
						||
| 
								 | 
							
								from module_admin.entity.do.aichat_do import AiChatHistory
							 | 
						||
| 
								 | 
							
								from module_admin.entity.do.aichat_do import AiChatSession
							 | 
						||
| 
								 | 
							
								from module_admin.entity.vo.aichat_vo import AiChatModel
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class AiChatDao:
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    菜单管理模块数据库操作层
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def get_ai_session_list(cls, db: AsyncSession, sessionId: str, user_id: int):
							 | 
						||
| 
								 | 
							
								        session_list = (
							 | 
						||
| 
								 | 
							
								            await db.execute(
							 | 
						||
| 
								 | 
							
								                select(AiChatSession).where(AiChatSession.user == user_id, AiChatSession.sessionId != sessionId)
							 | 
						||
| 
								 | 
							
								                .order_by(desc(AiChatSession.time)).limit(20)
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        ).scalars().all()
							 | 
						||
| 
								 | 
							
								        return session_list
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def get_ai_chat_list(cls, db: AsyncSession, sessionId: str, user_id: int):
							 | 
						||
| 
								 | 
							
								        chat_list = (
							 | 
						||
| 
								 | 
							
								            await db.execute(
							 | 
						||
| 
								 | 
							
								                select(AiChatHistory).where(AiChatHistory.user == user_id, AiChatHistory.sessionId == sessionId)
							 | 
						||
| 
								 | 
							
								                .order_by(AiChatHistory.time)
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        ).scalars().all()
							 | 
						||
| 
								 | 
							
								        return chat_list
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def get_ai_chat_by_id(cls, sessionId: str, db: AsyncSession, user_id: int):
							 | 
						||
| 
								 | 
							
								        chat_list = (await db.execute(select(AiChatSession)
							 | 
						||
| 
								 | 
							
								                                      .where(AiChatSession.user == user_id,
							 | 
						||
| 
								 | 
							
								                                             AiChatSession.sessionId == sessionId))).scalars().first()
							 | 
						||
| 
								 | 
							
								        return chat_list
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def add_ai_chat_session(cls, sessionId: str, sessionName: str, time: str, db: AsyncSession, user_id: int):
							 | 
						||
| 
								 | 
							
								        chat_session = AiChatSession()
							 | 
						||
| 
								 | 
							
								        chat_session.sessionId = sessionId
							 | 
						||
| 
								 | 
							
								        chat_session.sessionName = sessionName
							 | 
						||
| 
								 | 
							
								        chat_session.time = time
							 | 
						||
| 
								 | 
							
								        chat_session.user = user_id
							 | 
						||
| 
								 | 
							
								        db.add(chat_session)
							 | 
						||
| 
								 | 
							
								        db.flush()
							 | 
						||
| 
								 | 
							
								        return chat_session
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def add_ai_chat_history(cls, chat: AiChatHistory, db: AsyncSession):
							 | 
						||
| 
								 | 
							
								        db.add(chat)
							 | 
						||
| 
								 | 
							
								        db.flush()
							 | 
						||
| 
								 | 
							
								        return chat
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def delete_chat_session(cls, db: AsyncSession, sessionId: str, user_id: int):
							 | 
						||
| 
								 | 
							
								        await db.execute(delete(AiChatHistory).where(AiChatHistory.sessionId == sessionId))
							 | 
						||
| 
								 | 
							
								        await db.execute(delete(AiChatSession).where(AiChatSession.sessionId == sessionId))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    async def update_ai_chat_history(cls, update_chat: AiChatModel, db: AsyncSession):
							 | 
						||
| 
								 | 
							
								        await db.execute(update(AiChatHistory), [dict(update_chat)])
							 |