from app.api_data.order_util import *
from model.DataBaseUtils import MysqlUtils
from concurrent.futures import ThreadPoolExecutor
from model.DingTalkUtils import DingTalkUtils
db=MysqlUtils()


def get_account(plactform,id=None):
    op = f" and id={id} " if id else ''
    data = db.quchen_text.getData(f"select text from order_account_text where platform='{plactform}' {op}")
    new_data = []
    for i in data:
        new_data.append(i[0].replace('\n', '').split(","))
    return new_data

def get_new_account(plactform):
    data = db.quchen_text.getData(f"select text from order_account_text where platform='{plactform}' and create_time>='{du.get_n_days(-1)}'")
    new_data = []
    for i in data:
        new_data.append(i[0].replace('\n', '').split(","))
    return new_data

def yangguang(start=None, end=None,new=None):

    if start:
        start = start+' 00:00:00'
        end = end+' 23:59:59'
    else:
        start = du.getTodayOrYestoday() + ' 00:00:00'
        end = du.get_n_hours_ago(0)

    client_id = 10008097
    token = '2xa1d55tTPBjeEA8Ho'
    accounts=get_account("阳光") if new is None else get_new_account('阳光')
    if accounts.__len__()==0:
        return
    else:
        print(f"阳光账号数:{accounts.__len__()}")

    for i in accounts:
        stage = i[0]
        vip_id = i[1]
        print(vip_id)
        get_yg_vip_channel(stage, vip_id, client_id, token)
        get_yg_data(stage, vip_id, client_id, token, start, end)
    x=1
    while True:
        a = db.quchen_text.getOne("select count(1) from yangguang_path where update_time is null")
        print(f" vip 待处理数量 {a} 正在等待数据回调")
        if a == 0:
            break
        time.sleep(60)
        x+=1
        if x>20:
            DingTalkUtils.send('阳光订单回调延时20min','18860455786')
            break

    for i in accounts:
        vip_id = i[1]
        stage=i[0]
        parse_yg_data(vip_id,stage)


def huasheng(start=None,end=None,new=None):
    if start is None:
        start = end = du.getTodayOrYestoday()

    executor = ThreadPoolExecutor(max_workers=5)
    accounts = get_account("花生") if new is None else get_new_account('花生')
    if len(accounts)==0:
        return
    else:
        print(f'花生有账号{len(accounts)}个')
    li = []
    for account in accounts:
        channel_data = get_hs_channel(account)
        if not channel_data:
            continue
        else:
            print(f"账号:{account[2]} 有channel{len(channel_data)}个")
        for merchant in channel_data:
            executor.submit(get_huasheng_order_task, start, end, account, merchant,li)
    executor.shutdown(True)
    save_hs_data(li)


def qiyue(start=None,end=None,new=None):
    if start is None:
        start = end = du.getNow()
    accounts = get_account("七悦") if new is None else get_new_account('七悦')
    if len(accounts) == 0:
        return
    else:
        print(f'七悦有账号{len(accounts)}个')
    for account in accounts:
            get_qiyue_order_task(start, end, account)



def wending(start=None,end=None,new=None):
    if start is None:
        start = end = du.getNow()

    accounts = get_account("文鼎") if new is None else get_new_account('文鼎')
    if len(accounts) == 0:
        return
    else:
        print(f'文鼎有账号{len(accounts)}个')
    for account in accounts:
          get_wd_order_task(start, end, account)


def zhangdu(start=None,end=None,new=None):
    if start is None:
        start = end = du.getNow()

    accounts = get_account("掌读") if new is None else get_new_account('掌读')
    if len(accounts) == 0:
        return
    else:
        print(f'掌读有账号{len(accounts)}个')
    for account in accounts:
          get_zd_order_task(start, end, account)



def zhangzhongyun(start=None,end=None,new=None):
    if start is None:
        start = end = du.getNow()

    executor = ThreadPoolExecutor(max_workers=5)
    accounts = get_account("掌中云") if new is None else get_new_account('掌中云')
    if len(accounts) == 0:
        return
    else:
        print(f'掌中云有账号{len(accounts)}个')
    for account in accounts:
        executor.submit(get_zzy_order_task,start, end, account)
    executor.shutdown()


def yueweng(start=None,end=None,new=None):
    if start is None:
        start = end = du.getNow()

    executor = ThreadPoolExecutor(max_workers=5)
    accounts = get_account("阅文") if new is None else get_new_account('阅文')
    if len(accounts) == 0:
        return
    else:
        print(f'阅文有账号{len(accounts)}个')
    for account in accounts:
        executor.submit(get_yueweng_order_task,start, end, account)
    executor.shutdown()



def hourly():
    # try:
    #     yangguang()
    # except:
    #     pass
    huasheng()
    qiyue()
    wending()
    zhangdu()
    zhangzhongyun()


def daily():
    st = du.get_n_days(-10)
    st2=du.get_n_days(-3)
    et = du.get_n_days(-1)
    # try:
    #     yangguang(st, et)
    # except:
    #     pass
    huasheng(st, et)
    qiyue(st2, et)    # 有毛病
    wending(st, et)
    zhangdu(st, et)
    zhangzhongyun(st, et)

def daily_yg():
    st = du.get_n_days(-10)
    et = du.get_n_days(-1)
    try:
        yangguang(st, et)
    except:
        pass


if __name__ == '__main__':
    a=time.time()
    yangguang()
    print(time.time()-a)
    # huasheng('2021-02-24','2021-02-24')
    # qiyue()
    # wending()

    # zhangdu('2020-11-01', '2020-12-20')
    # zhangzhongyun('2020-11-01', '2021-02-23')