| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #coding:utf-8
- import os,json
- import time
- import datetime
- import sys
- import django
- from django.core.cache import cache
- from django.db import connection
- from django.db.models import Q,Sum,Count,F
- sys.path.append('/mnt/wzbapi/src')
- os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
- django.setup()
- import common.models as cm
- import common.common_functions as ccf
- def sync_stock():
- """同步用户持股和股票仓库数据
- """
- prset = cm.PlayerRecord.objects.order_by("stock_date")
- for index,pr in enumerate(prset):
- player_id = pr.player_id
- match_id = pr.match_id
- match_group = pr.match_group
- stock_date = pr.stock_date
- today_stock = pr.today_stock
- yesterday_stock = pr.yesterday_stock
- print pr.username,stock_date
-
- today_stock = json.loads(today_stock) if today_stock else []
- yesterday_stock = json.loads(yesterday_stock) if yesterday_stock else []
-
- new_today_stock = []
- for ts in today_stock:
- if ts["name"] and ts["fund"]:
- stock,flag = cm.Stock.objects.get_or_create(name=ts["name"])
- ts["stock_id"] = stock.id
- new_today_stock.append(ts)
- #更新用户持股情况
- cm.UserStock.objects.get_or_create(
- player_id = player_id,
- stock_id = stock.id,
- stock_date = stock_date
- )
- yes_today_stock = []
- for ts in yesterday_stock:
- if ts["name"] and ts["fund"]:
- stock,flag = cm.Stock.objects.get_or_create(name=ts["name"])
- ts["stock_id"] = stock.id
- yes_today_stock.append(ts)
- pr.today_stock = json.dumps(new_today_stock)
- pr.yesterday_stock = json.dumps(yes_today_stock)
- pr.save()
- def sync_win_defend():
- """更新胜率和最大回撤
- """
- match_id = 7
- players = cm.Player.objects.filter(match_id=match_id)
- for pl in players:
- record = cm.PlayerRecord.objects.filter(match_id=match_id,player_id=pl.id).order_by("-stock_date").first()
- if record:
- print record.username,record.stock_date
- from threading import Thread
- t = Thread(target=update_win_defend_rank,args=(record,))
- t.start()
- def update_win_defend_rank(record):
- """更新胜率防守榜
- """
- player_id = record.player_id
- user_id = record.user_id
- match_id = record.match_id
- match_group = record.match_group
- user_name = record.username
- today_fund = record.today_fund
- total_income = record.total_income
- zq = record.zq
- cw = record.cw
- df = record.df
- pz = record.pz
- #胜率
- qset = cm.PlayerRecord.objects.filter(match_id=match_id,player_id=player_id)
- win_rate = qset.filter(today_income__gt=0).count()/float(qset.count()) if qset else 0.0
- win_rate = round(win_rate,3)
- #win_rate = "{}%".format(win_rate*100)
- #最大回撤
- badest_income = qset.order_by("today_income").first().today_income
- badest_income = round(badest_income,3)
- obj,flag = cm.WinDefendRank.objects.get_or_create(
- user_id = user_id,
- player_id = player_id,
- match_id = match_id,
- match_group = match_group
- )
- obj.username = user_name
- obj.today_fund = today_fund
- obj.total_income = total_income
- obj.win_rate = win_rate
- obj.badest_income = badest_income
- obj.save()
- def sync_hot_seller():
- """同步热门清仓数据
- """
- all_dates = list(cm.UserStock.objects.order_by("stock_date").values_list("stock_date",flat=True))
- all_dates = list(set(all_dates))
- all_dates.sort()
- for stock_date in all_dates:
- stock_date_time = ccf.str_to_datetime(stock_date,"%Y-%m-%d")
- yesterday = (stock_date_time - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- #昨天所有持股id
- all_stock_ids = list(cm.UserStock.objects.filter(stock_date=yesterday).values_list("stock_id",flat=True))
- all_stock_ids = list(set(all_stock_ids))
- for stock_id in all_stock_ids:
- print stock_date,stock_id
- stock = cm.Stock.objects.filter(id=stock_id).first()
- #昨天持股选手
- yes_players = list(cm.UserStock.objects.filter(stock_date=yesterday,stock_id=stock_id).values_list("player_id",flat=True))
- #今天持股选手
- td_players = list(cm.UserStock.objects.filter(stock_date=stock_date,stock_id=stock_id).values_list("player_id",flat=True))
- if yes_players and td_players:
- #清仓选手
- sell_players = list(set(yes_players)-set(td_players))
- if sell_players:
- seller_ids = json.dumps(sell_players)
- count = len(sell_players)
- obj,flag = cm.HotStockSellCount.objects.get_or_create(
- stock_id = stock_id,
- stock_name = stock.name,
- stock_date = stock_date
- )
- obj.seller_ids = seller_ids
- obj.count = count
- obj.save()
- if __name__ == "__main__":
- print "start sync stock..."
- st = time.time()
- sync_stock()
- sync_win_defend()
- sync_hot_seller()
- print "time cost:",time.time()-st
|