if 1:
    from   oneclass.onedb import Onedb
    from   oneclass.oneqsnew import Oneqs
    import os,math,sys,time,re,json,datetime,requests,warnings,logging,xlrd,traceback
    import numpy as np
    import pandas as pd
    import tushare as ts
    from   sqlalchemy import create_engine
    import sqlalchemy  #初始化数据库连接，使用pymysql模块
    import pymysql
    import multiprocessing as mp
if 1:
    ts.set_token('8f6e67ec8a48922bbb531b95687625d99ee263940a07561ae95f4648')  # Tushare Pro
    pd.set_option('mode.chained_assignment', None)
    warnings.filterwarnings("ignore")
    durtime,durting1,FocusPeriod,uihandle,plock,showtype,havelistseq=0.001,0.5,0,0,0,1,1
    #stockcode,mysqlhost="300027.SS","119.45.95.223"
    stockcode,mysqlhost="300027.SS","60.204.129.214"
    xgresult,qsresult,allstocklist=pd.DataFrame(),pd.DataFrame(),pd.DataFrame()
def combine_choose():
    onedb=Onedb()
    df = pd.read_csv(r"./csv/2022.csv")
    df['stockcode'] = df['stockcode'].map(lambda x: format_code(x[1:-1]))
    df=df.drop_duplicates(['stockcode'])
    df.rename(columns={'name':'stockname'},inplace=True)
    df['time']="2022"
    df['reason']="月线"
    onedb.into_table(df,"tmpch","stockcode",9)
    print(df)
def help_info():
    print("--main: main()")
    print("--xg2022:xg_2022()")
    print("--xghavelist:xg_havelist()")
    print("--xgselct: xg_select()")
    print("--hqall:get_hq_all()")
    print("--autotrade:get_autotrade()")
def revise_choosed():
    onedb=Onedb()
    formerdb=onedb.execute_sqlnew("select * from choosed")
    print("formerdb",formerdb)
    df=onedb.execute_sqlnew("call choosealls")
    df.rename(columns={'cm':'reason'},inplace=True)
    tmptoday=datetime.datetime.now().strftime('%Y-%m-%d')
    df['time']=tmptoday
    print("querydb",df)
    #combine and del duplication
    formerdb=formerdb.append(df,ignore_index=True)
    revisedb=formerdb.drop_duplicates(subset=['stockcode','reason'],keep='first',ignore_index=True)
    '''
    同一个原因在同一天出现 => 被删除重复
    同一个原因在不同天出殃 => 保留??? 
    是否需要按信号的周期和间隔长度来判断去留, 保留正确的信号
    是否需要保留选股时的趋势或信号, 用信号来判断是否是同一次信号
    '''
    print("reviewd db",revisedb)
    #update choosed db
    onedb.execute_sqlnew("delete from choosed")  #delete or drop table
    onedb.into_table(revisedb,"choosed","stockcode",9)

def format_code(scode):
    if len(scode)==9: return scode
    if scode[0:1]=="6":
        return scode+".SH"
    elif scode[0:1]=="8" or scode[0:1]=="4": 
        return scode+".BJ"
    else:
        return scode+".SZ"
def get_autotrade():
    autotrade=pd.DataFrame()
    autotrade = pd.read_csv(r"./csv/autotrade.csv",index_col=0)
    autotrade=autotrade.fillna("")
    autotrade.reset_index(drop=False, inplace=True)  
    for i in range(autotrade.shape[0]):
        autotrade['stockcode'][i]=autotrade['stockcode'][i][1:7]
    k=Oneqs(stockcode)
    #k.del_table("autotradelist")
    #k.into_table(autotrade,"autotradelist","stockcode",6)
    onedb=Onedb()
    sql="DELETE FROM autotradelist WHERE loopornot<>'no'"
    onedb.execute_sql(sql)
    onedb.into_table(autotrade,"autotradelist","stockcode",6)
    print(autotrade)
if __name__=="__main__":
    if sys.argv[1] == "xg2022":                     #读取csv/2022.csv计算后输出到tmpout/2022result.csv
        k=Oneqs(stockcode)
        try:
            if sys.argv[2]=="1":
                k.get_div_fromdb()
        except:
            pass
        k.xg_2022_mp()
        revise_choosed()
    if sys.argv[1] == "xgall":                     #读取csv/2022.csv计算后输出到tmpout/2022result.csv
        k=Oneqs(stockcode)
        k.get_div_fromdb()
        k.xg_all_mp()
        revise_choosed()
    if sys.argv[1] == "xghavelist":
        k=Oneqs(stockcode)
        k.get_div_fromdb()
        k.get_havelist()
        k.xg_havelist()                             #从db读取havelist,依次显示分析结果
    if sys.argv[1] == "hqall":                      #读取所有股票行情
        k=Oneqs(stockcode)
        k.get_hq_all()
    if sys.argv[1] == "autotrade":                  #执行每日的定时常规工作 
        get_autotrade()                             #读csv/autotrade.csv并放到autotradelist
    if sys.argv[1] == "?":
        help_info()
    if sys.argv[1] == "choose":
        '''记录所有选股'''
        revise_choosed()
    print(datetime.datetime.now().strftime('%Y-%m-%d-%H:%M:%S'))
