From c7d5be908e24ee7677140c1cf983836f2e413cf0 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期二, 10 十二月 2024 18:26:20 +0800 Subject: [PATCH] 会话菜单增加 --- app/api/role.py | 2 app/service/knowledge.py | 12 ++- app/api/group.py | 4 + app/service/auth.py | 5 + app/models/role_model.py | 1 alembic/versions/d8f96e825884_role_type_add.py | 30 ++++++++++ app/api/knowledge.py | 3 app/service/dialog.py | 19 +++++ app/models/knowledge_model.py | 7 + app/task/fetch_agent.py | 8 +- app/api/dialog.py | 9 ++ main.py | 4 alembic/versions/2f304d60542b_zhishiku_type_add.py | 32 ++++++++++ app/models/dialog_model.py | 2 app/service/v2/initialize_data.py | 24 +++++++ 15 files changed, 141 insertions(+), 21 deletions(-) diff --git a/alembic/versions/2f304d60542b_zhishiku_type_add.py b/alembic/versions/2f304d60542b_zhishiku_type_add.py new file mode 100644 index 0000000..dc82894 --- /dev/null +++ b/alembic/versions/2f304d60542b_zhishiku_type_add.py @@ -0,0 +1,32 @@ +"""ZHISHIKU type add + +Revision ID: 2f304d60542b +Revises: d8f96e825884 +Create Date: 2024-12-10 18:04:36.301693 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '2f304d60542b' +down_revision: Union[str, None] = 'd8f96e825884' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('knowledgebase', sa.Column('documents', sa.Integer(), nullable=True)) + op.add_column('knowledgebase', sa.Column('icon', sa.String(length=128), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('knowledgebase', 'icon') + op.drop_column('knowledgebase', 'documents') + # ### end Alembic commands ### diff --git a/alembic/versions/d8f96e825884_role_type_add.py b/alembic/versions/d8f96e825884_role_type_add.py new file mode 100644 index 0000000..948594c --- /dev/null +++ b/alembic/versions/d8f96e825884_role_type_add.py @@ -0,0 +1,30 @@ +"""role type add + +Revision ID: d8f96e825884 +Revises: f49ae5b5f2c8 +Create Date: 2024-12-10 17:03:38.366156 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'd8f96e825884' +down_revision: Union[str, None] = 'f49ae5b5f2c8' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('role', sa.Column('role_type', sa.Integer(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('role', 'role_type') + # ### end Alembic commands ### diff --git a/app/api/dialog.py b/app/api/dialog.py index c11b4fd..e50cfd3 100644 --- a/app/api/dialog.py +++ b/app/api/dialog.py @@ -11,6 +11,11 @@ @dialog_router.get("/list", response_model=Response) -async def dialog_list(current_user: UserModel = Depends(get_current_user), +async def dialog_list(current: int, + pageSize: int, + keyword: str = "", + current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): - return Response(code=200, msg="", data=await get_dialog_list(db, current_user.id)) + if current and not pageSize: + return ResponseList(code=400, msg="缂哄皯鍙傛暟") + return Response(code=200, msg="", data=await get_dialog_list(db, current_user.id, keyword, pageSize, current)) diff --git a/app/api/group.py b/app/api/group.py index 51c607c..5498eb1 100644 --- a/app/api/group.py +++ b/app/api/group.py @@ -36,7 +36,7 @@ if not group.group_name: return Response(code=400, msg="The group_name cannot be empty!") db_group = db.query(GroupModel).filter(GroupModel.group_name == group.group_name).first() - if db_group: + if db_group and db_group.id != group.id: return Response(code=200, msg="group_name already created") is_edit = await edit_group_data(db, group.id, {"group_name": group.group_name, "group_description": group.group_description, @@ -65,6 +65,8 @@ db_group = db.query(GroupModel).filter(GroupModel.id == groupId).first() if not db_group: return Response(code=200, msg="group does not exist") + if db_group.group_type ==2: + return Response(code=400, msg="榛樿缁勬棤娉曞垹闄わ紒") is_edit = await delete_group_data(db, groupId) if not is_edit: return Response(code=200, msg="group delete failure", data={}) diff --git a/app/api/knowledge.py b/app/api/knowledge.py index d7edcc6..32a12f0 100644 --- a/app/api/knowledge.py +++ b/app/api/knowledge.py @@ -13,10 +13,11 @@ async def knowledge_list( current: int, pageSize: int, + keyword: str="", current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): if current and not pageSize: return ResponseList(code=400, msg="缂哄皯鍙傛暟") - getknowledgelist = await get_knowledge_list(db, current_user.id, pageSize, current) + getknowledgelist = await get_knowledge_list(db, current_user.id, keyword, pageSize, current) return Response(code=200, msg="", data=getknowledgelist) diff --git a/app/api/role.py b/app/api/role.py index af065f2..e32764c 100644 --- a/app/api/role.py +++ b/app/api/role.py @@ -34,6 +34,8 @@ db_role = db.query(RoleModel).filter(RoleModel.id == role_id).first() if not db_role: return Response(code=200, msg="role does not exist") + if db_role.role_type ==2: + return Response(code=400, msg="榛樿瑙掕壊涓嶅厑璁稿垹闄�!") is_edit = await delete_role_data(db, role_id) if not is_edit: return Response(code=500, msg="role delete failure", data={}) diff --git a/app/models/dialog_model.py b/app/models/dialog_model.py index 975e9d4..de1e2b5 100644 --- a/app/models/dialog_model.py +++ b/app/models/dialog_model.py @@ -28,7 +28,7 @@ 'id': self.id, 'create_date': self.create_date, 'update_date': self.update_date, - 'tenant_id': self.tenant_id, + 'user_id': self.tenant_id, 'name': self.name, 'description': self.description, 'icon': self.icon, diff --git a/app/models/knowledge_model.py b/app/models/knowledge_model.py index 1990e6e..487e91d 100644 --- a/app/models/knowledge_model.py +++ b/app/models/knowledge_model.py @@ -21,6 +21,8 @@ tenant_id = Column(String(32)) # 鍒涘缓浜篿d description = Column(Text) # 璇存槑 status = Column(String(1)) # 鐘舵�� + documents = Column(Integer, default=0) # 鏂囨。 + icon = Column(String(128)) # 鏂囨。 # kld_type = Column(String(1)) # 鐭ヨ瘑搴撳钩鍙� @@ -34,10 +36,11 @@ 'create_time': self.create_date, 'update_time': self.update_date, 'avatar': self.avatar, - 'tenant_id': self.tenant_id, + 'user_id': self.tenant_id, 'description': self.description, 'status': self.status, - # 'kld_type': self.kld_type + 'documents': self.documents, + 'icon': self.icon } def __repr__(self): return '<Knowledge name:%r url:%r>\n' % (self.name, self.id) diff --git a/app/models/role_model.py b/app/models/role_model.py index 520bd86..74d79dd 100644 --- a/app/models/role_model.py +++ b/app/models/role_model.py @@ -27,6 +27,7 @@ dataScope = Column(Integer) status = Column(String(10), default="0") creator = Column(Integer) + role_type = Column(Integer, default=1) # 鍖呭惈璧勬簮 resources = relationship('ResourceModel', diff --git a/app/service/auth.py b/app/service/auth.py index d0436f8..46c42dd 100644 --- a/app/service/auth.py +++ b/app/service/auth.py @@ -9,6 +9,7 @@ from Log import logger from app.config.config import settings +from app.models import RoleModel, GroupModel from app.models.user_model import UserModel, UserAppModel SECRET_KEY = settings.secret_key @@ -71,7 +72,8 @@ db_user = UserModel(username=username, hashed_password=hashed_password, email=email) pwd = db_user.encrypted_password(password) db_user.password = pwd - db.add(db_user) + db_user.roles = [db.query(RoleModel).filter(RoleModel.role_type == 2).first()] + db_user.groups = [db.query(GroupModel).filter(GroupModel.group_type == 2).first()] db.add(db_user) db.commit() db.refresh(db_user) @@ -84,6 +86,7 @@ # db.roolback() if user_id: db.query(UserModel).filter(UserModel.id == user_id).delete() + db.commit return False return True diff --git a/app/service/dialog.py b/app/service/dialog.py index 8e1d265..d78fbbe 100644 --- a/app/service/dialog.py +++ b/app/service/dialog.py @@ -5,7 +5,7 @@ from Log import logger -async def get_dialog_list(db, user_id): +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": []} @@ -23,7 +23,22 @@ group_dialog_table.c.group_id.in_(group_list) ) ) - return {"rows": [kld.to_json() for kld in query.all()]} + 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): diff --git a/app/service/knowledge.py b/app/service/knowledge.py index 043db0f..91022c3 100644 --- a/app/service/knowledge.py +++ b/app/service/knowledge.py @@ -3,7 +3,7 @@ from Log import logger -async def get_knowledge_list(db, user_id, page_size, page_index): +async def get_knowledge_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": []} @@ -13,6 +13,7 @@ group_list = [i.id for i in user.groups] query = db.query(KnowledgeModel) query = query.filter(KnowledgeModel.tenant_id == user_id) + query = query.union( db.query(KnowledgeModel).join( group_knowledge_table, @@ -21,6 +22,9 @@ group_knowledge_table.c.group_id.in_(group_list) ) ) - if page_size: - query = query.limit(page_size).offset((page_index - 1) * page_size) - return {"rows": [kld.to_json() for kld in query.all()]} + if keyword: + query = query.filter(KnowledgeModel.name.like('%{}%'.format(keyword))) + total = query.count() + if page_size: + query = query.limit(page_size).offset((page_index - 1) * page_size) + return {"total": total, "rows": [kld.to_json() for kld in query.all()]} diff --git a/app/service/v2/initialize_data.py b/app/service/v2/initialize_data.py index bf05dcf..4929401 100644 --- a/app/service/v2/initialize_data.py +++ b/app/service/v2/initialize_data.py @@ -1,7 +1,7 @@ import json from Log import logger -from app.models import MenuCapacityModel, WebMenuModel, GroupModel +from app.models import MenuCapacityModel, WebMenuModel, GroupModel, RoleModel async def dialog_menu_sync(db): @@ -33,4 +33,24 @@ async def default_group_sync(db): group = db.query(GroupModel).filter_by(group_type=2).first() if not group: - logger.error("鏈垵濮嬪寲") \ No newline at end of file + logger.error("鏈垵濮嬮粯璁ょ粍锛� 寮�濮嬪垵濮嬪寲锛�") + + try: + group = GroupModel(group_name="榛樿鐢ㄦ埛缁�", group_description="榛樿缁�", group_type=2) + db.add(group) + db.commit() + except Exception as e: + logger.error(e) + + +async def default_role_sync(db): + role = db.query(RoleModel).filter_by(role_type=2).first() + if not role: + logger.error("鏈垵濮嬮粯璁よ鑹诧紝 寮�濮嬪垵濮嬪寲锛�") + + try: + group = RoleModel(id="morenjuese1234567890", name="榛樿瑙掕壊", description="榛樿瑙掕壊", role_type=2) + db.add(group) + db.commit() + except Exception as e: + logger.error(e) \ No newline at end of file diff --git a/app/task/fetch_agent.py b/app/task/fetch_agent.py index 42aa3e0..0f4fe22 100644 --- a/app/task/fetch_agent.py +++ b/app/task/fetch_agent.py @@ -8,7 +8,7 @@ from app.config.config import settings from app.models.agent_model import AgentModel from app.models.base_model import SessionLocal, Base -from app.service.v2.initialize_data import dialog_menu_sync +from app.service.v2.initialize_data import dialog_menu_sync, default_group_sync, default_role_sync # 鍒涘缓鏁版嵁搴撳紩鎿庡拰浼氳瘽宸ュ巶 engine_bisheng = create_engine(settings.sgb_db_url) @@ -156,6 +156,8 @@ await dialog_menu_sync(db) -async def sync_default_group(): +async def sync_default_data(): db = SessionLocal() - await dialog_menu_sync(db) \ No newline at end of file + await default_group_sync(db) + await default_role_sync(db) + diff --git a/main.py b/main.py index f67d717..9c00b97 100644 --- a/main.py +++ b/main.py @@ -21,7 +21,7 @@ from app.api.user import user_router from app.api.group import group_router from app.api.role import role_router -from app.task.fetch_agent import sync_agents, initialize_agents, sync_web_menu +from app.task.fetch_agent import sync_agents, initialize_agents, sync_web_menu, sync_default_data # 浣跨敤 Lifespan 浜嬩欢澶勭悊绋嬪簭 @@ -31,7 +31,7 @@ initialize_agents() # 鍦ㄥ簲鐢ㄥ惎鍔ㄦ椂鍚屾浠g悊 sync_agents() - await sync_default_group() + await sync_default_data() await sync_web_menu() yield # 鍦ㄥ簲鐢ㄥ叧闂椂鎵ц娓呯悊鎿嶄綔锛堝鏋滈渶瑕侊級 -- Gitblit v1.8.0