feat: add SQL Server database persistence for extracted material plan data
Add optional database persistence feature that automatically saves extracted discrete material plan data to SQL Server. Users can enable this feature in the settings tab. Changes: - Add enable_db_persistence flag to ExtractionConfig (default: disabled) - Create DiscreteMaterialPlanDAO for database operations with REPLACE pattern - Update progress tracking to include database persistence stage (90-100%) - Add database persistence checkbox in settings UI - Remove verbose logging checkbox from data extraction UI (config-only now) - Update extraction workflow to save merged DataFrame to database Progress weights adjusted: - download: 65% -> 60% - database: 10% (new stage) - Other stages adjusted accordingly Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -111,17 +111,10 @@ class DataExtractionTab(ttk.Frame):
|
||||
options_group = ttk.LabelFrame(parent, text="提取选项", padding=10)
|
||||
options_group.pack(fill=tk.X, pady=5)
|
||||
|
||||
self.verbose_var = tk.BooleanVar(
|
||||
value=self.config.get("extraction.verbose", True)
|
||||
)
|
||||
ttk.Checkbutton(options_group, text="详细日志", variable=self.verbose_var).grid(
|
||||
row=0, column=0, sticky="w", padx=5
|
||||
)
|
||||
|
||||
self.headless_var = tk.BooleanVar(value=self.config.get("erp.headless", True))
|
||||
ttk.Checkbutton(
|
||||
options_group, text="无头模式 (不显示浏览器)", variable=self.headless_var
|
||||
).grid(row=0, column=1, sticky="w", padx=5)
|
||||
).grid(row=0, column=0, sticky="w", padx=5)
|
||||
|
||||
# 进度显示
|
||||
progress_group = ttk.LabelFrame(parent, text="进度", padding=10)
|
||||
@@ -210,8 +203,9 @@ class DataExtractionTab(ttk.Frame):
|
||||
username=self.config.get("erp.username"),
|
||||
password=self.config.get("erp.password"),
|
||||
headless=self.headless_var.get(),
|
||||
verbose=self.verbose_var.get(),
|
||||
verbose=self.config.get("extraction.verbose", True),
|
||||
batch_size=self.config.get("extraction.batch_size", 100),
|
||||
enable_db_persistence=self.config.get("extraction.enable_db_persistence", False),
|
||||
)
|
||||
|
||||
# 创建实时输出流,每次写入立即更新 GUI
|
||||
|
||||
@@ -125,6 +125,7 @@ class MainWindow:
|
||||
"• 数据提取 - 从 ERP 系统提取备料计划数据\n"
|
||||
"• 物料校验 - 校验物料状态并匹配待删除物料\n"
|
||||
"• 数据查询 - 查询生产订单号等信息\n"
|
||||
"• 设置管理 - 管理系统配置\n\n"
|
||||
"• 设置管理 - 管理系统配置\n"
|
||||
"• 数据库持久化 - 将提取的数据自动保存到 SQL Server\n\n"
|
||||
"基于 Playwright 和 Python 开发",
|
||||
)
|
||||
|
||||
@@ -19,7 +19,7 @@ class ProgressInfo:
|
||||
"""
|
||||
|
||||
stage: (
|
||||
str # 阶段标识: 'login', 'query', 'download', 'logout', 'convert', 'complete'
|
||||
str # 阶段标识: 'login', 'query', 'download', 'logout', 'convert', 'database', 'complete'
|
||||
)
|
||||
current: int # 当前进度值
|
||||
total: int # 总量
|
||||
@@ -48,9 +48,10 @@ class ProgressCalculator:
|
||||
STAGE_WEIGHTS = {
|
||||
"login": 5, # 登录: 0-5%
|
||||
"query": 5, # 查询: 5-10%
|
||||
"download": 65, # 下载: 10-75%
|
||||
"logout": 5, # 注销: 75-80%
|
||||
"convert": 15, # 转换: 80-95%
|
||||
"download": 60, # 下载: 10-70%
|
||||
"logout": 5, # 注销: 70-75%
|
||||
"convert": 15, # 转换: 75-90%
|
||||
"database": 10, # 数据库持久化: 90-100%
|
||||
"complete": 5, # 完成: 95-100%
|
||||
}
|
||||
|
||||
|
||||
@@ -218,6 +218,12 @@ class SettingsTab(ttk.Frame):
|
||||
group, text="自动合并批次数据", variable=self.merge_batches_var
|
||||
).grid(row=3, column=0, columnspan=2, sticky="w", pady=5)
|
||||
|
||||
# 数据库持久化
|
||||
self.enable_db_persistence_var = tk.BooleanVar()
|
||||
ttk.Checkbutton(
|
||||
group, text="保存到数据库 (同时写入 SQL Server)", variable=self.enable_db_persistence_var
|
||||
).grid(row=4, column=0, columnspan=2, sticky="w", pady=5)
|
||||
|
||||
def load_settings(self):
|
||||
"""从配置加载设置到界面"""
|
||||
# ERP 设置
|
||||
@@ -247,6 +253,7 @@ class SettingsTab(ttk.Frame):
|
||||
self.verbose_var.set(self.config.get("extraction.verbose", True))
|
||||
self.auto_convert_var.set(self.config.get("extraction.auto_convert", True))
|
||||
self.merge_batches_var.set(self.config.get("extraction.merge_batches", True))
|
||||
self.enable_db_persistence_var.set(self.config.get("extraction.enable_db_persistence", False))
|
||||
|
||||
def save_settings(self):
|
||||
"""保存界面设置到配置"""
|
||||
@@ -275,6 +282,7 @@ class SettingsTab(ttk.Frame):
|
||||
self.config.set("extraction.verbose", self.verbose_var.get())
|
||||
self.config.set("extraction.auto_convert", self.auto_convert_var.get())
|
||||
self.config.set("extraction.merge_batches", self.merge_batches_var.get())
|
||||
self.config.set("extraction.enable_db_persistence", self.enable_db_persistence_var.get())
|
||||
|
||||
# 保存到文件
|
||||
if self.config.save():
|
||||
|
||||
Reference in New Issue
Block a user