YueYunyun před 1 měsícem
rodič
revize
5e00f53417

+ 13 - 0
SourceCode/IntelligentRailwayCosting/.script/cmd/Build_App.run.xml

@@ -0,0 +1,13 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Build_App" type="docker-deploy" factoryName="dockerfile" server-name="104">
+    <deployment type="dockerfile">
+      <settings>
+        <option name="imageTag" value="railway_costing-app:1.0.0" />
+        <option name="buildOnly" value="true" />
+        <option name="contextFolderPath" value="." />
+        <option name="sourceFilePath" value="docker/Dockerfile" />
+      </settings>
+    </deployment>
+    <method v="2" />
+  </configuration>
+</component>

+ 12 - 0
SourceCode/IntelligentRailwayCosting/.script/cmd/Run_App.run.xml

@@ -0,0 +1,12 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Run_App" type="docker-deploy" factoryName="docker-compose.yml" server-name="104">
+    <deployment type="docker-compose.yml">
+      <settings>
+        <option name="composeProjectName" value="tielu_dm" />
+        <option name="envFilePath" value="" />
+        <option name="sourceFilePath" value="docker/docker-compose.yml" />
+      </settings>
+    </deployment>
+    <method v="2" />
+  </configuration>
+</component>

+ 25 - 0
SourceCode/IntelligentRailwayCosting/.script/cmd/main.run.xml

@@ -0,0 +1,25 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
+    <module name="IntelligentRailwayCosting" />
+    <option name="ENV_FILES" value="" />
+    <option name="INTERPRETER_OPTIONS" value="" />
+    <option name="PARENT_ENVS" value="true" />
+    <envs>
+      <env name="PYTHONUNBUFFERED" value="1" />
+    </envs>
+    <option name="SDK_HOME" value="" />
+    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/app" />
+    <option name="IS_MODULE_SDK" value="true" />
+    <option name="ADD_CONTENT_ROOTS" value="true" />
+    <option name="ADD_SOURCE_ROOTS" value="true" />
+    <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
+    <option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/main.py" />
+    <option name="PARAMETERS" value="" />
+    <option name="SHOW_COMMAND_LINE" value="false" />
+    <option name="EMULATE_TERMINAL" value="false" />
+    <option name="MODULE_MODE" value="false" />
+    <option name="REDIRECT_INPUT" value="false" />
+    <option name="INPUT_FILE" value="" />
+    <method v="2" />
+  </configuration>
+</component>

+ 27 - 27
SourceCode/IntelligentRailwayCosting/Docker/docker-compose.yml

@@ -1,31 +1,31 @@
 version: '3.8'
 
 services:
-  rc-mysql:
-    image: mysql:8.0.39
-    container_name: railway_costing-mysql
-    environment:
-      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
-      - MYSQL_DATABASE=${MYSQL_DATABASE}
-      - MYSQL_USER=${MYSQL_USER}
-      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
-      - TZ=Asia/Shanghai
-      # - MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password
-    volumes:
-      - /home/docker/iwb_railway_costing_v1/mysql/log:/var/log/mysql
-      - /home/docker/iwb_railway_costing_v1/mysql/data:/var/lib/mysql
-      - /etc/localtime:/etc/localtime:ro
-      - /home/docker/iwb_railway_costing_v1/app/init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载 init.sql 文件
-      # - ./.dev/mysql5.7/log:/var/log/mysql
-      # - ./.dev/mysql5.7/data:/var/lib/mysql
-      # - ./.dev/mysql8.0.39/log:/var/log/mysql
-      # - ./.dev/mysql8.0.39/data:/var/lib/mysql
-      # - ./init.sql:/docker-entrypoint-initdb.d/init.sql
-    ports:
-      - '${MYSQL_PORT}:3306'
-    networks:
-      - railway_costing_v1
-    restart: always
+#  rc-mysql:
+#    image: mysql:8.0.39
+#    container_name: railway_costing-mysql
+#    environment:
+#      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+#      - MYSQL_DATABASE=${MYSQL_DATABASE}
+#      - MYSQL_USER=${MYSQL_USER}
+#      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
+#      - TZ=Asia/Shanghai
+#      # - MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password
+#    volumes:
+#      - /home/docker/iwb_railway_costing_v1/mysql/log:/var/log/mysql
+#      - /home/docker/iwb_railway_costing_v1/mysql/data:/var/lib/mysql
+#      - /etc/localtime:/etc/localtime:ro
+#      - /home/docker/iwb_railway_costing_v1/app/init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载 init.sql 文件
+#      # - ./.dev/mysql5.7/log:/var/log/mysql
+#      # - ./.dev/mysql5.7/data:/var/lib/mysql
+#      # - ./.dev/mysql8.0.39/log:/var/log/mysql
+#      # - ./.dev/mysql8.0.39/data:/var/lib/mysql
+#      # - ./init.sql:/docker-entrypoint-initdb.d/init.sql
+#    ports:
+#      - '${MYSQL_PORT}:3306'
+#    networks:
+#      - railway_costing_v1
+#    restart: always
 
   rc-app:
     build:
