From e5e2be29cfc033c976558a4d0b5fa73426818b90 Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期三, 26 二月 2025 11:30:48 +0800
Subject: [PATCH] 增加系统信息修改
---
app/models/__init__.py | 1
app/init_config/init_run_data.py | 3
app/api/system.py | 35 ++++++++
app/service/system.py | 54 +++++++++++++
app/static/logo.png | 0
app/config/const.py | 7 +
app/models/system.py | 34 ++++++++
main.py | 2
app/api/v2/chat.py | 2
app/service/v2/initialize_data.py | 39 +++++++++
app/config/env_conf/system.yaml | 3
app/service/v2/app_driver/chat_data.py | 6
12 files changed, 179 insertions(+), 7 deletions(-)
diff --git a/app/api/system.py b/app/api/system.py
new file mode 100644
index 0000000..c9f237b
--- /dev/null
+++ b/app/api/system.py
@@ -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})
diff --git a/app/api/v2/chat.py b/app/api/v2/chat.py
index 79bbe9c..a09ab43 100644
--- a/app/api/v2/chat.py
+++ b/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)
diff --git a/app/config/const.py b/app/config/const.py
index 8a588e7..a5d31c5 100644
--- a/app/config/const.py
+++ b/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
diff --git a/app/config/env_conf/system.yaml b/app/config/env_conf/system.yaml
new file mode 100644
index 0000000..4b2d6da
--- /dev/null
+++ b/app/config/env_conf/system.yaml
@@ -0,0 +1,3 @@
+smart_system:
+ title: SmartAI澶фā鍨嬪钩鍙�
+ desc: SmartAI澶фā鍨嬪钩鍙�
diff --git a/app/init_config/init_run_data.py b/app/init_config/init_run_data.py
index 92d942e..208433f 100644
--- a/app/init_config/init_run_data.py
+++ b/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)
diff --git a/app/models/__init__.py b/app/models/__init__.py
index 9f8a749..2f90c68 100644
--- a/app/models/__init__.py
+++ b/app/models/__init__.py
@@ -17,6 +17,7 @@
from .menu_model import *
from .label_model import *
from .v2.session_model import *
+from .system import *
# 鑾峰彇褰撳墠鏃跺尯鐨勬椂闂�
diff --git a/app/models/system.py b/app/models/system.py
new file mode 100644
index 0000000..28dca04
--- /dev/null
+++ b/app/models/system.py
@@ -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
diff --git a/app/service/system.py b/app/service/system.py
new file mode 100644
index 0000000..23309f9
--- /dev/null
+++ b/app/service/system.py
@@ -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 ""
diff --git a/app/service/v2/app_driver/chat_data.py b/app/service/v2/app_driver/chat_data.py
index 56c1785..d642748 100644
--- a/app/service/v2/app_driver/chat_data.py
+++ b/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)))
diff --git a/app/service/v2/initialize_data.py b/app/service/v2/initialize_data.py
index d9e643b..1f05cab 100644
--- a/app/service/v2/initialize_data.py
+++ b/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
@@ -318,4 +321,36 @@
# await user_app_dao.update_and_insert_data(v.get("name"), user_model.encrypted_password(v.get("pwd")), v.get("email"), u_id, str(v.get("id")), k)
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()
\ No newline at end of file
diff --git a/app/static/logo.png b/app/static/logo.png
new file mode 100644
index 0000000..ba66192
--- /dev/null
+++ b/app/static/logo.png
Binary files differ
diff --git a/main.py b/main.py
index 339fb25..20cd8fe 100644
--- a/main.py
+++ b/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__":
--
Gitblit v1.8.0