#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""用 orders_detail_2026.json（含 ERP 收货人/地址/电话/物流单号）补 shipment_status.json。
原则：只补空字段，不覆盖已有值；运单冲突只记录，不强行替换。
"""
import json
import os
import shutil
import time

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
DETAIL = os.path.join(ROOT, '数据', 'orders_detail_2026.json')
SHIP = os.path.join(ROOT, '数据', 'shipment_status.json')


def main():
    detail = json.load(open(DETAIL, encoding='utf-8'))
    ship = json.load(open(SHIP, encoding='utf-8'))
    dmap = detail.get('orders') or {}
    orders = ship.get('orders') or []
    stats = {'matched': 0, 'recipient': 0, 'phone': 0, 'address': 0, 'tracking': 0,
             'contractDate': 0, 'tracking_conflict': 0, 'missing_detail': 0}
    conflicts = []
    for o in orders:
        oid = str(o.get('orderId') or '')
        d = dmap.get(oid)
        if not d:
            stats['missing_detail'] += 1
            continue
        stats['matched'] += 1
        for key, src in [('recipient', 'recipient'), ('phone', 'phone'), ('address', 'address')]:
            if not (o.get(key) or '').strip() and (d.get(src) or '').strip():
                o[key] = d[src]
                stats[key] += 1
        tn = (d.get('trackingNo') or '').strip()
        cur = (o.get('trackingNo') or '').strip()
        if tn and not cur:
            o['trackingNo'] = tn
            stats['tracking'] += 1
        elif tn and cur and tn != cur:
            stats['tracking_conflict'] += 1
            conflicts.append({'orderId': oid, 'existing': cur, 'erp': tn})
        if not (o.get('contractDate') or '').strip() and (d.get('date') or '').strip():
            o['contractDate'] = d['date']
            stats['contractDate'] += 1

    ship['orders'] = orders
    ship['total'] = len(orders)
    ship['updated_at'] = time.strftime('%Y-%m-%d %H:%M:%S')
    ship['erp_fields_source'] = detail.get('source')
    ship['erp_fields_updated_at'] = time.strftime('%Y-%m-%d %H:%M:%S')
    ship['erp_fields_stats'] = stats
    bak = SHIP + '.bak_' + time.strftime('%Y%m%d_%H%M%S')
    shutil.copy2(SHIP, bak)
    with open(SHIP, 'w', encoding='utf-8') as f:
        json.dump(ship, f, ensure_ascii=False, indent=2)
    print('备份', os.path.basename(bak))
    print('shipment orders', len(orders), 'matched', stats['matched'], 'missing detail', stats['missing_detail'])
    print('补收货人', stats['recipient'], '电话', stats['phone'], '地址', stats['address'], '运单', stats['tracking'], '合同日', stats['contractDate'])
    print('运单冲突', stats['tracking_conflict'])
    for c in conflicts[:10]:
        print('  ', c)
    print('✅', SHIP)


if __name__ == '__main__':
    main()
