zhaoqingang
2025-02-26 e5e2be29cfc033c976558a4d0b5fa73426818b90
增加系统信息修改
7个文件已修改
5个文件已添加
186 ■■■■■ 已修改文件
app/api/system.py 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/v2/chat.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/config/const.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/config/env_conf/system.yaml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/init_config/init_run_data.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/__init__.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/system.py 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/system.py 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/v2/app_driver/chat_data.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/v2/initialize_data.py 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
main.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/system.py
New file
@@ -0,0 +1,35 @@
# coding:utf-8
from fastapi import APIRouter, Depends, UploadFile, File
from app.api import Response, get_current_user
from app.models.base_model import get_db
from app.models.role_model import RoleData, RoleModel
from app.models.system import SystemData
from app.models.user_model import UserModel
from app.service.system import services_get_system_data, services_update_system_data, service_upload_logo_image
system_router = APIRouter()
@system_router.get("/info", response_model=Response)
async def api_get_system_data(current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
    data = await services_get_system_data(db)
    return Response(code=200, msg="successfully", data=data)
@system_router.put("/info", response_model=Response)
async def api_update_system_data(system: SystemData, u: UserModel = Depends(get_current_user), db=Depends(get_db)):
    data = await services_update_system_data(db, system.title, system.desc, system.logo)
    if not data:
        return Response(code=500, msg="failed", data=data)
    return Response(code=200, msg="successfully", data=data)
@system_router.post("/upload", response_model=Response)
async def api_upload_logo_image(file: UploadFile = File(...)):
    file_name = await service_upload_logo_image(file)
    if not file_name:
        return Response(code=500, msg="failed", data={"logo": ""})
    return Response(code=200, msg="successfully", data={"logo": file_name})
app/api/v2/chat.py
@@ -99,7 +99,7 @@
    data = await service_chat_parameters(db, chatId, current_user.id)
    if not data:
        status_code = http_400
        data = "{}"
        data = json.dumps({"code": http_400})
    return Response(data, media_type="application/json", status_code=status_code)
app/config/const.py
@@ -14,6 +14,9 @@
### --------- file path------------------
ENV_CONF_PATH = "app/config/env_conf"
APP_SERVICE_PATH = "app/service/"
APP_STATIC_PATH = "app/static"
### -----------app register --------------
RAGFLOW = "ragflow_app"
@@ -106,3 +109,7 @@
TMP_DICT = {chat_server: RAGFLOW, workflow_server: DIFY}
###-------------------------------system-------------------------------------------------
SYSTEM_ID = 1
app/config/env_conf/system.yaml
New file
@@ -0,0 +1,3 @@
smart_system:
  title: SmartAI大模型平台
  desc: SmartAI大模型平台
app/init_config/init_run_data.py
@@ -1,6 +1,6 @@
from app.models.base_model import SessionLocal
from app.service.v2.initialize_data import dialog_menu_sync, default_group_sync, default_role_sync, \
    basic_agent_sync, admin_account_sync
    basic_agent_sync, admin_account_sync, sync_rg_api_token
async def sync_default_data():
@@ -12,6 +12,7 @@
        # await app_register_sync(db)  # 注册的应用
        await basic_agent_sync(db)  # 开发的agent
        await admin_account_sync(db)  #
        await sync_rg_api_token(db)  #
    except Exception as e:
        print(e)
app/models/__init__.py
@@ -17,6 +17,7 @@
from .menu_model import *
from .label_model import *
from .v2.session_model import *
from .system import *
# 获取当前时区的时间
app/models/system.py
New file
@@ -0,0 +1,34 @@
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey, UniqueConstraint
from app.models.base_model import Base
class SystemDataModel(Base):
    __tablename__ = 'system_data'
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String(255))
    desc = Column(String(1000))
    created_at = Column(DateTime, default=datetime.now())
    updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
    def to_dict(self):
        return {
            # 'id': self.id,
            'title': self.title,
            'desc': self.desc,
        }
    def __repr__(self):
        return '<Role name:%r description:%r iconCls:%r seq:%r>\n' \
            % (self.NAME, self.DESCRIPTION, self.ICONCLS, self.SEQ)
class SystemData(BaseModel):
    title: str
    desc: str
    logo: str
app/service/system.py
New file
@@ -0,0 +1,54 @@
import os
import shutil
import uuid
from datetime import datetime
import yaml
from fastapi import UploadFile
from Log import logger
from app.api import pwd_context
from app.config.const import SYSTEM_ID, ENV_CONF_PATH, APP_STATIC_PATH
from app.models.system import SystemDataModel
async def services_get_system_data(db):
    system = db.query(SystemDataModel).filter_by(id=SYSTEM_ID).first()
    if not system:
        with open(os.path.join(ENV_CONF_PATH, "system.yaml"), 'r', encoding='utf-8') as file:
            # 加载JSON数据
            config = yaml.safe_load(file)
            system = SystemDataModel(id=SYSTEM_ID, title=config["smart_system"]["title"], desc=config["smart_system"]["desc"])
            db.add(system)
            db.commit()
            db.refresh(system)
    return system.to_dict()
async def services_update_system_data(db, title, desc, logo):
    try:
        shutil.move(os.path.join(APP_STATIC_PATH, logo), os.path.join(APP_STATIC_PATH, "logo.png"))
        system = db.query(SystemDataModel).filter_by(id=SYSTEM_ID).first()
        system.title = title
        system.desc = desc
        system.updated_at = datetime.now()
        db.commit()
        db.refresh(system)
        return system.to_dict()
    except Exception as e:
        logger.error(e)
        return {}
