Преглед на файлове

fix 修复错误页面无法访问的问题

yue преди 1 седмица
родител
ревизия
af027fe6fc

+ 5 - 18
SourceCode/IntelligentRailwayCosting/app/config.yml

@@ -19,44 +19,31 @@ db:
   # 在docker容器中运行,将配置改为  driver: '{FreeTDS}'
   #
   sqlserver_mian_2024:
-    driver: '{ODBC Driver 17 for SQL Server}'
-    server: 192.168.0.81,1433
+    server: 192.168.0.81:1433
     username: iwb
     password: 123456Qsc
     database: Iwb_RecoData2024
     trusted_connection: false
   sqlserver_mian_2020:
-    driver: '{ODBC Driver 17 for SQL Server}'
-    server: 192.168.0.81,1433
+    server: 192.168.0.81:1433
     username: iwb
     password: 123456Qsc
     database: Iwb_RecoData2020
     trusted_connection: false
   Iwb_RailwayCosting:
-    driver: '{ODBC Driver 17 for SQL Server}'
-    server: 192.168.0.81,1433
+    server: 192.168.0.81:1433
     username: iwb
     password: 123456Qsc
     database: iwb_railway_costing_v1
     trusted_connection: false
   Iwb_RecoData2024:
-    #    driver: '{ODBC Driver 17 for SQL Server}'
-    driver: '{SQL Server}'
-    server: 192.168.0.81,1433
+    server: 192.168.0.81:1433
     username: iwb
     password: 123456Qsc
-    #    server: shvber.com,50535
-    #    username: sa
-    #    password: Iwb2017
     database: Iwb_RecoData2024
     trusted_connection: false
   Iwb_RecoData2020:
-    #    driver: '{ODBC Driver 17 for SQL Server}'
-    driver: '{SQL Server}'
-    # server: shvber.com,50535
-    # username: sa
-    # password: Iwb2017
-    server: 192.168.0.81,1433
+    server: 192.168.0.81:1433
     username: iwb
     password: 123456Qsc
     database: Iwb_RecoData2020

+ 31 - 31
SourceCode/IntelligentRailwayCosting/app/core/dtos/excel_parse.py

@@ -52,17 +52,17 @@ class ExcelParseFileDto:
 
 class ExcelParseDto:
     def __init__(
-            self,
-            task_id: int,
-            version: str,
-            project_id: str,
-            project_name: str,
-            project_stage: str,
-            selected_zgs_id: int,
-            zgs_list: list[ExcelParseZgsDto],
-            hierarchy: list[ExcelParseItemDto],
-            components: list[ExcelParseItemDto],
-            files: list[ExcelParseFileDto],
+        self,
+        task_id: int,
+        version: str,
+        project_id: str,
+        project_name: str,
+        project_stage: str,
+        selected_zgs_id: int,
+        zgs_list: list[ExcelParseZgsDto],
+        hierarchy: list[ExcelParseItemDto],
+        components: list[ExcelParseItemDto],
+        files: list[ExcelParseFileDto],
     ):
         self.task_id = task_id
         self.version = version
@@ -108,21 +108,21 @@ class ExcelParseResultDataDto:
     #     "ex_amount": excel中给出的数量, // number
     # }
     def __init__(
-            self,
-            zgs_id: int,  # 总概算id
-            zgs_code: str,  # 总概算编号
-            item_id: int,  # 条⽬序号
-            item_code: str,  # 条⽬编码
-            entry_name: str,  # ⼯程或费⽤项⽬名称,来⾃于定额表,
-            dinge_code: str,  # 定额编号,
-            units: str,  # 单位,
-            amount: float,  # 数量,
-            target_id: int,  # ⽤户数据库中条⽬的id,-1表示没有,
-            ex_file_id: str,  # excel⽂件id,
-            ex_cell: str,  # 数量单元格位置,例如 "C17",
-            ex_row: str,  # 该⾏内容,由逗号连接多个单元格得到,
-            ex_unit: str,  # excel中给出的单位,
-            ex_amount: float,  # excel中给出的数量,
+        self,
+        zgs_id: int,  # 总概算id
+        zgs_code: str,  # 总概算编号
+        item_id: int,  # 条⽬序号
+        item_code: str,  # 条⽬编码
+        entry_name: str,  # ⼯程或费⽤项⽬名称,来⾃于定额表,
+        dinge_code: str,  # 定额编号,
+        units: str,  # 单位,
+        amount: float,  # 数量,
+        target_id: int,  # ⽤户数据库中条⽬的id,-1表示没有,
+        ex_file_id: str,  # excel⽂件id,
+        ex_cell: str,  # 数量单元格位置,例如 "C17",
+        ex_row: str,  # 该⾏内容,由逗号连接多个单元格得到,
+        ex_unit: str,  # excel中给出的单位,
+        ex_amount: float,  # excel中给出的数量,
     ):
         self.zgs_id = zgs_id
         self.zgs_code = zgs_code
