feat: 优化处理进度和日志跟随

This commit is contained in:
2026-05-19 16:08:46 +08:00
parent 3240027d48
commit f8a5269284
6 changed files with 142 additions and 18 deletions
+17 -1
View File
@@ -22,10 +22,16 @@ from app.database import DatabaseManager
class ProcessLogger:
"""处理日志记录器"""
def __init__(self, log_file: Optional[Path] = None, callback: Optional[Callable[[str], None]] = None):
def __init__(
self,
log_file: Optional[Path] = None,
callback: Optional[Callable[[str], None]] = None,
stage_callback: Optional[Callable[[str], None]] = None,
):
self.logs: List[str] = []
self.log_file = log_file
self.callback = callback
self.stage_callback = stage_callback
# 如果指定了日志文件,确保目录存在
if self.log_file:
self.log_file.parent.mkdir(parents=True, exist_ok=True)
@@ -62,6 +68,10 @@ class ProcessLogger:
def success(self, message: str):
self.log(message, "SUCCESS")
def set_stage(self, stage: str):
if self.stage_callback:
self.stage_callback(stage)
def get_logs(self) -> List[str]:
return self.logs.copy()
@@ -195,24 +205,30 @@ class DataProcessor:
try:
# 1. 解压 ZIP 文件
self.logger.set_stage("extracting")
self._unzip_files()
# 2. 处理 Excel 文件(并行)
self.logger.set_stage("converting")
self._process_excel_files_parallel()
# 3. 处理 CSV 文件并上传到数据库(高性能批量插入)
self.logger.set_stage("importing")
self._process_csv_files()
# 4. 执行 SQL 脚本
self.logger.set_stage("scripting")
self._execute_sql_script()
elapsed = round(time.time() - start_time, 2)
self.logger.set_stage("completed")
self.logger.success(f"处理完成!总耗时: {elapsed} 秒")
self.results["success"] = True
self.results["elapsed_time"] = elapsed
except Exception as e:
self.logger.set_stage("failed")
self.logger.error(f"处理失败: {str(e)}")
self.results["success"] = False
self.results["error"] = str(e)