#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""复星集团 E01 系列 2026 年分季度采购额。

两个数据源交叉核对（复星可能跨销售员，单一来源会漏）：
  A 全公司 ERP 导出：~/Desktop/hermas输入-工作台数据库/月度销售额数据/销售订单_20260101-20260930.xlsx
  B 用户表：~/.hermes/profiles/zone-b/cache/documents/doc_6f16ee249d8e_刘子研三季度数据-截止至9.30(1).xls
口径：标准销售订单 · 已审核 · 非赠品 · 排除关联方(宝锐|宝泰|横琴)；季度按【合同日期】切
输出：销售分析/复星_E01系列_2026分季度采购额.xlsx
"""
import os, re
import pandas as pd

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
ERP = os.path.expanduser('~/Desktop/hermas输入-工作台数据库/月度销售额数据/销售订单_20260101-20260930.xlsx')
USR = os.path.expanduser('~/.hermes/profiles/zone-b/cache/documents/doc_6f16ee249d8e_刘子研三季度数据-截止至9.30(1).xls')
OUT = os.path.join(ROOT, '销售分析', '复星_E01系列_2026分季度采购额.xlsx')
ASSOC = '宝锐|宝泰|横琴'
QN = {1: 'Q1(1-3月)', 2: 'Q2(4-6月)', 3: 'Q3(7-9月)', 4: 'Q4(10-12月)'}


def load_a():
    df = pd.read_excel(ERP, sheet_name='Sheet1', header=0)
    df.columns = [str(c).strip() for c in df.columns]
    return df, 'ERP全公司导出'


def load_b():
    df = pd.read_excel(USR, sheet_name='2026年销售数据', header=0, engine='xlrd')
    df.columns = [str(c).strip() for c in df.columns]
    return df, '用户表(刘子研)'


def prep(df):
    df = df.copy()
    df['_d'] = pd.to_datetime(df['合同日期'], errors='coerce')
    df['_q'] = df['_d'].dt.quarter
    df['_yr'] = df['_d'].dt.year
    df['_amt'] = pd.to_numeric(df['价税合计'], errors='coerce').fillna(0)
    hk = '货号#' if '货号#' in df.columns else '货号'
    df['_sku'] = df[hk].astype(str)
    k = df['_yr'] == 2026
    k = k & df['单据类型'].astype(str).str.contains('标准销售订单', na=False)
    k = k & df['单据状态'].astype(str).str.contains('已审核', na=False)
    k = k & ~df['是否赠品'].astype(str).str.strip().isin(['是', 'Y', 'True', 'true'])
    k = k & ~df['客户'].astype(str).str.contains(ASSOC, na=False, regex=True)
    return df[k].copy()


def is_fosun(df):
    m = df['客户'].astype(str).str.contains('复星', na=False)
    for c in ('集团客户#', '集团客户'):
        if c in df.columns:
            m = m | df[c].astype(str).str.contains('复星', na=False)
    return m


def main():
    out_rows = []
    details = {}
    for loader in (load_a, load_b):
        try:
            df, tag = loader()
        except Exception as e:
            print('  ⚠️ %s 读取失败: %s' % (loader.__name__, str(e)[:60])); continue
        d = prep(df)
        fx = d[is_fosun(d)]
        e01 = fx[fx['_sku'].str.startswith('E01', na=False)]
        print('\n══ %s ══' % tag)
        print('   全年(2026) 复星全货号: %d 行 / ¥%.2f ｜ 其中 E01 系列: %d 行 / ¥%.2f'
              % (len(fx), fx['_amt'].sum(), len(e01), e01['_amt'].sum()))
        if e01.empty: continue
        print('   E01 系列货号:', sorted(e01['_sku'].unique()))
        for q in (1, 2, 3, 4):
            g = e01[e01['_q'] == q]
            print('     %-11s %3d 行 ｜ %2d 单 ｜ %2d 货号 ｜ ¥%12.2f' % (
                QN[q], len(g), g['单据编号'].nunique(), g['_sku'].nunique(), g['_amt'].sum()))
            out_rows.append({'数据源': tag, '季度': QN[q], '行数': len(g),
                             '单数': g['单据编号'].nunique(), '货号数': g['_sku'].nunique(),
                             '采购额': round(g['_amt'].sum(), 2)})
        agg = (e01.groupby(['_q', '_sku'])
                  .agg(金额=('_amt', 'sum'), 数量=('销售数量', 'sum'), 单数=('单据编号', 'nunique'))
                  .reset_index().rename(columns={'_q': '季度', '_sku': '货号'}))
        agg['季度'] = agg['季度'].map(QN)
        details[tag] = agg

    os.makedirs(os.path.dirname(OUT), exist_ok=True)
    with pd.ExcelWriter(OUT) as w:
        pd.DataFrame(out_rows).to_excel(w, sheet_name='分季度汇总', index=False)
        for tag, agg in details.items():
            agg.sort_values(['季度', '金额'], ascending=[True, False]).to_excel(
                w, sheet_name=('明细_%s' % tag)[:30], index=False)
    print('\n→ %s' % OUT)


if __name__ == '__main__':
    main()