@@ -33,8 +33,8 @@ services:
       dockerfile: .
     image: railway_costing-app:1.0.0
     container_name: railway_costing-app
-    depends_on:
-      - rc-mysql
+#    depends_on:
+#      - rc-mysql
     environment:
       - TZ=Asia/Shanghai
       - APP_MYSQL__HOST=railway_costing-mysql

+ 8 - 7
SourceCode/IntelligentRailwayCosting/app/config.yml

@@ -1,8 +1,9 @@
 app:
   # 应用名称
   name: '铁路造价智能化工具'
-  version: '2024' # 应用版本 2020|2024
+  version: '2020' # 应用版本 2020|2024
   use_version: true
+  source_path: './temp_files'
   collect_api_url: 'http://192.168.0.104:8020/api'
 db:
   # SQL Server 配置
@@ -27,26 +28,26 @@ db:
     password: Iwb2017
     database: Iwb_RecoData2020
     trusted_connection: false
-  Iwb_RecoData2024:
+  Iwb_RailwayCosting:
     driver: '{ODBC Driver 17 for SQL Server}'
     server: shvber.com,50535
     username: sa
     password: Iwb2017
-    database: Iwb_RecoData2024
+    database: iwb_railway_costing_v1
     trusted_connection: false
-  Iwb_RecoData2020:
+  Iwb_RecoData2024:
     driver: '{ODBC Driver 17 for SQL Server}'
     server: shvber.com,50535
     username: sa
     password: Iwb2017
-    database: Iwb_RecoData2020
+    database: Iwb_RecoData2024
     trusted_connection: false
-  Iwb_RailwayCosting:
+  Iwb_RecoData2020:
     driver: '{ODBC Driver 17 for SQL Server}'
     server: shvber.com,50535
     username: sa
     password: Iwb2017
-    database: iwb_railway_costing_v1
+    database: Iwb_RecoData2020
     trusted_connection: false
   # MySQL 配置
   mysql_main:

+ 8 - 3
SourceCode/IntelligentRailwayCosting/app/core/configs/app_config.py

@@ -3,6 +3,7 @@ class AppConfig:
     _name = None
     _version = None
     _use_version = None
+    _source_path = None
     _collect_api_url = None
 
     @property
@@ -18,6 +19,9 @@ class AppConfig:
         return self._use_version
 
     @property
+    def source_path(self)->str:
+        return self._source_path
+    @property
     def collect_api_url(self)->str:
         return self._collect_api_url
 
