zhaoqingang
2024-12-10 c7d5be908e24ee7677140c1cf983836f2e413cf0
会话菜单增加
13个文件已修改
2个文件已添加
162 ■■■■ 已修改文件
alembic/versions/2f304d60542b_zhishiku_type_add.py 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
alembic/versions/d8f96e825884_role_type_add.py 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/dialog.py 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/group.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/knowledge.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/role.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/dialog_model.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/knowledge_model.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/role_model.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/auth.py 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/dialog.py 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/knowledge.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/v2/initialize_data.py 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/task/fetch_agent.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
alembic/versions/2f304d60542b_zhishiku_type_add.py
New file
@@ -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 ###
alembic/versions/d8f96e825884_role_type_add.py
New file
@@ -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 ###
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))
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={})
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)
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={})
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,
app/models/knowledge_model.py
@@ -21,6 +21,8 @@
    tenant_id = Column(String(32))              # 创建人id
    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)
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',
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
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):
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()]}
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("未初始化")
        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)
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)
    await default_group_sync(db)
    await default_role_sync(db)
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()
    # 在应用启动时同步代理
    sync_agents()
    await sync_default_group()
    await sync_default_data()
    await sync_web_menu()
    yield
    # 在应用关闭时执行清理操作(如果需要)