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