@@ -27,7 +31,8 @@ class AppConfig:
         Args:
             config: 应用配置字典
         """
-        self._name = config.get('name')
+        self._name = config.get('name','')
         self._version = config.get('version')
-        self._use_version = config.get('use_version')
-        self._collect_api_url = config.get('collect_api_url')
+        self._use_version = config.get('use_version',False)
+        self._source_path = config.get('source_path','./temp_files')
+        self._collect_api_url = config.get('collect_api_url','')

+ 1 - 1
SourceCode/IntelligentRailwayCosting/app/core/dtos/project.py

@@ -46,7 +46,7 @@ class ProjectDto(BaseModel):
             project_name=model.project_name,
             project_manager=model.project_manager,
             design_stage=model.design_stage,
-            project_desc=model.project_description,
+            # project_desc=model.project_description,
             short_name=model.short_name,
             project_type=model.project_type,
             project_version=model.project_version,

+ 2 - 2
SourceCode/IntelligentRailwayCosting/app/core/models/project.py

@@ -31,13 +31,13 @@ class ProjectModel(Base):
     main_line_count = Column('正线数目', Integer)
     traction_type = Column('牵引种类', String(10))
     blocking_mode = Column('闭塞方式', String(10))
-    station_count = Column('车站数量', String(50))
+    # station_count = Column('车站数量', String(50))
     project_description = Column('项目简介', Text)
     target_speed = Column('速度目标值', Integer)
     print_compilation_review = Column('打印编制复核', Boolean)
     project_type = Column('项目类型', String(20))
     unit_conversion = Column('单位换算', Boolean)
-    completion_status = Column('完成状态', String(10))
+    # completion_status = Column('完成状态', String(10))
 
     def __repr__(self):
         return f"<Project(project_id='{self.project_id}', project_name='{self.project_name}')>"

+ 2 - 2
SourceCode/IntelligentRailwayCosting/app/core/models/quota_input.py

@@ -48,8 +48,8 @@ class QuotaInputModel(Base):
     modify_date = Column('修改日期', String(50))
     quota_consumption = Column('定额消耗', Text)
     basic_quota = Column('基本定额', String(255))
-    quota_comprehensive_unit_price = Column('定额综合单价', Float)
-    quota_comprehensive_total_price = Column('定额综合合价', Float)
+    # quota_comprehensive_unit_price = Column('定额综合单价', Float)
+    # quota_comprehensive_total_price = Column('定额综合合价', Float)
 
     # budget_info = relationship('TotalBudgetInfoModel')
     # chapter = relationship('ChapterModel')

+ 2 - 3
SourceCode/IntelligentRailwayCosting/app/services/project_task.py

@@ -1,6 +1,6 @@
 from typing import Optional
 
-import tools.utils as utils, os, threading
+import tools.utils as utils, core.configs as configs, os, threading
 from core.log.log_record import LogRecordHelper
 from core.enum import OperationModule,OperationType
 from core.dtos import ProjectTaskDto
@@ -151,8 +151,7 @@ class ProjectTaskService:
 
     def _process_file_upload(self, task: ProjectTaskDto, files: list, delete_old: bool) -> str:
         """处理文件上传流程"""
-        base_path = utils.get_config_value('file.source_path', './temp_files')
-        task_dir = os.path.join(base_path, f'upload_files/{task.get_path()}')
+        task_dir = os.path.join(configs.app.source_path, f'upload_files/{task.get_path()}')
         os.makedirs(task_dir, exist_ok=True)
         self._logger.info(f"保存处理文件,项目ID:{task.project_id},任务ID:{task.id}")
         if delete_old:

+ 2 - 2
SourceCode/IntelligentRailwayCosting/app/stores/project.py

@@ -43,7 +43,7 @@ class ProjectStore:
                 ProjectModel.project_name,
                 ProjectModel.project_manager,
                 ProjectModel.design_stage,
-                ProjectModel.project_description,
+                # ProjectModel.project_description,
                 ProjectModel.short_name,
                 ProjectModel.project_version,
                 ProjectModel.project_type,
@@ -68,7 +68,7 @@ class ProjectStore:
                     ProjectModel.project_id.like(f'%{keyword}%'),
                     ProjectModel.project_name.like(f'%{keyword}%'),
                     ProjectModel.project_manager.like(f'%{keyword}%'),
-                    ProjectModel.project_description.like(f'%{keyword}%'),
+                    # ProjectModel.project_description.like(f'%{keyword}%'),
                     ProjectModel.short_name.like(f'%{keyword}%')
                 ))
 

+ 6 - 12
SourceCode/IntelligentRailwayCosting/app/tools/db_helper/sqlserver_helper.py

@@ -10,7 +10,6 @@ from .base import DBHelper
 class SQLServerHelper(DBHelper):
     def __init__(self):
         super().__init__()
-        self._engines: Dict[str, Engine] = {}
         self._session_makers: Dict[str, sessionmaker] = {}
         self._default_config = {
             'driver': 'ODBC Driver 17 for SQL Server',
@@ -71,14 +70,12 @@ class SQLServerHelper(DBHelper):
 
     def get_engine(self, database: str, config: Optional[Dict[str, str]] = None) -> Engine:
         """获取或创建数据库引擎"""
-        if database not in self._engines:
-            conn_str = self._build_connection_string(database, config)
-            engine = create_engine(conn_str, **self._pool_config)
-            # 预热连接池
-            with engine.connect() as conn:
-                conn.execute(text("SELECT 1"))
-            self._engines[database] = engine
-        return self._engines[database]
+        conn_str = self._build_connection_string(database, config)
+        engine = create_engine(conn_str, **self._pool_config)
+        # 预热连接池
+        with engine.connect() as conn:
+            conn.execute(text("SELECT 1"))
+        return engine
 
     def execute_query(self, database: str, query: str, params: Optional[Dict[str, Any]] = None) -> List[Tuple]:
         """执行查询并返回结果"""
@@ -111,9 +108,6 @@ class SQLServerHelper(DBHelper):
 
     def dispose_all(self) -> None:
         """释放所有数据库引擎资源"""
-        for engine in self._engines.values():
-            engine.dispose()
-        self._engines.clear()
         self._session_makers.clear()
 
     def __del__(self):

+ 1 - 1
SourceCode/IntelligentRailwayCosting/app/views/templates/base/layout.html

@@ -8,7 +8,7 @@
 {% block content %}
 <div class="d-flex flex-column flex-root app-root">
     <div class="app-page flex-column flex-root app-root">
-        <div class="app-header">
+        <div class="app-header px-10">
             <div class="app-container container-fluid d-flex align-items-stretch justify-content-between">
                 <div class="d-flex align-items-center flex-grow-1 flex-lg-grow-0 me-5">
                     <a href="{{ url_for('project.index') }}">