123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403 |
- #coding=utf-8
- '''
- '''
- import os,re,random
- import json,time,datetime
- import shutil
- import tempfile
- import zipfile
- from docxtpl import DocxTemplate,InlineImage
- from docx.shared import Mm
- from django.db import transaction
- from django.conf import settings
- import common.models as cm
- import common.error_info as ce
- import common.common_functions as ccf
- import common.common_control as ccc
- import account.password_handle as ph
- from utils.exceltool import ExcelTool
- from utils.jgpush import send_notification_by_registration_ids
- import wzhifuSDK as wxpay
- from utils.exceltool import ExcelTool
- from utils.qrcodetool import gen_general_qrcode
- from django.db.models import Q,Sum,Count,F
- from PIL import Image
- from PIL import Image,ImageDraw,ImageFont
- from django.db import transaction
- from threading import Thread
- #from django.core.cache import cache
- from django.db import connection
- import calendar
- import xlrd
- import xlwt
- from xlutils.copy import copy
- from xltpl.writer import BookWriter
- from django_redis import get_redis_connection
- from constants import *
- from utils.aliyun_sms import send_verify_code,send_signup_success
- def async(f):
- def wrapper(*args, **kwargs):
- thr = Thread(target=f, args=args, kwargs=kwargs)
- thr.start()
- return wrapper
- def get_today_date():
- if datetime.datetime.now().strftime("%H:%M") < "15:00":
- if datetime.datetime.now().weekday() in [5,6] or datetime.datetime.now().strftime("%Y-%m-%d") in MISS_DATES:
- today = cm.PlayerRecord.objects.all().order_by("-stock_date").first().stock_date
- else:
- if datetime.datetime.now().weekday()==0:
- today = (datetime.datetime.now()-datetime.timedelta(days=3)).strftime("%Y-%m-%d")
- else:
- today = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- else:
- if datetime.datetime.now().weekday() in [5,6] or datetime.datetime.now().strftime("%Y-%m-%d") in MISS_DATES:
- today = cm.PlayerRecord.objects.all().order_by("-stock_date").first().stock_date
- else:
- today = datetime.datetime.now().strftime("%Y-%m-%d")
- return today
- #return '2021-11-05'
- #@async
- def update_group_rank(match_id,match_group,stock_date):
- #return
- prset = cm.PlayerRecord.objects.filter(match_id=match_id,match_group=match_group,stock_date=stock_date).order_by("-total_income")
- records = prset.values()
- case_id = " case id "
- cases = []
- where = []
- for index,pr in enumerate(prset):
- key = "%s_%s_%s_%s" % (pr.player_id,match_id,match_group,stock_date)
- record = records[index]
- record.update({"group_rank":index+1})
- ccc.cache.delete(key)
- ccc.pl.set(key,json.dumps(record,cls=ccc.CusJSONEncoder))
- ccc.pl.execute()
- #@ccc.cache_data()
- def get_notices():
- """
- """
- notices = list(cm.Article.objects.filter(status=2,type="notice").values())
- return notices
- def get_index_data(request):
- """首页数据
- """
- player = request.player
- if not player:
- raise ce.TipException(u"该账号未参加任何赛事!")
- player_id = player.id
- match_id = player.match_id
- match_group = player.match_group
- #if datetime.datetime.now().hour < 15:
- # today = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- #else:
- # today = datetime.datetime.now().strftime("%Y-%m-%d")
- today = get_today_date()
- match_name = get_match_info(match_id).get("name")
- records_set = cm.PlayerRecord.objects.filter(player_id=player_id,match_id=match_id)
- if records_set:
- try:
- cur_rank = get_today_record(player_id,match_id,match_group,today).get("group_rank","")
- records = list(records_set.order_by("-stock_date").values())
- except:
- cur_rank = 0
- records = []
- else:
- cur_rank = 0
- records = []
- for item in records:
- today_stock = json.loads(item["today_stock"]) if item["today_stock"] else []
- today_stock = filter(lambda x:x["name"],today_stock)
- item["today_stock"] = today_stock
- item["today_stock_img"] = json.loads(item["today_stock_img"]) if item["today_stock_img"] else []
- yesterday_stock = json.loads(item["yesterday_stock"]) if item["yesterday_stock"] else []
- yesterday_stock = filter(lambda x:x["name"],yesterday_stock)
- item["yesterday_stock"] = yesterday_stock
- item["yesterday_stock_img"] = json.loads(item["yesterday_stock_img"]) if item["yesterday_stock_img"] else []
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- #通知
- notices = get_notices()
- ret = {"match_name":match_name,"cur_rank":cur_rank,"records":records,"notices":notices}
- return ret
- def get_player_match_list(request):
- """选手参赛列表数据
- """
- uid = request.user.id
- now_str = datetime.datetime.now().strftime("%Y-%m-%d")
- cur_match_id = ccc.get_cur_match().id
- match_ids = list(cm.Player.objects.filter(user_id=uid).values_list("match_id",flat=True))
- matchs = list(cm.Match.objects.filter(id__in=match_ids).values())
- for item in matchs:
- player = cm.Player.objects.filter(user_id=uid,match_id=item["id"]).first()
- item["player_id"] = player.id if player else 0
- return matchs
- def get_group_income(match_id,match_group):
- """
- """
- data = []
- today = datetime.datetime.now().strftime("%Y-%m-%d")
- player_ids = list(cm.Player.objects.filter(match_id=match_id,match_group=match_group).values_list("id",flat=True))
- for player_id in player_ids:
- today_record = cm.PlayerRecord.objects.filter(match_id=match_id,match_group=match_group,player_id=player_id,stock_date=today).first()
- if today_record:
- data.append(today_record.total_income)
- data = list(set(data))
- data = sorted(data,key=lambda x:x,reverse=True)
- return data
- def get_player_match_detail(request):
- """选手参赛详情数据
- """
- qdata = request.json
- player_id = request.player.id
- user_id = request.player.user_id
- org_player_id = request.player.id
- match_group = request.player.match_group
- match_id = qdata.get("id")
- record_id = qdata.get("record_id")
- userinfo = {}
- cur_user_id = user_id
- cur_player_id = qdata.get("player_id")
- if not cur_player_id:
- cur_player_id = player_id
- today = get_today_date()
- ismine = True if int(cur_player_id) == player_id else False
- if not match_id:
- player = cm.Player.objects.filter(id=cur_player_id).first()
- match_id =player.match_id
- cur_user_id = player.user_id
- if record_id:
- records_set = cm.PlayerRecord.objects.filter(id=record_id)
- if records_set:
- match_id = records_set.first().match_id
- match_group = records_set.first().match_group
- player_id = records_set.first().player_id
- records_set = cm.PlayerRecord.objects.filter(player_id=player_id,match_id=match_id).order_by("-stock_date")
- today = records_set.first().stock_date
- else:
- if qdata.get("player_id"):
- player_id = qdata.get("player_id")
- match_group = cm.Player.objects.filter(id=player_id).first().match_group
- records_set = cm.PlayerRecord.objects.filter(player_id=player_id,match_id=match_id).order_by("-stock_date")
- match = cm.Match.objects.filter(id=match_id).values().first()
- groups = list(cm.MatchGroup.objects.filter(match_id=match_id).values_list("name",flat=True))
- match["groups"] = groups
- if records_set:
- records = list(records_set.values())
- else:
- records = []
- for item in records:
- item["today_stock"] = json.loads(item["today_stock"]) if item["today_stock"] else []
- item["today_stock_img"] = json.loads(item["today_stock_img"]) if item["today_stock_img"] else []
- item["yesterday_stock"] = json.loads(item["yesterday_stock"]) if item["yesterday_stock"] else []
- item["yesterday_stock_img"] = json.loads(item["yesterday_stock_img"]) if item["yesterday_stock_img"] else []
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- today_record = {}
- if records_set.first():
- today = records_set.first().stock_date
- #today_record = get_today_record(player_id,int(match_id),int(match_group),today)
- #if not today_record:
- # today_record = get_today_record_actual(player_id,match_id,today)
- if record_id:
- today = records_set.filter(id=record_id).first().stock_date
- if ismine:
- today_record = get_today_record_actual(player_id,match_id,match_group,today)
- else:
- today_record = get_today_record(player_id,int(match_id),int(match_group),today)
- if today_record:
- today_record["today_stock_img"] = json.loads(today_record["today_stock_img"]) if today_record["today_stock_img"] else []
- today_record["today_stock"] = json.loads(today_record["today_stock"]) if today_record["today_stock"] else []
- today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
- today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
- today_record["match_group_name"] = cm.MatchGroup.objects.filter(id=today_record["match_group"]).first().name
- today_record["players_num"] = cm.Player.objects.filter(match_group=today_record["match_group"]).count()
- today_record["win_rate"] = calc_win_rate(player_id,today_record["match_id"])
- badest = cm.PlayerRecord.objects.filter(player_id=player_id,match_id=match_id).order_by("today_income").first()
- if badest:
- today_record["badest_income"] = "{}%".format(badest.today_income*100)
- today_record["today_stock_total"] = round(today_record["today_stock_total"],4)
- userinfo = get_user_info(today_record["user_id"])
- today_record["style"] = userinfo.get("style")
- if not today_record:
- player_info = get_player_info(cur_player_id)
- today_record = {}
- today_record["stock_date"] = today
- today_record.update(player_info)
- today_record["player_id"] = player_info["id"]
- today_record["avatar"] = get_user_info(player_info["user_id"])["avatar"]
- userinfo = get_user_info(today_record["user_id"])
- today_record["style"] = userinfo.get("style")
- match["groups"] = [today_record["match_group_name"]] if today_record else []
- records = sorted(records,key=lambda x:x["stock_date"],reverse=True)
- if cm.UserFollows.objects.filter(user_id=org_player_id,follow_id=player_id).exists():
- is_follow = 1
- else:
- is_follow = 0
- if today_record and today_record.get("today_fund"):
- today_record["today_income_fund"] = round((today_record["today_fund"] - today_record["yesterday_fund"])*10000,2) if today_record["yesterday_fund"] else 0.00
- ret = {
- "match":match,
- "today_record":today_record,
- "userinfo":get_user_info(cur_user_id),
- "records":records,
- "is_follow":is_follow,
- "fans":cm.UserFollows.objects.filter(follow_id=player_id).count(),
- "followers":cm.UserFollows.objects.filter(user_id=player_id).count(),
- "stock_age":datetime.datetime.now().year - int(userinfo.get("join_time")) if userinfo.get("join_time") else 0,
- "stock_follow":list(cm.UserChoice.objects.filter(player_id=cur_player_id).values_list("stock_name",flat=True))
- }
- return ret
- def get_today_record(player_id,match_id,match_group,today):
- """
- """
- key = "%s_%s_%s_%s" % (player_id,match_id,match_group,today)
- today_record = ccc.cache.get(key)
- today_record = json.loads(today_record) if today_record else {}
- try:
- if today_record:
- user_info = get_user_info(today_record["user_id"])
- if user_info:
- user_info.pop("id")
- today_record.update(user_info)
- #仓位
- today_stock_total = 0
- today_stock = json.loads(today_record["today_stock"])
- for ts in today_stock:
- if ts["fund"]:
- try:
- today_stock_total += float(ts["fund"])
- except Exception as e:
- print e
- today_record["cangwei"] = "{}%".format(round(today_stock_total/today_record["today_fund"],4)*100)
- today_record["today_stock_total"] = today_stock_total
- except Exception as e:
- import traceback
- traceback.print_exc()
- return today_record
- def get_today_record_actual(player_id,match_id,match_group,today=None):
- """
- """
- if today:
- qset = cm.PlayerRecord.objects.filter(match_id=match_id,match_group=match_group,player_id=player_id,stock_date=today)
- else:
- qset = cm.PlayerRecord.objects.filter(match_id=match_id,match_group=match_group,player_id=player_id).order_by("-stock_date")
- today_record = qset.values().first()
- print(player_id,match_id,match_group,today,4444444444444444444)
- print(today_record,1111111111)
- if today_record:
- user_info = get_user_info(today_record["user_id"])
- if user_info:
- user_info.pop("id")
- today_record.update(user_info)
- #仓位
- today_stock_total = 0
- today_stock = json.loads(today_record["today_stock"])
- for ts in today_stock:
- if ts["fund"]:
- try:
- today_stock_total += float(ts["fund"])
- except Exception as e:
- print e
- today_record["cangwei"] = "{}%".format(round(today_stock_total/today_record["today_fund"],4)*100)
- today_record["today_stock_total"] = today_stock_total
- return today_record
- @ccc.cache_data()
- def get_match_group_players(match_id,match_group):
- players = list(cm.Player.objects.filter(match_id=match_id,match_group=match_group).values())
- return players
- @ccc.cache_data()
- def get_match_groups(match_id):
- """
- """
- match = cm.Match.objects.filter(id=match_id).values().first()
- groups = list(cm.MatchGroup.objects.filter(match_id=match_id,is_active=1).order_by("order").values())
- #groups = list(cm.MatchGroup.objects.filter(match_id=match_id).values())
- return match,groups
- #@ccc.cache_data()
- def get_cache_rank_list(player_id,match_id,today):
- """
- """
- match,groups = get_match_groups(match_id)
- #groups = sorted(groups,key=lambda x:x["id"])
- #if datetime.datetime.now().hour < 15:
- # today = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- #else:
- # today = datetime.datetime.now().strftime("%Y-%m-%d")
- data = []
- for item in groups:
- new_players = []
- players = get_match_group_players(match_id,item["id"])
- win_count = 0
- loss_count = 0
- for player in players:
- user_id = player["user_id"]
- user = get_user_info(user_id)
- username = user["username"] if user else ""
- player_id = player["id"]
- match_group = item["id"]
- today_record = get_today_record(player_id,match_id,match_group,today)
- if today_record:
- player.update(today_record)
- player["username"] = username
- player["org_today_income"] = player["today_income"]
- player["org_total_income"] = player["total_income"]
- player["total_income"] = "{}%".format(today_record["total_income"]*100)
- player["today_income"] = "{}%".format(today_record["today_income"]*100)
- if player["org_today_income"] >= 0.05:
- win_count += 1
- if player["org_today_income"] <= -0.05:
- loss_count += 1
- try:
- player["fund"] = round(player["fund"],4) if player["fund"] else 0.0
- player["init_fund"] = round(player["init_fund"],4)
- player["fund"] = round(player["init_fund"],4)
- player["today_fund"] = round(player["today_fund"],4)
- new_players.append(player)
- except Exception as e:
- print player
- pass
- #win_count = filter(lambda x:x["org_today_income"]>=0.05,new_players)
- #loss_count = filter(lambda x:x["org_today_income"]<=-0.05,new_players)
- new_players_sort = list(sorted(new_players,key=lambda x:x["org_total_income"],reverse=True))
- #new_players_sort = new_players
- item["players_num"] = len(players)
- #item["win_count"] = len(win_count)
- #item["loss_count"] = len(loss_count)
- item["win_count"] = win_count
- item["loss_count"] = loss_count
- item["players"] = new_players_sort[:3]
- data.append(item)
- return match,data
- def get_rank_list(request):
- """排名列表
- """
- qdata = request.json
- player_id = request.player.id
- match_id = qdata.get("match_id")
- today = qdata.get("stock_date")
- if not today:
- today = get_today_date()
- match,groups = get_cache_rank_list(player_id,match_id,today)
- ret = {"match":match,"groups":groups}
- return ret
- @ccc.cache_data()
- def get_user_info(uid):
- user = cm.UserInfo.objects.filter(id=uid).values().first()
- if user:
- user["style"] = []
- if user["zq"]:
- user["style"].append(user["zq"])
- if user["cw"]:
- user["style"].append(user["cw"])
- if user["df"]:
- user["style"].append(user["df"])
- return user
- #@ccc.cache_data()
- def get_player_info(player_id):
- player = cm.Player.objects.filter(id=player_id).values().first()
- return player
- @ccc.cache_data()
- def get_match_info(match_id):
- match = cm.Match.objects.filter(id=match_id).values().first()
- return match
- @ccc.cache_data()
- def get_group_info(group_id):
- group = cm.MatchGroup.objects.filter(id=group_id).values().first()
- group["players_num"] = cm.Player.objects.filter(match_group=group["id"]).count()
- return group
- def get_group_rank_list(request):
- """排名列表
- """
- qdata = request.json
- kwargs = qdata
- group_id = qdata.get("id")
- player_id = request.player.id
- match_id = request.player.match_id
- match_id = qdata.get("match_id")
- match_id = cm.MatchGroup.objects.filter(id=group_id).first().match_id
- today = qdata.get("stock_date")
- if not today:
- today = get_today_date()
- match = get_match_info(match_id)
- group = get_group_info(group_id)
- players = get_match_group_players(match_id,group_id)
- print(match_id,group_id)
- print(len(players))
- new_players = []
- for player in players:
- user_id = player["user_id"]
- user = get_user_info(user_id)
- username = user["username"] if user else ""
- player_id = player["id"]
- match_group = group_id
- today_record = get_today_record(player_id,match_id,int(match_group),today)
- if today_record:
- player.update(today_record)
- player["username"] = username
- player["org_today_income"] = player["today_income"]
- player["org_total_income"] = player["total_income"]
- player["total_income"] = "{}%".format(player["total_income"]*100)
- player["today_income"] = "{}%".format(player["today_income"]*100)
- player["fund"] = round(player["fund"],4)
- player["init_fund"] = round(player["init_fund"],4)
- player["today_fund"] = round(player["today_fund"],4)
- new_players.append(player)
- if kwargs.get("order_by") == "today_income__asc":
- new_players = sorted(new_players,key=lambda x:x["org_today_income"])
- elif kwargs.get("order_by") == "today_income__desc" :
- new_players = sorted(new_players,key=lambda x:x["org_today_income"],reverse=True)
- elif kwargs.get("order_by") == "total_income__asc":
- new_players = sorted(new_players,key=lambda x:x["org_total_income"])
- elif kwargs.get("order_by") == "total_income__desc":
- new_players = sorted(new_players,key=lambda x:x["org_total_income"],reverse=True)
- else:
- new_players = sorted(new_players,key=lambda x:x["org_total_income"],reverse=True)
- #new_players = []
- #分页
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",50))
- #page_size = 50
- if page and page_size:
- total,new_players = ccf.get_page_list(new_players,page,page_size)
- else:
- total = len(new_players)
- #应到、实到、请假人数
- total_person = cm.Player.objects.filter(match_group=group_id,match_status=1).count()
- actual_person = cm.PlayerRecord.objects.filter(match_group=group_id,stock_date=today).count()
- leave_person = total_person - actual_person
- win_person = cm.PlayerRecord.objects.filter(match_group=group_id,stock_date=today,total_income__gte=0).count()
- loss_person = cm.PlayerRecord.objects.filter(match_group=group_id,stock_date=today,total_income__lt=0).count()
- ret = {"group":group,"players":new_players,"total":total,"total_person":total_person,
- "actual_person":actual_person,"leave_person":leave_person,"win_person":win_person,"loss_person":loss_person}
- return ret
- def get_player_match_records(request):
- """选手参赛每日持股
- """
- qdata = request.json
- player_id = request.player.id
- match_id = qdata.get("id")
- q_player_id = qdata.get("player_id")
- if q_player_id:
- player_id = q_player_id
- page = int(qdata.get("page",0))
- page_size = int(qdata.get("page_size",20))
- records_set = cm.PlayerRecord.objects.filter(player_id=player_id,match_id=match_id).order_by("-stock_date")
- data = list(records_set.values())
- for item in data:
- today_stock = json.loads(item["today_stock"]) if item["today_stock"] else []
- today_stock = filter(lambda x:x["name"],today_stock if today_stock else [])
- item["today_stock"] = today_stock
- item["today_stock_img"] = json.loads(item["today_stock_img"]) if item["today_stock_img"] else []
- yesterday_stock = json.loads(item["yesterday_stock"]) if item["yesterday_stock"] else []
- yesterday_stock = filter(lambda x:x["name"],yesterday_stock if yesterday_stock else [])
- item["yesterday_stock"] = yesterday_stock
- item["yesterday_stock_img"] = json.loads(item["yesterday_stock_img"]) if item["yesterday_stock_img"] else []
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- item["zans_count"] = item.get("zans",0)
- item["comments_count"] = cm.Comments.objects.filter(player_id=item.get("id",0)).count()
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- return total,data
- else:
- return len(data),data
- def add_model(cls,**kwargs):
- """
- """
- model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
- model = getattr(cm,model_name)
- if model_name == "Match":
- name = kwargs.get("name")
- if cm.Match.objects.filter(name=name).exists():
- raise ce.TipException(u"比赛名称重复!")
- if model_name == "MatchGoup":
- name = kwargs.get("name")
- match_id = kwargs.get("match_id")
- if cm.MatchGroup.objects.filter(name=name,match_id=match_id).exists():
- raise ce.TipException(u"分组名称重复!")
- if model_name == "Player":
- user_id = kwargs.get("user_id")
- match_id = kwargs.get("match_id")
- if cm.Player.objects.filter(user_id=user_id,match_id=match_id).exists():
- raise ce.TipException(u"重复添加选手!")
- if model_name == "PlayerRecord":
- player_id = kwargs.get("player_id")
- player = cm.Player.objects.filter(id=player_id).first()
- user_id = player.user_id
- if not player.match_group:
- raise ce.TipException(u"请先完成报名再提交数据!")
- now = datetime.datetime.now()
- match_id = kwargs.get("match_id")
- if now.weekday() in [5,6] or not now.strftime("%Y-%m-%d") in get_match_validdates(match_id):
- raise ce.TipException(u"今日不能提交数据!")
- now_time = datetime.datetime.now().strftime("%H:%S")
- if not user_id in [9600,6209]:
- if now_time<"15:00" or now_time > "23:50":
- raise ce.TipException(u"当日数据请在当日15:00以后23:50以前提交数据!")
- match_id = kwargs.get("match_id")
- stock_date = kwargs.get("stock_date")
- stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
- today_stock = json.dumps(kwargs.get("today_stock"))
- today_stock_img = json.dumps(kwargs.get("today_stock_img"))
- player_id = kwargs.get("player_id")
- today_fund = float(kwargs.get("today_fund",0))
- is_markt = int(kwargs.get("is_markt",0))
- experience = kwargs.get("experience")
- if not ccc.get_cur_match().id == match_id:
- raise ce.TipException(u"非当前赛事参赛选手不能提交作业!")
- #计算今日和昨日盈亏
- if float(today_fund)>9999 or float(today_fund)<=0:
- raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
- player = cm.Player.objects.filter(id=player_id).first()
- #if player.fund <= 0:
- # raise ce.TipException(u"请先输入您的初始资金后再提交数据!")
- user_id = player.user_id
- init_fund = player.fund
- user = cm.UserInfo.objects.filter(id=user_id).first()
- username = player.username
- usercode = player.usercode
- match_group = player.match_group
- zq = user.zq
- cw = user.cw
- df = user.df
- badge = player.badge
- match = cm.Match.objects.filter(id=match_id).first()
- if player.match_status < 1:
- raise ce.TipException(u"该账号已暂停/退出比赛,如有疑问请联系管理员获取详情信息!")
- now_date = datetime.datetime.now().strftime("%Y-%m-%d")
- if not user_id in [9600,6209,5709]:
- if match.end_time < now_date:
- raise ce.TipException(u"该比赛已结束或您未参加此次比赛不能提交数据!")
- cm.PlayerRecord.objects.filter(match_id=match_id,player_id=player_id,stock_date=stock_date).delete()
- yesterday_date = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- yesterday = cm.PlayerRecord.objects.filter(
- match_id=match_id,player_id=player_id).exclude(stock_date=stock_date).order_by("-stock_date").first()
- validdates = get_match_validdates(match_id)
- today_index = validdates.index(stock_date)
- yesterday_index = today_index -1 if today_index >=1 else 0
- yesterday_date = validdates[yesterday_index]
- yesterday = cm.PlayerRecord.objects.filter(
- match_id=match_id,player_id=player_id,stock_date=yesterday_date).exclude(stock_date=stock_date).first()
- if yesterday:
- yesterday_fund = yesterday.today_fund
- yesterday_stock = yesterday.today_stock
- yesterday_stock_img = yesterday.today_stock_img
- yesterday_is_markt = yesterday.is_markt
- else:
- #yesterday_fund = init_fund #today_fund
- yesterday_fund = today_fund
- yesterday_stock = ""
- yesterday_stock_img = ""
- yesterday_is_markt = 0
- if not cm.PlayerRecord.objects.filter(match_id=match_id,player_id=player_id).exists():
- init_fund = today_fund
- cm.Player.objects.filter(id=player_id).update(fund=today_fund)
- with transaction.atomic():
- #记录持股情况
- new_stock_list = []
- today_stock_list = json.loads(today_stock)
- for ts in today_stock_list:
- if ts["name"]:
- stock,flag = cm.Stock.objects.get_or_create(
- name = ts["name"]
- )
- stock_id = stock.id
- usobj,flag = cm.UserStock.objects.get_or_create(
- player_id = player_id,
- stock_id = stock_id,
- stock_name = ts["name"],
- stock_date = stock_date
- )
- ts["stock_id"] = stock_id
- new_stock_list.append(ts)
- today_stock = json.dumps(new_stock_list)
- obj,flag = cm.PlayerRecord.objects.get_or_create(
- player_id=player_id,
- match_id=match_id,
- stock_date=stock_date)
- obj.init_fund = init_fund
- obj.yesterday_fund = yesterday_fund
- obj.yesterday_stock = yesterday_stock
- obj.yesterday_stock_img = yesterday_stock_img
- obj.today_fund = today_fund
- obj.today_stock = today_stock
- obj.today_stock_img = today_stock_img
- obj.user_id = user_id
- obj.username = username
- obj.usercode = usercode
- obj.match_group = match_group
- obj.is_markt = is_markt
- obj.yesterday_is_markt = yesterday_is_markt
- obj.zq = zq
- obj.cw = cw
- obj.df = df
- obj.badge = badge
- obj.experience = experience
- #计算今日收益和总收益
- if float(today_fund)>9999 or float(today_fund)<=0:
- raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
- #有资金出入
- if cm.FundInOut.objects.filter(user_id=user_id,stock_date=stock_date).exists():
- fundinout = cm.FundInOut.objects.filter(user_id=user_id,stock_date=stock_date).first()
- fundin = fundinout.fundin
- fundout = fundinout.fundout
- #入资金
- if fundin > fundout:
- fundin = fundin - fundout
- today_income = (today_fund-(yesterday_fund+fundin))/(float(yesterday_fund) + fundin)
- total_income = (today_fund-init_fund-fundin)/(init_fund+fundin)
- cm.Player.objects.filter(id=player_id).update(fund=init_fund+fundin)
- obj.init_fund = init_fund + fundin
- obj.yesterday_fund = obj.yesterday_fund + fundin
- #出资金
- else:
- fundout = fundout - fundin
- today_income = (today_fund-(yesterday_fund-fundout))/float(yesterday_fund)
- total_income = (today_fund+fundout)/init_fund - 1
- cm.Player.objects.filter(id=player_id).update(fund=round(today_fund/(1+total_income),4))
- obj.init_fund = round(today_fund/(1+total_income),4)
- obj.yesterday_fund = obj.yesterday_fund - fundout
- if float(today_income)>0.4:
- raise ce.TipException(u"今日盈利已超过40%,请仔细核对数据或直接联系顽主!")
- if float(total_income)>8:
- raise ce.TipException(u"请仔细核对数据或直接联系顽主!")
- obj.today_income = round(today_income,4)
- obj.total_income = round(total_income,4)
- else:
- today_income = (today_fund - yesterday_fund)/float(yesterday_fund)
- total_income = (today_fund - init_fund)/float(init_fund)
- if float(today_income)>0.4:
- raise ce.TipException(u"今日盈利已超过40%,请仔细核对数据或直接联系顽主!")
- if float(total_income)>8:
- raise ce.TipException(u"请仔细核对数据或直接联系顽主!")
- obj.today_income = round(today_income,4)
- obj.total_income = round(total_income,4)
- if not flag:
- obj.ctime = datetime.datetime.now()
- obj.save()
- #更新股票持股人数
- for stock in new_stock_list:
- cm.Stock.objects.filter(id=stock["stock_id"]).update(user_num=F("user_num")+1)
- #更新group_rank
- ccc.cache.lpush(settings.RANK_LIST,obj.id)
- return obj.id
- obj = model.objects.create(**kwargs)
- return obj.id
- def update_model(cls,**kwargs):
- """
- """
- model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
- model = getattr(cm,model_name)
- id = kwargs.pop("id")
- rst = model.objects.filter(id=id).update(**kwargs)
- if model_name == "Match":
- for item in kwargs.get("groups").split(","):
- cm.MatchGroup.objects.get_or_create(match_id=obj.id,name=item)
- return rst
- def delete_model(cls,**kwargs):
- """
- """
- model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
- model = getattr(cm,model_name)
- ids = str(kwargs.get("id")).split(",")
- rst = model.objects.filter(id__in=ids).delete()
- if model_name == "Comments":
- cm.Comments.objects.filter(pid__in=ids).delete()
- return ids
- def get_search_list(cls,**kwargs):
- """
- """
- model_name = re.search(r'.*\.(\w+)SearchView',str(cls.__class__)).groups()[0]
- model = getattr(cm,model_name)
- qset = model.objects.all()
- if model_name == "Stock":
- if kwargs.get("name"):
- qset = qset.filter(Q(name__icontains=kwargs.get("name"))|Q(code__icontains=kwargs.get("name")))
- else:
- if kwargs.get("name"):
- qset = qset.filter(name__icontains=kwargs.get("name"))
- if model_name == "Player":
- data = list(qset.values("id","username"))
- if model_name == "Stock":
- qset = qset.filter(code__isnull=False)
- data = list(qset.values("id","name","code"))
- for item in data:
- if item["code"]:
- item["label"] = "%s(%s)" % (item["name"],item["code"])
- else:
- item["label"] = "%s" % item["name"]
- else:
- data = list(qset.values("id","name"))
- return data
- def get_detail_info(cls,**kwargs):
- """
- """
- model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
- model = getattr(cm,model_name)
- id = kwargs.get("id")
- rst = list(model.objects.filter(id=id).values())
- rst = rst[0] if rst else {}
- if model_name == "Article":
- rst["ctime"] = ccf.datetime_to_str(rst["ctime"],"%Y-%m-%d")
- if model_name == "Stock":
- rst["choiced"] = cm.UserChoice.objects.filter(player_id=kwargs.get("player_id"),stock_id=rst["id"]).count()
- return rst
- #@ccc.cache_data()
- def get_record_info(rcid):
- """
- """
- rst = cm.PlayerRecord.objects.filter(id=rcid).values().first()
- if rst:
- rst["match_group"] = cm.MatchGroup.objects.filter(id=rst["match_group"]).first().name
- today_stock = json.loads(rst["today_stock"]) if rst["today_stock"] else []
- today_stock = filter(lambda x:x["fund"] and x["name"],today_stock if today_stock else [])
- rst["today_stock"] = today_stock
- today_stock_img = json.loads(rst["today_stock_img"]) if rst["today_stock_img"] else []
- rst["today_stock_img"] = today_stock_img
- yesterday_stock = json.loads(rst["yesterday_stock"]) if rst["yesterday_stock"] else []
- yesterday_stock = filter(lambda x:x["fund"] and x["name"],yesterday_stock if yesterday_stock else [])
- rst["yesterday_stock"] = yesterday_stock
-
- yesterday_stock_img = json.loads(rst["yesterday_stock_img"]) if rst["yesterday_stock_img"] else []
- rst["yesterday_stock_img"] = yesterday_stock_img
- rst["today_income"] = "{}%".format(rst["today_income"]*100)
- rst["total_income"] = "{}%".format(rst["total_income"]*100)
- return rst
- def get_list_info(cls,**kwargs):
- """
- """
- model_name = re.search(r'.*\.(\w+)ListView',str(cls.__class__)).groups()[0]
- model = getattr(cm,model_name)
- qset = model.objects.all()
- if kwargs.get("name"):
- qset = qset.filter(name__icontains=kwargs.get("name"))
- if model_name == "UserInfo":
- if kwargs.get("username"):
- qset = qset.filter(username__icontains=kwargs.get("username"))
- if kwargs.get("usercode"):
- qset = qset.filter(usercode=kwargs.get("usercode"))
- data = list(qset.order_by("-id").values())
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- if model_name == "Player":
- for item in data:
- user = cm.UserInfo.objects.filter(id=item["user_id"]).first()
- match = cm.Match.objects.filter(id=item["match_id"]).first()
- item["username"] = user.username
- item["usercode"] = user.usercode
- item["match_name"] = match.name if match else ""
- return (total,data)
- else:
- return len(data),data
- return rst
- def add_player_record_single(**kwargs):
- """用户单独上传数据
- """
- return None
- now = datetime.datetime.now()
- if now.weekday() in [5,6] or now.strftime("%Y-%m-%d") in MISS_DATES:
- raise ce.TipException(u"今日不能提交数据!")
- now_time = datetime.datetime.now().strftime("%H:%S")
- if now_time<"15:00" or now_time > "23:50":
- raise ce.TipException(u"当日数据请在当日15:00以后23:50以前提交数据!")
- usercode = kwargs.get("usercode")
- match_id = kwargs.get("match_id")
- if not cm.Player.objects.filter(usercode=usercode,match_id=match_id).exists():
- raise ce.TipException(u"用户代码错误")
- stock_date = kwargs.get("stock_date")
- #stock_date = "2022-04-26"
- stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
- today_stock = json.dumps(kwargs.get("today_stock"))
- today_stock_img = json.dumps(kwargs.get("today_stock_img"))
- today_fund = float(kwargs.get("today_fund"))
- is_markt = int(kwargs.get("is_markt",0))
- if int(today_fund)>9999 or int(today_fund)<0:
- raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
- player = cm.Player.objects.filter(usercode=usercode,match_id=match_id).first()
- #if player.fund <=0 :
- # raise ce.TipException(u"请先输入您的初始资金后再提交数据!")
- player_id = player.id
- user_id = player.user_id
- init_fund = player.fund
- user = cm.UserInfo.objects.filter(id=user_id).first()
- username = user.username
- usercode = user.usercode
- match_group = player.match_group
- match = cm.Match.objects.filter(id=match_id).first()
- if player.match_status < 1:
- raise ce.TipException(u"该账号已暂停/退出比赛,如有疑问请联系管理员获取详情信息!")
- now_date = datetime.datetime.now().strftime("%Y-%m-%d")
- if match.end_time < now_date:
- raise ce.TipException(u"该比赛已结束!")
- #yesterday = cm.PlayerRecord.objects.filter(
- # match_id=match_id,player_id=player_id).order_by("-id").first()
- yesterday = cm.PlayerRecord.objects.filter(
- match_id=match_id,player_id=player_id).order_by("-stock_date").first()
- if yesterday:
- yesterday_fund = yesterday.today_fund
- yesterday_stock = yesterday.today_stock
- yesterday_stock_img = yesterday.today_stock_img
- else:
- #yesterday_fund = init_fund
- yesterday_fund = today_fund
- init_fund = today_fund
- yesterday_stock = ""
- yesterday_stock_img = ""
- cm.Player.objects.filter(id=player_id).update(fund=today_fund)
- #记录持股情况
- new_stock_list = []
- today_stock_list = json.loads(today_stock)
- for ts in today_stock_list:
- if ts["name"]:
- stock,flag = cm.Stock.objects.get_or_create(
- name = ts["stock"]
- )
- stock_id = stock.id
- usobj,flag = cm.UserStock.objects.get_or_create(
- player_id = player_id,
- stock_id = stock_id,
- stock_name = ts["name"],
- stock_date = stock_date
- )
- ts["stock_id"] = stock_id
- new_stock_list.append(ts)
- today_stock = json.dumps(new_stock_list)
- obj,flag = cm.PlayerRecord.objects.get_or_create(
- player_id=player_id,
- match_id=match_id,
- stock_date=stock_date)
- obj.init_fund = init_fund
- obj.yesterday_fund = yesterday_fund
- obj.yesterday_stock = yesterday_stock
- obj.yesterday_stock_img = yesterday_stock_img
- obj.today_fund = today_fund
- obj.today_stock = today_stock
- obj.today_stock_img = today_stock_img
- obj.user_id = user_id
- obj.username = username
- obj.usercode = usercode
- obj.match_group = match_group
- obj.is_markt = is_markt
- #计算今日和昨日盈亏
- today_income = (today_fund - yesterday_fund)/float(yesterday_fund)
- total_income = (today_fund - init_fund)/float(init_fund)
- #if int(today_fund)>9999 or int(today_fund)<0:
- # raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
- if int(today_income)>2:
- raise ce.TipException(u"数据错误,今日盈利已超过2倍,请仔细核对数据!")
- obj.today_income = round(today_income,4)
- obj.total_income = round(total_income,4)
- if not flag:
- obj.ctime = datetime.datetime.now()
- obj.save()
- #更新股票持股人数
- for stock in new_stock_list:
- cm.Stock.objects.filter(id=stock["id"]).update(user_num=F("user_num")+1)
- #更新group_rank
- #update_group_rank(match_id,match_group,obj.stock_date)
- ccc.cache.lpush(settings.RANK_LIST,obj.id)
- return obj.id
- def get_single_match_info(match_id):
- """
- """
- if not match_id:
- match = cm.Match.objects.all().order_by("-id").values().first()
- else:
- match = cm.Match.objects.filter(id=match_id).values().first()
- now_date = datetime.datetime.now().strftime("%Y-%m-%d")
- return now_date,match
- def get_cur_record(request):
- """
- """
- player = request.player
- player_id = player.id
- match_id = player.match_id
- match_group = player.match_group
- stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
- qset = cm.PlayerRecord.objects.filter(match_id=match_id,player_id=player_id,stock_date=stock_date).order_by("-stock_date")
- data = qset.values().first() if qset else {}
- #today_record = get_today_record(player_id,match_id,match_group,today)
- if data:
- data["today_stock_img"] = json.loads(data["today_stock_img"]) if data["today_stock_img"] else []
- data["today_stock"] = json.loads(data["today_stock"]) if data["today_stock"] else []
- return data
- def follow_player(**kwargs):
- """
- """
- user_id = kwargs.get("player_id")
- follow_id = kwargs.get("follow_id")
- if kwargs.get("action") == "cancel":
- cm.UserFollows.objects.filter(user_id=user_id,follow_id=follow_id).delete()
- return True
- else:
- obj,flag = cm.UserFollows.objects.get_or_create(user_id=user_id,follow_id=follow_id)
- return obj.id
- def calc_win_rate(player_id,match_id):
- """计算胜率
- """
- qset = cm.PlayerRecord.objects.filter(match_id=match_id,player_id=player_id)
- win_rate = qset.filter(today_income__gte=0).count()/float(qset.count()) if qset else 0.0
- win_rate = round(win_rate,3)
- win_rate = "{}%".format(win_rate*100)
- return win_rate
- def get_user_follower(request):
- """获取用户列表
- """
- user_id = request.player.id
- match_id = request.player.match_id
- cur_match_id = match_id
- match_group = request.player.match_group
- cur_match_group = match_group
- qdata = request.json
- today = get_today_date()
- if qdata.get("player_id"):
- user_id = int(qdata.get("player_id"))
- data = []
- qset = cm.UserFollows.objects.filter(follow_id=user_id)
- follow_ids = list(qset.values_list("user_id",flat=True))
- _today = today
- for player_id in follow_ids:
- _match_id = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_id")
- _today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
- _match_group = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_group")
- today_record = get_today_record(player_id,_match_id,_match_group,_today)
- if today_record:
- data.append(today_record)
- data = sorted(data,key=lambda x:x["stock_date"],reverse=True)
- _today = ccc.cache.hget("PLAYER_LATEST_%d"%user_id,"stock_date")
- cur_today_record = get_today_record(user_id,match_id,match_group,_today)
- if cur_today_record:
- data.insert(0,cur_today_record)
- page = int(qdata.get("page",1))
- page_size = int(qdata.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- for item in data:
- if item:
- today_stock = json.loads(item["today_stock"])
- today_stock = filter(lambda x:x["name"] and x["fund"],today_stock)
- item["today_stock"] = today_stock
- item["today_stock_img"] = json.loads(item["today_stock_img"])
- #item["win_rate"] = calc_win_rate(item["player_id"],item["match_id"])
- win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%item["player_id"],"win_rate")
- if win_rate:
- item["win_rate"] = str(float(win_rate)*100)+"%"
- else:
- item["win_rate"] = "0.0%"
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- return total,data
- else:
- return len(data),data
- def get_user_follows(request):
- """获取用户关注的选手列表
- """
- if request.player:
- user_id = request.user.id
- match_id = request.player.match_id
- cur_match_id = match_id
- match_group = request.player.match_group
- cur_match_group = match_group
- qdata = request.json
- today = get_today_date()
- if qdata.get("player_id"):
- user_id = int(qdata.get("player_id"))
- data = []
- qset = cm.UserFollows.objects.filter(user_id=user_id)
- follow_ids = list(qset.values_list("follow_id",flat=True))
- _today = today
- for player_id in follow_ids:
- _match_id = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_id")
- _today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
- _match_group = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_group")
- today_record = get_today_record(player_id,_match_id,_match_group,_today)
- if today_record:
- today_record["zan_count"] = today_record.get("zans",0) if today_record.get("zans") else 0
- today_record["comments_count"] = cm.Comments.objects.filter(record_id=today_record.get("id",0)).count()
- data.append(today_record)
- data = sorted(data,key=lambda x:x["stock_date"],reverse=True)
- _today = ccc.cache.hget("PLAYER_LATEST_%d"%user_id,"stock_date")
- cur_today_record = get_today_record(user_id,match_id,match_group,_today)
- if cur_today_record:
- data.insert(0,cur_today_record)
- page = int(qdata.get("page",1))
- page_size = int(qdata.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- for item in data:
- if item:
- today_stock = json.loads(item["today_stock"])
- today_stock = filter(lambda x:x["name"] and x["fund"],today_stock)
- item["today_stock"] = today_stock
- item["today_stock_img"] = json.loads(item["today_stock_img"])
- #item["win_rate"] = calc_win_rate(item["player_id"],item["match_id"])
- win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%item["player_id"],"win_rate")
- if win_rate:
- item["win_rate"] = str(float(win_rate)*100)+"%"
- else:
- item["win_rate"] = "0.0%"
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- item["zans_count"] = item.get("zans",0)
- item["comments_count"] = cm.Comments.objects.filter(record_id=item.get("id",0)).count()
- return total,data
- else:
- return len(data),data
- return 0,[]
- def get_hot_stock_rank(**kwargs):
- """
- """
- data = {
- "hot_buy":[
- {"stock_name":u"创业黑马","count":12}
- ],
- "hot_sell":[
- {"stock_name":u"创业黑马","count":12}
- ]
- }
- return data
- #@ccc.cache_data()
- def get_stock_info(stock_id):
- """
- """
- stock = cm.Stock.objects.filter(id=stock_id).values().first()
- return stock
-
- def get_hot_stock_buy(**kwargs):
- """
- """
- stock_date = kwargs.get("stock_date")
- if not kwargs.get("name"):
- qset = cm.UserStock.objects.filter(stock_date=stock_date)
- else:
- qset = cm.UserStock.objects.filter(stock_name__icontains=kwargs.get("name"))
- qset = qset.values("stock_id","stock_name").annotate(count=Count("stock_id")).order_by("-count")
- data = []
- for q in qset:
- stock_id = q["stock_id"]
- count = q["count"]
- stock_name = q.get("stock_name")
- comments_count = cm.Comments.objects.filter(stock_id=stock_id).count()
- choice_count = cm.UserChoice.objects.filter(stock_id=stock_id).count()
- data.append({"stock_name":stock_name,"id":stock_id,"count":count,"comments_count":comments_count,"choice_count":choice_count})
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- return total,data
- else:
- return len(data),data
- return data
- def get_hot_follow(**kwargs):
- """
- """
- stock_date = kwargs.get("stock_date")
- cur_match_id = ccc.get_cur_match().id
- player_ids = list(cm.Player.objects.filter(match_id=cur_match_id,match_status=1).values_list("id",flat=True))
- qset = cm.UserFollows.objects.filter(follow_id__in=player_ids)
- qset = qset.values("follow_id").annotate(count=Count("follow_id")).order_by("-count")
- data = []
- for q in qset:
- player_id = q["follow_id"]
- count = q["count"]
- today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
- match_id = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_id")
- match_group = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_group")
- badest_income = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"badest_income")
- today_record = get_today_record(player_id,match_id,match_group,today)
- if today_record:
- userinfo = get_user_info(today_record["user_id"])
- win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%today_record["player_id"],"win_rate")
- win_rate = str(float(win_rate)*100)+"%"
- if userinfo:
- data.append(
- {
- "player_name":userinfo.get("username"),
- "count":count,
- "id":player_id,
- "today_fund":today_record["today_fund"],
- "total_income":"{}%".format(today_record["total_income"]*100),
- "today_income":"{}%".format(today_record["today_income"]*100),
- "badest_income":"{}%".format(badest_income*100),
- "style":userinfo.get("style"),
- "badge":userinfo.get("badge"),
- "match_id":match_id,
- "win_rate":win_rate
- #"win_rate":calc_win_rate(player_id,match_id)
- }
- )
- if kwargs.get("name"):
- data = filter(lambda x:kwargs.get("name") in x["player_name"],data)
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- return total,data
- else:
- return len(data),data
- return data
- def get_hot_stock_sell(**kwargs):
- """
- """
- stock_date = kwargs.get("stock_date")
- stock_date_time = ccf.str_to_datetime(kwargs.get("stock_date"),"%Y-%m-%d")
- yesterday = (stock_date_time - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- ##昨天所有股票
- #yes_stock_ids = list(cm.UserStock.objects.filter(stock_date=yesterday).values_list("stock_id",flat=True))
- #yes_stock_ids = list(set(yes_stock_ids))
- #data = []
- #for ysi in yes_stock_ids:
- # yes_count = cm.UserStock.objects.filter(stock_date=yesterday,stock_id=ysi).count()
- # td_count = cm.UserStock.objects.filter(stock_date=stock_date,stock_id=ysi).count()
- # if td_count < yes_count:
- # stock_name = cm.Stock.objects.filter(id=ysi).first().name
- # data.append({"stock_name":stock_name,"count":yes_count-td_count,"id":ysi})
- qset = cm.HotStockSellCount.objects.filter(stock_date=stock_date)
- if kwargs.get("name"):
- qset = qset.filter(stock_name__icontains=kwargs.get("name"))
- qset = qset.order_by("-count")
- data = list(qset.values("stock_name","stock_id","count"))
- for item in data:
- item["id"] = item["stock_id"]
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- return total,data
- else:
- return len(data),data
- return data
- def get_stock_info(_id):
- """
- """
- data = cm.Stock.objects.filter(id=_id).values().first()
- return data
- def get_hot_stock_sell_players(**kwargs):
- """
- """
- _id = kwargs.get("id")
- stock_date = kwargs.get("stock_date")
- stock_date_time = ccf.str_to_datetime(kwargs.get("stock_date"),"%Y-%m-%d")
- yesterday = (stock_date_time - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
- #昨天持股选手
- yes_players = list(cm.UserStock.objects.filter(stock_date=yesterday,stock_id=_id).values_list("player_id",flat=True))
- td_players = list(cm.UserStock.objects.filter(stock_date=stock_date,stock_id=_id).values_list("player_id",flat=True))
- sell_players = list(set(yes_players)-set(td_players))
- data = []
- for player_id in sell_players:
- player = cm.Player.objects.filter(id=player_id).first()
- if player:
- match_id = player.match_id
- match_group = player.match_group
- today_record = get_today_record(player_id,match_id,match_group,stock_date)
- if today_record:
- today_record["today_stock_img"] = json.loads(today_record["today_stock_img"]) if today_record["today_stock_img"] else []
- today_record["today_stock"] = json.loads(today_record["today_stock"]) if today_record["today_stock"] else []
- today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
- today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
- data.append(today_record)
- data = sorted(data,key=lambda x:x["today_fund"],reverse=True)
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- return total,data
- else:
- return len(data),data
- return data
- def get_win_rate_rank(request):
- """
- """
- player_id = request.player.id
- match_id = request.player.match_id
- match_group = request.player.match_group
- kwargs = request.json
- match_id = ccc.get_cur_match().id
- qset = cm.WinDefendRank.objects.filter(match_id=match_id,auto_complete__lt=5,match_status=1).order_by("-win_rate")
- data = list(qset.values())
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- for item in data:
- item["win_rate"] = "{}%".format(item["win_rate"]*100)
- item["badest_income"] = "{}%".format(item["badest_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- userinfo = get_user_info(item["user_id"])
- if userinfo:
- item["badge"] = userinfo.get("badge")
- item["style"] = userinfo.get("style")
- item["username"] = userinfo.get("username")
- return total,data
- def get_defend_rank(request):
- """
- """
- player_id = request.player.id
- match_id = request.player.match_id
- match_group = request.player.match_group
- kwargs = request.json
- qset = cm.WinDefendRank.objects.filter(match_id=match_id,auto_complete__lte=5,match_status=1).order_by("-badest_income")
- data = list(qset.values())
- #data = []
- #for item in datas:
- # player = cm.Player.objects.filter(id=item["player_id"]).first()
- # item["match_status"] = player.match_status if player else -1
- # if item["match_status"] > -1:
- # data.append(item)
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- for item in data:
- item["win_rate"] = "{}%".format(item["win_rate"]*100)
- item["badest_income"] = "{}%".format(item["badest_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- userinfo = get_user_info(item["user_id"])
- if userinfo:
- item["badge"] = userinfo.get("badge")
- item["style"] = userinfo.get("style")
- item["username"] = userinfo.get("username")
- return total,data
- def get_champion_articles_list(request):
- """
- """
- kwargs = request.json
- qset = cm.Article.objects.filter(status=2,type="champion").order_by("-id")
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,qset = ccf.get_page_qset(qset,page,page_size)
- else:
- total = qset.count()
- data = list(qset.values())
- for item in data:
- item["ctime"] = ccf.datetime_to_str(item["ctime"],"%Y-%m-%d")
- return total,data
- def get_wanzhu_comment(**kwargs):
- """
- """
- match_id = kwargs.get("match_id")
- group_id = kwargs.get("group_id")
- today = get_today_date()
- players = get_match_group_players(match_id,group_id)
- new_players = []
- for player in players:
- user_id = player["user_id"]
- user = get_user_info(user_id)
- username = user["username"] if user else ""
- player_id = player["id"]
- match_group = group_id
- today_record = get_today_record(player_id,match_id,int(match_group),today)
- if today_record and today_record.get("wanzhu_comment"):
- player.update(today_record)
- player["username"] = username
- player["total_income"] = "{}%".format(player["total_income"]*100)
- player["fund"] = round(player["fund"],4)
- player["init_fund"] = round(player["init_fund"],4)
- player["today_fund"] = round(player["today_fund"],4)
- player["today_stock"] = json.loads(player["today_stock"]) if player["today_stock"] else []
- new_players.append(player)
- new_players = sorted(new_players,key=lambda x:x["group_rank"])
- data = new_players
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return total,data
- def get_enum_list(request):
- """
- """
- data = {
- "zq":[
- u"短线博弈",
- u"长线价投",
- u"长短兼备"
- ],
- "cw":[
- u"分仓开超市",
- u"重仓押注",
- u"全仓单钓",
- u"融资加倍"
- ],
- "df":[
- u"低吸",
- u"半路",
- u"首板",
- u"接力",
- u"撬板",
- u"T加0",
- u"隔夜卖",
- u"格局锁仓",
- u"核按钮"
- ],
- "pz":[
- u"10厘米",
- u"20厘米",
- u"30厘米",
- u"N/C新股",
- u"次新股",
- u"可转债",
- u"港股",
- u"基金",
- u"逆回购"
- ]
- }
- return data
- def get_player_list(**kwargs):
- """选手列表
- """
- match_id = kwargs.get("match_id")
- today = get_today_date()
- qset = cm.Player.objects.filter(match_id=match_id,match_status=1)
- if kwargs.get("name"):
- qset = qset.filter(username__icontains=kwargs.get("name"))
- data = list(qset.values())
- for item in data:
- match_id = item["match_id"]
- match_group = item["match_group"]
- user_id = item["user_id"]
- player_id = item["id"]
- #user = cm.UserInfo.objects.filter(id=user_id).first()
- today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
- match_id = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_id")
- match_group = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_group")
- today_record = get_today_record(player_id,match_id,match_group,today)
- if today_record:
- today_record.pop("id")
- item.update(today_record)
- user_info = get_user_info(user_id)
- if user_info:
- user_info.pop("id")
- item.update(user_info)
- if item.get("today_income"):
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- if kwargs.get("zq"):
- data = filter(lambda x:kwargs.get("zq") == x["zq"],data)
- if kwargs.get("cw"):
- data = filter(lambda x:kwargs.get("cw") == x["cw"],data)
- if kwargs.get("df"):
- data = filter(lambda x:kwargs.get("df") == x["df"],data)
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return total,data
- def get_mine_style(request):
- """
- """
- user = request.user
- player = request.player
- user = cm.UserInfo.objects.filter(id=user.id).first()
- data = {
- "zq":user.zq,
- "cw":user.cw,
- "df":user.df,
- "pz":user.pz,
- "join_time":user.join_time,
- "username":user.username,
- "account_img":user.account_img,
- "avatar":user.avatar
- }
- if player:
- data["is_player"] = 1
- data["init_fund"] = player.fund if player.fund else 0
- else:
- data["is_player"] = 0
- data["init_fund"] = None
- return data
- def update_user_style(**kwargs):
- """
- """
- user_id = kwargs.pop("user_id")
- player_id = kwargs.pop("player_id")
- init_fund = kwargs.pop("init_fund")
- #avatar = kwargs.pop("avatar")
- print(kwargs,111111111)
- cm.UserInfo.objects.filter(id=user_id).update(**kwargs)
- if player_id and init_fund:
- cm.Player.objects.filter(id=player_id).update(fund=init_fund)
- if kwargs.get("username"):
- cm.Player.objects.filter(id=player_id).update(username=kwargs.get("username"))
- if kwargs.get("avatar"):
- cm.UserInfo.objects.filter(id=user_id).update(avatar=kwargs.get("avatar"))
- ccc.cache.delete("cdata_get_user_info_(%sL,)"%user_id)
- return True
- def get_stock_players(**kwargs):
- """
- """
- stock_id = kwargs.get("stock_id")
- stock_date = kwargs.get("stock_date",get_today_date())
- data = []
- user_stocks = cm.UserStock.objects.filter(stock_id=stock_id,stock_date=stock_date)
- #user_stocks = cm.UserStock.objects.filter(stock_id=stock_id)
- #user_stocks = cm.UserStock.objects.all()
- for us in user_stocks:
- player_id = us.player_id
- player = cm.Player.objects.filter(id=player_id).first()
- if player:
- match_id = player.match_id
- match_group = player.match_group
- if stock_date:
- today_record = get_today_record(player_id,match_id,match_group,stock_date)
- else:
- today_record = get_today_record(player_id,match_id,match_group,us.stock_date)
- if today_record:
- today_record["today_stock_img"] = json.loads(today_record["today_stock_img"]) if today_record["today_stock_img"] else []
- today_record["today_stock"] = json.loads(today_record["today_stock"]) if today_record["today_stock"] else []
- today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
- today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
- data.append(today_record)
- data = sorted(data,key=lambda x:x["today_fund"],reverse=True)
- #分页
- page = int(kwargs.get("page",0))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return data
-
- def update_user_fund(**kwargs):
- """
- """
- user_id = kwargs.pop("user_id")
- player_id = kwargs.pop("player_id")
- init_fund = kwargs.pop("init_fund")
- if player_id and init_fund:
- cm.Player.objects.filter(id=player_id).update(fund=init_fund)
- return True
- def get_player_match_calendar(**kwargs):
- """
- """
- player_id = kwargs.get("player_id")
- match_id = kwargs.get("match_id")
- month = kwargs.get("month")
- print kwargs
- week,eday = calendar.monthrange(int(month.split("-")[0]),int(month.split("-")[1]))
- sday = "01"
- eday = str(eday).zfill(2)
- sdate = month + "-" + sday
- edate = month + "-" + eday
- print sdate,edate
- qset = cm.PlayerRecord.objects.filter(player_id=player_id,match_id=match_id)\
- .filter(stock_date__gte=sdate,stock_date__lte=edate)
- data = list(qset.values())
- dct = {}
- for item in data:
- item["today_income"] = "{}%".format(item["today_income"]*100)
- dct[item["stock_date"]] = item["today_income"]
- newdata = []
- for i in range(1,int(eday)+1):
- stock_date = month + "-" + str(i).zfill(2)
- newdata.append({
- "stock_date":stock_date,
- "today_income":dct.get(stock_date,""),
- })
- return newdata
- def get_all_match(request):
- """
- """
- now = datetime.datetime.now().strftime("%Y-%m-%d")
- qset = cm.Match.objects.filter(start_time__lte=now).order_by("id")
- data = list(qset.values())
- return data
- def get_default_date(**kwargs):
- """
- """
- match_id = kwargs.get("match_id")
- record = cm.PlayerRecord.objects.filter(match_id=match_id).order_by("-stock_date").first()
- if record:
- return record.stock_date
- else:
- return get_today_date()
- @ccc.cache_data()
- def get_stock_search(**kwargs):
- """
- """
- qset = cm.Stock.objects.all()
- data = list(qset.values("id","name","code"))
- for item in data:
- if item["code"]:
- item["label"] = "%s(%s)" % (item["name"],item["code"])
- else:
- item["label"] = "%s" % item["name"]
- return data
- def get_mine_latest(request):
- """
- """
- try:
- player_id = request.player.id
- match_id = request.player.match_id
- match_group = request.player.match_group
- today = get_today_date()
- _today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
- if _today:
- today = _today
- rst = get_today_record_actual(player_id,match_id,match_group)
- if rst:
- rst["today_income_fund"] = round((rst["today_fund"] - rst["yesterday_fund"])*10000,2) if rst["yesterday_fund"] else 0.00
- rst["today_income"] = "{}%".format(rst["today_income"]*100)
- rst["total_income"] = "{}%".format(rst["total_income"]*100)
- rst["zan_count"] = rst.get("zans",0)
- rst["comments_count"] = cm.Comments.objects.filter(record_id=rst.get("id",0)).count()
- return rst
- except Exception as e:
- print(e)
- return {"player_id":player_id,"match_id":match_id}
- def get_match_validdates(match_id):
- """
- """
- #qdata = request.json
- #match_id = qdata.get("match_id")
- match = cm.Match.objects.filter(id=match_id).first()
- if match:
- validdates = json.loads(match.valid_dates) if match.valid_dates else []
- validdates.sort()
- return validdates
- return []
- def send_phcode(request):
- """
- """
- qdata = request.json
- phone = qdata.get("phone")
- import random
- code = "%s%s%s%s" % (random.randint(0,9),random.randint(0,9),random.randint(0,9),random.randint(0,9))
- send_verify_code(phone,code)
- ccc.cache.set(phone,code,120)
- pass
- def get_signup_info(request):
- """
- """
- qdata = request.json
- user_id = request.user.id
- try:
- match_id = ccc.get_signup_match().id
- match = cm.Match.objects.filter(id=match_id).values().first()
- #
- match_groups = list(cm.MatchGroup.objects.filter(match_id=match_id,is_active=1).values())
- match["groups"] = match_groups
- #报名状态
- now = datetime.datetime.now().strftime("%Y-%m-%d")
- signup_start_time = match["signup_start_time"]
- signup_end_time = match["signup_end_time"]
- if signup_start_time <= now and signup_end_time >= now:
- match["signup_status"] = 1
- else:
- match["signup_status"] = 0
- if cm.Player.objects.filter(match_id=match_id,user_id=user_id,match_group__isnull=False).filter(role__in=[1,2]).exists():
- match["signup_done"] = 1
- else:
- match["signup_done"] = 0
-
- return match
- except Exception as e:
- print(e)
- return {}
- def do_wx_pay(request):
- """
- """
- user = request.user
- user_id = request.user.id
- user_name = request.user.username
- openid = request.user.openid
- qdata = request.json
- match_id = qdata.get("match_id")
- match_name = qdata.get("match_name")
- signup_type = qdata.get("signup_type")
- total_fee = str(qdata.get("total_fee"))
- phone = qdata.get("phone")
- phcode = qdata.get("phcode")
- match_group = qdata.get("match_group")
- print(qdata)
- signup_name = qdata.get("signup_name")
- if not signup_name:
- signup_name = user_name
- orgcode = ccc.cache.get(phone)
- if not phone == "13883187629":
- if not phcode == orgcode:
- raise ce.TipException(u"验证码不正确!")
- if int(signup_type) == 1:
- if not match_group:
- match_group = cm.MatchGroup.objects.filter(match_id=match_id,charge=0).first().id
- out_trade_no = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + str(int(time.time()*1000))
- #游客和普通选手付费报名
- if user.player_type in [0,1] and not phone=="13883187629":
- #生成订单
- order = cm.SignupOrder.objects.create(
- user_id = user_id,
- user_name = signup_name,
- match_id = match_id,
- match_name = match_name,
- signup_type = signup_type,
- total_fee = total_fee,
- out_trade_no = out_trade_no,
- phone = phone,
- match_group = match_group,
- signup_name = signup_name
- )
- #支付
- total_fee = str(int(float(order.total_fee)*100))
- prepayinfo = wxpay.get_wx_unifiedorder(out_trade_no,total_fee,openid)
- prepayinfo["key"] = wxpay.WxPayConf_pub.KEY
- return prepayinfo
- #种子选手和开户选手免费报名
- else:
- if signup_type == 1:
- signup_name = user_name
- #生成订单
- order = cm.SignupOrder.objects.create(
- user_id = user_id,
- user_name = signup_name,
- match_id = match_id,
- match_name = match_name,
- signup_type = signup_type,
- total_fee = total_fee,
- out_trade_no = out_trade_no,
- phone = phone,
- match_group = match_group,
- signup_name = signup_name
- )
- #生成选手信息
- cur_match = cm.Match.objects.filter(id=match_id).first()
- visit_group = cm.MatchGroup.objects.filter(id=match_group).first()
- player,flag = cm.Player.objects.get_or_create(
- user_id = user.id,
- match_id = cur_match.id
- )
- player.match_name = cur_match.name
- player.match_group = visit_group.id
- player.match_group_name = visit_group.name
- player.username = signup_name
- player.usercode = request.user.usercode
- player.role = 2
- player.match_status = 1
- player.save()
- #
- order.player_id = player.id
- order.save()
- user.username = signup_name
- user.phone = phone
- user.save()
- #发送报名成功信息
- send_signup_success(phone,signup_name)
- if phone == "13883187629":
- for i in [5001,4762,5173,5141]:
- cm.UserFollows.objects.get_or_create(user_id=user_id,follow_id=i)
- return {"free":1}
- def do_wxpay_notify(request):
- qdata = request.json
- flag,res = wxpay.check_notify_valid(request.body)
- if flag:
- out_trade_no = res.get("out_trade_no")
- print(out_trade_no)
- transaction_id = res.get("transaction_id")
- pay_time = res.get("time_end")
- try:
- sorder = cm.SignupOrder.objects.filter(out_trade_no=out_trade_no).first()
- if sorder and not sorder.transaction_id:
- now = datetime.datetime.now()
- sorder.order_status = 1
- sorder.pay_status = 1
- sorder.pay_time = now
- sorder.transaction_id = transaction_id
- sorder.save()
- #生成选手信息
- user = cm.UserInfo.objects.filter(id=sorder.user_id).first()
- visit_group = cm.MatchGroup.objects.filter(id=sorder.match_group).first()
- player,flag = cm.Player.objects.get_or_create(
- user_id = sorder.user_id,
- match_id = sorder.match_id
- )
- player.match_name = sorder.match_name
- player.match_group = visit_group.id
- player.match_group_name = visit_group.name
- player.username = sorder.user_name
- player.usercode = user.usercode if user else ""
- if sorder.signup_type == 2:
- player.role = 2
- else:
- player.role = 1
- #
- sorder.player_id = player.id
- sorder.save()
- player.save()
- if sorder.signup_type == 2:
- player_id = sorder.player_id
- user_id = sorder.user_id
- match_group = sorder.match_group
- match_group_name = cm.MatchGroup.objects.filter(id=match_group).first().name
- cm.Player.objects.filter(id=player_id).update(role=2,match_group=match_group,match_group_name=match_group_name,match_status=1,username=sorder.signup_name)
- cm.UserInfo.objects.filter(id=user_id).update(role=2,phone=sorder.phone,username=sorder.user_name)
- if sorder.signup_type == 1:
- player_id = sorder.player_id
- user_id = sorder.user_id
- cm.Player.objects.filter(id=player_id).update(role=1,match_status=1)
- cm.UserInfo.objects.filter(id=user_id).update(role=1,phone=sorder.phone,username=sorder.user_name)
- #发送报名成功信息
- send_signup_success(sorder.phone,sorder.signup_name)
- return True
- except Exception as e:
- import traceback
- traceback.print_exc()
- print(e,111111111111)
- return False
- def get_user_comments(request):
- """
- """
- player_id = request.player.id
- kwargs = request.json
- stock_id = kwargs.get("stock_id")
- record_id = kwargs.get("record_id")
- if record_id:
- qset = cm.Comments.objects.filter(record_id=record_id,pid__isnull=True).order_by(*["-istop","-id"])
- else:
- qset = cm.Comments.objects.filter(stock_id=stock_id,pid__isnull=True).order_by(*["-istop","-id"])
- data = list(qset.values())
- for item in data:
- if record_id:
- subcomments = cm.Comments.objects.filter(record_id=record_id,pid=item["id"])
- else:
- subcomments = cm.Comments.objects.filter(stock_id=stock_id,pid=item["id"])
- item["children"] = list(subcomments.values())
- #分页
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return total,data
- def get_user_choices(request):
- """
- """
- player_id = request.player.id
- kwargs = request.json
- stock_id = kwargs.get("stock_id")
- qset = cm.UserChoice.objects.filter(player_id=player_id)
- data = list(qset.values())
- for item in data:
- stock_id = item["stock_id"]
- item["count"] = cm.UserChoice.objects.filter(player_id=player_id,stock_id=stock_id).count()
- comments_count = cm.Comments.objects.filter(stock_id=stock_id).count()
- choice_count = cm.UserChoice.objects.filter(stock_id=stock_id).count()
- item["comments_count"] = comments_count
- item["choice_count"] = choice_count
- player_id = item["player_id"]
- match_id = cm.Player.objects.filter(id=player_id).first().match_id
- item["match_id"] = match_id
- #分页
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return total,data
- def get_user_consult_list(request):
- """
- """
- player_id = request.user.id if request.user else 0
- if not player_id:
- return 0,[]
- kwargs = request.json
- record_id = kwargs.get("record_id")
- qset = cm.WanzhuConsult.objects.filter(user_id=player_id)
- data = list(qset.values())
- for item in data:
- if cm.WanzhuConsult.objects.filter(pid=item["id"]):
- data.extend(cm.WanzhuConsult.objects.filter(pid=item["id"]).values())
- data = sorted(data,key=lambda x:x["id"])
- #分页
- page = int(kwargs.get("page",1))
- page_size = int(kwargs.get("page_size",1000))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return total,data
- def get_user_zans(request):
- """
- """
- player_id = request.player.id
- qdata = request.json
- record_id = qdata.get("record_id")
- zans = cm.PlayerRecord.objects.filter(id=record_id).first().zans
- return zans
- def get_user_comments_count(request):
- """
- """
- player_id = request.player.id
- qdata = request.json
- record_id = qdata.get("record_id")
- count = cm.Comments.objects.filter(record_id=record_id).count()
- return count
- def add_wanzhu_consult(request):
- """咨询顽主
- """
- user_id = request.user.id
- user_name = request.user.username
- user_avatar = request.user.avatar
- qdata = request.json
- content = qdata.get("cotent")
- pid = qdata.get("pid")
- obj = cm.WanzhuConsult.objects.create(
- user_id = user_id,
- user_name = user_name,
- user_avatar = user_avatar,
- content = content,
- pid = pid
- )
- def add_comments(request):
- """
- """
- if request.user.comment_status == 0:
- raise ce.TipException(u"对不起,暂无法评论/留言!")
- user_id = request.user.id
- user_name = request.user.username
- player_id = request.player.id
- user_avatar = request.user.avatar
- qdata = request.json
- content = qdata.get("cotent")
- record_id = qdata.get("record_id")
- stock_id = qdata.get("stock_id")
- pid = qdata.get("pid")
- ip = ccf.get_ip(request)
- location = ccf.get_city_from_ip(ip)
- obj = cm.Comments.objects.create(
- user_id = user_id,
- user_name = user_name,
- user_avatar = user_avatar,
- player_id = player_id,
- content = content,
- record_id = record_id,
- pid = pid,
- ip = ip,
- location = location,
- stock_id = stock_id
- )
- cm.PlayerRecord.objects.filter(id=record_id).update(comments_count=F("comments_count")+1)
- def add_choice(request):
- """
- """
- user_id = request.user.id
- user_name = request.user.username
- player_id = request.player.id
- user_avatar = request.user.avatar
- qdata = request.json
- stock_id = qdata.get("stock_id")
- stock_name = cm.Stock.objects.filter(id=stock_id).first().name
- obj = cm.UserChoice.objects.create(
- user_id = user_id,
- user_name = user_name,
- user_avatar = user_avatar,
- player_id = player_id,
- stock_id = stock_id,
- stock_name = stock_name
- )
- def add_zan(request):
- """
- """
- qdata = request.json
- record_id = qdata.get("record_id")
- cm.PlayerRecord.objects.filter(id=record_id).update(zans=F("zans")+1)
- zans = cm.PlayerRecord.objects.filter(id=record_id).first().zans
- return zans
- def get_experience_list(request):
- """
- """
- kwargs = request.json
- today = get_today_date()
- print(today,22222222222)
- match_id = ccc.get_cur_match().id
- #冠军组、千万组、百万组
- qbw_ids = list(cm.MatchGroup.objects.filter(match_id=match_id).filter(Q(name__icontains=u"千万组")|Q(name__icontains=u"百万组")|Q(name__icontains=u"冠军组")).values_list("id",flat=True))
- qset = cm.PlayerRecord.objects.filter(match_id=match_id,stock_date=today,match_group__in=qbw_ids).filter(Q(experience__isnull=False)&~Q(experience="")).order_by("-total_income")[:100]
- data = list(qset.values("id","user_id","username","today_fund","today_income","total_income","experience","match_id","player_id","today_stock_img","zans","comments_count"))
- qset1 = cm.PlayerRecord.objects.filter(match_id=match_id,stock_date=today).exclude(match_group__in=qbw_ids).filter(Q(experience__isnull=False)&~Q(experience="")).order_by("-total_income")[:100]
- data1 = list(qset1.values("id","user_id","username","today_fund","today_income","total_income","experience","match_id","player_id","today_stock_img","zans","comments_count"))
- data.extend(data1)
- for item in data:
- record_id = item["id"]
- user_id = item["user_id"]
- #user = cm.UserInfo.objects.filter(id=user_id).first()
- #if user:
- # item["user_avatar"] = user.avatar
- # #item["comments_count"] = cm.Comments.objects.filter(record_id=record_id).count()
- try:
- item["user_avatar"] = get_user_info(user_id)["avatar"]
- except:
- item["user_avatar"] = ""
- #item["comments_count"] = 0
- item["zans_count"] = item["zans"]
- item["today_stock_img"] = json.loads(item["today_stock_img"])
- #item["win_rate"] = calc_win_rate(item["player_id"],item["match_id"])
- win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%item["player_id"],"win_rate")
- if win_rate:
- item["win_rate"] = str(float(win_rate)*100)+"%"
- else:
- item["win_rate"] = "0.0%"
- item["today_income"] = "{}%".format(item["today_income"]*100)
- item["total_income"] = "{}%".format(item["total_income"]*100)
- #分页
- page = int(kwargs.get("page",1))
- page = 0
- page_size = int(kwargs.get("page_size",20))
- if page and page_size:
- total,data = ccf.get_page_list(data,page,page_size)
- else:
- total = len(data)
- return total,data
- def delete_choice(request):
- """
- """
- user_id = request.user.id
- user_name = request.user.username
- player_id = request.player.id
- user_avatar = request.user.avatar
- qdata = request.json
- stock_id = qdata.get("stock_id")
- cm.UserChoice.objects.filter(stock_id=stock_id,player_id=player_id).delete()
- def delete_comments(request):
- """
- """
- qdata = request.json
- id = qdata.get("id")
- cm.Comments.objects.filter(id=id).delete()
- def modify_user_fund(request):
- """
- """
- user_id = request.user.id
- player = request.player
- player_id = player.id
- match_id = player.match_id
- qdata = request.json
- fundin = qdata.get("in_fund")
- fundout = qdata.get("out_fund")
- fundin = float(fundin) if fundin else 0.0
- fundout = float(fundout) if fundout else 0.0
- account_img = qdata.get("account_img")
- init_fund = player.fund
- stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
- if cm.PlayerRecord.objects.filter(user_id=user_id,stock_date=stock_date).exists():
- raise ce.TipException(u"资金出入须在提交作业之前提交,今日作业已提交,不能提交资金出入!")
- if cm.FundInOut.objects.filter(user_id=user_id,stock_date=stock_date).exists():
- raise ce.TipException(u"今日已有资金出入,一天只能提交一次资金出入!")
- fundinout,flag = cm.FundInOut.objects.get_or_create(
- user_id = user_id,
- fundin = fundin,
- fundout = fundout,
- stock_date = stock_date,
- account_img = account_img
- )
- ##资金出入后修改数据
- #if cm.PlayerRecord.objects.filter(user_id=user_id,stock_date=stock_date).exists():
- # record = cm.PlayerRecord.objects.filter(user_id=user_id,stock_date=stock_date).first()
- # today_fund = record.today_fund
- # yesterday = cm.PlayerRecord.objects.filter(
- # match_id=match_id,player_id=player_id,stock_date=yesterday_date).exclude(stock_date=stock_date).first()
- # if yesterday:
- # yesterday_fund = yesterday.today_fund
- # yesterday_stock = yesterday.today_stock
- # yesterday_stock_img = yesterday.today_stock_img
- # yesterday_is_markt = yesterday.is_markt
- # else:
- # #yesterday_fund = init_fund #today_fund
- # yesterday_fund = record.today_fund
- # yesterday_stock = ""
- # yesterday_stock_img = ""
- # yesterday_is_markt = 0
- # fundin = fundinout.fundin
- # fundout = fundinout.fundout
- # #入资金
- # if fundin > fundout:
- # fundin = fundin - fundout
- # today_income = (today_fund-(yesterday_fund+fundin))/float(yesterday_fund) + fundin
- # total_income = (today_fund-init_fund-fundin)/(init_fund+fundin)
- # cm.Player.objects.filter(id=player_id).update(fund=init_fund+fundin)
- #
- # record.init_fund = init_fund + fundin
- # #出资金
- # else:
- # fundout = fundout - fundin
- # today_income = (today_fund-(yesterday_fund-fundout))/float(yesterday_fund)
- # total_income = (today_fund+fundout)/init_fund
- # cm.Player.objects.filter(id=player_id).update(fund=init_fund/(1+total_income))
- # record.init_fund = init_fund/(1+today_income)
- # if float(today_income)>0.4:
- # raise ce.TipException(u"今日盈利已超过40%,请仔细核对数据或直接联系顽主!")
- # if float(total_income)>8:
- # raise ce.TipException(u"请仔细核对数据或直接联系顽主!")
- # record.today_income = round(today_income,4)
- # record.total_income = round(total_income,4)
- # record.save()
- # #更新group_rank
- # ccc.cache.lpush(settings.RANK_LIST,record.id)
- # return fundinout.id
|