from datetime import datetime from app.models import KnowledgeModel, GroupModel, DialogModel, ConversationModel, group_dialog_table from app.models.user_model import UserModel from Log import logger async def get_dialog_list(db, user_id, keyword, page_size, page_index): user = db.query(UserModel).filter(UserModel.id == user_id).first() if user is None: return {"rows": []} if user.permission == "admin": query = db.query(DialogModel) else: group_list = [i.id for i in user.groups] query = db.query(DialogModel) query = query.filter(DialogModel.tenant_id == user_id) query = query.union( db.query(DialogModel).join( group_dialog_table, DialogModel.id == group_dialog_table.c.dialog_id ).filter( group_dialog_table.c.group_id.in_(group_list) ) ) if keyword: query = query.filter(DialogModel.name.like('%{}%'.format(keyword))) total = query.count() if page_size: query = query.limit(page_size).offset((page_index - 1) * page_size) rows = [] user_id_set = set() for kld in query.all(): user_id_set.add(kld.tenant_id) rows.append(kld.to_json()) print(rows) user_dict = {i.id: i.to_dict() for i in db.query(UserModel).filter(UserModel.id.in_(user_id_set)).all()} for r in rows: r["user"] = user_dict.get(r["user_id"], {}) return {"total": total, "rows": rows} async def update_session_history(db, data: dict, user_id): session_id = data.get("id") if not session_id: logger.error("更新回话记录失败!{}".format(data)) return data["create_date"] = datetime.strptime(data["create_date"], '%a, %d %b %Y %H:%M:%S %Z') data["update_date"] = datetime.strptime(data["update_date"], '%a, %d %b %Y %H:%M:%S %Z') conversation = db.query(ConversationModel).filter(ConversationModel.id == session_id).first() if not conversation: try: data["tenant_id"] = user_id conversation_model = ConversationModel(**data) db.add(conversation_model) db.commit() except Exception as e: logger.error(e) db.rollback() else: try: # data["tenant_id"] = user_id del data["id"] db.query(ConversationModel).filter(ConversationModel.id == session_id).update(data) db.commit() except Exception as e: logger.error(e) db.rollback() async def get_session_history(db, user_id, dialog_id): session_list = db.query(ConversationModel).filter(ConversationModel.tenant_id.__eq__(user_id), ConversationModel.dialog_id.__eq__(dialog_id)).order_by( ConversationModel.update_time.desc()).all() return [i.to_json() for i in session_list]