From 497fd116749964fdba442d402e6fbbd31df25aaf Mon Sep 17 00:00:00 2001 From: Misaka Date: Mon, 15 Jun 2026 22:09:12 +0800 Subject: [PATCH] Add per-site file prefix for undelivered-data comparison MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - task_process_undelivered_data now accepts site_name (default 顺心) and reads/writes {site}-{应到/实到/应到未到}货物数据.xlsx - Menu option 5 prompts for site name before running reconciliation - Update 顺心 site outputs to 顺心-应到/实到货物数据.xlsx naming - Remove redundant inline comments in site_shunxin.py Co-Authored-By: Claude Opus 4.6 --- main_router.py | 24 ++++++++++++++---------- site_shunxin.py | 24 ++++-------------------- 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/main_router.py b/main_router.py index 90087f8..6b8c999 100644 --- a/main_router.py +++ b/main_router.py @@ -15,21 +15,22 @@ SITES_CONFIG = { } -def task_process_undelivered_data(): - """全局模块:应到未到异常件比对引擎""" - print("\n▶ 开始执行【应到未到数据处理】任务...") +def task_process_undelivered_data(site_name="顺心"): + """全局模块:应到未到异常件比对引擎 (支持动态网点前缀)""" + print(f"\n▶ 开始执行【{site_name} - 应到未到数据处理】任务...") download_dir = os.path.join(os.getcwd(), "downloads") - expected_path = os.path.join(download_dir, "应到货物数据.xlsx") - actual_path = os.path.join(download_dir, "实到货物数据.xlsx") - output_path = os.path.join(download_dir, "应到未到货物数据.xlsx") + # 动态拼接带网点前缀的文件路径 + expected_path = os.path.join(download_dir, f"{site_name}-应到货物数据.xlsx") + actual_path = os.path.join(download_dir, f"{site_name}-实到货物数据.xlsx") + output_path = os.path.join(download_dir, f"{site_name}-应到未到货物数据.xlsx") if not os.path.exists(expected_path): - print(f"❌ 错误:找不到【应到货物数据】主文档:{expected_path}") + print(f"❌ 错误:找不到【{site_name}-应到货物数据】主文档:{expected_path}") return if not os.path.exists(actual_path): - print(f"❌ 错误:找不到【实到货物数据】主文档:{actual_path}") + print(f"❌ 错误:找不到【{site_name}-实到货物数据】主文档:{actual_path}") return try: @@ -143,7 +144,7 @@ def run_multi_site_daemon(): try: if choice == "1": - pages_map["顺心"].bring_to_front() # 切换到对应标签页 + pages_map["顺心"].bring_to_front() site_shunxin.shunxin_expected_download(pages_map["顺心"]) elif choice == "2": pages_map["顺心"].bring_to_front() @@ -155,7 +156,10 @@ def run_multi_site_daemon(): pages_map["百世"].bring_to_front() site_baishi.baishi_actual_download(pages_map["百世"]) elif choice == "5": - task_process_undelivered_data() + site_name = input("请输入要比对的网点名称 (默认: 顺心): ").strip() + if not site_name: + site_name = "顺心" + task_process_undelivered_data(site_name) elif choice == "0": print("\n准备退出程序,释放浏览器资源...") break diff --git a/site_shunxin.py b/site_shunxin.py index 04e062d..deae043 100644 --- a/site_shunxin.py +++ b/site_shunxin.py @@ -35,17 +35,14 @@ def shunxin_expected_download(page): page.get_by_role("radio", name="1天").check() print(">> 正在展开【状态】下拉菜单...") - # 尊重改动:匹配包含 已发 或 已到 的下拉选项 page.locator( ".ant-select-selection-item", has_text=re.compile(r"已发|已到") ).click() print(">> 正在选择状态为【已到】...") - # 尊重改动:精确定位选项 page.locator(".ant-select-item-option", has_text="已到").click() print(">> 正在点击【查询】按钮...") - # 尊重改动:使用带 search 标识的 exact role 定位 page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) @@ -61,7 +58,6 @@ def shunxin_expected_download(page): page.locator("label[title='运单查询']").wait_for(state="visible") # 4. 执行导出流程 - # 尊重改动:精准的 export role 定位 page.get_by_role("button", name="export 导出").click() page.locator( @@ -71,9 +67,7 @@ def shunxin_expected_download(page): ".ant-transfer-list-header label" ).click() - # 尊重改动:限定在"导出"区域内的向右按钮 page.get_by_label("导出").get_by_role("button", name="right").click() - # 尊重改动:精准的 export 数据按钮 page.get_by_role("button", name="export 导出数据").click() export_times.append(datetime.now()) @@ -93,11 +87,9 @@ def shunxin_expected_download(page): print(">> 正在前往【数据导出】界面...") page.locator("a[href='/dataExport']").click() - # 尊重改动:使用 columnheader 确保表格表头真正加载完毕 page.get_by_role("columnheader", name="任务标题").wait_for(state="visible") page.wait_for_timeout(2000) - # 尊重改动:进入页面后主动点击一次查询刷新状态 page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) @@ -146,7 +138,6 @@ def shunxin_expected_download(page): f">> 共有 {pending_tasks} 个匹配任务还在处理中,等待 5 秒后刷新..." ) page.wait_for_timeout(5000) - # 尊重改动:使用更精准的 search 查询按钮定位 page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) else: @@ -177,7 +168,7 @@ def shunxin_expected_download(page): except Exception as e: print(f" ❌ 下载任务 [{time_str}] 失败: {e}") - # 9. 合并数据 + # 9. 合并数据 (修改了文件名前缀) if downloaded_files: print("\n>> 🧪 正在开始执行扁平数据高能合并流程...") all_data_frames = [] @@ -191,7 +182,7 @@ def shunxin_expected_download(page): if all_data_frames: combined_df = pd.concat(all_data_frames, ignore_index=True) - final_output_path = os.path.join(download_dir, "应到货物数据.xlsx") + final_output_path = os.path.join(download_dir, "顺心-应到货物数据.xlsx") combined_df.to_excel(final_output_path, index=False) print(f"====================================================") print(f" 🎉 恭喜!合并成功!最终输出路径: {final_output_path}") @@ -231,13 +222,11 @@ def shunxin_actual_download(page): page.get_by_role("radio", name="1天").check() print(">> 正在点击【查询】按钮...") - # 尊重改动:精确到 search 查询 page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) # 3. 直接发起全局导出 print(">> 正在发起导出请求...") - # 尊重改动:精确定位 page.get_by_role("button", name="export 导出").click() page.locator( @@ -247,9 +236,7 @@ def shunxin_actual_download(page): ".ant-transfer-list-header label" ).click() - # 尊重改动:定位 right 按钮 page.get_by_label("导出").get_by_role("button", name="right").click() - # 尊重改动:精准的 export 导出数据按钮 page.get_by_role("button", name="export 导出数据").click() export_times.append(datetime.now()) @@ -262,11 +249,9 @@ def shunxin_actual_download(page): print(">> 正在前往【数据导出】界面...") page.locator("a[href='/dataExport']").click() - # 尊重改动:使用 columnheader 确保表格加载 page.get_by_role("columnheader", name="任务标题").wait_for(state="visible") page.wait_for_timeout(2000) - # 尊重改动:主动点击查询刷新 page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) @@ -315,7 +300,6 @@ def shunxin_actual_download(page): f">> 共有 {pending_tasks} 个匹配任务还在处理中,等待 5 秒后刷新..." ) page.wait_for_timeout(5000) - # 尊重改动:精准定位刷新查询 page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) else: @@ -346,7 +330,7 @@ def shunxin_actual_download(page): except Exception as e: print(f" ❌ 下载任务 [{time_str}] 失败: {e}") - # 7. 合并数据 + # 7. 合并数据 (修改了文件名前缀) if downloaded_files: print("\n>> 🧪 正在开始执行数据归档整理...") all_data_frames = [] @@ -360,7 +344,7 @@ def shunxin_actual_download(page): if all_data_frames: combined_df = pd.concat(all_data_frames, ignore_index=True) - final_output_path = os.path.join(download_dir, "实到货物数据.xlsx") + final_output_path = os.path.join(download_dir, "顺心-实到货物数据.xlsx") combined_df.to_excel(final_output_path, index=False) print(f"====================================================") print(f" 🎉 恭喜!处理成功!最终输出路径: {final_output_path}")