controls.py 109 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999
  1. #coding=utf-8
  2. '''
  3. '''
  4. import os,re,random
  5. import json,time,datetime
  6. import shutil
  7. import tempfile
  8. import zipfile
  9. from docxtpl import DocxTemplate,InlineImage
  10. from docx.shared import Mm
  11. from django.db import transaction
  12. from django.conf import settings
  13. import common.models as cm
  14. import common.error_info as ce
  15. import common.common_functions as ccf
  16. import common.common_control as ccc
  17. import account.password_handle as ph
  18. from utils.exceltool import ExcelTool
  19. from utils.jgpush import send_notification_by_registration_ids
  20. import wzhifuSDK as wxpay
  21. from utils.exceltool import ExcelTool
  22. from utils.qrcodetool import gen_general_qrcode
  23. from django.db.models import Q,Sum,Count,F
  24. from PIL import Image
  25. from PIL import Image,ImageDraw,ImageFont
  26. from django.db import transaction
  27. from threading import Thread
  28. #from django.core.cache import cache
  29. from django.db import connection
  30. import calendar
  31. import xlrd
  32. import xlwt
  33. from xlutils.copy import copy
  34. from xltpl.writer import BookWriter
  35. from django_redis import get_redis_connection
  36. from constants import *
  37. from utils.aliyun_sms import send_verify_code,send_signup_success
  38. from utils.wxSubscribeMessage import send_consult_reply_message
  39. from utils.aliyunpush import aliyunpush
  40. #import logging
  41. #log = logging.getLogger("myerror")
  42. def async(f):
  43. def wrapper(*args, **kwargs):
  44. thr = Thread(target=f, args=args, kwargs=kwargs)
  45. thr.start()
  46. return wrapper
  47. def get_today_date(match_id=None,user_id=None):
  48. if not match_id:
  49. match_id = ccc.get_cur_match().id
  50. #if datetime.datetime.now().strftime("%H:%M") < "15:00":
  51. # if datetime.datetime.now().weekday() in [5,6] or datetime.datetime.now().strftime("%Y-%m-%d") in MISS_DATES:
  52. # today = cm.PlayerRecord.get_db_model(match_id).objects.all().order_by("-stock_date").first().stock_date
  53. # else:
  54. # if datetime.datetime.now().weekday()==0:
  55. # today = (datetime.datetime.now()-datetime.timedelta(days=3)).strftime("%Y-%m-%d")
  56. # else:
  57. # today = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
  58. #else:
  59. # if datetime.datetime.now().weekday() in [5,6] or datetime.datetime.now().strftime("%Y-%m-%d") in MISS_DATES:
  60. # today = cm.PlayerRecord.get_db_model(match_id).objects.all().order_by("-stock_date").first().stock_date
  61. # else:
  62. # today = datetime.datetime.now().strftime("%Y-%m-%d")
  63. try:
  64. if user_id:
  65. today = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=user_id).order_by("-stock_date").first().stock_date
  66. else:
  67. today = cm.PlayerRecord.get_db_model(match_id).objects.all().order_by("-stock_date").first().stock_date
  68. except:
  69. today = datetime.datetime.now().strftime("%Y-%m-%d")
  70. return today
  71. #@async
  72. def update_group_rank(match_id,match_group,stock_date):
  73. #return
  74. prset = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,match_group=match_group,stock_date=stock_date).order_by("-total_income")
  75. records = prset.values()
  76. case_id = " case id "
  77. cases = []
  78. where = []
  79. for index,pr in enumerate(prset):
  80. key = "%s_%s_%s_%s" % (pr.player_id,match_id,match_group,stock_date)
  81. record = records[index]
  82. record.update({"group_rank":index+1})
  83. ccc.cache.delete(key)
  84. ccc.pl.set(key,json.dumps(record,cls=ccc.CusJSONEncoder))
  85. ccc.pl.execute()
  86. #@ccc.cache_data()
  87. def get_notices():
  88. """
  89. """
  90. notices = list(cm.Article.objects.filter(status=2,type="notice").values())
  91. return notices
  92. def get_index_data(request):
  93. """首页数据
  94. """
  95. player = request.player
  96. if not player:
  97. raise ce.TipException(u"该账号未参加任何赛事!")
  98. player_id = player.id
  99. match_id = player.match_id
  100. match_group = player.match_group
  101. #if datetime.datetime.now().hour < 15:
  102. # today = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
  103. #else:
  104. # today = datetime.datetime.now().strftime("%Y-%m-%d")
  105. today = get_today_date()
  106. match_name = get_match_info(match_id).get("name")
  107. records_set = cm.PlayerRecord.get_db_model(match_id).objects.filter(player_id=player_id,match_id=match_id)
  108. if records_set:
  109. try:
  110. cur_rank = get_today_record(player_id,match_id,match_group,today).get("group_rank","")
  111. records = list(records_set.order_by("-stock_date").values())
  112. except:
  113. cur_rank = 0
  114. records = []
  115. else:
  116. cur_rank = 0
  117. records = []
  118. for item in records:
  119. today_stock = json.loads(item["today_stock"]) if item["today_stock"] else []
  120. today_stock = filter(lambda x:x["name"],today_stock)
  121. item["today_stock"] = today_stock
  122. item["today_stock_img"] = json.loads(item["today_stock_img"]) if item["today_stock_img"] else []
  123. yesterday_stock = json.loads(item["yesterday_stock"]) if item["yesterday_stock"] else []
  124. yesterday_stock = filter(lambda x:x["name"],yesterday_stock)
  125. item["yesterday_stock"] = yesterday_stock
  126. item["yesterday_stock_img"] = json.loads(item["yesterday_stock_img"]) if item["yesterday_stock_img"] else []
  127. item["today_income"] = "{}%".format(item["today_income"]*100)
  128. item["total_income"] = "{}%".format(item["total_income"]*100)
  129. #通知
  130. notices = get_notices()
  131. ret = {"match_name":match_name,"cur_rank":cur_rank,"records":records,"notices":notices}
  132. return ret
  133. def get_player_match_list(request):
  134. """选手参赛列表数据
  135. """
  136. uid = request.user.get("id",0)
  137. now_str = datetime.datetime.now().strftime("%Y-%m-%d")
  138. cur_match_id = ccc.get_cur_match().id
  139. match_ids = list(cm.Player.objects.filter(user_id=uid).values_list("match_id",flat=True))
  140. matchs = list(cm.Match.objects.filter(id__in=match_ids).values())
  141. for item in matchs:
  142. player = cm.Player.objects.filter(user_id=uid,match_id=item["id"]).first()
  143. item["player_id"] = player.id if player else 0
  144. return matchs
  145. def get_group_income(match_id,match_group):
  146. """
  147. """
  148. data = []
  149. today = datetime.datetime.now().strftime("%Y-%m-%d")
  150. player_ids = list(cm.Player.objects.filter(match_id=match_id,match_group=match_group).values_list("id",flat=True))
  151. for player_id in player_ids:
  152. today_record = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,match_group=match_group,player_id=player_id,stock_date=today).first()
  153. if today_record:
  154. data.append(today_record.total_income)
  155. data = list(set(data))
  156. data = sorted(data,key=lambda x:x,reverse=True)
  157. return data
  158. def get_player_match_detail(request):
  159. """选手参赛详情数据
  160. """
  161. qdata = request.json
  162. user_id = request.user.get("id",0)
  163. match_id = qdata.get("id")
  164. record_id = qdata.get("record_id")
  165. userinfo = {}
  166. cur_user_id = user_id
  167. if qdata.get("user_id"):
  168. cur_user_id = qdata.get("user_id")
  169. today = get_today_date()
  170. ismine = True if int(cur_user_id) == user_id else False
  171. if not match_id:
  172. player = cm.Player.objects.filter(user_id=cur_user_id,match_id=match_id).first()
  173. match_id =player.match_id
  174. cur_user_id = player.user_id
  175. if record_id:
  176. records_set = cm.PlayerRecord.get_db_model(match_id).objects.filter(id=record_id)
  177. if records_set:
  178. match_id = records_set.first().match_id
  179. else:
  180. records_set = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=cur_user_id,match_id=match_id).order_by("-stock_date")
  181. match = cm.Match.objects.filter(id=match_id).values().first()
  182. groups = list(cm.MatchGroup.objects.filter(match_id=match_id).values_list("name",flat=True))
  183. match["groups"] = groups
  184. all_records_set = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=cur_user_id,match_id=match_id).order_by("-stock_date")
  185. if all_records_set:
  186. records = list(all_records_set.values())
  187. else:
  188. records = []
  189. for item in records:
  190. item["today_stock"] = json.loads(item["today_stock"]) if item["today_stock"] else []
  191. item["today_stock_img"] = json.loads(item["today_stock_img"]) if item["today_stock_img"] else []
  192. item["yesterday_stock"] = json.loads(item["yesterday_stock"]) if item["yesterday_stock"] else []
  193. item["yesterday_stock_img"] = json.loads(item["yesterday_stock_img"]) if item["yesterday_stock_img"] else []
  194. item["today_income"] = "{}%".format(item["today_income"]*100)
  195. item["total_income"] = "{}%".format(item["total_income"]*100)
  196. item["avatar"] = get_user_info(item["user_id"])["avatar"]
  197. today_record = {}
  198. if records_set:
  199. today = records_set.first().stock_date
  200. if record_id:
  201. today_record = records_set.values().first()
  202. today_record = format_today_record(today_record)
  203. else:
  204. match_group = records_set.first().match_group
  205. today_record = ccc.get_today_record(cur_user_id,int(match_id),match_group,today)
  206. if today_record:
  207. today_record["today_stock_img"] = json.loads(today_record["today_stock_img"]) if today_record["today_stock_img"] else []
  208. today_record["today_stock"] = json.loads(today_record["today_stock"]) if today_record["today_stock"] else []
  209. today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
  210. today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
  211. today_record["match_group_name"] = cm.MatchGroup.objects.filter(id=today_record["match_group"]).first().name
  212. today_record["players_num"] = cm.Player.objects.filter(match_group=today_record["match_group"]).count()
  213. today_record["win_rate"] = calc_win_rate(cur_user_id,today_record["match_id"])
  214. badest = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=cur_user_id,match_id=match_id).order_by("today_income").first()
  215. if badest:
  216. today_record["badest_income"] = "{}%".format(badest.today_income*100)
  217. today_record["today_stock_total"] = round(today_record.get("today_stock_total",0.0),4)
  218. userinfo = get_user_info(today_record["user_id"])
  219. today_record["style"] = userinfo.get("style")
  220. else:
  221. player_info = get_user_info(cur_user_id)
  222. today_record = {}
  223. today_record["stock_date"] = today
  224. today_record.update(player_info)
  225. today_record["player_id"] = player_info["id"]
  226. today_record["avatar"] = get_user_info(cur_user_id)["avatar"]
  227. userinfo = get_user_info(cur_user_id)
  228. today_record["style"] = userinfo.get("style")
  229. today_record["user_id"] = player_info["id"]
  230. match["groups"] = [today_record.get("match_group_name","")] if today_record else []
  231. records = sorted(records,key=lambda x:x["stock_date"],reverse=True)
  232. if cm.UserFollows.objects.filter(user_id=request.user.get("id"),follow_id=cur_user_id).exists():
  233. is_follow = 1
  234. else:
  235. is_follow = 0
  236. if today_record and today_record.get("today_fund"):
  237. today_record["today_income_fund"] = round((today_record["today_fund"] - today_record["yesterday_fund"])*10000,2) if today_record["yesterday_fund"] else 0.00
  238. today_record["zan_count"] = today_record.get("zans",0)
  239. ret = {
  240. "match":match,
  241. "today_record":today_record,
  242. "match_group_info":get_group_info(today_record.get("match_group")) if today_record.get("match_group") else {},
  243. "userinfo":get_user_info(cur_user_id),
  244. "records":records,
  245. "is_follow":is_follow,
  246. "fans":cm.UserFollows.objects.filter(follow_id=cur_user_id).count(),
  247. "followers":cm.UserFollows.objects.filter(user_id=cur_user_id).count(),
  248. "stock_age":datetime.datetime.now().year - int(userinfo.get("join_time")) if userinfo.get("join_time") else 0,
  249. "stock_follow":list(cm.UserChoice.objects.filter(user_id=cur_user_id).values_list("stock_name",flat=True))
  250. }
  251. return ret
  252. def get_today_record(player_id,match_id,match_group,today):
  253. """
  254. """
  255. key = "%s_%s_%s_%s" % (player_id,match_id,match_group,today)
  256. #key = "%s_%s_%s" % (player_id,match_id,today)
  257. today_record = ccc.cache.get(key)
  258. today_record = json.loads(today_record) if today_record else {}
  259. #if match_id:
  260. # #记得这里上线后要注释掉
  261. # today_record = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=player_id,match_id=match_id,stock_date=today)
  262. # today_record = today_record.values().first()
  263. try:
  264. if today_record:
  265. user_info = get_user_info(today_record["user_id"])
  266. if user_info:
  267. user_info.pop("id")
  268. today_record.update(user_info)
  269. #仓位
  270. today_stock_total = 0
  271. today_stock = json.loads(today_record["today_stock"])
  272. for ts in today_stock:
  273. if ts["fund"]:
  274. try:
  275. today_stock_total += float(ts["fund"])
  276. except Exception as e:
  277. print e
  278. today_record["cangwei"] = "{}%".format(round(today_stock_total/today_record["today_fund"],4)*100)
  279. today_record["today_stock_total"] = today_stock_total
  280. except Exception as e:
  281. import traceback
  282. traceback.print_exc()
  283. return today_record
  284. def format_today_record(today_record):
  285. try:
  286. if today_record:
  287. user_info = get_user_info(today_record["user_id"])
  288. if user_info:
  289. #user_info.pop("id")
  290. today_record.update(user_info)
  291. #仓位
  292. today_stock_total = 0
  293. today_stock = json.loads(today_record["today_stock"])
  294. for ts in today_stock:
  295. if ts["fund"]:
  296. try:
  297. today_stock_total += float(ts["fund"])
  298. except Exception as e:
  299. print e
  300. today_record["cangwei"] = "{}%".format(round(today_stock_total/today_record["today_fund"],4)*100)
  301. today_record["today_stock_total"] = today_stock_total
  302. # win_rate = ccc.cache.hget("PLAYER_LATEST_%d" % today_record["user_id"],"win_rate")
  303. # if win_rate:
  304. # today_record["win_rate"] = str(float(win_rate)*100)+"%"
  305. # else:
  306. # today_record["win_rate"] = "0.0%"
  307. win_rate = calc_win_rate(today_record["user_id"],today_record["match_id"])
  308. today_record["win_rate"] = win_rate
  309. except Exception as e:
  310. import traceback
  311. traceback.print_exc()
  312. today_record = today_record if today_record else {}
  313. return today_record
  314. def get_today_record_actual(player_id,match_id,match_group,today=None):
  315. """
  316. """
  317. if today:
  318. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,match_group=match_group,player_id=player_id,stock_date=today)
  319. else:
  320. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,match_group=match_group,player_id=player_id).order_by("-stock_date")
  321. today_record = qset.values().first()
  322. if today_record:
  323. user_info = get_user_info(today_record["user_id"])
  324. if user_info:
  325. user_info.pop("id")
  326. today_record.update(user_info)
  327. #仓位
  328. today_stock_total = 0
  329. today_stock = json.loads(today_record["today_stock"])
  330. for ts in today_stock:
  331. if ts["fund"]:
  332. try:
  333. today_stock_total += float(ts["fund"])
  334. except Exception as e:
  335. print e
  336. today_record["cangwei"] = "{}%".format(round(today_stock_total/today_record["today_fund"],4)*100)
  337. today_record["today_stock_total"] = today_stock_total
  338. return today_record
  339. @ccc.cache_data()
  340. def get_match_group_players(match_id,match_group):
  341. players = list(cm.Player.objects.filter(match_id=match_id,match_group=match_group).values())
  342. return players
  343. #@ccc.cache_data()
  344. def get_match_group_users(match_id,match_group):
  345. #users = list(cm.UserMatch.objects.filter(match_id=match_id,match_group=match_group).values())
  346. users = list(cm.Player.objects.filter(match_id=match_id,match_group=match_group).values())
  347. return users
  348. #@ccc.cache_data()
  349. def get_match_groups(match_id):
  350. """
  351. """
  352. match = cm.Match.objects.filter(id=match_id).values().first()
  353. groups = list(cm.MatchGroup.objects.filter(match_id=match_id,is_active=1).order_by("-order").values())
  354. return match,groups
  355. def get_cache_rank_list(match_id,today):
  356. """
  357. """
  358. match,groups = get_match_groups(match_id)
  359. data = []
  360. for item in groups:
  361. new_players = []
  362. players = get_match_group_users(match_id,item["id"])
  363. win_count = 0
  364. loss_count = 0
  365. for player in players:
  366. user_id = player["user_id"]
  367. #username = player["signup_name"]
  368. username = player["username"]
  369. match_group = player["match_group"]
  370. today_record = ccc.get_today_record(user_id,match_id,match_group,today)
  371. if today_record:
  372. player.update(today_record)
  373. player["username"] = username
  374. player["org_today_income"] = player["today_income"]
  375. player["org_total_income"] = player["total_income"]
  376. player["total_income"] = "{}%".format(today_record["total_income"]*100)
  377. player["today_income"] = "{}%".format(today_record["today_income"]*100)
  378. if player["org_today_income"] >= 0.05:
  379. win_count += 1
  380. if player["org_today_income"] <= -0.05:
  381. loss_count += 1
  382. try:
  383. player["fund"] = round(player["fund"],4) if player["fund"] else 0.0
  384. player["init_fund"] = round(player["init_fund"],4)
  385. player["fund"] = round(player["init_fund"],4)
  386. player["today_fund"] = round(player["today_fund"],4)
  387. new_players.append(player)
  388. except Exception as e:
  389. print player
  390. pass
  391. new_players_sort = list(sorted(new_players,key=lambda x:x["org_total_income"],reverse=True))
  392. item["players_num"] = len(players)
  393. item["win_count"] = win_count
  394. item["loss_count"] = loss_count
  395. item["players"] = new_players_sort[:3]
  396. data.append(item)
  397. return match,data
  398. def get_rank_list(request):
  399. """排名列表
  400. """
  401. qdata = request.json
  402. user_id = request.user.get("id",0)
  403. match_id = qdata.get("match_id")
  404. today = qdata.get("stock_date")
  405. if not today:
  406. today = get_today_date()
  407. match,groups = get_cache_rank_list(match_id,today)
  408. ret = {"match":match,"groups":groups}
  409. return ret
  410. @ccc.cache_data()
  411. def get_user_info(uid):
  412. user = cm.UserInfo.objects.filter(id=uid).values().first()
  413. if user:
  414. user["style"] = []
  415. if user["zq"]:
  416. user["style"].append(user["zq"])
  417. if user["cw"]:
  418. user["style"].append(user["cw"])
  419. if user["df"]:
  420. user["style"].append(user["df"])
  421. return user
  422. def get_user_info_actual(uid):
  423. user = cm.UserInfo.objects.filter(id=uid).values().first()
  424. if user:
  425. user["style"] = []
  426. if user["zq"]:
  427. user["style"].append(user["zq"])
  428. if user["cw"]:
  429. user["style"].append(user["cw"])
  430. if user["df"]:
  431. user["style"].append(user["df"])
  432. return user
  433. #@ccc.cache_data()
  434. def get_player_info(player_id):
  435. player = cm.Player.objects.filter(id=player_id).values().first()
  436. return player
  437. @ccc.cache_data()
  438. def get_match_info(match_id):
  439. match = cm.Match.objects.filter(id=match_id).values().first()
  440. return match
  441. @ccc.cache_data()
  442. def get_group_info(group_id):
  443. group = cm.MatchGroup.objects.filter(id=group_id).values().first()
  444. if group:
  445. group["players_num"] = cm.Player.objects.filter(match_group=group["id"]).count()
  446. return group
  447. else:
  448. return {}
  449. def get_group_rank_list(request):
  450. """排名列表
  451. """
  452. qdata = request.json
  453. kwargs = qdata
  454. group_id = qdata.get("id")
  455. match_id = qdata.get("match_id")
  456. match_id = cm.MatchGroup.objects.filter(id=group_id).first().match_id
  457. today = qdata.get("stock_date")
  458. if not today:
  459. today = get_today_date()
  460. match = get_match_info(match_id)
  461. group = get_group_info(group_id)
  462. players = get_match_group_users(match_id,group_id)
  463. new_players = []
  464. for player in players:
  465. user_id = player["user_id"]
  466. #user = get_user_info(user_id)
  467. #username = user["username"] if user else ""
  468. #username = player["signup_name"]
  469. username = player["username"]
  470. match_group = group_id
  471. today_record = ccc.get_today_record(user_id,match_id,match_group,today)
  472. if today_record:
  473. player.update(today_record)
  474. player["username"] = username
  475. player["org_today_income"] = player["today_income"]
  476. player["org_total_income"] = player["total_income"]
  477. player["total_income"] = "{}%".format(player["total_income"]*100)
  478. player["today_income"] = "{}%".format(player["today_income"]*100)
  479. player["fund"] = round(player["fund"],4)
  480. player["init_fund"] = round(player["init_fund"],4)
  481. player["today_fund"] = round(player["today_fund"],4)
  482. new_players.append(player)
  483. if kwargs.get("order_by") == "today_income__asc":
  484. new_players = sorted(new_players,key=lambda x:x["org_today_income"])
  485. elif kwargs.get("order_by") == "today_income__desc" :
  486. new_players = sorted(new_players,key=lambda x:x["org_today_income"],reverse=True)
  487. elif kwargs.get("order_by") == "total_income__asc":
  488. new_players = sorted(new_players,key=lambda x:x["org_total_income"])
  489. elif kwargs.get("order_by") == "total_income__desc":
  490. new_players = sorted(new_players,key=lambda x:x["org_total_income"],reverse=True)
  491. else:
  492. new_players = sorted(new_players,key=lambda x:x["org_total_income"],reverse=True)
  493. #分页
  494. page = int(kwargs.get("page",0))
  495. page_size = int(kwargs.get("page_size",50))
  496. #page_size = 50
  497. if page and page_size:
  498. total,new_players = ccf.get_page_list(new_players,page,page_size)
  499. else:
  500. total = len(new_players)
  501. #应到、实到、请假人数
  502. total_person = cm.Player.objects.filter(match_group=group_id,match_status=1).count()
  503. actual_person = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_group=group_id,stock_date=today).count()
  504. leave_person = total_person - actual_person
  505. win_person = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_group=group_id,stock_date=today,total_income__gte=0).count()
  506. loss_person = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_group=group_id,stock_date=today,total_income__lt=0).count()
  507. ret = {"group":group,"players":new_players,"total":total,"total_person":total_person,
  508. "actual_person":actual_person,"leave_person":leave_person,"win_person":win_person,"loss_person":loss_person}
  509. return ret
  510. def get_player_match_records(request):
  511. """选手参赛每日持股
  512. """
  513. qdata = request.json
  514. match_id = qdata.get("id")
  515. user_id = qdata.get("user_id")
  516. page = int(qdata.get("page",0))
  517. page_size = int(qdata.get("page_size",20))
  518. records_set = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=user_id,match_id=match_id).order_by("-stock_date")
  519. data = list(records_set.values())
  520. for item in data:
  521. today_stock = json.loads(item["today_stock"]) if item["today_stock"] else []
  522. today_stock = filter(lambda x:x["name"],today_stock if today_stock else [])
  523. item["today_stock"] = today_stock
  524. item["today_stock_img"] = json.loads(item["today_stock_img"]) if item["today_stock_img"] else []
  525. yesterday_stock = json.loads(item["yesterday_stock"]) if item["yesterday_stock"] else []
  526. yesterday_stock = filter(lambda x:x["name"],yesterday_stock if yesterday_stock else [])
  527. item["yesterday_stock"] = yesterday_stock
  528. item["yesterday_stock_img"] = json.loads(item["yesterday_stock_img"]) if item["yesterday_stock_img"] else []
  529. item["today_income"] = "{}%".format(item["today_income"]*100)
  530. item["total_income"] = "{}%".format(item["total_income"]*100)
  531. item["zans_count"] = item.get("zans",0)
  532. item["comments_count"] = cm.Comments.objects.filter(record_id=item.get("id",0)).count()
  533. if page and page_size:
  534. total,data = ccf.get_page_list(data,page,page_size)
  535. return total,data
  536. else:
  537. return len(data),data
  538. def add_model(cls,**kwargs):
  539. """
  540. """
  541. model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
  542. model = getattr(cm,model_name)
  543. if model_name == "PlayerRecord":
  544. user_id = kwargs.get("user_id")
  545. match_id = kwargs.get("match_id")
  546. stock_date = kwargs.get("stock_date")
  547. now = datetime.datetime.now()
  548. if not cm.Player.objects.filter(user_id=user_id,match_id=match_id).exists():
  549. raise ce.TipException(u"请先完成报名再提交数据!")
  550. if now.weekday() in [5,6] or not now.strftime("%Y-%m-%d") in get_match_validdates(match_id):
  551. raise ce.TipException(u"今日不能提交数据!")
  552. now_time = datetime.datetime.now().strftime("%H:%S")
  553. if not user_id in [9600,6209,5709,25953]:
  554. if now_time<"15:00" or now_time > "23:50":
  555. raise ce.TipException(u"当日数据请在当日15:00以后23:50以前提交数据!")
  556. stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
  557. today_stock = json.dumps(kwargs.get("today_stock"))
  558. today_stock_img = json.dumps(kwargs.get("today_stock_img"))
  559. today_fund = float(kwargs.get("today_fund",0))
  560. is_markt = int(kwargs.get("is_markt",0))
  561. experience = kwargs.get("experience")
  562. if not ccc.get_cur_match().id == match_id:
  563. raise ce.TipException(u"非当前赛事参赛选手不能提交作业!")
  564. #计算今日和昨日盈亏
  565. if float(today_fund)>9999 or float(today_fund)<=0:
  566. raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
  567. player = cm.Player.objects.filter(user_id=user_id,match_id=match_id).first()
  568. user_id = player.user_id
  569. init_fund = player.fund
  570. user = cm.UserInfo.objects.filter(id=user_id).first()
  571. username = user.username
  572. usercode = user.usercode
  573. match_group = player.match_group
  574. zq = user.zq
  575. cw = user.cw
  576. df = user.df
  577. match = cm.Match.objects.filter(id=match_id).first()
  578. if player.match_status < 1:
  579. raise ce.TipException(u"该账号已暂停/退出比赛,如有疑问请联系管理员获取详情信息!")
  580. now_date = datetime.datetime.now().strftime("%Y-%m-%d")
  581. if not user_id in [9600,6209,5709]:
  582. if match.end_time < now_date:
  583. raise ce.TipException(u"该比赛已结束或您未参加此次比赛不能提交数据!")
  584. validdates = get_match_validdates(match_id)
  585. today_index = validdates.index(stock_date)
  586. yesterday_index = today_index -1 if today_index >=1 else 0
  587. yesterday_date = validdates[yesterday_index]
  588. yesterday = cm.PlayerRecord.get_db_model(match_id).objects.filter(
  589. match_id=match_id,user_id=user_id,stock_date=yesterday_date).exclude(stock_date=stock_date).first()
  590. if yesterday:
  591. yesterday_fund = yesterday.today_fund
  592. yesterday_stock = yesterday.today_stock
  593. yesterday_stock_img = yesterday.today_stock_img
  594. yesterday_is_markt = yesterday.is_markt
  595. else:
  596. yesterday_fund = today_fund
  597. yesterday_stock = ""
  598. yesterday_stock_img = ""
  599. yesterday_is_markt = 0
  600. if kwargs.get("id"):
  601. if cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,user_id=user_id).count()==1:
  602. init_fund = today_fund
  603. cm.Player.objects.filter(user_id=user_id,match_id=match_id).update(fund=today_fund)
  604. else:
  605. if not cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,user_id=user_id).exists():
  606. init_fund = today_fund
  607. cm.Player.objects.filter(user_id=user_id,match_id=match_id).update(fund=today_fund)
  608. with transaction.atomic():
  609. #记录持股情况
  610. new_stock_list = []
  611. today_stock_list = json.loads(today_stock)
  612. for ts in today_stock_list:
  613. if ts["name"]:
  614. try:
  615. stock,flag = cm.Stock.objects.get_or_create(
  616. name = ts["name"]
  617. )
  618. stock_id = stock.id
  619. usobj,flag = cm.UserStock.objects.get_or_create(
  620. user_id = user_id,
  621. stock_id = stock_id,
  622. stock_name = ts["name"],
  623. player_id = player.id,
  624. stock_date = stock_date
  625. )
  626. if ts.get("fund"):
  627. usobj.fund = ts["fund"]
  628. usobj.save()
  629. ts["stock_id"] = stock_id
  630. new_stock_list.append(ts)
  631. except Exception as e:
  632. print(e)
  633. today_stock = json.dumps(new_stock_list)
  634. obj,flag = cm.PlayerRecord.get_db_model(match_id).objects.get_or_create(
  635. user_id=user_id,
  636. match_id=match_id,
  637. stock_date=stock_date)
  638. obj.init_fund = init_fund
  639. obj.yesterday_fund = yesterday_fund
  640. obj.yesterday_stock = yesterday_stock
  641. obj.yesterday_stock_img = yesterday_stock_img
  642. obj.today_fund = today_fund
  643. obj.today_stock = today_stock
  644. obj.today_stock_img = today_stock_img
  645. obj.username = username
  646. obj.usercode = usercode
  647. obj.match_group = match_group
  648. obj.is_markt = is_markt
  649. obj.yesterday_is_markt = yesterday_is_markt
  650. obj.zq = zq
  651. obj.cw = cw
  652. obj.df = df
  653. obj.experience = experience
  654. #计算今日收益和总收益
  655. if float(today_fund)>9999 or float(today_fund)<=0:
  656. raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
  657. #有资金出入
  658. if cm.FundInOut.objects.filter(user_id=user_id,stock_date=stock_date).exists():
  659. fundinout = cm.FundInOut.objects.filter(user_id=user_id,stock_date=stock_date).first()
  660. fundin = fundinout.fundin
  661. fundout = fundinout.fundout
  662. today_income = 0.0
  663. total_income = 0.0
  664. #入资金
  665. if fundin > fundout:
  666. fundin = fundin - fundout
  667. if yesterday:
  668. today_income = (today_fund-(yesterday_fund+fundin))/(float(yesterday_fund) + fundin)
  669. obj.yesterday_fund = obj.yesterday_fund + fundin
  670. else:
  671. today_income = 0.0
  672. total_income = (today_fund-init_fund-fundin)/(init_fund+fundin)
  673. obj.today_income = round(today_income,4)
  674. obj.total_income = round(total_income,4)
  675. if flag:
  676. cm.Player.objects.filter(user_id=user_id,match_id=match_id).update(fund=init_fund+fundin)
  677. obj.init_fund = init_fund + fundin
  678. #出资金
  679. else:
  680. fundout = fundout - fundin
  681. if yesterday:
  682. today_income = (today_fund-(yesterday_fund-fundout))/float(yesterday_fund)
  683. obj.yesterday_fund = round(today_fund/(1+today_income),4)
  684. else:
  685. today_income = 0.0
  686. total_income = (today_fund+fundout-init_fund)/init_fund if init_fund else 0.0
  687. obj.today_income = round(today_income,4)
  688. obj.total_income = round(total_income,4)
  689. if flag:
  690. cm.Player.objects.filter(user_id=user_id,match_id=match_id).update(fund=round(today_fund/(1+total_income),4))
  691. obj.init_fund = round(today_fund/(1+total_income),4)
  692. if float(today_income)>0.4:
  693. raise ce.TipException(u"今日盈利已超过40%,请仔细核对数据或直接联系顽主!")
  694. if float(total_income)>8:
  695. raise ce.TipException(u"请仔细核对数据或直接联系顽主!")
  696. else:
  697. today_income = (today_fund - yesterday_fund)/float(yesterday_fund) if yesterday_fund else 0.0
  698. total_income = (today_fund - init_fund)/float(init_fund) if init_fund else 0.0
  699. if float(today_income)>0.4:
  700. raise ce.TipException(u"今日盈利已超过40%,请仔细核对数据或直接联系顽主!")
  701. if float(total_income)>8:
  702. raise ce.TipException(u"请仔细核对数据或直接联系顽主!")
  703. obj.today_income = round(today_income,4)
  704. obj.total_income = round(total_income,4)
  705. if not flag:
  706. obj.ctime = datetime.datetime.now()
  707. obj.save()
  708. #更新group_rank
  709. #ccc.cache.lpush(settings.RANK_LIST,obj.id)
  710. ccc.cache.lpush(settings.RANK_LIST,"%s_%s" %(obj.match_id,obj.id))
  711. return obj.id
  712. obj = model.objects.create(**kwargs)
  713. return obj.id
  714. def update_model(cls,**kwargs):
  715. """
  716. """
  717. model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
  718. model = getattr(cm,model_name)
  719. id = kwargs.pop("id")
  720. rst = model.objects.filter(id=id).update(**kwargs)
  721. if model_name == "Match":
  722. for item in kwargs.get("groups").split(","):
  723. cm.MatchGroup.objects.get_or_create(match_id=obj.id,name=item)
  724. return rst
  725. def delete_model(cls,**kwargs):
  726. """
  727. """
  728. model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
  729. model = getattr(cm,model_name)
  730. ids = str(kwargs.get("id")).split(",")
  731. rst = model.objects.filter(id__in=ids).delete()
  732. if model_name == "Comments":
  733. cm.Comments.objects.filter(pid__in=ids).delete()
  734. return ids
  735. def get_search_list(cls,**kwargs):
  736. """
  737. """
  738. model_name = re.search(r'.*\.(\w+)SearchView',str(cls.__class__)).groups()[0]
  739. model = getattr(cm,model_name)
  740. qset = model.objects.all()
  741. if model_name == "Stock":
  742. if kwargs.get("name"):
  743. qset = qset.filter(Q(name__icontains=kwargs.get("name"))|Q(code__icontains=kwargs.get("name")))
  744. else:
  745. if kwargs.get("name"):
  746. qset = qset.filter(name__icontains=kwargs.get("name"))
  747. if model_name == "Player":
  748. data = list(qset.values("id","username"))
  749. if model_name == "Stock":
  750. qset = qset.filter(code__isnull=False)
  751. data = list(qset.values("id","name","code"))
  752. for item in data:
  753. if item["code"]:
  754. item["label"] = "%s(%s)" % (item["name"],item["code"])
  755. else:
  756. item["label"] = "%s" % item["name"]
  757. else:
  758. data = list(qset.values("id","name"))
  759. return data
  760. def get_detail_info(cls,**kwargs):
  761. """
  762. """
  763. model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
  764. model = getattr(cm,model_name)
  765. id = kwargs.get("id")
  766. rst = list(model.objects.filter(id=id).values())
  767. rst = rst[0] if rst else {}
  768. if model_name == "Article":
  769. rst["ctime"] = ccf.datetime_to_str(rst["ctime"],"%Y-%m-%d")
  770. if model_name == "Stock":
  771. rst["choiced"] = ccc.cache.get("%s_choices" % id)
  772. rst["user_num"] = ccc.cache.get("%s_choices" % id)
  773. return rst
  774. #@ccc.cache_data()
  775. def get_record_info(rcid):
  776. """
  777. """
  778. rst = cm.PlayerRecord.objects.filter(id=rcid).values().first()
  779. if rst:
  780. rst["match_group"] = cm.MatchGroup.objects.filter(id=rst["match_group"]).first().name
  781. today_stock = json.loads(rst["today_stock"]) if rst["today_stock"] else []
  782. today_stock = filter(lambda x:x["fund"] and x["name"],today_stock if today_stock else [])
  783. rst["today_stock"] = today_stock
  784. today_stock_img = json.loads(rst["today_stock_img"]) if rst["today_stock_img"] else []
  785. rst["today_stock_img"] = today_stock_img
  786. yesterday_stock = json.loads(rst["yesterday_stock"]) if rst["yesterday_stock"] else []
  787. yesterday_stock = filter(lambda x:x["fund"] and x["name"],yesterday_stock if yesterday_stock else [])
  788. rst["yesterday_stock"] = yesterday_stock
  789. yesterday_stock_img = json.loads(rst["yesterday_stock_img"]) if rst["yesterday_stock_img"] else []
  790. rst["yesterday_stock_img"] = yesterday_stock_img
  791. rst["today_income"] = "{}%".format(rst["today_income"]*100)
  792. rst["total_income"] = "{}%".format(rst["total_income"]*100)
  793. return rst
  794. def get_list_info(cls,**kwargs):
  795. """
  796. """
  797. model_name = re.search(r'.*\.(\w+)ListView',str(cls.__class__)).groups()[0]
  798. model = getattr(cm,model_name)
  799. qset = model.objects.all()
  800. if kwargs.get("name"):
  801. qset = qset.filter(name__icontains=kwargs.get("name"))
  802. if model_name == "UserInfo":
  803. if kwargs.get("username"):
  804. qset = qset.filter(username__icontains=kwargs.get("username"))
  805. if kwargs.get("usercode"):
  806. qset = qset.filter(usercode=kwargs.get("usercode"))
  807. data = list(qset.order_by("-id").values())
  808. page = int(kwargs.get("page",0))
  809. page_size = int(kwargs.get("page_size",20))
  810. if page and page_size:
  811. total,data = ccf.get_page_list(data,page,page_size)
  812. if model_name == "Player":
  813. for item in data:
  814. user = cm.UserInfo.objects.filter(id=item["user_id"]).first()
  815. match = cm.Match.objects.filter(id=item["match_id"]).first()
  816. item["username"] = user.username
  817. item["usercode"] = user.usercode
  818. item["match_name"] = match.name if match else ""
  819. return (total,data)
  820. else:
  821. return len(data),data
  822. return rst
  823. def add_player_record_single(**kwargs):
  824. """用户单独上传数据
  825. """
  826. return None
  827. now = datetime.datetime.now()
  828. if now.weekday() in [5,6] or now.strftime("%Y-%m-%d") in MISS_DATES:
  829. raise ce.TipException(u"今日不能提交数据!")
  830. now_time = datetime.datetime.now().strftime("%H:%S")
  831. if now_time<"15:00" or now_time > "23:50":
  832. raise ce.TipException(u"当日数据请在当日15:00以后23:50以前提交数据!")
  833. usercode = kwargs.get("usercode")
  834. match_id = kwargs.get("match_id")
  835. if not cm.Player.objects.filter(usercode=usercode,match_id=match_id).exists():
  836. raise ce.TipException(u"用户代码错误")
  837. stock_date = kwargs.get("stock_date")
  838. #stock_date = "2022-04-26"
  839. stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
  840. today_stock = json.dumps(kwargs.get("today_stock"))
  841. today_stock_img = json.dumps(kwargs.get("today_stock_img"))
  842. today_fund = float(kwargs.get("today_fund"))
  843. is_markt = int(kwargs.get("is_markt",0))
  844. if int(today_fund)>9999 or int(today_fund)<0:
  845. raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
  846. player = cm.Player.objects.filter(usercode=usercode,match_id=match_id).first()
  847. #if player.fund <=0 :
  848. # raise ce.TipException(u"请先输入您的初始资金后再提交数据!")
  849. player_id = player.id
  850. user_id = player.user_id
  851. init_fund = player.fund
  852. user = cm.UserInfo.objects.filter(id=user_id).first()
  853. username = user.username
  854. usercode = user.usercode
  855. match_group = player.match_group
  856. match = cm.Match.objects.filter(id=match_id).first()
  857. if player.match_status < 1:
  858. raise ce.TipException(u"该账号已暂停/退出比赛,如有疑问请联系管理员获取详情信息!")
  859. now_date = datetime.datetime.now().strftime("%Y-%m-%d")
  860. if match.end_time < now_date:
  861. raise ce.TipException(u"该比赛已结束!")
  862. #yesterday = cm.PlayerRecord.objects.filter(
  863. # match_id=match_id,player_id=player_id).order_by("-id").first()
  864. yesterday = cm.PlayerRecord.get_db_model(match_id).objects.filter(
  865. match_id=match_id,player_id=player_id).order_by("-stock_date").first()
  866. if yesterday:
  867. yesterday_fund = yesterday.today_fund
  868. yesterday_stock = yesterday.today_stock
  869. yesterday_stock_img = yesterday.today_stock_img
  870. else:
  871. #yesterday_fund = init_fund
  872. yesterday_fund = today_fund
  873. init_fund = today_fund
  874. yesterday_stock = ""
  875. yesterday_stock_img = ""
  876. cm.Player.objects.filter(id=player_id).update(fund=today_fund)
  877. #记录持股情况
  878. new_stock_list = []
  879. today_stock_list = json.loads(today_stock)
  880. for ts in today_stock_list:
  881. if ts["name"]:
  882. stock,flag = cm.Stock.objects.get_or_create(
  883. name = ts["stock"]
  884. )
  885. stock_id = stock.id
  886. usobj,flag = cm.UserStock.objects.get_or_create(
  887. player_id = player_id,
  888. stock_id = stock_id,
  889. stock_name = ts["name"],
  890. stock_date = stock_date
  891. )
  892. ts["stock_id"] = stock_id
  893. new_stock_list.append(ts)
  894. today_stock = json.dumps(new_stock_list)
  895. obj,flag = cm.PlayerRecord.get_db_model(match_id).objects.get_or_create(
  896. player_id=player_id,
  897. match_id=match_id,
  898. stock_date=stock_date)
  899. obj.init_fund = init_fund
  900. obj.yesterday_fund = yesterday_fund
  901. obj.yesterday_stock = yesterday_stock
  902. obj.yesterday_stock_img = yesterday_stock_img
  903. obj.today_fund = today_fund
  904. obj.today_stock = today_stock
  905. obj.today_stock_img = today_stock_img
  906. obj.user_id = user_id
  907. obj.username = username
  908. obj.usercode = usercode
  909. obj.match_group = match_group
  910. obj.is_markt = is_markt
  911. #计算今日和昨日盈亏
  912. today_income = (today_fund - yesterday_fund)/float(yesterday_fund)
  913. total_income = (today_fund - init_fund)/float(init_fund)
  914. #if int(today_fund)>9999 or int(today_fund)<0:
  915. # raise ce.TipException(u"数据错误,今日净资产不能超过9999万元,不能低于0万元,请仔细核对数据!")
  916. if int(today_income)>2:
  917. raise ce.TipException(u"数据错误,今日盈利已超过2倍,请仔细核对数据!")
  918. obj.today_income = round(today_income,4)
  919. obj.total_income = round(total_income,4)
  920. if not flag:
  921. obj.ctime = datetime.datetime.now()
  922. obj.save()
  923. #更新股票持股人数
  924. for stock in new_stock_list:
  925. cm.Stock.objects.filter(id=stock["id"]).update(user_num=F("user_num")+1)
  926. #更新group_rank
  927. #update_group_rank(match_id,match_group,obj.stock_date)
  928. ccc.cache.lpush(settings.RANK_LIST,obj.id)
  929. return obj.id
  930. def get_single_match_info(match_id):
  931. """
  932. """
  933. if not match_id:
  934. match = cm.Match.objects.all().order_by("-id").values().first()
  935. else:
  936. match = cm.Match.objects.filter(id=match_id).values().first()
  937. now_date = datetime.datetime.now().strftime("%Y-%m-%d")
  938. return now_date,match
  939. def get_cur_record(request):
  940. """
  941. """
  942. user_id = request.user.get("id")
  943. match_id = ccc.get_cur_match().id
  944. stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
  945. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,user_id=user_id,stock_date=stock_date).order_by("-stock_date")
  946. data = qset.values().first() if qset else {}
  947. if data:
  948. data["today_stock_img"] = json.loads(data["today_stock_img"]) if data["today_stock_img"] else []
  949. data["today_stock"] = json.loads(data["today_stock"]) if data["today_stock"] else []
  950. return data
  951. def follow_player(**kwargs):
  952. """
  953. """
  954. user_id = kwargs.get("user_id")
  955. follow_id = kwargs.get("follow_id")
  956. if kwargs.get("action") == "cancel":
  957. cm.UserFollows.objects.filter(user_id=user_id,follow_id=follow_id).delete()
  958. return True
  959. else:
  960. obj,flag = cm.UserFollows.objects.get_or_create(user_id=user_id,follow_id=follow_id)
  961. return obj.id
  962. def calc_win_rate(player_id,match_id):
  963. """计算胜率
  964. """
  965. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,user_id=player_id)
  966. win_rate = qset.filter(today_income__gt=0).count()/float(qset.count()) if qset else 0.0
  967. win_rate = round(win_rate,3)
  968. win_rate = "{}%".format(win_rate*100)
  969. return win_rate
  970. def get_user_follower(request):
  971. """获取用户列表
  972. """
  973. user_id = request.user.get("id")
  974. match_id = ccc.get_cur_match().id
  975. qdata = request.json
  976. if qdata.get("user_id"):
  977. user_id = int(qdata.get("user_id"))
  978. _today = get_today_date()
  979. data = []
  980. qset = cm.UserFollows.objects.filter(follow_id=user_id)
  981. follow_ids = list(qset.values_list("user_id",flat=True))
  982. userset = cm.UserInfo.objects.filter(id__in=follow_ids)
  983. data = list(userset.values())
  984. page = int(qdata.get("page",1))
  985. page_size = int(qdata.get("page_size",20))
  986. if page and page_size:
  987. total,data = ccf.get_page_list(data,page,page_size)
  988. return total,data
  989. else:
  990. return len(data),data
  991. #
  992. for player_id in follow_ids:
  993. latest_key = "PLAYER_LATEST_%d"%player_id
  994. _match_id = ccc.cache.hget(latest_key,"match_id")
  995. _today = ccc.cache.hget(latest_key,"stock_date")
  996. _match_group = ccc.cache.hget(latest_key,"match_group")
  997. today_record = ccc.get_today_record(player_id,_match_id,_match_group,_today)
  998. if today_record:
  999. data.append(today_record)
  1000. #data.append(today_record)
  1001. data = sorted(data,key=lambda x:x["stock_date"],reverse=True)
  1002. _today = ccc.cache.hget("PLAYER_LATEST_%d"%user_id,"stock_date")
  1003. cur_user_latest = "PLAYER_LATEST_%d" % user_id
  1004. _match_group = ccc.cache.hget(cur_user_latest,"match_group")
  1005. cur_today_record = ccc.get_today_record(user_id,match_id,_match_group,_today)
  1006. if cur_today_record:
  1007. data.insert(0,cur_today_record)
  1008. page = int(qdata.get("page",1))
  1009. page_size = int(qdata.get("page_size",20))
  1010. if page and page_size:
  1011. total,data = ccf.get_page_list(data,page,page_size)
  1012. for item in data:
  1013. if item:
  1014. today_stock = json.loads(item["today_stock"])
  1015. today_stock = filter(lambda x:x["name"] and x["fund"],today_stock)
  1016. item["today_stock"] = today_stock
  1017. item["today_stock_img"] = json.loads(item["today_stock_img"])
  1018. win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%item["user_id"],"win_rate")
  1019. if win_rate:
  1020. item["win_rate"] = str(float(win_rate)*100)+"%"
  1021. else:
  1022. item["win_rate"] = "0.0%"
  1023. item["today_income"] = "{}%".format(item["today_income"]*100)
  1024. item["total_income"] = "{}%".format(item["total_income"]*100)
  1025. return total,data
  1026. else:
  1027. return len(data),data
  1028. def get_user_follows(request):
  1029. """获取用户关注的选手列表
  1030. """
  1031. user_id = request.user.get("id",0)
  1032. qdata = request.json
  1033. if qdata.get("user_id"):
  1034. user_id = qdata.get("user_id")
  1035. qset = cm.UserFollows.objects.filter(user_id=user_id)
  1036. follow_ids = list(qset.values_list("follow_id",flat=True))
  1037. userset = cm.UserInfo.objects.filter(id__in=follow_ids)
  1038. data = list(userset.values())
  1039. page = int(qdata.get("page",1))
  1040. page_size = int(qdata.get("page_size",20))
  1041. if page and page_size:
  1042. total,data = ccf.get_page_list(data,page,page_size)
  1043. return total,data
  1044. else:
  1045. return len(data),data
  1046. today = get_today_date()
  1047. _today = today
  1048. data = []
  1049. for user_id in follow_ids:
  1050. latest_key = "PLAYER_LATEST_%d"%user_id
  1051. _match_id = ccc.cache.hget(latest_key,"match_id")
  1052. _today = ccc.cache.hget(latest_key,"stock_date")
  1053. _match_group = ccc.cache.hget(latest_key,"match_group")
  1054. today_record = ccc.get_today_record(user_id,_match_id,_match_group,_today)
  1055. if today_record:
  1056. today_record["zan_count"] = today_record.get("zans",0) if today_record.get("zans") else 0
  1057. today_record["comments_count"] = cm.Comments.objects.filter(record_id=today_record.get("id",0)).count()
  1058. data.append(today_record)
  1059. data = sorted(data,key=lambda x:x["stock_date"],reverse=True)
  1060. page = int(qdata.get("page",1))
  1061. page_size = int(qdata.get("page_size",20))
  1062. if page and page_size:
  1063. total,data = ccf.get_page_list(data,page,page_size)
  1064. for item in data:
  1065. if item:
  1066. try:
  1067. user_id = item["user_id"]
  1068. latest_key = "PLAYER_LATEST_%d"%user_id
  1069. today_stock = json.loads(item["today_stock"])
  1070. today_stock = filter(lambda x:x["name"] and x["fund"],today_stock)
  1071. item["today_stock"] = today_stock
  1072. item["today_stock_img"] = json.loads(item["today_stock_img"])
  1073. win_rate = ccc.cache.hget(latest_key,"win_rate")
  1074. if win_rate:
  1075. item["win_rate"] = str(float(win_rate)*100)+"%"
  1076. else:
  1077. item["win_rate"] = "0.0%"
  1078. item["today_income"] = "{}%".format(item["today_income"]*100)
  1079. item["total_income"] = "{}%".format(item["total_income"]*100)
  1080. item["zans_count"] = item.get("zans",0)
  1081. item["comments_count"] = cm.Comments.objects.filter(record_id=item.get("id",0)).count()
  1082. except Exception as e:
  1083. print(e)
  1084. return total,data
  1085. else:
  1086. return len(data),data
  1087. def get_hot_stock_rank(**kwargs):
  1088. """
  1089. """
  1090. data = {
  1091. "hot_buy":[
  1092. {"stock_name":u"创业黑马","count":12}
  1093. ],
  1094. "hot_sell":[
  1095. {"stock_name":u"创业黑马","count":12}
  1096. ]
  1097. }
  1098. return data
  1099. #@ccc.cache_data()
  1100. def get_stock_info(stock_id):
  1101. """
  1102. """
  1103. stock = cm.Stock.objects.filter(id=stock_id).values().first()
  1104. stock["choiced"] = 1
  1105. return stock
  1106. def get_hot_stock_buy(**kwargs):
  1107. """
  1108. """
  1109. stock_date = kwargs.get("stock_date")
  1110. qset = cm.UserStock.objects.filter(stock_date=stock_date)
  1111. if kwargs.get("name"):
  1112. qset = cm.UserStock.objects.filter(stock_name__icontains=kwargs.get("name"))
  1113. qset = qset.values("stock_id","stock_name").annotate(count=Count("stock_id"),total_fund=Sum("fund")).order_by("-count")
  1114. data = []
  1115. for q in qset:
  1116. stock_id = q["stock_id"]
  1117. count = q["count"]
  1118. stock_name = q.get("stock_name")
  1119. total_fund = q["total_fund"]
  1120. comments_count = ccc.cache.get("%s_comments" % stock_id)
  1121. choice_count = ccc.cache.get("%s_choices" % stock_id)
  1122. comments_count = comments_count if comments_count else 0
  1123. choice_count = choice_count if choice_count else 0
  1124. data.append({"stock_name":stock_name,"id":stock_id,"count":count,"comments_count":comments_count,"choice_count":choice_count,"total_fund":total_fund})
  1125. page = int(kwargs.get("page",1))
  1126. page_size = int(kwargs.get("page_size",20))
  1127. if page and page_size:
  1128. total,data = ccf.get_page_list(data,page,page_size)
  1129. return total,data
  1130. else:
  1131. return len(data),data
  1132. return data
  1133. def get_hot_follow(**kwargs):
  1134. """
  1135. """
  1136. stock_date = kwargs.get("stock_date")
  1137. match_id = kwargs.get("match_id")
  1138. if not match_id:
  1139. match_id = ccc.get_cur_match().id
  1140. #player_ids = list(cm.Player.objects.filter(match_id=cur_match_id,match_status=1).values_list("id",flat=True))
  1141. player_ids = list(cm.Player.objects.filter(match_id=match_id).values_list("user_id",flat=True))
  1142. qset = cm.UserFollows.objects.filter(follow_id__in=player_ids)
  1143. qset = qset.values("follow_id").annotate(count=Count("follow_id")).order_by("-count")
  1144. data = []
  1145. for q in qset:
  1146. player_id = q["follow_id"]
  1147. count = q["count"]
  1148. today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
  1149. match_id = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_id")
  1150. match_group = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_group")
  1151. badest_income = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"badest_income")
  1152. today_record = get_today_record(player_id,match_id,match_group,today)
  1153. if today_record:
  1154. userinfo = get_user_info(today_record["user_id"])
  1155. user_id = today_record["user_id"]
  1156. win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"win_rate")
  1157. try:
  1158. win_rate = str(float(win_rate)*100)+"%"
  1159. except:
  1160. pass
  1161. if userinfo:
  1162. data.append(
  1163. {
  1164. "player_name":userinfo.get("username"),
  1165. "count":count,
  1166. "id":player_id,
  1167. "user_id":user_id,
  1168. "today_fund":today_record["today_fund"],
  1169. "total_income":"{}%".format(today_record["total_income"]*100),
  1170. "today_income":"{}%".format(today_record["today_income"]*100),
  1171. "badest_income":"{}%".format(badest_income*100) if badest_income else "0.0%",
  1172. "style":userinfo.get("style"),
  1173. "badge":userinfo.get("badge"),
  1174. "match_id":match_id,
  1175. "win_rate":win_rate
  1176. }
  1177. )
  1178. if kwargs.get("name"):
  1179. data = filter(lambda x:kwargs.get("name") in x["player_name"],data)
  1180. page = int(kwargs.get("page",1))
  1181. page_size = int(kwargs.get("page_size",20))
  1182. if page and page_size:
  1183. total,data = ccf.get_page_list(data,page,page_size)
  1184. return total,data
  1185. else:
  1186. return len(data),data
  1187. return data
  1188. def get_hot_stock_sell(**kwargs):
  1189. """
  1190. """
  1191. stock_date = kwargs.get("stock_date")
  1192. stock_date_time = ccf.str_to_datetime(kwargs.get("stock_date"),"%Y-%m-%d")
  1193. yesterday = (stock_date_time - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
  1194. ##昨天所有股票
  1195. #yes_stock_ids = list(cm.UserStock.objects.filter(stock_date=yesterday).values_list("stock_id",flat=True))
  1196. #yes_stock_ids = list(set(yes_stock_ids))
  1197. #data = []
  1198. #for ysi in yes_stock_ids:
  1199. # yes_count = cm.UserStock.objects.filter(stock_date=yesterday,stock_id=ysi).count()
  1200. # td_count = cm.UserStock.objects.filter(stock_date=stock_date,stock_id=ysi).count()
  1201. # if td_count < yes_count:
  1202. # stock_name = cm.Stock.objects.filter(id=ysi).first().name
  1203. # data.append({"stock_name":stock_name,"count":yes_count-td_count,"id":ysi})
  1204. qset = cm.HotStockSellCount.objects.filter(stock_date=stock_date)
  1205. if kwargs.get("name"):
  1206. qset = qset.filter(stock_name__icontains=kwargs.get("name"))
  1207. qset = qset.order_by("-count")
  1208. data = list(qset.values("stock_name","stock_id","count"))
  1209. for item in data:
  1210. item["id"] = item["stock_id"]
  1211. page = int(kwargs.get("page",0))
  1212. page_size = int(kwargs.get("page_size",20))
  1213. if page and page_size:
  1214. total,data = ccf.get_page_list(data,page,page_size)
  1215. return total,data
  1216. else:
  1217. return len(data),data
  1218. return data
  1219. def get_stock_info(_id):
  1220. """
  1221. """
  1222. data = cm.Stock.objects.filter(id=_id).values().first()
  1223. return data
  1224. def get_hot_stock_sell_players(**kwargs):
  1225. """
  1226. """
  1227. _id = kwargs.get("id")
  1228. stock_date = kwargs.get("stock_date")
  1229. stock_date_time = ccf.str_to_datetime(kwargs.get("stock_date"),"%Y-%m-%d")
  1230. yesterday = (stock_date_time - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
  1231. #昨天持股选手
  1232. yes_players = list(cm.UserStock.objects.filter(stock_date=yesterday,stock_id=_id).values_list("player_id",flat=True))
  1233. td_players = list(cm.UserStock.objects.filter(stock_date=stock_date,stock_id=_id).values_list("player_id",flat=True))
  1234. sell_players = list(set(yes_players)-set(td_players))
  1235. data = []
  1236. for player_id in sell_players:
  1237. player = cm.Player.objects.filter(id=player_id).first()
  1238. if player:
  1239. match_id = player.match_id
  1240. match_group = player.match_group
  1241. today_record = get_today_record(player_id,match_id,match_group,stock_date)
  1242. if today_record:
  1243. today_record["today_stock_img"] = json.loads(today_record["today_stock_img"]) if today_record["today_stock_img"] else []
  1244. today_record["today_stock"] = json.loads(today_record["today_stock"]) if today_record["today_stock"] else []
  1245. today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
  1246. today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
  1247. data.append(today_record)
  1248. data = sorted(data,key=lambda x:x["today_fund"],reverse=True)
  1249. page = int(kwargs.get("page",0))
  1250. page_size = int(kwargs.get("page_size",20))
  1251. if page and page_size:
  1252. total,data = ccf.get_page_list(data,page,page_size)
  1253. return total,data
  1254. else:
  1255. return len(data),data
  1256. return data
  1257. def get_win_rate_rank(request):
  1258. """
  1259. """
  1260. player_id = request.player.id
  1261. match_id = request.player.match_id
  1262. match_group = request.player.match_group
  1263. kwargs = request.json
  1264. match_id = ccc.get_cur_match().id
  1265. qset = cm.WinDefendRank.objects.filter(match_id=match_id,auto_complete__lt=5,match_status=1).order_by("-win_rate")
  1266. data = list(qset.values())
  1267. page = int(kwargs.get("page",1))
  1268. page_size = int(kwargs.get("page_size",20))
  1269. if page and page_size:
  1270. total,data = ccf.get_page_list(data,page,page_size)
  1271. else:
  1272. total = len(data)
  1273. for item in data:
  1274. item["win_rate"] = "{}%".format(item["win_rate"]*100)
  1275. item["badest_income"] = "{}%".format(item["badest_income"]*100)
  1276. item["total_income"] = "{}%".format(item["total_income"]*100)
  1277. userinfo = get_user_info(item["user_id"])
  1278. if userinfo:
  1279. item["badge"] = userinfo.get("badge")
  1280. item["style"] = userinfo.get("style")
  1281. item["username"] = userinfo.get("username")
  1282. return total,data
  1283. def get_defend_rank(request):
  1284. """
  1285. """
  1286. player_id = request.player.id
  1287. match_id = request.player.match_id
  1288. match_group = request.player.match_group
  1289. kwargs = request.json
  1290. qset = cm.WinDefendRank.objects.filter(match_id=match_id,auto_complete__lte=5,match_status=1).order_by("-badest_income")
  1291. data = list(qset.values())
  1292. #data = []
  1293. #for item in datas:
  1294. # player = cm.Player.objects.filter(id=item["player_id"]).first()
  1295. # item["match_status"] = player.match_status if player else -1
  1296. # if item["match_status"] > -1:
  1297. # data.append(item)
  1298. page = int(kwargs.get("page",1))
  1299. page_size = int(kwargs.get("page_size",20))
  1300. if page and page_size:
  1301. total,data = ccf.get_page_list(data,page,page_size)
  1302. else:
  1303. total = len(data)
  1304. for item in data:
  1305. item["win_rate"] = "{}%".format(item["win_rate"]*100)
  1306. item["badest_income"] = "{}%".format(item["badest_income"]*100)
  1307. item["total_income"] = "{}%".format(item["total_income"]*100)
  1308. userinfo = get_user_info(item["user_id"])
  1309. if userinfo:
  1310. item["badge"] = userinfo.get("badge")
  1311. item["style"] = userinfo.get("style")
  1312. item["username"] = userinfo.get("username")
  1313. return total,data
  1314. def get_champion_articles_list(request):
  1315. """
  1316. """
  1317. kwargs = request.json
  1318. _type = kwargs.get("type")
  1319. isbanner = kwargs.get("isbanner")
  1320. category = kwargs.get("category")
  1321. qset = cm.Article.objects.filter(status=2).exclude(type="notice").order_by("-id")
  1322. if _type:
  1323. qset = qset.filter(type=_type)
  1324. if isbanner:
  1325. qset = qset.filter(isbanner=isbanner)
  1326. if category:
  1327. qset = qset.filter(category=category)
  1328. page = int(kwargs.get("page",0))
  1329. page_size = int(kwargs.get("page_size",20))
  1330. if page and page_size:
  1331. total,qset = ccc.get_page_qset(qset,page,page_size)
  1332. else:
  1333. total = qset.count()
  1334. data = list(qset.values())
  1335. for item in data:
  1336. item["ctime"] = ccf.datetime_to_str(item["ctime"],"%Y-%m-%d")
  1337. return total,data
  1338. def get_wanzhu_comment(**kwargs):
  1339. """
  1340. """
  1341. match_id = kwargs.get("match_id")
  1342. group_id = kwargs.get("group_id")
  1343. today = get_today_date()
  1344. players = get_match_group_players(match_id,group_id)
  1345. new_players = []
  1346. for player in players:
  1347. user_id = player["user_id"]
  1348. user = get_user_info(user_id)
  1349. username = user["username"] if user else ""
  1350. player_id = player["id"]
  1351. match_group = group_id
  1352. today_record = get_today_record(player_id,match_id,int(match_group),today)
  1353. if today_record and today_record.get("wanzhu_comment"):
  1354. player.update(today_record)
  1355. player["username"] = username
  1356. player["total_income"] = "{}%".format(player["total_income"]*100)
  1357. player["fund"] = round(player["fund"],4)
  1358. player["init_fund"] = round(player["init_fund"],4)
  1359. player["today_fund"] = round(player["today_fund"],4)
  1360. player["today_stock"] = json.loads(player["today_stock"]) if player["today_stock"] else []
  1361. new_players.append(player)
  1362. new_players = sorted(new_players,key=lambda x:x["group_rank"])
  1363. data = new_players
  1364. page = int(kwargs.get("page",0))
  1365. page_size = int(kwargs.get("page_size",20))
  1366. if page and page_size:
  1367. total,data = ccf.get_page_list(data,page,page_size)
  1368. else:
  1369. total = len(data)
  1370. return total,data
  1371. def get_enum_list(request):
  1372. """
  1373. """
  1374. data = {
  1375. "zq":[
  1376. u"短线博弈",
  1377. u"长线价投",
  1378. u"长短兼备"
  1379. ],
  1380. "cw":[
  1381. u"分仓开超市",
  1382. u"重仓押注",
  1383. u"全仓单钓",
  1384. u"融资加倍"
  1385. ],
  1386. "df":[
  1387. u"低吸",
  1388. u"半路",
  1389. u"首板",
  1390. u"接力",
  1391. u"撬板",
  1392. u"T加0",
  1393. u"隔夜卖",
  1394. u"格局锁仓",
  1395. u"核按钮"
  1396. ],
  1397. "pz":[
  1398. u"10厘米",
  1399. u"20厘米",
  1400. u"30厘米",
  1401. u"N/C新股",
  1402. u"次新股",
  1403. u"可转债",
  1404. u"港股",
  1405. u"基金",
  1406. u"逆回购"
  1407. ]
  1408. }
  1409. return data
  1410. def get_player_list(**kwargs):
  1411. """选手列表
  1412. """
  1413. match_id = kwargs.get("match_id")
  1414. today = get_today_date()
  1415. qset = cm.Player.objects.filter(match_id=match_id,match_status=1)
  1416. if kwargs.get("name"):
  1417. qset = qset.filter(username__icontains=kwargs.get("name"))
  1418. page = int(kwargs.get("page",0))
  1419. page_size = int(kwargs.get("page_size",20))
  1420. if page and page_size:
  1421. total,qset = ccc.get_page_qset(qset,page,page_size)
  1422. else:
  1423. total = qset.count()
  1424. data = list(qset.values())
  1425. for item in data:
  1426. #print(item)
  1427. match_id = item["match_id"]
  1428. match_group = item["match_group"]
  1429. user_id = item["user_id"]
  1430. player_id = item["id"]
  1431. #user = cm.UserInfo.objects.filter(id=user_id).first()
  1432. today = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"stock_date")
  1433. match_id = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_id")
  1434. match_group = ccc.cache.hget("PLAYER_LATEST_%d"%player_id,"match_group")
  1435. today_record = get_today_record(player_id,match_id,match_group,today)
  1436. if today_record:
  1437. today_record.pop("id")
  1438. item.update(today_record)
  1439. user_info = get_user_info(user_id)
  1440. if user_info:
  1441. user_info.pop("id")
  1442. item.update(user_info)
  1443. if item.get("today_income"):
  1444. item["today_income"] = "{}%".format(item["today_income"]*100)
  1445. item["total_income"] = "{}%".format(item["total_income"]*100)
  1446. if kwargs.get("zq"):
  1447. data = filter(lambda x:kwargs.get("zq") == x.get("zq"),data)
  1448. if kwargs.get("cw"):
  1449. data = filter(lambda x:kwargs.get("cw") == x.get("cw"),data)
  1450. if kwargs.get("df"):
  1451. data = filter(lambda x:kwargs.get("df") == x.get("df"),data)
  1452. return total,data
  1453. def get_mine_style(request):
  1454. """
  1455. """
  1456. user = request.user
  1457. #player = request.player
  1458. user = cm.UserInfo.objects.filter(id=user["id"]).first()
  1459. match_id = ccc.get_cur_match().id
  1460. player = cm.Player.objects.filter(user_id=user.id,match_id=match_id).first()
  1461. data = {
  1462. "zq":user.zq,
  1463. "cw":user.cw,
  1464. "df":user.df,
  1465. "pz":user.pz,
  1466. "join_time":user.join_time,
  1467. "username":user.username,
  1468. "account_img":user.account_img,
  1469. "avatar":user.avatar
  1470. }
  1471. if player:
  1472. data["is_player"] = 1
  1473. data["init_fund"] = player.fund if player.fund else 0
  1474. else:
  1475. data["is_player"] = 0
  1476. data["init_fund"] = None
  1477. return data
  1478. def update_user_style(**kwargs):
  1479. """
  1480. """
  1481. user_id = kwargs.pop("user_id")
  1482. #player_id = kwargs.pop("player_id")
  1483. if kwargs.get("init_fund"):
  1484. init_fund = kwargs.pop("init_fund")
  1485. try:
  1486. init_fund = kwargs.pop("init_fund")
  1487. except Exception as e:
  1488. print(e)
  1489. #avatar = kwargs.pop("avatar")
  1490. cm.UserInfo.objects.filter(id=user_id).update(**kwargs)
  1491. #if player_id and init_fund:
  1492. # cm.Player.objects.filter(id=player_id).update(fund=init_fund)
  1493. if kwargs.get("username"):
  1494. cm.Player.objects.filter(user_id=user_id).update(username=kwargs.get("username"))
  1495. match_id = ccc.get_cur_match().id
  1496. upset = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=user_id)
  1497. upset.update(username=kwargs.get("username"))
  1498. record_ids = list(upset.values_list("id",flat=True))
  1499. for _id in record_ids:
  1500. ccc.cache.lpush(settings.RANK_LIST,"%s_%s" %(match_id,_id))
  1501. if kwargs.get("avatar"):
  1502. cm.UserInfo.objects.filter(id=user_id).update(avatar=kwargs.get("avatar"))
  1503. ccc.cache.delete("cdata_get_user_info_(%sL,)"%user_id)
  1504. return True
  1505. def get_stock_players(**kwargs):
  1506. """
  1507. """
  1508. stock_id = kwargs.get("stock_id")
  1509. stock_date = kwargs.get("stock_date",get_today_date())
  1510. data = []
  1511. user_stocks = cm.UserStock.objects.filter(stock_id=stock_id,stock_date=stock_date)
  1512. for us in user_stocks:
  1513. player_id = us.player_id
  1514. player = cm.Player.objects.filter(id=player_id).first()
  1515. if player:
  1516. match_id = player.match_id
  1517. match_group = player.match_group
  1518. user_id = player.user_id
  1519. if stock_date:
  1520. today_record = get_today_record(user_id,match_id,match_group,stock_date)
  1521. else:
  1522. today_record = get_today_record(user_id,match_id,match_group,us.stock_date)
  1523. if today_record:
  1524. today_record["today_stock_img"] = json.loads(today_record["today_stock_img"]) if today_record["today_stock_img"] else []
  1525. today_record["today_stock"] = json.loads(today_record["today_stock"]) if today_record["today_stock"] else []
  1526. today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
  1527. today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
  1528. data.append(today_record)
  1529. data = sorted(data,key=lambda x:x["today_fund"],reverse=True)
  1530. #分页
  1531. page = int(kwargs.get("page",0))
  1532. page_size = int(kwargs.get("page_size",20))
  1533. if page and page_size:
  1534. total,data = ccf.get_page_list(data,page,page_size)
  1535. else:
  1536. total = len(data)
  1537. #return total,data
  1538. #return data
  1539. if kwargs.get("v3"):
  1540. return total,data
  1541. else:
  1542. return data
  1543. def update_user_fund(**kwargs):
  1544. """
  1545. """
  1546. user_id = kwargs.pop("user_id")
  1547. player_id = kwargs.pop("player_id")
  1548. init_fund = kwargs.pop("init_fund")
  1549. if player_id and init_fund:
  1550. cm.Player.objects.filter(id=player_id).update(fund=init_fund)
  1551. return True
  1552. def get_player_match_calendar(**kwargs):
  1553. """
  1554. """
  1555. match_id = kwargs.get("match_id")
  1556. month = kwargs.get("month")
  1557. user_id = kwargs.get("user_id")
  1558. week,eday = calendar.monthrange(int(month.split("-")[0]),int(month.split("-")[1]))
  1559. sday = "01"
  1560. eday = str(eday).zfill(2)
  1561. sdate = month + "-" + sday
  1562. edate = month + "-" + eday
  1563. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=user_id,match_id=match_id)\
  1564. .filter(stock_date__gte=sdate,stock_date__lte=edate)
  1565. data = list(qset.values())
  1566. dct = {}
  1567. for item in data:
  1568. item["today_income"] = "{}%".format(item["today_income"]*100)
  1569. #dct[item["stock_date"]] = item["today_income"]
  1570. dct[item["stock_date"]] = [item["today_income"],item["id"]]
  1571. newdata = []
  1572. for i in range(1,int(eday)+1):
  1573. stock_date = month + "-" + str(i).zfill(2)
  1574. today_tpl = dct.get(stock_date,[])
  1575. today_income = today_tpl[0] if today_tpl else None
  1576. record_id = today_tpl[1] if today_tpl else None
  1577. newdata.append({
  1578. "stock_date":stock_date,
  1579. "today_income":today_income,
  1580. "record_id":record_id
  1581. })
  1582. return newdata
  1583. def get_all_match(request):
  1584. """
  1585. """
  1586. now = datetime.datetime.now().strftime("%Y-%m-%d")
  1587. #qset = cm.Match.objects.filter(start_time__lte=now).order_by("id")
  1588. qset = cm.Match.objects.filter(match_status__in=[3,4]).order_by("-id")
  1589. data = list(qset.values())
  1590. for item in data:
  1591. valid_dates = json.loads(item["valid_dates"]) if item["valid_dates"] else []
  1592. valid_dates.sort()
  1593. item["valid_dates"] = valid_dates
  1594. return data
  1595. def get_default_date(**kwargs):
  1596. """
  1597. """
  1598. match_id = kwargs.get("match_id")
  1599. if not match_id:
  1600. match_id = ccc.get_cur_match().id
  1601. record = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id).order_by("-stock_date").first()
  1602. if record:
  1603. return record.stock_date
  1604. else:
  1605. return get_today_date()
  1606. @ccc.cache_data()
  1607. def get_stock_search(**kwargs):
  1608. """
  1609. """
  1610. qset = cm.Stock.objects.all()
  1611. data = list(qset.values("id","name","code"))
  1612. for item in data:
  1613. if item["code"]:
  1614. item["label"] = "%s(%s)" % (item["name"],item["code"])
  1615. else:
  1616. item["label"] = "%s" % item["name"]
  1617. return data
  1618. def get_mine_latest(request):
  1619. """
  1620. """
  1621. try:
  1622. user_id = request.user.get("id")
  1623. match_id = ccc.cache.hget("PLAYER_LATEST_%d" % user_id,"match_id")
  1624. match_group = ccc.cache.hget("PLAYER_LATEST_%d" % user_id,"match_group")
  1625. _today = ccc.cache.hget("PLAYER_LATEST_%d" % user_id,"stock_date")
  1626. if _today:
  1627. rst = ccc.get_today_record(int(user_id),int(match_id),int(match_group),_today)
  1628. if rst:
  1629. rst["today_income_fund"] = round((rst["today_fund"] - rst["yesterday_fund"])*10000,2) if rst["yesterday_fund"] else 0.00
  1630. rst["today_income"] = "{}%".format(rst["today_income"]*100)
  1631. rst["total_income"] = "{}%".format(rst["total_income"]*100)
  1632. rst["zan_count"] = rst.get("zans",0)
  1633. rst["comments_count"] = cm.Comments.objects.filter(record_id=rst.get("id",0)).count()
  1634. return rst
  1635. except Exception as e:
  1636. print(e)
  1637. return {"player_id":user_id,"match_id":match_id,"user_id":user_id}
  1638. #@ccc.cache_data()
  1639. def get_match_validdates(match_id):
  1640. """
  1641. """
  1642. #qdata = request.json
  1643. #match_id = qdata.get("match_id")
  1644. match = cm.Match.objects.filter(id=match_id).first()
  1645. if match:
  1646. validdates = json.loads(match.valid_dates) if match.valid_dates else []
  1647. validdates.sort()
  1648. return validdates
  1649. return []
  1650. def send_phcode(request):
  1651. """
  1652. """
  1653. qdata = request.json
  1654. phone = qdata.get("phone")
  1655. import random
  1656. code = "%s%s%s%s" % (random.randint(0,9),random.randint(0,9),random.randint(0,9),random.randint(0,9))
  1657. send_verify_code(phone,code)
  1658. ccc.cache.set(phone,code,120)
  1659. pass
  1660. def get_signup_info(request):
  1661. """
  1662. """
  1663. qdata = request.json
  1664. user_id = request.user.get("id",0)
  1665. try:
  1666. match_id = ccc.get_signup_match().id
  1667. match = cm.Match.objects.filter(id=match_id).values().first()
  1668. #
  1669. match_groups = list(cm.MatchGroup.objects.filter(match_id=match_id,is_active=1).values())
  1670. match["groups"] = match_groups
  1671. #报名状态
  1672. now = datetime.datetime.now().strftime("%Y-%m-%d")
  1673. signup_start_time = match["signup_start_time"]
  1674. signup_end_time = match["signup_end_time"]
  1675. if signup_start_time <= now and signup_end_time >= now:
  1676. match["signup_status"] = 1
  1677. else:
  1678. match["signup_status"] = 0
  1679. if cm.Player.objects.filter(match_id=match_id,user_id=user_id,match_group__isnull=False).filter(role__in=[1,2]).exists():
  1680. match["signup_done"] = 1
  1681. else:
  1682. match["signup_done"] = 0
  1683. return match
  1684. except Exception as e:
  1685. print(e)
  1686. return {}
  1687. def do_wx_pay(request):
  1688. """
  1689. """
  1690. user = request.user
  1691. user_id = request.user.get("id",0)
  1692. user_name = request.user.get("username","")
  1693. openid = request.user.get("openid","")
  1694. qdata = request.json
  1695. match_id = qdata.get("match_id")
  1696. match_name = qdata.get("match_name")
  1697. signup_type = qdata.get("signup_type")
  1698. total_fee = str(qdata.get("total_fee"))
  1699. phone = qdata.get("phone")
  1700. phcode = qdata.get("phcode")
  1701. match_group = qdata.get("match_group")
  1702. signup_name = qdata.get("signup_name")
  1703. if not signup_name:
  1704. signup_name = user_name
  1705. orgcode = ccc.cache.get(phone)
  1706. if not phone == "13883187629":
  1707. if not phcode == orgcode:
  1708. raise ce.TipException(u"验证码不正确!")
  1709. if int(signup_type) == 1:
  1710. if not match_group:
  1711. match_group = cm.MatchGroup.objects.filter(match_id=match_id,charge=0).first().id
  1712. out_trade_no = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + str(int(time.time()*1000))
  1713. #游客和普通选手付费报名
  1714. #gt_time = datetime.timedelta(days=-365)+datetime.datetime.now()
  1715. #old_player = cm.Player.objects.filter(user_id=user_id,match_status=1,ctime__gte=gt_time).exists()
  1716. #if user["player_type"] in [0,1] and not phone=="13883187629":
  1717. if user["player_type"] in [0,1] and not phone=="13883187629":
  1718. #生成订单
  1719. order = cm.SignupOrder.objects.create(
  1720. user_id = user_id,
  1721. user_name = signup_name,
  1722. match_id = match_id,
  1723. match_name = match_name,
  1724. signup_type = signup_type,
  1725. total_fee = total_fee,
  1726. out_trade_no = out_trade_no,
  1727. phone = phone,
  1728. match_group = match_group,
  1729. signup_name = signup_name
  1730. )
  1731. #支付
  1732. total_fee = str(int(float(order.total_fee)*100))
  1733. prepayinfo = wxpay.get_wx_unifiedorder(out_trade_no,total_fee,openid)
  1734. prepayinfo["key"] = wxpay.WxPayConf_pub.KEY
  1735. return prepayinfo
  1736. #种子选手和开户选手免费报名
  1737. else:
  1738. if signup_type == 1:
  1739. signup_name = user_name
  1740. #生成订单
  1741. order = cm.SignupOrder.objects.create(
  1742. user_id = user_id,
  1743. user_name = signup_name,
  1744. match_id = match_id,
  1745. match_name = match_name,
  1746. signup_type = signup_type,
  1747. total_fee = total_fee,
  1748. out_trade_no = out_trade_no,
  1749. phone = phone,
  1750. match_group = match_group,
  1751. signup_name = signup_name
  1752. )
  1753. user = cm.UserInfo.objects.filter(id=user_id).first()
  1754. #生成选手信息
  1755. cur_match = cm.Match.objects.filter(id=match_id).first()
  1756. visit_group = cm.MatchGroup.objects.filter(id=match_group).first()
  1757. player,flag = cm.Player.objects.get_or_create(
  1758. user_id = user.id,
  1759. match_id = cur_match.id
  1760. )
  1761. player.match_name = cur_match.name
  1762. player.match_group = visit_group.id
  1763. player.match_group_name = visit_group.name
  1764. player.username = signup_name
  1765. player.usercode = request.user.get("usercode")
  1766. player.role = 2
  1767. player.match_status = 1
  1768. player.save()
  1769. #
  1770. order.player_id = player.id
  1771. order.save()
  1772. user.username = signup_name
  1773. user.phone = phone
  1774. user.role = 2
  1775. user.save()
  1776. #发送报名成功信息
  1777. #send_signup_success(phone,signup_name)
  1778. if phone == "13883187629":
  1779. for i in [5001,4762,5173,5141]:
  1780. cm.UserFollows.objects.get_or_create(user_id=user_id,follow_id=i)
  1781. return {"free":1}
  1782. def do_wxpay_notify(request):
  1783. qdata = request.json
  1784. flag,res = wxpay.check_notify_valid(request.body)
  1785. if flag:
  1786. out_trade_no = res.get("out_trade_no")
  1787. transaction_id = res.get("transaction_id")
  1788. pay_time = res.get("time_end")
  1789. try:
  1790. sorder = cm.SignupOrder.objects.filter(out_trade_no=out_trade_no).first()
  1791. if sorder and not sorder.transaction_id:
  1792. now = datetime.datetime.now()
  1793. sorder.order_status = 1
  1794. sorder.pay_status = 1
  1795. sorder.pay_time = now
  1796. sorder.transaction_id = transaction_id
  1797. sorder.save()
  1798. #生成选手信息
  1799. user = cm.UserInfo.objects.filter(id=sorder.user_id).first()
  1800. visit_group = cm.MatchGroup.objects.filter(id=sorder.match_group).first()
  1801. player,flag = cm.Player.objects.get_or_create(
  1802. user_id = sorder.user_id,
  1803. match_id = sorder.match_id
  1804. )
  1805. player.match_name = sorder.match_name
  1806. player.match_group = visit_group.id
  1807. player.match_group_name = visit_group.name
  1808. player.username = sorder.user_name
  1809. player.usercode = user.usercode if user else ""
  1810. if sorder.signup_type == 2:
  1811. player.role = 2
  1812. else:
  1813. player.role = 1
  1814. #
  1815. sorder.player_id = player.id
  1816. sorder.save()
  1817. player.save()
  1818. if sorder.signup_type == 2:
  1819. player_id = sorder.player_id
  1820. user_id = sorder.user_id
  1821. match_group = sorder.match_group
  1822. match_group_name = cm.MatchGroup.objects.filter(id=match_group).first().name
  1823. 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)
  1824. cm.UserInfo.objects.filter(id=user_id).update(role=2,phone=sorder.phone,username=sorder.user_name)
  1825. if sorder.signup_type == 1:
  1826. player_id = sorder.player_id
  1827. user_id = sorder.user_id
  1828. cm.Player.objects.filter(id=player_id).update(role=1,match_status=1)
  1829. cm.UserInfo.objects.filter(id=user_id).update(role=1,phone=sorder.phone,username=sorder.user_name)
  1830. #发送报名成功信息
  1831. #send_signup_success(sorder.phone,sorder.signup_name)
  1832. return True
  1833. except Exception as e:
  1834. import traceback
  1835. traceback.print_exc()
  1836. print(e,111111111111)
  1837. return False
  1838. def get_user_comments(request):
  1839. """
  1840. """
  1841. kwargs = request.json
  1842. stock_id = kwargs.get("stock_id")
  1843. record_id = kwargs.get("record_id")
  1844. if record_id:
  1845. qset = cm.Comments.objects.filter(record_id=record_id,pid__isnull=True).order_by(*["-istop","-id"])
  1846. else:
  1847. qset = cm.Comments.objects.filter(stock_id=stock_id,pid__isnull=True).order_by(*["-istop","-id"])
  1848. data = list(qset.values())
  1849. for item in data:
  1850. if record_id:
  1851. subcomments = cm.Comments.objects.filter(record_id=record_id,pid=item["id"])
  1852. else:
  1853. subcomments = cm.Comments.objects.filter(stock_id=stock_id,pid=item["id"])
  1854. item["children"] = list(subcomments.values())
  1855. #分页
  1856. page = int(kwargs.get("page",1))
  1857. page_size = int(kwargs.get("page_size",20))
  1858. if page and page_size:
  1859. total,data = ccf.get_page_list(data,page,page_size)
  1860. else:
  1861. total = len(data)
  1862. return total,data
  1863. def get_user_choices(request):
  1864. """
  1865. """
  1866. user_id = request.user.get("id",0)
  1867. #match_id = request.player.match_id
  1868. kwargs = request.json
  1869. stock_id = kwargs.get("stock_id")
  1870. if stock_id:
  1871. qset = cm.UserChoice.objects.filter(stock_id=stock_id)
  1872. else:
  1873. qset = cm.UserChoice.objects.filter(user_id=user_id)
  1874. data = list(qset.values())
  1875. for item in data:
  1876. stock_id = item["stock_id"]
  1877. comments_count = ccc.cache.get("%s_comments" % stock_id)
  1878. choice_count = ccc.cache.get("%s_choices" % stock_id)
  1879. comments_count = comments_count if comments_count else 0
  1880. choice_count = choice_count if choice_count else 0
  1881. item["count"] = choice_count
  1882. item["comments_count"] = comments_count
  1883. item["choice_count"] = choice_count
  1884. #item["match_id"] = match_id
  1885. #分页
  1886. page = int(kwargs.get("page",1))
  1887. page_size = int(kwargs.get("page_size",20))
  1888. if page and page_size:
  1889. total,data = ccf.get_page_list(data,page,page_size)
  1890. else:
  1891. total = len(data)
  1892. return total,data
  1893. def get_user_consult_list(request):
  1894. """
  1895. """
  1896. player_id = request.user.get("id") if request.user else 0
  1897. if not player_id:
  1898. return 0,[]
  1899. kwargs = request.json
  1900. record_id = kwargs.get("record_id")
  1901. if kwargs.get("user_id"):
  1902. player_id = kwargs.get("user_id")
  1903. qset = cm.WanzhuConsult.objects.filter(user_id=player_id,user_id__gt=0)
  1904. qdata = list(qset.values())
  1905. data = []
  1906. for item in qdata:
  1907. data.append(item)
  1908. if cm.WanzhuConsult.objects.filter(pid=item["id"]).exists():
  1909. reply_list = cm.WanzhuConsult.objects.filter(Q(pid=item["id"])).values()
  1910. for iitem in reply_list:
  1911. data.append(iitem)
  1912. data = sorted(data,key=lambda x:x["id"])
  1913. #分页
  1914. page = int(kwargs.get("page",1))
  1915. page_size = int(kwargs.get("page_size",1000))
  1916. if page and page_size:
  1917. total,data = ccf.get_page_list(data,page,page_size)
  1918. else:
  1919. total = len(data)
  1920. for item in data:
  1921. user_id = item["user_id"]
  1922. user = cm.UserInfo.objects.filter(id=user_id).first()
  1923. if user:
  1924. item["usercode"] = user.usercode
  1925. return total,data
  1926. def get_user_zans(request):
  1927. """
  1928. """
  1929. qdata = request.json
  1930. record_id = qdata.get("record_id")
  1931. match_id = qdata.get("match_id")
  1932. zans = cm.PlayerRecord.get_db_model(match_id).objects.filter(id=record_id).first().zans
  1933. return zans
  1934. def get_user_comments_count(request):
  1935. """
  1936. """
  1937. qdata = request.json
  1938. record_id = qdata.get("record_id")
  1939. count = cm.Comments.objects.filter(record_id=record_id).count()
  1940. return count
  1941. def add_wanzhu_consult(request):
  1942. """咨询顽主
  1943. """
  1944. user_id = request.user.get("id",0)
  1945. user_name = request.user.get("username")
  1946. user_avatar = request.user.get("avatar")
  1947. openid = request.user.get("openid")
  1948. qdata = request.json
  1949. content = qdata.get("cotent")
  1950. width = qdata.get("width")
  1951. height = qdata.get("height")
  1952. pid = qdata.get("pid")
  1953. wanzhu_obj = cm.WanzhuConsult.objects.create(
  1954. user_id = user_id,
  1955. user_name = user_name,
  1956. user_avatar = user_avatar,
  1957. content = content,
  1958. pid = pid
  1959. )
  1960. wanzhu_obj.width = width
  1961. wanzhu_obj.height = height
  1962. wanzhu_obj.save()
  1963. obj,flag = cm.Consult.objects.get_or_create(
  1964. user_id = user_id,
  1965. )
  1966. obj.user_name = user_name
  1967. obj.user_avatar = user_avatar
  1968. obj.content = content
  1969. obj.view_status = 0
  1970. obj.reply_status = 0
  1971. obj.width = width
  1972. obj.height = height
  1973. obj.ctime = datetime.datetime.now()
  1974. obj.save()
  1975. #自动回复
  1976. if cm.WanzhuConsult.objects.filter(user_id=user_id).count() <=1:
  1977. content = u"您好,后台消息一般三小时内回复,如果超出时间请加微信destination8888"
  1978. cm.WanzhuConsult.objects.create(
  1979. pid = pid,
  1980. reply_content = content,
  1981. user_id = 0,
  1982. player_id = 0,
  1983. reply_user_id = user_id
  1984. )
  1985. #发送消息提醒
  1986. if cm.UserInfo.objects.filter(id=user_id).exists():
  1987. user = cm.UserInfo.objects.filter(id=user_id).first()
  1988. send_consult_reply_message(openid,user_name)
  1989. #发送app推送消息
  1990. title = u"顽主杯"
  1991. body = u"你收到一条顽主的消息"
  1992. params = {"type":"message","id":str(user_id)}
  1993. aliyunpush.push_notice_by_userid(0,title,body,params,"ios")
  1994. aliyunpush.push_notice_by_userid(0,title,body,params,"android")
  1995. def add_comments(request):
  1996. """
  1997. """
  1998. #if request.user.comment_status == 0:
  1999. # raise ce.TipException(u"对不起,暂无法评论/留言!")
  2000. user_id = request.user.get("id")
  2001. user_name = request.user.get("username")
  2002. user_avatar = request.user.get("avatar")
  2003. qdata = request.json
  2004. content = qdata.get("cotent")
  2005. record_id = qdata.get("record_id")
  2006. stock_id = qdata.get("stock_id")
  2007. pid = qdata.get("pid")
  2008. match_id = qdata.get("match_id")
  2009. ip = ccf.get_ip(request)
  2010. location = ccf.get_city_from_ip(ip)
  2011. obj = cm.Comments.objects.create(
  2012. user_id = user_id,
  2013. user_name = user_name,
  2014. user_avatar = user_avatar,
  2015. content = content,
  2016. record_id = record_id,
  2017. pid = pid,
  2018. ip = ip,
  2019. location = location,
  2020. stock_id = stock_id
  2021. )
  2022. if record_id:
  2023. cm.PlayerRecord.get_db_model(match_id).objects.filter(id=record_id).update(comments_count=F("comments_count")+1)
  2024. if stock_id:
  2025. ccc.cache.incr("%s_comments" % stock_id,1)
  2026. def add_choice(request):
  2027. """
  2028. """
  2029. user_id = request.user.get("id")
  2030. user_name = request.user.get("username")
  2031. user_avatar = request.user.get("avatar")
  2032. qdata = request.json
  2033. stock_id = qdata.get("stock_id")
  2034. stock_name = cm.Stock.objects.filter(id=stock_id).first().name
  2035. obj = cm.UserChoice.objects.create(
  2036. user_id = user_id,
  2037. user_name = user_name,
  2038. user_avatar = user_avatar,
  2039. stock_id = stock_id,
  2040. stock_name = stock_name
  2041. )
  2042. if stock_id:
  2043. ccc.cache.incr("%s_choices" % stock_id,1)
  2044. def add_zan(request):
  2045. """
  2046. """
  2047. qdata = request.json
  2048. record_id = qdata.get("record_id")
  2049. match_id = qdata.get("match_id")
  2050. cm.PlayerRecord.get_db_model(match_id).objects.filter(id=record_id).update(zans=F("zans")+1)
  2051. zans = cm.PlayerRecord.get_db_model(match_id).objects.filter(id=record_id).first().zans
  2052. return zans
  2053. def get_experience_list(request):
  2054. """
  2055. """
  2056. #return 0,[]
  2057. kwargs = request.json
  2058. today = get_today_date()
  2059. match_id = ccc.get_cur_match().id
  2060. match_group = kwargs.get("match_group")
  2061. #冠军组、千万组、百万组
  2062. grpset = cm.MatchGroup.objects.filter(match_id=match_id).filter(Q(name__icontains=u"千万组")|Q(name__icontains=u"百万组")|Q(name__icontains=u"冠军组"))
  2063. if match_group:
  2064. grpset = grpset.filter(id=match_group)
  2065. qbw_ids = list(grpset.values_list("id",flat=True))
  2066. qset = cm.PlayerRecord.get_db_model(match_id).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")
  2067. data = list(qset.values("id","user_id","username","today_fund","today_income","total_income","experience","match_id","today_stock_img","zans","comments_count","stock_date"))
  2068. for item in data:
  2069. record_id = item["id"]
  2070. user_id = item["user_id"]
  2071. try:
  2072. item["user_avatar"] = get_user_info(user_id)["avatar"]
  2073. except:
  2074. item["user_avatar"] = ""
  2075. item["zans_count"] = item["zans"]
  2076. item["today_stock_img"] = json.loads(item["today_stock_img"])
  2077. win_rate = ccc.cache.hget("PLAYER_LATEST_%d"%item["user_id"],"win_rate")
  2078. if win_rate:
  2079. item["win_rate"] = str(float(win_rate)*100)+"%"
  2080. else:
  2081. item["win_rate"] = "0.0%"
  2082. item["today_income"] = "{}%".format(item["today_income"]*100)
  2083. item["total_income"] = "{}%".format(item["total_income"]*100)
  2084. #分页
  2085. page = int(kwargs.get("page",1))
  2086. page_size = int(kwargs.get("page_size",20))
  2087. if page and page_size:
  2088. total,data = ccf.get_page_list(data,page,page_size)
  2089. else:
  2090. total = len(data)
  2091. return total,data
  2092. def delete_choice(request):
  2093. """
  2094. """
  2095. user_id = request.user.get("id")
  2096. user_name = request.user.get("username")
  2097. user_avatar = request.user.get("avatar")
  2098. qdata = request.json
  2099. stock_id = qdata.get("stock_id")
  2100. cm.UserChoice.objects.filter(stock_id=stock_id,user_id=user_id).delete()
  2101. if ccc.cache.get("%s_choices" % stock_id) and int(ccc.cache.get("%s_choices" % stock_id)) >= 1:
  2102. ccc.cache.decr("%s_choices" % stock_id)
  2103. def delete_comments(request):
  2104. """
  2105. """
  2106. qdata = request.json
  2107. id = qdata.get("id")
  2108. if cm.Comments.objects.filter(id=id,stock_id__isnull=False).exists():
  2109. stock_id = cm.Comments.objects.filter(id=id).first().stock_id
  2110. if ccc.cache.get("%s_comments" % stock_id) and int(ccc.cache.get("%s_comments" % stock_id)) >= 1:
  2111. ccc.cache.decr("%s_comments" % stock_id)
  2112. cm.Comments.objects.filter(id=id).delete()
  2113. def modify_user_fund(request):
  2114. """
  2115. """
  2116. user_id = request.user.get("id")
  2117. #player = request.player
  2118. match_id = ccc.get_cur_match().id
  2119. player = cm.Player.objects.filter(user_id=user_id,match_id=match_id).first()
  2120. player_id = player.id
  2121. match_id = player.match_id
  2122. qdata = request.json
  2123. fundin = qdata.get("in_fund")
  2124. fundout = qdata.get("out_fund")
  2125. fundin = float(fundin) if fundin else 0.0
  2126. fundout = float(fundout) if fundout else 0.0
  2127. account_img = qdata.get("account_img")
  2128. init_fund = player.fund
  2129. trycalc = qdata.get("trycalc")
  2130. today_fund = qdata.get("today_fund")
  2131. today_fund = float(today_fund) if today_fund else 0.0
  2132. if trycalc:
  2133. stock_date = get_today_date()
  2134. validdates = get_match_validdates(match_id)
  2135. today_index = validdates.index(stock_date)
  2136. yesterday_index = today_index -1 if today_index >=1 else 0
  2137. yesterday_date = validdates[yesterday_index]
  2138. yesterday = cm.PlayerRecord.get_db_model(match_id).objects.filter(
  2139. match_id=match_id,player_id=player_id,stock_date=yesterday_date).exclude(stock_date=stock_date).first()
  2140. if yesterday:
  2141. yesterday_fund = yesterday.today_fund
  2142. yesterday_stock = yesterday.today_stock
  2143. yesterday_stock_img = yesterday.today_stock_img
  2144. yesterday_is_markt = yesterday.is_markt
  2145. else:
  2146. yesterday_fund = today_fund
  2147. yesterday_stock = ""
  2148. yesterday_stock_img = ""
  2149. yesterday_is_markt = 0
  2150. #入资金
  2151. if fundin > fundout:
  2152. fundin = fundin - fundout
  2153. if yesterday:
  2154. today_income = round((today_fund-(yesterday_fund+fundin))/(float(yesterday_fund) + fundin),4)
  2155. yesterday_fund = yesterday_fund + fundin
  2156. else:
  2157. today_income = 0.0
  2158. total_income = round((today_fund-init_fund-fundin)/(init_fund+fundin),4)
  2159. init_fund = init_fund + fundin
  2160. #出资金
  2161. else:
  2162. fundout = fundout - fundin
  2163. if yesterday:
  2164. today_income = round((today_fund-(yesterday_fund-fundout))/float(yesterday_fund),4)
  2165. yesterday_fund = round(today_fund/(1+today_income),4)
  2166. else:
  2167. today_income = 0.0
  2168. total_income = round((today_fund+fundout-init_fund)/init_fund,4)
  2169. init_fund = round(today_fund/(1+total_income),4)
  2170. today_income = "{}%".format(today_income*100)
  2171. total_income = "{}%".format(total_income*100)
  2172. return {"yesterday_fund":yesterday_fund,
  2173. "today_fund":today_fund,
  2174. "today_income":today_income,
  2175. "total_income":total_income,
  2176. "init_fund":init_fund}
  2177. stock_date = datetime.datetime.now().strftime("%Y-%m-%d")
  2178. if cm.PlayerRecord.get_db_model(match_id).objects.filter(user_id=user_id,stock_date=stock_date).exists():
  2179. raise ce.TipException(u"资金出入须在提交作业之前提交,今日作业已提交,不能提交资金出入!")
  2180. if cm.FundInOut.objects.filter(user_id=user_id,stock_date=stock_date).exists():
  2181. raise ce.TipException(u"今日已有资金出入,一天只能提交一次资金出入!")
  2182. fundinout,flag = cm.FundInOut.objects.get_or_create(
  2183. user_id = user_id,
  2184. fundin = fundin,
  2185. fundout = fundout,
  2186. stock_date = stock_date,
  2187. account_img = account_img
  2188. )
  2189. def get_user_match_list(request):
  2190. kwargs = request.json
  2191. user_id = kwargs.get("user_id")
  2192. if not user_id:
  2193. user_id = request.user.get("id")
  2194. qset = cm.Player.objects.filter(user_id=user_id).filter(match_group__isnull=False).order_by("-id")
  2195. qset = qset.values("user_id","match_id","match_group").annotate(cnt=Count("match_id"))
  2196. page = int(kwargs.get("page",0))
  2197. page_size = int(kwargs.get("page_size",20))
  2198. if page and page_size:
  2199. total,qset = ccc.get_page_qset(qset,page,page_size)
  2200. else:
  2201. total = qset.count()
  2202. #today = get_today_date(user_id=user_id)
  2203. data = list(qset.values("user_id","match_id","match_group"))
  2204. new_data = []
  2205. for item in data:
  2206. match_id = item["match_id"]
  2207. match_group = item["match_group"]
  2208. user_id = item["user_id"]
  2209. today = get_today_date(match_id=match_id,user_id=user_id)
  2210. item["match_info"] = get_match_info(match_id)
  2211. item["match_group_info"] = get_group_info(match_group)
  2212. if match_id and match_group:
  2213. today_record = ccc.get_today_record(user_id,int(match_id),int(match_group),today)
  2214. today_record = format_today_record(today_record)
  2215. if today_record:
  2216. if today_record.get("today_income"):
  2217. today_record["today_income"] = "{}%".format(today_record["today_income"]*100)
  2218. if today_record.get("total_income"):
  2219. today_record["total_income"] = "{}%".format(today_record["total_income"]*100)
  2220. item["today_record"] = today_record
  2221. new_data.append(item)
  2222. #return total,data
  2223. return total,new_data
  2224. def get_format_user_info(request):
  2225. user_id = request.user.get("id")
  2226. cur_user_id = request.user.get("id")
  2227. kwargs = request.json
  2228. q_user_id = kwargs.get("user_id")
  2229. if q_user_id:
  2230. user_id = q_user_id
  2231. userinfo = get_user_info_actual(q_user_id)
  2232. userinfo["fans"] = cm.UserFollows.objects.filter(follow_id=user_id).count()
  2233. userinfo["followers"] = cm.UserFollows.objects.filter(user_id=user_id).count()
  2234. del userinfo["phone"]
  2235. if cm.UserFollows.objects.filter(user_id=cur_user_id,follow_id=user_id).exists():
  2236. userinfo["is_follow"] = 1
  2237. else:
  2238. userinfo["is_follow"] = 0
  2239. return userinfo
  2240. def get_day_inout_rank_list(request):
  2241. """
  2242. """
  2243. kwargs = request.json
  2244. stock_date = kwargs.get("stock_date")
  2245. match_id = kwargs.get("match_id")
  2246. _type = kwargs.get("type")
  2247. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(match_id=match_id,stock_date=stock_date)
  2248. if _type == "in":
  2249. qset = qset.order_by("-today_income")
  2250. else:
  2251. qset = qset.order_by("today_income")
  2252. page = int(kwargs.get("page",0))
  2253. page_size = int(kwargs.get("page_size",20))
  2254. if page and page_size:
  2255. total,qset = ccc.get_page_qset(qset,page,page_size)
  2256. else:
  2257. total = qset.count()
  2258. data = list(qset.values())
  2259. return total,data
  2260. def get_user_follows_v3(request):
  2261. """获取用户关注的选手列表
  2262. """
  2263. user_id = request.user.get("id",0)
  2264. qdata = request.json
  2265. if qdata.get("user_id"):
  2266. user_id = qdata.get("user_id")
  2267. qset = cm.UserFollows.objects.filter(user_id=user_id)
  2268. follow_ids = list(qset.values_list("follow_id",flat=True))
  2269. today = get_today_date()
  2270. _today = today
  2271. data = []
  2272. for user_id in follow_ids:
  2273. latest_key = "PLAYER_LATEST_%d"%user_id
  2274. _match_id = ccc.cache.hget(latest_key,"match_id")
  2275. _today = ccc.cache.hget(latest_key,"stock_date")
  2276. _match_group = ccc.cache.hget(latest_key,"match_group")
  2277. today_record = ccc.get_today_record(user_id,_match_id,_match_group,_today)
  2278. if today_record:
  2279. today_record["zan_count"] = today_record.get("zans",0) if today_record.get("zans") else 0
  2280. today_record["comments_count"] = cm.Comments.objects.filter(record_id=today_record.get("id",0)).count()
  2281. data.append(today_record)
  2282. data = sorted(data,key=lambda x:x["stock_date"],reverse=True)
  2283. page = int(qdata.get("page",1))
  2284. page_size = int(qdata.get("page_size",20))
  2285. if page and page_size:
  2286. total,data = ccf.get_page_list(data,page,page_size)
  2287. for item in data:
  2288. if item:
  2289. user_id = item["user_id"]
  2290. latest_key = "PLAYER_LATEST_%d"%user_id
  2291. today_stock = json.loads(item["today_stock"]) if item.get("today_stock") else []
  2292. today_stock = filter(lambda x:x["name"] and x["fund"],today_stock)
  2293. item["today_stock"] = today_stock
  2294. item["today_stock_img"] = json.loads(item["today_stock_img"]) if item.get("today_stock_img") else []
  2295. win_rate = ccc.cache.hget(latest_key,"win_rate")
  2296. if win_rate:
  2297. item["win_rate"] = str(float(win_rate)*100)+"%"
  2298. else:
  2299. item["win_rate"] = "0.0%"
  2300. item["today_income"] = "{}%".format(item["today_income"]*100)
  2301. item["total_income"] = "{}%".format(item["total_income"]*100)
  2302. item["zans_count"] = item.get("zans",0)
  2303. item["comments_count"] = cm.Comments.objects.filter(record_id=item.get("id",0)).count()
  2304. return total,data
  2305. else:
  2306. return len(data),data
  2307. def get_latest_match_info(request):
  2308. """
  2309. """
  2310. cur_match = cm.Match.objects.filter(match_status=3).order_by("-id").values().first()
  2311. cur_match_id = cur_match.get("id")
  2312. groups = list(cm.MatchGroup.objects.filter(match_id=cur_match_id,is_active=1).order_by("order").values())
  2313. cur_match["groups"] = groups
  2314. return cur_match
  2315. def get_article_info(**kwargs):
  2316. """
  2317. """
  2318. _id = kwargs.get("id")
  2319. rst = cm.Article.objects.filter(id=_id).values().first()
  2320. rst["url"] = "https://www.hunanwanzhu.com/topic/article.html?id="+str(_id)
  2321. return rst
  2322. def get_profit_list(**kwargs):
  2323. """盈亏列表
  2324. """
  2325. stock_date = kwargs.get("stock_date")
  2326. match_id = kwargs.get("match_id")
  2327. _type = kwargs.get("type")
  2328. if not stock_date:
  2329. stock_date = get_today_date()
  2330. qset = cm.PlayerRecord.get_db_model(match_id).objects.filter(stock_date=stock_date)
  2331. #if _type == "win":
  2332. # qset = qset.filter(today_income__gte=0).order_by("-today_income")
  2333. #if _type == "loss":
  2334. # qset = qset.filter(today_income__lt=0).order_by("today_income")
  2335. data = list(qset.values())
  2336. for item in data:
  2337. item["win_loss"] = item["today_fund"] - item["yesterday_fund"]
  2338. item["total_win_loss"] = item["today_fund"] - item["init_fund"]
  2339. item["win_loss"] = round(item["win_loss"],4)
  2340. item["total_win_loss"] = round(item["total_win_loss"],4)
  2341. if _type == "win":
  2342. data = sorted(data,key=lambda x:x["win_loss"],reverse=True)
  2343. if _type == "loss":
  2344. data = sorted(data,key=lambda x:x["win_loss"])
  2345. if _type == "total_win":
  2346. data = sorted(data,key=lambda x:x["total_win_loss"],reverse=True)
  2347. if _type == "total_loss":
  2348. data = sorted(data,key=lambda x:x["total_win_loss"])
  2349. page = int(kwargs.get("page",0))
  2350. page_size = int(kwargs.get("page_size",20))
  2351. if page and page_size:
  2352. total,data = ccf.get_page_list(data,page,page_size)
  2353. else:
  2354. total = len(data)
  2355. #data = list(qset.values())
  2356. return total,data
  2357. def get_group_rank_list_v3(request):
  2358. """排名列表
  2359. """
  2360. qdata = request.json
  2361. kwargs = qdata
  2362. group_id = qdata.get("id")
  2363. match_id = qdata.get("match_id")
  2364. match_id = cm.MatchGroup.objects.filter(id=group_id).first().match_id
  2365. today = qdata.get("stock_date")
  2366. if not today:
  2367. today = get_today_date()
  2368. match = get_match_info(match_id)
  2369. group = get_group_info(group_id)
  2370. players = get_match_group_users(match_id,group_id)
  2371. new_players = []
  2372. for player in players:
  2373. user_id = player["user_id"]
  2374. username = player["username"]
  2375. match_group = group_id
  2376. today_record = ccc.get_today_record(user_id,match_id,match_group,today)
  2377. if today_record:
  2378. player.update(today_record)
  2379. player["username"] = username
  2380. player["org_today_income"] = player["today_income"]
  2381. player["org_total_income"] = player["total_income"]
  2382. player["total_income"] = "{}%".format(player["total_income"]*100)
  2383. player["today_income"] = "{}%".format(player["today_income"]*100)
  2384. player["fund"] = round(player["fund"],4)
  2385. player["init_fund"] = round(player["init_fund"],4)
  2386. player["today_fund"] = round(player["today_fund"],4)
  2387. player["today_stock_img"] = json.loads(player["today_stock_img"]) if player["today_stock_img"] else []
  2388. #player["win_rate"] = calc_win_rate(user_id,match_id)
  2389. player["zan_count"] = player["zans"]
  2390. new_players.append(player)
  2391. if kwargs.get("order_by") == "today_income__asc":
  2392. new_players = sorted(new_players,key=lambda x:x["org_today_income"])
  2393. elif kwargs.get("order_by") == "today_income__desc" :
  2394. new_players = sorted(new_players,key=lambda x:x["org_today_income"],reverse=True)
  2395. elif kwargs.get("order_by") == "total_income__asc":
  2396. new_players = sorted(new_players,key=lambda x:x["org_total_income"])
  2397. elif kwargs.get("order_by") == "total_income__desc":
  2398. new_players = sorted(new_players,key=lambda x:x["org_total_income"],reverse=True)
  2399. else:
  2400. new_players = sorted(new_players,key=lambda x:x["org_total_income"],reverse=True)
  2401. #分页
  2402. page = int(kwargs.get("page",0))
  2403. page_size = int(kwargs.get("page_size",50))
  2404. if page and page_size:
  2405. total,new_players = ccf.get_page_list(new_players,page,page_size)
  2406. else:
  2407. total = len(new_players)
  2408. return total,new_players
  2409. def get_article_type_list(**kwargs):
  2410. rst = [u"腰斩专场",u"冠军交割",u"牛人专场",u"游资列传",u"妖股列传"]
  2411. return rst
  2412. def get_wanzhu_consult_list(**kwargs):
  2413. """
  2414. """
  2415. qset = cm.Consult.objects.filter(user_id__gt=0).order_by("-ctime")
  2416. if kwargs.get("username"):
  2417. qset = qset.filter(user_name__icontains=kwargs.get("username"))
  2418. if kwargs.get("reply_status"):
  2419. qset = qset.filter(reply_status=kwargs.get("reply_status"))
  2420. if kwargs.get("content"):
  2421. qset = qset.filter(Q(content__icontains=kwargs.get("content"))|Q(reply_content__icontains=kwargs.get("content")))
  2422. data = list(qset.values())
  2423. #分页
  2424. page = int(kwargs.get("page",1))
  2425. page_size = int(kwargs.get("page_size",20))
  2426. if page and page_size:
  2427. total,data = ccf.get_page_list(data,page,page_size)
  2428. else:
  2429. total = len(data)
  2430. for item in data:
  2431. user_id = item["user_id"]
  2432. userinfo = get_user_info(user_id)
  2433. if userinfo:
  2434. item["user_code"] = userinfo.get("usercode")
  2435. return total,data
  2436. def get_sub_category(pid):
  2437. """
  2438. """
  2439. qset = cm.BaikeCategory.objects.filter(parent_id=pid)
  2440. qdata = list(qset.values())
  2441. if qdata:
  2442. for subitem in qdata:
  2443. subitem["type"] = "ent"
  2444. subitem["children"] = get_sub_category(subitem["id"])
  2445. return qdata
  2446. def get_baike_category_tree(**kwargs):
  2447. """
  2448. """
  2449. parents = list(cm.BaikeCategory.objects.filter(parent_id__isnull=True).values())
  2450. for item in parents:
  2451. item["children"] = get_sub_category(item["id"])
  2452. return parents
  2453. def get_baike_list_by_category(**kwargs):
  2454. category_id = kwargs.get("category_id")
  2455. qset = cm.BaikeDetail.objects.filter(category_id=category_id)
  2456. data = list(qset.values("id","name"))
  2457. return data
  2458. def get_baike_detail(**kwargs):
  2459. #_id = kwargs.get("id")
  2460. category_id = kwargs.get("category_id")
  2461. data = list(cm.BaikeDetail.objects.filter(category_id=category_id).values())
  2462. return data
  2463. def get_app_version(request):
  2464. rst = cm.APPVersion.objects.all().order_by("-id").values().first()
  2465. return rst
  2466. def reply_wanzhu_consult(**kwargs):
  2467. """
  2468. """
  2469. pid = kwargs.get("pid")
  2470. content = kwargs.get("reply_content")
  2471. user_id = kwargs.get("user_id")
  2472. action = kwargs.get("action")
  2473. width = kwargs.get("width")
  2474. height = kwargs.get("height")
  2475. if action == "send":
  2476. user = cm.UserInfo.objects.filter(id=user_id).first()
  2477. user_name = user.username
  2478. user_avatar = user.avatar
  2479. obj,flag = cm.Consult.objects.get_or_create(
  2480. user_id = user_id,
  2481. )
  2482. obj.user_name = user_name
  2483. obj.user_avatar = user_avatar
  2484. #obj.reply_content = content
  2485. obj.view_status = 1
  2486. obj.reply_status = 0
  2487. obj.ctime = datetime.datetime.now()
  2488. obj.save()
  2489. wanzhu_obj = cm.WanzhuConsult.objects.create(
  2490. user_id = user_id,
  2491. user_name = user_name,
  2492. user_avatar = user_avatar
  2493. )
  2494. wanzhu_obj.width = width
  2495. wanzhu_obj.height = height
  2496. wanzhu_obj.save()
  2497. wanzhu_obj_1 = cm.WanzhuConsult.objects.create(
  2498. reply_content = content,
  2499. user_id = 0,
  2500. player_id = 0,
  2501. reply_user_id = user_id,
  2502. pid = wanzhu_obj.id
  2503. )
  2504. wanzhu_obj_1.width = width
  2505. wanzhu_obj_1.height = height
  2506. wanzhu_obj_1.save()
  2507. cm.Consult.objects.filter(user_id=user_id).update(reply_status=1,view_status=1,reply_content=content,ctime=datetime.datetime.now())
  2508. else:
  2509. wanzhu_obj = cm.WanzhuConsult.objects.create(
  2510. pid = pid,
  2511. reply_content = content,
  2512. user_id = 0,
  2513. player_id = 0,
  2514. reply_user_id = user_id
  2515. )
  2516. wanzhu_obj.width = width
  2517. wanzhu_obj.height = height
  2518. wanzhu_obj.save()
  2519. cm.Consult.objects.filter(user_id=user_id).update(reply_status=1,view_status=1,reply_content=content,ctime=datetime.datetime.now())
  2520. #发送消息提醒
  2521. if cm.UserInfo.objects.filter(id=user_id).exists():
  2522. user = cm.UserInfo.objects.filter(id=user_id).first()
  2523. openid = user.openid
  2524. username = user.username
  2525. try:
  2526. send_consult_reply_message(openid,username)
  2527. except Exception as e:
  2528. print(e)
  2529. #发送app推送消息
  2530. title = u"顽主杯"
  2531. body = u"你收到一条顽主的消息"
  2532. params = {"type":"message","id":str(user_id)}
  2533. aliyunpush.push_notice_by_userid(user_id,title,body,params,"ios")
  2534. aliyunpush.push_notice_by_userid(user_id,title,body,params,"android")
  2535. def delete_user_info(request):
  2536. """
  2537. """
  2538. uid = request.user.get("id",0)
  2539. cm.UserInfo.objects.filter(id=uid).delete()
  2540. cm.Player.objects.filter(user_id=uid).delete()
  2541. #cm.PlayerRecord.objects.filter(user_id=uid).delete()