Add per-site file prefix for undelivered-data comparison

- 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 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-06-15 22:09:12 +08:00
parent 411a2487fc
commit 497fd11674
2 changed files with 18 additions and 30 deletions

View File

@@ -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

View File

@@ -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}")