@@ -188,11 +188,11 @@ class ExcelParseResultDataDto:
 
 class ExcelParseResultDto:
     def __init__(
-            self,
-            task_id: int,
-            result: int = -1,
-            reason: str = "",
-            data: list[ExcelParseResultDataDto] = None,
+        self,
+        task_id: int,
+        result: int = -1,
+        reason: str = "",
+        data: list[ExcelParseResultDataDto] = None,
     ):
         self.task_id = task_id
         self.result = result  # -1-失败;0-运行中;1-成功

+ 16 - 5
SourceCode/IntelligentRailwayCosting/app/routes/auth.py

@@ -1,6 +1,7 @@
 from flask import Blueprint, request, jsonify, session
 from flask_login import LoginManager, login_user, logout_user
 
+import tools.utils as utils
 from core.log import LogRecordHelper
 from core.enum import OperationType, OperationModule
 from core.api import ResponseBase
@@ -14,14 +15,24 @@ login_manager = LoginManager()
 login_manager.login_view = "auth_api.login"
 login_manager.login_message = "请先登录"
 
+logger = utils.get_logger()
+
 
 @login_manager.user_loader
 def load_user(user_id):
-    user = user_service.get_user_by_id(user_id)
-    if user:
-        current_user = UserSession.get_current_user()
-        return current_user
-    return None
+    try:
+        user = user_service.get_user_by_id(user_id)
+        if user:
+            return CurrentUser(
+                user_id=user.id,
+                username=user.username,
+                item_range=user.item_range,
+                specialty=user.specialty,
+            )
+    except Exception as e:
+        logger.error(f"获取当前用户失败: {e}")
+    current_user = UserSession.get_current_user()
+    return current_user
 
 
 @auth_api.route("/login", methods=["POST"])

+ 16 - 6
SourceCode/IntelligentRailwayCosting/app/views/__init__.py

@@ -2,19 +2,29 @@ from views.login import auth_bp
 from views.project import project_bp
 from views.log import log_bp
 from views.error import error_bp
+import tools.utils as utils
 
 
 def register_views(app):
     # 为特定蓝图注册错误处理器
+    logger = utils.get_logger()
+
     def handle_blueprint_exception(e):
-        import traceback
         from flask import render_template
 
-        error_message = str(e)
-        traceback.print_exc()  # 打印异常堆栈信息到控制台
-        return render_template(
-            "base/error.html", page_active="project", error_message=error_message
-        )
+        try:
+            error_message = str(e)
+            # 记录错误到日志
+            logger.error(f"页面异常: {error_message}")
+            return render_template(
+                "base/error.html",
+                page_active="project",
+                error_message=error_message,
+            )
+        except Exception as render_error:
+            # 如果渲染模板时发生错误,记录错误并返回最基本的错误响应
+            logger.error(f"渲染页面异常: {str(render_error)}")
+            return "系统错误:请联系管理员", 500
 
     # 只为主要蓝图注册错误处理
     for bp in [auth_bp, project_bp, log_bp, error_bp]:

+ 22 - 4
SourceCode/IntelligentRailwayCosting/app/views/project.py

@@ -15,13 +15,26 @@ project_task_store = ProjectTaskStore()
 @project_bp.route("/", methods=["GET"])
 @Permission.authorize
 def index():
-    return render_template("project/index.html", page_active="project")
+    try:
+        project = project_store.get("")
+        return render_template(
+            "project/index.html", page_active="project", project=project
+        )
+    except Exception as e:
+        msg = f"访问项目首页失败: {str(e)}"
+        logger.error(msg)
+        raise Exception(msg)
 
 
 @project_bp.route("/budget_info/<project_id>", methods=["GET"])
 @Permission.authorize
 def budget_info(project_id: str):
-    project = project_store.get(project_id)
+    try:
+        project = project_store.get(project_id)
+    except Exception as e:
+        msg = f"访问概算页面失败: {str(e)}"
+        logger.error(msg)
+        raise Exception(msg)
     try:
         budgets = budget_store.get_budget_info(project_id)
     except Exception as e:
@@ -38,8 +51,13 @@ def budget_info(project_id: str):
 @project_bp.route("/quota_info/<project_id>/<int:task_id>", methods=["GET"])
 @Permission.authorize
 def quota_info(project_id: str, task_id: int):
-    project = project_store.get(project_id)
-    task = project_task_store.get_task_dto(task_id)
+    try:
+        project = project_store.get(project_id)
+        task = project_task_store.get_task_dto(task_id)
+    except Exception as e:
+        msg = f"访问定额输入页面失败: {str(e)}"
+        logger.error(msg)
+        raise Exception(msg)
     try:
         budgets = budget_store.get_budget_info(project_id)
     except Exception as e: