# -*- coding: UTF-8 -*-
import pymysql
import datetime
import pandas as pd


def get_yesterday_date():
    today = datetime.date.today()
    yesterday = today - datetime.timedelta(days=1)
    yesterday = yesterday.strftime("%Y-%m-%d")
    print(yesterday)
    return yesterday


def get_data():
    conn2db = pymysql.connect(host='10.66.157.22', port=4000, user='root', passwd='3SYz54LS9#^9sBvC', db='eagle')
    cursor = conn2db.cursor()
    sql = "select device_id from ffm_diary_queue where device_id regexp '[5|6]$'"
    cursor.execute(sql)
    result = cursor.fetchall()
    device = tuple(pd.DataFrame(list(result))[0].values.tolist())
    cursor.close()
    print(device[0:2])

    return device


def ctr_all():
    db = pymysql.connect(host='10.66.157.22', port=4000, user='root', passwd='3SYz54LS9#^9sBvC', db='jerry_prod')
    cursor = db.cursor()
    sql_active = "select distinct device_id from data_feed_exposure " \
                 "where cid_type = 'diary' and device_id regexp'[5|6]$' and stat_date = '{}';".format(date)
    cursor.execute(sql_active)
    result = cursor.fetchall()
    tail56 = pd.DataFrame(list(result))[0].values.tolist()
    start = "2018-09-05"
    sql_all = "select distinct device_id from data_feed_click " \
              "where stat_date >= '{}' and stat_date <= '{}' and cid_type = 'diary'".format(start,date)
    cursor.execute(sql_all)
    result_all = cursor.fetchall()
    df = pd.DataFrame(list(result_all))
    all_user = df[0].values.tolist()
    print("老用户总数：")
    print(len(all_user))
    day_all = set(all_user) & set(tail56)
    print("当天老用户总数：")
    print(len(day_all))
    cover = len(day_all & set(device_id))
    print("当天尾号5或6活跃用户覆盖数：")
    print(cover)
    cover_percent = format(cover / len(day_all),".3f")
    print("当天尾号5或6活跃用户覆盖率：")
    print(cover_percent)
    sql_click = "select count(cid) from data_feed_click " \
                "where (cid_type = 'diary' or cid_type = 'diary_video') " \
                "and stat_date = '{}' and device_id regexp '[5|6]$';".format(date)
    cursor.execute(sql_click)
    click = cursor.fetchone()[0]
    print("点击数：" + str(click))
    sql_exp = "select count(cid) from data_feed_exposure " \
              "where (cid_type = 'diary' or cid_type = 'diary_video') and stat_date = '{}' and " \
              "device_id regexp '[5|6]$'".format(date)
    cursor.execute(sql_exp)
    exp = cursor.fetchone()[0]
    print("曝光数：" + str(exp))
    print("点击率：" + str(click / exp))
    return len(day_all),cover,cover_percent,click,exp,format(click/exp,".6f")


def ctr():
    sql_click = "select count(cid) from data_feed_click " \
              "where (cid_type = 'diary' or cid_type = 'diary_video') " \
                "and stat_date = '{}' and device_id in {};".format(date,device_id)
    db = pymysql.connect(host='10.66.157.22', port=4000, user='root', passwd='3SYz54LS9#^9sBvC', db='jerry_prod')
    cursor = db.cursor()
    cursor.execute(sql_click)
    click = cursor.fetchone()[0]
    print("实验用户点击数："+str(click))
    sql_exp = "select count(cid) from data_feed_exposure " \
              "where (cid_type = 'diary' or cid_type = 'diary_video') and stat_date = '{}' and " \
              "device_id in {}".format(date,device_id)
    cursor.execute(sql_exp)
    exp = cursor.fetchone()[0]
    print("实验用户曝光数："+str(exp))
    print("实验用户点击率："+str(click/exp))

    return click,exp,format(click/exp,".6f")


def rate2file():
    output_path = DIRECTORY_PATH + "56ctr.csv"
    with open(output_path,'a+') as f:
        line = date.replace('-', '')+','+str(temp_data[0])+','+str(temp_data[1])+','+str(temp_data[2])+\
               ","+str(data[0])+","+str(data[1])+","+str(data[2])+","+str(data[3])+","+str(data[4])\
               +","+str(data[5])+'\n'
        f.write(line)


if __name__ == "__main__":
    DIRECTORY_PATH = "/data/ffm/"
    date = get_yesterday_date()
    device_id = get_data()
    temp_data = ctr()
    data = ctr_all()
    rate2file()
