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