async def service_upload_logo_image(file: UploadFile):
    file_name = str(uuid.uuid4())
    try:
        save_path = os.path.join(APP_STATIC_PATH, file_name)
        # 将上传的文件保存到本地
        with open(save_path, "wb") as buffer:
            shutil.copyfileobj(file.file, buffer)
        file.file.close()
        return file_name
    except Exception as e:
        logger.error(f"保存失败: {str(e)}")
        return ""
app/service/v2/app_driver/chat_data.py
@@ -90,11 +90,11 @@
        # ans = await chat.chat_parameters(url, params, headers)
        # print(ans)
        ping_url = "http://192.168.20.116:11080/v1/system/version"
        ping_url = "http://smartai.com:8294/v1/llm/list"
        ping_url = "http://192.168.20.116:11080/v1/user/info"
        # ping_url = "http://smartai.com:8294/v1/llm/list"
        # ping_url = "http://192.168.20.119:13002/console/api/workspaces"
        user_token = "eyJhbG|ciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjEzNzdiYzctZTViYy00YjhiLTgxYTYtNWZkOTVhODVlMmE4IiwiZXhwIjoxNzM5MjU3Njk1LCJpc3MiOiJTRUxGX0hPU1RFRCIsInN1YiI6IkNvbnNvbGUgQVBJIFBhc3Nwb3J0In0.w7xQrepd1dYR4iPXcbuthIZjdm45bTJFbolOM_SE9aQ"
        user_token = "IjNmZTA4NmM2ZjJjMjExZWY4ZTc2MDI0MmFjMTIwMDA2Ig.Z7yNLg.XooARY7YHv-Zo1qLoXwCuDe8J0k"
        user_token = "IjU4OTM5M2UyZjMyNzExZWZhZmVjMDI0MmFjMTIwMDA2Ig.Z702yg.Pmyy58wg-YBU5t50mHuqvwTDyjc"
        # token = "Bearer {}"
        token = "{}"
        res = await chat.chat_ping(ping_url, {}, await chat.get_chat_headers(token.format(user_token)))
app/service/v2/initialize_data.py
@@ -7,15 +7,18 @@
from Log import logger
from app.config.agent_base_url import RG_APP_TOKEN_LIST, RG_APP_NEW_TOKEN
# from app.api import pwd_context
from app.config.const import DIFY, ENV_CONF_PATH, RAGFLOW, smart_server, chat_server, workflow_server, TMP_DICT
from app.config.const import DIFY, ENV_CONF_PATH, RAGFLOW, smart_server, chat_server, workflow_server, TMP_DICT, \
    rg_api_token
from app.models import MenuCapacityModel, WebMenuModel, GroupModel, RoleModel, DialogModel, UserModel, UserAppModel, \
    cipher_suite, UserTokenModel
    cipher_suite, UserTokenModel, ApiTokenModel
from app.service.auth import UserAppDao
from app.service.bisheng import BishengService
from app.service.difyService import DifyService
from app.service.ragflow import RagflowService
from app.service.service_token import get_new_token
from app.service.v2.app_driver.chat_data import ChatBaseApply
from app.service.v2.app_register import AppRegisterDao
from app.config.config import settings
from app.utils.password_handle import generate_password, password_encrypted, password_decrypted
@@ -319,3 +322,35 @@
    except Exception as e:
        print(e)
        db.rollback()
async def sync_rg_api_token(db):
    token = ""
    try:
        app_token = db.query(ApiTokenModel).filter_by(app_id=rg_api_token).first()
        if app_token:
            print("rg_api_token: 已经存在!")
            return
        user_token = db.query(UserTokenModel).filter(UserTokenModel.id == chat_server).first()
        chat = ChatBaseApply()
        token_list_url = f"{settings.fwr_base_url}{RG_APP_TOKEN_LIST}"
        token_list = await chat.chat_get(token_list_url, {}, await chat.get_chat_headers(user_token.access_token))
        if token_list and token_list.get("code") == 0:
            if len(token_list.get("data", [])) == 0:
                print("rg_api_token: 创建成功!")
                new_token_url = f"{settings.fwr_base_url}{RG_APP_NEW_TOKEN}"
                new_token = await chat.chat_post(new_token_url, {}, await chat.get_chat_headers(user_token.access_token))
                if new_token and new_token.get("code") == 0:
                    token = new_token.get("data", {}).get("token")
            else:
                token = token_list.get("data")[0].get("token")
                print("rg_api_token: 已有token!")
        if token:
            db.add(ApiTokenModel(id=rg_api_token, app_id=rg_api_token, type="platform", token=token))
            db.commit()
            print("rg_api_token: 更新成功!")
    except Exception as e:
        print(e)
        db.rollback()
app/static/logo.png
main.py
@@ -15,6 +15,7 @@
from app.api.label import label_router
from app.api.llm import llm_router
from app.api.organization import dept_router
from app.api.system import system_router
from app.api.v2.chat import chat_router_v2
from app.api.v2.public_api import public_api
from app.api.report import router as report_router
@@ -93,6 +94,7 @@
app.include_router(label_router, prefix='/api/label', tags=["label"])
app.include_router(public_api, prefix='/v1/api', tags=["public_api"])
app.include_router(chat_router_v2, prefix='/api/v1', tags=["chat1"])
app.include_router(system_router, prefix='/api/system', tags=["system"])
app.mount("/static", StaticFiles(directory="app/images"), name="static")
if __name__ == "__main__":