import datetime
import pymysql
import pandas as pd


def doctor():
    date_str = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y%m%d")
    date_tmp = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")

    sql = "select d.doctor_id,d.service_exposure_pv_30,d.service_ctr_30,d.expert_exposure_pv_30,d.expert_pv_30," \
    "b.merchant_id,budan.budan_payment_30_days " \
          "from statistic_doctor_rank_factor d " \
    "left join hippo_merchantrelevance b on d.doctor_id = b.doctor_id " \
    "left join al_meigou_service_smart_rank_budan_payment budan on b.merchant_id = budan.merchant_id " \
    "where d.partition_date = '{}' and budan.stat_date = '{}';".format(date_str, date_tmp)

    db = pymysql.connect(host='172.16.30.143', port=3306, user='work', passwd='BJQaT9VzDcuPBqkd', db='zhengxing')
    cursor = db.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    df = pd.DataFrame(list(result))
    name = ["doctor_id", "service_exposure_pv_30", "service_ctr_30", "expert_exposure_pv_30", "expert_pv_30",
            "merchant_id","budan_payment_30_days"]

    df = df.rename(columns=dict(zip(list(range(len(name))), name)))

    sql = "select merchant_id,doctor_ad_money_30_days,expand_rechange_amount_30," \
          "service_pv_30,expert_pv_30,organization_pv_30 from statistic_merchant_rank_factor " \
          "where partition_date = '{}';".format(date_str)

    cursor = db.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    db.close()
    tmp = pd.DataFrame(list(result))
    name = ["merchant_id", "doctor_ad_money_30_days", "expand_rechange_amount_30", "service_pv_30",
            "mexpert_pv_30", "organization_pv_30"]
    tmp = tmp.rename(columns=dict(zip(list(range(len(name))), name)))

    df["merchant_id"] = df["merchant_id"].astype("str")
    tmp["merchant_id"] = tmp["merchant_id"].astype("str")
    df = pd.merge(df, tmp, on='merchant_id')

    for i in ["service_exposure_pv_30", "service_ctr_30", "expert_exposure_pv_30", "expert_pv_30",
      "doctor_ad_money_30_days", "expand_rechange_amount_30", "service_pv_30",
     "mexpert_pv_30", "organization_pv_30", "budan_payment_30_days"]:
        df[i] = df[i].astype("float")

    df["all_exposure"] = df["service_exposure_pv_30"] + df["expert_exposure_pv_30"]
    df = df[~df["expert_exposure_pv_30"].isin([0.0])]
    df = df[~df["all_exposure"].isin([0.0])]
    df["tmp"] = df["service_pv_30"] + df["mexpert_pv_30"] +df["organization_pv_30"]
    df = df[~df["tmp"].isin([0.0])]
    print("aaaaaaaa")
    df["ctr"] = df["service_exposure_pv_30"] / df["all_exposure"] * df["service_ctr_30"] + \
                df["expert_exposure_pv_30"]/df["all_exposure"] * (df["expert_pv_30"] / df["expert_exposure_pv_30"])
    df["commission"] = (df["doctor_ad_money_30_days"] + df["budan_payment_30_days"])/df["tmp"]
    df["pv_ad"] = df["expand_rechange_amount_30"]/df["tmp"]
    df["score"] = df["ctr"]**0.5 * (df["commission"] + df["pv_ad"])
    columns = ["doctor_id","score","ctr","commission","pv_ad","service_exposure_pv_30",
               "service_ctr_30","expert_exposure_pv_30","expert_pv_30",
            "merchant_id","doctor_ad_money_30_days","expand_rechange_amount_30","service_pv_30",
            "mexpert_pv_30","organization_pv_30","budan_payment_30_days"]
    data = df.loc[:, columns]
 #    renames = {'doctor_id': '医生id',
 # 'score': '得分',
 # 'ctr': '点击率',
 # 'commission': '单pv佣金贡献',
 # 'pv_ad': '单pv广告消耗',
 # 'service_exposure_pv_30': '30天内美购曝光pv',
 # 'service_ctr_30': '30天内美购ctr',
 # 'expert_exposure_pv_30': '医生曝光次数-30天',
 # 'expert_pv_30': '医生主页PV-30天',
 # 'merchant_id': '商户id',
 # 'doctor_ad_money_30_days': '商户名下非医生、机构账号的验证订单抽成之和',
 # 'expand_rechange_amount_30': '统计期内该商户的广告消耗（CPC+CPT+其他',
 # 'service_pv_30': '该商户名下所有美购的美购详情页PV',
 # 'mexpert_pv_30': '该商户名下所有医生主页PV',
 # 'organization_pv_30': '该商户名下机构主页PV',
 # 'budan_payment_30_days': '30天已补订单佣金'}
 #    data = data.rename(columns=renames)
    data = data.drop_duplicates()
    data.to_csv('/tmp/doctor.csv',index=False)
    print("doctor end")


