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