import pandas as pd
import numpy as np

# 读取表A（用户提供的参考表）
table_a = pd.read_excel('reference_order.xlsx')
# 重命名列方便匹配
table_a = table_a.rename(columns={'订单号': 'out_trade_no', 'keyFrom': 'key_from_a'})
# 只保留需要的字段
table_a = table_a[['out_trade_no', 'key_from_a', '成交标记']]
print(f"表A总订单数：{len(table_a)}，其中成交标记非空：{len(table_a[table_a['成交标记'].notna()])}")

# 读取表B（导出的3月1日至今订单）
table_b = pd.read_csv('2026年3月1日至今订单.csv')
print(f"表B总订单数：{len(table_b)}")

# 第一步：匹配重复订单（两个表都有的订单）
merged = pd.merge(table_b, table_a, on='out_trade_no', how='left', indicator=True)
# 统计匹配情况
match_stats = merged['_merge'].value_counts()
print(f"\n匹配结果：")
print(f"  两个表都有的订单：{match_stats.get('both', 0)}条 → 直接使用表A的成交标记")
print(f"  仅表B存在的新增订单：{match_stats.get('left_only', 0)}条 → 按规则生成新标记")

# 第二步：处理新增订单的标记逻辑
# 先从已匹配的订单中学习key_from到成交标记的映射
learned_map = merged[merged['_merge'] == 'both'].drop_duplicates('key_from')[['key_from', '成交标记']].set_index('key_from')['成交标记'].to_dict()
print(f"\n从匹配的订单中学习到的key_from→成交标记映射（共{len(learned_map)}条）：")
for k, v in learned_map.items():
    if pd.notna(v):
        print(f"  {k} → {v}")

# 定义标记生成规则
def get_final_tag(row):
    # 如果是匹配到的订单，直接用表A的标记
    if row['_merge'] == 'both' and pd.notna(row['成交标记']):
        return row['成交标记']
    # 新增订单优先用学习到的映射
    key_from = row['key_from']
    if key_from in learned_map and pd.notna(learned_map[key_from]):
        return learned_map[key_from]
    # 规则匹配
    if key_from.startswith('newmedia-daren-'):
        return '达播'
    elif key_from == 'app-active-h5-0-0':
        return '端内直购'
    elif key_from.startswith('sales-adp-') or key_from.startswith('app-sales-'):
        return '销转'
    elif key_from.startswith('newmedia-dianpu-'):
        return '店铺直购'
    else:
        return '其他'

# 生成最终成交标记
merged['最终成交标记'] = merged.apply(get_final_tag, axis=1)
# 将标记为0的修改为店铺直购
merged['最终成交标记'] = merged['最终成交标记'].replace(0, '店铺直购')
merged['最终成交标记'] = merged['最终成交标记'].replace('0', '店铺直购')

# 清理不需要的字段
final_df = merged.drop(columns=['key_from_a', '_merge', '成交标记']).rename(columns={'最终成交标记': '成交标记'})

# 保存结果
output_file = '2026年3月1日至今订单_含正确成交标记.csv'
final_df.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f"\n处理完成，已生成最终文件：{output_file}")
print(f"最终成交标记分布：")
print(final_df['成交标记'].value_counts())