def hospital():
    date_str = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y%m%d")
    date_tmp = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")

    sql = "select api.id," \
          "h.hospital_id,h.hospital_exposure_pv_30,h.service_exposure_pv_30,h.expert_exposure_pv_30," \
          "h.service_ctr_30,h.hospital_ctr_30,h.expert_ctr_30," \
          "b.merchant_id,budan.budan_payment_30_days " \
          "from api_doctor api left join statistic_hospital_rank_factor h on api.hospital_id = h.hospital_id " \
          "left join hippo_merchantrelevance b on api.id = b.doctor_id " \
          "left join al_meigou_service_smart_rank_budan_payment budan on b.merchant_id = budan.merchant_id " \
          "where api.doctor_type = 1 and h.date = '{}' " \
          "and budan.stat_date = '{}';".format(date_str, date_tmp)

    db = pymysql.connect(host='172.16.30.143', port=3306, user='work', passwd='BJQaT9VzDcuPBqkd', db='zhengxing')
    cursor = db.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    df = pd.DataFrame(list(result))
    name = ["doctor_id","hospital_id","hospital_exposure_pv_30","service_exposure_pv_30",
            "expert_exposure_pv_30","service_ctr_30","hospital_ctr_30","expert_ctr_30","merchant_id",
            "budan_payment_30_days"]

    df = df.rename(columns=dict(zip(list(range(len(name))), name)))

    print(df.head(6))

    sql = "select merchant_id,doctor_ad_money_30_days," \
          "service_pv_30,expert_pv_30,organization_pv_30,doctor_discount_30_days from statistic_merchant_rank_factor " \
          "where partition_date = '{}';".format(date_str)

    cursor = db.cursor()
    cursor.execute(sql)
    result = cursor.fetchall()
    db.close()
    tmp = pd.DataFrame(list(result))
    name = ["merchant_id", "doctor_ad_money_30_days","service_pv_30","mexpert_pv_30","organization_pv_30",
            "doctor_discount_30_days"]
    tmp = tmp.rename(columns=dict(zip(list(range(len(name))), name)))
    print(tmp.head(6))

    df["merchant_id"] = df["merchant_id"].astype("str")
    tmp["merchant_id"] = tmp["merchant_id"].astype("str")
    df = pd.merge(df, tmp, on='merchant_id')

    for i in ["hospital_exposure_pv_30","service_exposure_pv_30","expert_exposure_pv_30",
              "service_ctr_30","hospital_ctr_30","expert_ctr_30","budan_payment_30_days",
              "doctor_ad_money_30_days","service_pv_30","mexpert_pv_30","organization_pv_30",
              "doctor_discount_30_days"]:
        df[i] = df[i].astype("float")

    df["all_exposure"] = df["hospital_exposure_pv_30"] + df["service_exposure_pv_30"] + df["expert_exposure_pv_30"]
    df = df[~df["all_exposure"].isin([0.0])]
    df["tmp"] = df["service_pv_30"] + df["mexpert_pv_30"] +df["organization_pv_30"]
    df = df[~df["tmp"].isin([0.0])]
    print("aaaaaaaa")
    df["ctr"] = df["service_exposure_pv_30"] / df["all_exposure"] * df["service_ctr_30"] + \
                df["hospital_exposure_pv_30"]/ df["all_exposure"] * df["hospital_ctr_30"] + \
                df["expert_exposure_pv_30"]/df["all_exposure"] * df["expert_ctr_30"]
    df["commission"] = (df["doctor_ad_money_30_days"] + df["budan_payment_30_days"])/df["tmp"]
    df["cpt"] = df["doctor_discount_30_days"]/df["tmp"]
    df["score"] = df["ctr"]**0.5 * (df["commission"] + df["cpt"])
    columns = ["doctor_id","score","ctr","commission","cpt","hospital_id","hospital_exposure_pv_30",
               "service_exposure_pv_30","expert_exposure_pv_30",
              "service_ctr_30","hospital_ctr_30","expert_ctr_30","merchant_id","budan_payment_30_days",
              "doctor_ad_money_30_days","service_pv_30","mexpert_pv_30","organization_pv_30",
              "doctor_discount_30_days"]
    data = df.loc[:, columns]
 #    renames = {'doctor_id': '机构管理者id',
 # 'score': '得分',
 # 'ctr': '点击率',
 # 'commission': '单pv佣金贡献',
 # 'cpt': '单pv的CPT消耗',
 # 'hospital_id': '医院id',
 # 'hospital_exposure_pv_30': '该医院卡片的曝光-30天',
 # 'service_exposure_pv_30': '该医院名下所有美购的曝光-30天',
 # 'expert_exposure_pv_30': '机构名下所有医生卡片曝光-30天',
 # 'service_ctr_30': '机构名下所有美购ctr-30天',
 # 'hospital_ctr_30': '医院卡片ctr-30天',
 # 'expert_ctr_30': '机构名下所有医生ctr-30天',
 # 'merchant_id': '商户id',
 # 'budan_payment_30_days': '30天已补订单佣金',
 # 'doctor_ad_money_30_days': '商户名下非医生、机构账号的验证订单抽成之和',
 # 'service_pv_30': '该商户名下所有美购的美购详情页PV',
 # 'mexpert_pv_30': '该商户名下所有医生主页PV',
 # 'organization_pv_30': '该商户名下机构主页PV',
 # 'doctor_discount_30_days': '该商户的CPT纯消耗金额'}
 #
 #    data = data.rename(columns=renames)
    data = data.drop_duplicates()

    print(data.head(6))
    data.to_csv('/tmp/hospital.csv',index=False,encoding="utf_8_sig")


if __name__ == "__main__":
    doctor()
    hospital()

