import tushare as ts
import db
import history
import time

# 初始化数据库操作类
mysql = db.MY_SQL()
#
# 行业分类API()
category = ts.get_industry_classified()
# 保存分类到数据库
mysql.save_cate_table(category)

# 接近涨停的票数据
maxData = []

# 实时行情API
today = ts.get_today_all()
# 保存到实时行情表
mysql.save_now_table(today)
# 取出涨幅接近涨停的票
for i in today.index:
    d = today.loc[i]
    if d['changepercent'] > 9.6:
        # print(d['code'] + " " + d['name'])
        v = {'code': d['code'], 'name': d['name'], 'percent': d['changepercent']}
        maxData.append(v)

# 给接近涨停的票加上[行业分类]参数
for i in range(len(maxData)):
    for j in category.index:
        if maxData[i]['code'] == category.loc[j]['code']:
            maxData[i]['cate'] = category.loc[j]['c_name']

# print(maxData)


# 排序参数，取第2位排序
def take_second(elem):
    return elem[1]


# 排序参数，取第4位排序
def take_four(elem):
    return elem[3]


# 取出接近涨停票中的cate分类
# 并计算出现每个分类的次数
# 目的是取出[热门行业]
cates = {}
for i in range(len(maxData)):
    key = maxData[i].get('cate')
    if key in cates:
        num = cates.get(key) + 1
    else:
        num = 1
    cates[key] = num

# 分类排序并取出排名
sorts = []
cate_list = list(cates.items())
cate_list.sort(key=take_second, reverse=True)

# 取行业排名前6
for i in range(0, 6):
    if cate_list[i][0] is not None:
        sorts.append(cate_list[i][0])

print(sorts)

# 清空历史表
mysql.clear_history()
# 处理每个行业的数据
for i in range(len(sorts)):
    # 取出同行业全部票
    stocks = mysql.getListForCate(sorts[i])
    stockPercent = []
    for i in range(len(stocks)):
        code = stocks[i][0]
        # 查询票当前涨幅
        p = mysql.getPercent(code)
        for j in p:
            s = (float(j[0]),)
            a = stocks[i] + s
            stockPercent.append(a)
    # 根据涨幅排序
    stockPercent.sort(key=take_four, reverse=True)
    # print(stockPercent)

    for z in range(len(stockPercent)):
        if 3 <= float(stockPercent[z][3]):
            # print(stockPercent[z])
            # 查询单个的180天历史高位数据，并保存到数据库
            history.query_stock_history(mysql, stockPercent[z][0],
                                        stockPercent[z][1],
                                        stockPercent[z][2])

# 准备写文件
f = open('./code.txt', 'a+')
f.write("\t\n\n")
f.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

# 处理每个行业的数据
for x in range(len(sorts)):
    stocks = mysql.getListForCate(sorts[x])
    stockPercent = []
    for i in range(len(stocks)):
        code = stocks[i][0]
        p = mysql.getPercent(code)
        for j in p:
            s = (float(j[0]),)
            a = stocks[i] + s
            # print(a)
            stockPercent.append(a)
    # 根据涨幅排序
    stockPercent.sort(key=take_four, reverse=True)
    # print(stockPercent)

    # 今日龙头
    maxPercent = []
    for i in range(len(stockPercent)):
        # 取出今天行业的领涨龙头
        if 9.8 <= float(stockPercent[i][3]):
            maxPercent.append(stockPercent[i])

    # print(maxPercent)

    allStr = ''
    for i in maxPercent:
        # 查询龙头历史数据
        days = mysql.selectDay(i[0])
        for j in days:
            result = mysql.selectRelationStocks(j[4], i[2])
            # print(str(result))
            allStr += str(result)
    # print(allStr)

    # 处理字符
    allStr = allStr.replace("(", "")
    allStr = allStr.replace(")", "")
    allStr = allStr.replace("'", "")
    allStr = allStr.replace(",,", ",")
    allStr = allStr.replace(" ", "")
    # print(allStr)

    # 移除重复字符
    sortList = []
    for i in allStr.split(','):
        if i != '':
            d = (i, allStr.count(i))
            if sortList.count(d) <= 0:
                sortList.append(d)
    sortList.sort(key=take_second, reverse=True)
    # print(sortList)

    result = []
    for i in sortList:
        # 查询历史中高位出现的次数
        num = mysql.selectCount(i[0])[0]
        if num >= 3:
            # 查询实时行情
            df = ts.get_realtime_quotes(i[0])
            p = 0
            price = 0
            n = ''
            for j in df.index:
                # 计算涨幅
                price = float(df.loc[j]['price'])
                pre = float(df.loc[j]['pre_close'])
                percent = (price - pre) / pre * 100
                p = float(format(percent, '.2f'))

                n = df.loc[j]['name']

            # 过滤百分比太高和太低的数据
            if 1 <= p <= 7:
                # 查询15天内的上升趋势
                if history.query_month_history(i[0]):
                    result.append((i[0] + ' ' + n, price, str(p) + "%", num))

    result.sort(key=take_four, reverse=True)

    print(sorts[x])
    print(result)

    f.write("\t\n" + sorts[x] + "\t\n")
    f.write(str(result))

f.close()

mysql.closeDB()

# 历史行情
# data = ts.get_hist_data('000014', '2019-04-08', '2019-04-09')
# print(data)
#


# print(ts.get_latest_news(top=5, show_content=True))

# d = ts.inst_detail()
# for i in d.index:
#     print(d.loc[i]['code'] + " \t " + d.loc[i]['name'])

# pro = ts.pro_api(token)
# data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
# for i in data.index:
#     print(data.loc[i][])
