New file |
| | |
| | | """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 ### |
New file |
| | |
| | | """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 ### |
| | |
| | | |
| | | |
| | | @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)) |
| | |
| | | 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, |
| | |
| | | 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={}) |
| | |
| | | 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) |
| | |
| | | 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={}) |
| | |
| | | '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, |
| | |
| | | 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)) # 知识库平台 |
| | | |
| | | |
| | |
| | | '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) |
| | |
| | | dataScope = Column(Integer) |
| | | status = Column(String(10), default="0") |
| | | creator = Column(Integer) |
| | | role_type = Column(Integer, default=1) |
| | | |
| | | # 包含资源 |
| | | resources = relationship('ResourceModel', |
| | |
| | | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | # db.roolback() |
| | | if user_id: |
| | | db.query(UserModel).filter(UserModel.id == user_id).delete() |
| | | db.commit |
| | | return False |
| | | return True |
| | | |
| | |
| | | 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": []} |
| | |
| | | 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): |
| | |
| | | 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": []} |
| | |
| | | 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, |
| | |
| | | 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()]} |
| | |
| | | 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): |
| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | 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) |
| | | |
| | |
| | | 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 事件处理程序 |
| | |
| | | initialize_agents() |
| | | # 在应用启动时同步代理 |
| | | sync_agents() |
| | | await sync_default_group() |
| | | await sync_default_data() |
| | | await sync_web_menu() |
| | | yield |
| | | # 在应用关闭时执行清理操作(如果需要) |