views.py 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790
  1. # coding=utf-8
  2. from __future__ import unicode_literals
  3. import requests
  4. import random,datetime
  5. import json
  6. import uuid
  7. from django.contrib import auth
  8. from django.core.cache import cache
  9. from django.conf import settings
  10. import common.error_info as ce
  11. from common import core_views as cv
  12. import common.common_control as ccc
  13. import common.common_functions as ccf
  14. import weixin.control_auth as ca
  15. import weixin.controls as ctl
  16. import weixin.wzhifuSDK as wzf
  17. from utils.upload_to_oss import hnoss
  18. from utils.baiduai import baidu_ai_detect_image,baidu_ai_detect_txt
  19. from utils.ocr import BaiduOcrForm
  20. from utils.ocrmanage import OcrManage
  21. class OpenidView(cv.BaseView):
  22. def get(self,request):
  23. """
  24. #获取openid(小程序)
  25. @code:1212
  26. """
  27. code = request.json.get("code")
  28. open_id = cache.get(code)
  29. if open_id:
  30. return cv.to_suc({"openid":open_id})
  31. else:
  32. get_token_url = 'https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code' .format(wzf.WxPayConf_pub.APPID,wzf.WxPayConf_pub.APPSECRET,code)
  33. res = requests.get(get_token_url).json()
  34. print res
  35. if res.has_key('openid'):
  36. open_id = res['openid']
  37. unionid = res['unionid']
  38. cache.set(code,open_id,24*3600)
  39. else:
  40. open_id = ''
  41. unionid = ''
  42. if open_id:
  43. ccc.cache.set(open_id,1)
  44. return cv.to_suc({"openid":open_id,"unionid":unionid})
  45. else:
  46. return cv.to_fail(u"获取用户信息出错!")
  47. class UploadFileView(cv.BaseView):
  48. def post(self, request):
  49. """
  50. #文件上传(小程序)
  51. @file:"",文件对象
  52. """
  53. import time
  54. upload_file = request.FILES['file']
  55. ts = str(int(time.time()))
  56. dest = settings.STATIC_ROOT + "/upload/"+ ts + upload_file.name
  57. content = upload_file.read()
  58. ossfile = ts + upload_file.name
  59. url = hnoss.upload_from_str(content,ossfile)
  60. return cv.to_suc({"url":url})
  61. class UploadAvatarView(cv.BaseView):
  62. def post(self, request):
  63. """
  64. #文件上传(小程序)
  65. @file:"",文件对象
  66. """
  67. import time
  68. upload_file = request.FILES['file']
  69. ts = str(int(time.time()))
  70. dest = settings.STATIC_ROOT + "/upload/"+ ts + upload_file.name
  71. content = upload_file.read()
  72. ossfile = ts + upload_file.name
  73. url = hnoss.upload_from_str(content,ossfile,None)
  74. return cv.to_suc({"url":url})
  75. class TopicUploadFileView(cv.BaseView):
  76. def post(self, request):
  77. """
  78. #文件上传(WEB端)
  79. @file:"",文件对象
  80. """
  81. import time
  82. upload_file = request.FILES['file']
  83. dest = settings.STATIC_ROOT + "/upload/"+str(int(time.time())) + upload_file.name
  84. with open(dest,"wb+") as f:
  85. for chunk in upload_file.chunks():
  86. f.write(chunk)
  87. f.close()
  88. url = dest.replace(settings.STATIC_ROOT,settings.HOST)
  89. return cv.to_suc({"url":url})
  90. class AuthView(cv.BaseView):
  91. def post(self, request):
  92. """#保存微信授权信息(小程序)
  93. @nickname:"新",昵称
  94. @avatar:"",头像
  95. @openid:"",openid
  96. """
  97. try:
  98. rst = ca.add_wxauth_info(request)
  99. return cv.to_suc({"uid":rst.id})
  100. except Exception as e:
  101. cv.tracefail()
  102. return cv.to_fail(e)
  103. class AuthinfoView(cv.AuthView):
  104. def get(self,request):
  105. """#获取用户信息(小程序)
  106. """
  107. try:
  108. rst = ca.get_wxauth_info(request)
  109. return cv.to_suc(rst)
  110. except Exception as e:
  111. cv.tracefail()
  112. return cv.to_fail(e)
  113. def put(self, request):
  114. """#修改个人信息(小程序)
  115. """
  116. try:
  117. rst = ca.update_wxauth_info(request)
  118. return cv.to_suc()
  119. except Exception as e:
  120. cv.tracefail()
  121. return cv.to_fail(e)
  122. class LoginView(cv.BaseView):
  123. def post(self, request):
  124. """#小程序登录(小程序)
  125. @usercode:"用户代号"
  126. @nickanme:"微信昵称"
  127. @avatar:"微信头像"
  128. @openid:"openid"
  129. """
  130. try:
  131. #rst = ca.login_user(request)
  132. rst = {}
  133. return cv.to_suc(rst)
  134. except Exception as e:
  135. return cv.to_fail(e)
  136. class IndexView(cv.AuthView):
  137. def get(self, request):
  138. """#首页数据(小程序)
  139. """
  140. try:
  141. rst = ctl.get_index_data(request)
  142. return cv.to_suc(rst)
  143. except Exception as e:
  144. cv.tracefail()
  145. return cv.to_fail(e)
  146. class PlayerRecordView(cv.AuthView):
  147. def get(self, request):
  148. """#每日数据详情(小程序)
  149. @id:1
  150. """
  151. qdata = request.json
  152. need_params = ["id"]
  153. mse = ccf.check_params(*need_params,**qdata)
  154. if mse:
  155. raise ce.TipException(mse)
  156. try:
  157. vals = ccf.get_need_params(*need_params,**qdata)
  158. rcid = vals.get("id")
  159. #rst = ctl.get_detail_info(self,**vals)
  160. rst = ctl.get_record_info(rcid)
  161. return cv.to_suc(rst)
  162. except Exception as e:
  163. cv.tracefail()
  164. return cv.to_fail(e)
  165. def post(self, request):
  166. """#新增每日数据(小程序)
  167. @stock_date:"2021-07-30"
  168. @today_fund:100
  169. @today_stock:[{name:"江苏国泰",code:121221}]
  170. @today_stock_img:["http://test.png"]
  171. """
  172. qdata = request.json
  173. now = datetime.datetime.now()
  174. need_params = ["stock_date","today_fund"]
  175. mse = ccf.check_params(*need_params,**qdata)
  176. if mse:
  177. raise ce.TipException(mse)
  178. try:
  179. need_params.extend(["is_markt","today_stock","today_stock_img","experience","id"])
  180. vals = ccf.get_need_params(*need_params,**qdata)
  181. vals["user_id"] = request.user.get("id",0)
  182. vals["match_id"] = ccc.get_cur_match().id
  183. vals["today_fund"] = round(float(vals["today_fund"]),4)
  184. rst = ctl.add_model(self,**vals)
  185. return cv.to_suc(rst)
  186. except Exception as e:
  187. cv.tracefail()
  188. return cv.to_fail(e)
  189. class PlayerMatchListView(cv.AuthView):
  190. def get(self, request):
  191. """#选手参赛列表(小程序)
  192. """
  193. try:
  194. rst = ctl.get_player_match_list(request)
  195. return cv.to_suc(rst)
  196. except Exception as e:
  197. cv.tracefail()
  198. return cv.to_fail(e)
  199. class PlayerMatchView(cv.AuthView):
  200. def get(self, request):
  201. """#选手参赛详情(小程序)
  202. """
  203. try:
  204. rst = ctl.get_player_match_detail(request)
  205. return cv.to_suc(rst)
  206. except Exception as e:
  207. cv.tracefail()
  208. return cv.to_fail(e)
  209. class PlayerMatchRecordListView(cv.AuthView):
  210. def get(self, request):
  211. """#选手参赛每日持股(小程序)
  212. @id:1,赛事id
  213. @page:1
  214. @page_size:20
  215. """
  216. try:
  217. total,rst = ctl.get_player_match_records(request)
  218. return cv.to_suc({"total":total,"list":rst})
  219. except Exception as e:
  220. cv.tracefail()
  221. return cv.to_fail(e)
  222. class StockSearchView(cv.AuthView):
  223. def get(self, request):
  224. """#股票搜索列表(小程序)
  225. @name:名称
  226. """
  227. try:
  228. qdata = request.json
  229. rst = ctl.get_search_list(self,**qdata)
  230. #rst = ctl.get_stock_search(**qdata)
  231. #if qdata.get("name"):
  232. # rst = filter(lambda x:qdata.get("name") in x["name"],rst)
  233. #print(rst)
  234. return cv.to_suc(rst)
  235. except Exception as e:
  236. cv.tracefail()
  237. return cv.to_fail(e)
  238. class GroupRankListView(cv.BaseView):
  239. def get(self, request):
  240. """#排名列表(小程序)
  241. """
  242. try:
  243. rst = ctl.get_rank_list(request)
  244. return cv.to_suc(rst)
  245. except Exception as e:
  246. cv.tracefail()
  247. return cv.to_fail(e)
  248. class GroupRankView(cv.AuthView):
  249. def get(self, request):
  250. """#分组排名(小程序)
  251. """
  252. try:
  253. rst = ctl.get_group_rank_list(request)
  254. return cv.to_suc(rst)
  255. except Exception as e:
  256. cv.tracefail()
  257. return cv.to_fail(e)
  258. class PlayerRecordSingleView(cv.BaseView):
  259. def post(self, request):
  260. """#新增每日数据(WEB端)
  261. @usercode:"选手code"
  262. @match_id:"赛事id"
  263. @stock_date:"持股日期"
  264. @today_fund:"今日净资产"
  265. @today_stock:"今日持股"
  266. @today_stock_img:"今日持股截图"
  267. """
  268. qdata = request.json
  269. now = datetime.datetime.now()
  270. #if not now.isoweekday() in [1,2,3,4,5] or not "09:30"<now.strftime("%H:%S")<"15:30":
  271. # raise ce.TipException(u"只有每周一至周五 9:30 - 15:30 之间才可以提交数据!")
  272. need_params = ["match_id","usercode","stock_date","today_fund","today_stock_img"]
  273. mse = ccf.check_params(*need_params,**qdata)
  274. if mse:
  275. raise ce.TipException(mse)
  276. try:
  277. need_params.extend(["is_markt","today_stock","experience"])
  278. vals = ccf.get_need_params(*need_params,**qdata)
  279. vals["today_fund"] = round(float(vals["today_fund"]),4)
  280. rst = ctl.add_player_record_single(**vals)
  281. return cv.to_suc(rst)
  282. except Exception as e:
  283. cv.tracefail()
  284. return cv.to_fail(e)
  285. class PlayerRecordSingleMatchView(cv.BaseView):
  286. def get(self, request):
  287. """#获取赛事数据(WEB端)
  288. @id:"赛事id"
  289. """
  290. qdata = request.json
  291. match_id = qdata.get("id")
  292. try:
  293. now_date,rst = ctl.get_single_match_info(match_id)
  294. return cv.to_suc({"stock_date":now_date,"match":rst})
  295. except Exception as e:
  296. cv.tracefail()
  297. return cv.to_fail(e)
  298. class PlayerCurRecordView(cv.AuthView):
  299. def get(self, request):
  300. """#当前数据(小程序)
  301. @id:1
  302. """
  303. qdata = request.json
  304. try:
  305. rst = ctl.get_cur_record(request)
  306. return cv.to_suc(rst)
  307. except Exception as e:
  308. cv.tracefail()
  309. return cv.to_fail(e)
  310. class ArticleView(cv.AuthView):
  311. def get(self, request):
  312. """#公告详情(小程序)
  313. @id:1
  314. """
  315. qdata = request.json
  316. need_params = ["id"]
  317. mse = ccf.check_params(*need_params,**qdata)
  318. if mse:
  319. raise ce.TipException(mse)
  320. try:
  321. vals = ccf.get_need_params(*need_params,**qdata)
  322. rst = ctl.get_detail_info(self,**vals)
  323. return cv.to_suc(rst)
  324. except Exception as e:
  325. cv.tracefail()
  326. return cv.to_fail(e)
  327. class FollowUserView(cv.AuthView):
  328. def post(self, request):
  329. """#关注选手(2.0小程序)
  330. @follow_id:1,被关注选手id
  331. @action:"cancel",取消关注
  332. """
  333. qdata = request.json
  334. need_params = ["follow_id"]
  335. mse = ccf.check_params(*need_params,**qdata)
  336. if mse:
  337. raise ce.TipException(mse)
  338. try:
  339. need_params.extend(["action"])
  340. vals = ccf.get_need_params(*need_params,**qdata)
  341. vals["user_id"] = request.user.get("id")
  342. rst = ctl.follow_player(**vals)
  343. return cv.to_suc(rst)
  344. except Exception as e:
  345. cv.tracefail()
  346. return cv.to_fail(e)
  347. class FollowUserListView(cv.AuthView):
  348. def get(self, request):
  349. """#我的关注(2.0小程序)
  350. """
  351. try:
  352. total,rst = ctl.get_user_follows(request)
  353. return cv.to_suc({"total":total,"list":rst})
  354. except Exception as e:
  355. cv.tracefail()
  356. return cv.to_fail(e)
  357. class FollowerUserListView(cv.AuthView):
  358. def get(self, request):
  359. """#我的粉丝(3.0小程序)
  360. """
  361. try:
  362. total,rst = ctl.get_user_follower(request)
  363. return cv.to_suc({"total":total,"list":rst})
  364. except Exception as e:
  365. cv.tracefail()
  366. return cv.to_fail(e)
  367. class HotStockListView(cv.AuthView):
  368. def get(self, request):
  369. """#热门股票(2.0小程序)
  370. @stock_date:"",持股日期
  371. """
  372. qdata = request.json
  373. need_params = ["stock_date"]
  374. mse = ccf.check_params(*need_params,**qdata)
  375. if mse:
  376. raise ce.TipException(mse)
  377. try:
  378. need_params.extend(["name"])
  379. vals = ccf.get_need_params(*need_params,**qdata)
  380. rst = ctl.get_hot_stock_rank(**vals)
  381. return cv.to_suc(rst)
  382. except Exception as e:
  383. cv.tracefail()
  384. return cv.to_fail(e)
  385. class HotFollowListView(cv.AuthView):
  386. def get(self, request):
  387. """#热门关注(2.0小程序)
  388. @stock_date:"",持股日期
  389. @page:1
  390. @page_size:20
  391. """
  392. qdata = request.json
  393. need_params = ["stock_date"]
  394. mse = ccf.check_params(*need_params,**qdata)
  395. if mse:
  396. raise ce.TipException(mse)
  397. try:
  398. need_params.extend(["name","page","page_size"])
  399. vals = ccf.get_need_params(*need_params,**qdata)
  400. total,rst = ctl.get_hot_follow(**vals)
  401. return cv.to_suc({"total":total,"list":rst})
  402. except Exception as e:
  403. cv.tracefail()
  404. return cv.to_fail(e)
  405. class HotStockBuyListView(cv.BaseView):
  406. def get(self, request):
  407. """#热门持仓股票(2.0小程序)
  408. @stock_date:"",持股日期
  409. @page:1
  410. @page_size:20
  411. """
  412. qdata = request.json
  413. need_params = ["stock_date"]
  414. mse = ccf.check_params(*need_params,**qdata)
  415. if mse:
  416. raise ce.TipException(mse)
  417. try:
  418. need_params.extend(["name","fund_rank","page","page_size"])
  419. vals = ccf.get_need_params(*need_params,**qdata)
  420. total,rst = ctl.get_hot_stock_buy(**vals)
  421. return cv.to_suc({"total":total,"list":rst})
  422. except Exception as e:
  423. cv.tracefail()
  424. return cv.to_fail(e)
  425. class HotStockSellListView(cv.AuthView):
  426. def get(self, request):
  427. """#热门清仓股票(2.0小程序)
  428. @stock_date:"",持股日期
  429. @page:1
  430. @page_size:20
  431. """
  432. qdata = request.json
  433. need_params = ["stock_date"]
  434. mse = ccf.check_params(*need_params,**qdata)
  435. if mse:
  436. raise ce.TipException(mse)
  437. try:
  438. need_params.extend(["name"])
  439. vals = ccf.get_need_params(*need_params,**qdata)
  440. total,rst = ctl.get_hot_stock_sell(**vals)
  441. return cv.to_suc({"total":total,"list":rst})
  442. except Exception as e:
  443. cv.tracefail()
  444. return cv.to_fail(e)
  445. class HotStockSellPlayersListView(cv.AuthView):
  446. def get(self, request):
  447. """#获取股票清仓选手列表(2.0小程序)
  448. @id:"",股票id
  449. @stock_date:"",持股日期
  450. @page:1
  451. @page_size:20
  452. """
  453. qdata = request.json
  454. need_params = ["stock_date","id"]
  455. mse = ccf.check_params(*need_params,**qdata)
  456. if mse:
  457. raise ce.TipException(mse)
  458. try:
  459. vals = ccf.get_need_params(*need_params,**qdata)
  460. _id = vals["id"]
  461. total,rst = ctl.get_hot_stock_sell_players(**vals)
  462. data = {"total":total,"list":rst}
  463. stock = ctl.get_stock_info(_id)
  464. data.update(stock)
  465. return cv.to_suc(data)
  466. except Exception as e:
  467. cv.tracefail()
  468. return cv.to_fail(e)
  469. class WinRateRankView(cv.AuthView):
  470. def get(self, request):
  471. """#胜率榜(2.0小程序)
  472. """
  473. try:
  474. total,rst = ctl.get_win_rate_rank(request)
  475. return cv.to_suc({"total":total,"list":rst})
  476. except Exception as e:
  477. cv.tracefail()
  478. return cv.to_fail(e)
  479. class DefendRankView(cv.AuthView):
  480. def get(self, request):
  481. """#防守榜(2.0小程序)
  482. """
  483. try:
  484. total,rst = ctl.get_defend_rank(request)
  485. return cv.to_suc({"total":total,"list":rst})
  486. except Exception as e:
  487. cv.tracefail()
  488. return cv.to_fail(e)
  489. class ChampionArticleListView(cv.BaseView):
  490. def get(self, request):
  491. """#冠军心得(2.0小程序)
  492. """
  493. try:
  494. total,rst = ctl.get_champion_articles_list(request)
  495. return cv.to_suc({"total":total,"list":rst})
  496. except Exception as e:
  497. cv.tracefail()
  498. return cv.to_fail(e)
  499. class WanzhuCommentListView(cv.AuthView):
  500. def get(self, request):
  501. """#顽主点评(2.0小程序)
  502. @group_id:1,分组id
  503. @page:1
  504. @page_size:20
  505. """
  506. qdata = request.json
  507. need_params = ["group_id","page","page_size"]
  508. mse = ccf.check_params(*need_params,**qdata)
  509. if mse:
  510. raise ce.TipException(mse)
  511. try:
  512. vals = ccf.get_need_params(*need_params,**qdata)
  513. vals["match_id"] = request.player.match_id
  514. total,rst = ctl.get_wanzhu_comment(**vals)
  515. return cv.to_suc({"total":total,"list":rst})
  516. except Exception as e:
  517. cv.tracefail()
  518. return cv.to_fail(e)
  519. class EnumListView(cv.AuthView):
  520. def get(self, request):
  521. """#枚举值(2.0小程序)
  522. """
  523. try:
  524. rst = ctl.get_enum_list(request)
  525. return cv.to_suc(rst)
  526. except Exception as e:
  527. cv.tracefail()
  528. return cv.to_fail(e)
  529. class PlayerListView(cv.AuthView):
  530. def get(self, request):
  531. """#选手列表搜索(2.0小程序)
  532. @name:"选手名"
  533. @zq:"短线",周期
  534. @cw:"分仓",仓位
  535. @df:"首板",打法
  536. @page:1
  537. @page_size:20
  538. """
  539. qdata = request.json
  540. need_params = ["page","page_size"]
  541. mse = ccf.check_params(*need_params,**qdata)
  542. if mse:
  543. raise ce.TipException(mse)
  544. try:
  545. need_params.extend(["name","zq","cw","df"])
  546. vals = ccf.get_need_params(*need_params,**qdata)
  547. vals["match_id"] = qdata.get("match_id")
  548. total,rst = ctl.get_player_list(**vals)
  549. return cv.to_suc({"total":total,"list":rst})
  550. except Exception as e:
  551. cv.tracefail()
  552. return cv.to_fail(e)
  553. class MineStyleView(cv.AuthView):
  554. def get(self, request):
  555. """#我的风格(2.0小程序)
  556. """
  557. try:
  558. rst = ctl.get_mine_style(request)
  559. return cv.to_suc(rst)
  560. except Exception as e:
  561. cv.tracefail()
  562. return cv.to_fail(e)
  563. def put(self, request):
  564. """#修改我的风格(小程序)
  565. @zq:"",周期
  566. @cw:"",仓位
  567. @df:"",打法
  568. @pz:"",品种
  569. @join_time:"",入市时间
  570. @init_fund:"",参数金额
  571. @account_img:"",账号截图
  572. """
  573. qdata = request.json
  574. need_params = ["zq","cw","df","pz","join_time"]
  575. mse = ccf.check_params(*need_params,**qdata)
  576. if mse:
  577. raise ce.TipException(mse)
  578. try:
  579. need_params.extend(["init_fund","account_img","username","avatar"])
  580. vals = ccf.get_need_params(*need_params,**qdata)
  581. vals["user_id"] = request.user["id"]
  582. #vals["player_id"] = request.player.id if request.player else None
  583. rst = ctl.update_user_style(**vals)
  584. return cv.to_suc(rst)
  585. except Exception as e:
  586. cv.tracefail()
  587. return cv.to_fail(e)
  588. class PlayerFundView(cv.AuthView):
  589. def put(self, request):
  590. """#修改初始资金(小程序)
  591. @init_fund:"",参数金额
  592. """
  593. qdata = request.json
  594. need_params = ["init_fund"]
  595. mse = ccf.check_params(*need_params,**qdata)
  596. if mse:
  597. raise ce.TipException(mse)
  598. try:
  599. vals = ccf.get_need_params(*need_params,**qdata)
  600. vals["user_id"] = request.user.id
  601. vals["player_id"] = request.player.id if request.player else None
  602. rst = ctl.update_user_fund(**vals)
  603. return cv.to_suc(rst)
  604. except Exception as e:
  605. cv.tracefail()
  606. return cv.to_fail(e)
  607. class StockView(cv.AuthView):
  608. def get(self, request):
  609. """#股票詳情(2.0小程序)
  610. @id:1
  611. @page:1
  612. @page_size:1
  613. """
  614. qdata = request.json
  615. need_params = ["id"]
  616. mse = ccf.check_params(*need_params,**qdata)
  617. if mse:
  618. raise ce.TipException(mse)
  619. try:
  620. need_params.extend(["page","page_size","stock_date"])
  621. vals = ccf.get_need_params(*need_params,**qdata)
  622. vals["user_id"] = request.user.get("id")
  623. #vals["player_id"] = request.player.id if request.player else None
  624. rst = ctl.get_detail_info(self,**vals)
  625. vals["stock_id"] = rst["id"]
  626. rst["list"] = ctl.get_stock_players(**vals)
  627. return cv.to_suc(rst)
  628. except Exception as e:
  629. cv.tracefail()
  630. return cv.to_fail(e)
  631. class DefaultDateView(cv.AuthView):
  632. def get(self, request):
  633. """#默认日期(2.0小程序)
  634. @id:1
  635. """
  636. try:
  637. qdata = request.json
  638. rst = ctl.get_default_date(**qdata)
  639. return cv.to_suc(rst)
  640. except Exception as e:
  641. cv.tracefail()
  642. return cv.to_fail(e)
  643. class NoticesListView(cv.AuthView):
  644. def get(self, request):
  645. """#公告列表(2.0小程序)
  646. @id:1
  647. """
  648. try:
  649. rst = ctl.get_notices()
  650. return cv.to_suc(rst)
  651. except Exception as e:
  652. cv.tracefail()
  653. return cv.to_fail(e)
  654. class PlayerMatchCalendarView(cv.AuthView):
  655. def get(self, request):
  656. """#获取日历收益(2.0小程序)
  657. @match_id:1
  658. @user_id:1
  659. @month:2021-12
  660. """
  661. qdata = request.json
  662. need_params = ["user_id","match_id","month"]
  663. mse = ccf.check_params(*need_params,**qdata)
  664. if mse:
  665. raise ce.TipException(mse)
  666. try:
  667. vals = ccf.get_need_params(*need_params,**qdata)
  668. rst = ctl.get_player_match_calendar(**vals)
  669. return cv.to_suc(rst)
  670. except Exception as e:
  671. cv.tracefail()
  672. return cv.to_fail(e)
  673. class MatchListView(cv.AuthView):
  674. def get(self, request):
  675. """#获取所有赛事(2.0小程序)
  676. """
  677. try:
  678. rst = ctl.get_all_match(request)
  679. return cv.to_suc(rst)
  680. except Exception as e:
  681. cv.tracefail()
  682. return cv.to_fail(e)
  683. class MineLatestView(cv.AuthView):
  684. def get(self, request):
  685. """#我的最新(2.0小程序)
  686. """
  687. try:
  688. rst = ctl.get_mine_latest(request)
  689. return cv.to_suc(rst)
  690. except Exception as e:
  691. cv.tracefail()
  692. return cv.to_fail(e)
  693. class MatchValidDatesView(cv.AuthView):
  694. def get(self, request):
  695. """#比赛时间(2.0小程序)
  696. """
  697. try:
  698. qdata = request.json
  699. match_id = qdata.get("match_id")
  700. rst = ctl.get_match_validdates(match_id)
  701. return cv.to_suc(rst)
  702. except Exception as e:
  703. cv.tracefail()
  704. return cv.to_fail(e)
  705. class V3LoginView(cv.BaseView):
  706. def post(self, request):
  707. """#小程序登录v3(3.0小程序)
  708. @nickanme:"微信昵称"
  709. @avatar:"微信头像"
  710. @openid:"openid"
  711. @phone:"15982456282"
  712. @phcode:"2345"
  713. """
  714. try:
  715. rst = ca.login_user_v3(request)
  716. return cv.to_suc(rst)
  717. except Exception as e:
  718. cv.tracefail()
  719. return cv.to_fail(e)
  720. class V3PhoneCodeView(cv.BaseView):
  721. def post(self, request):
  722. """#短信验证码接口v3(3.0小程序)
  723. @phone:"手机号"
  724. """
  725. try:
  726. rst = ctl.send_phcode(request)
  727. return cv.to_suc(rst)
  728. except Exception as e:
  729. return cv.to_fail(e)
  730. class V3PhoneBindView(cv.AuthView):
  731. def post(self, request):
  732. """#手机绑定接口v3(3.0小程序)
  733. @phone:"手机号"
  734. @phcode:"验证码"
  735. """
  736. try:
  737. rst = ca.bind_user_phone(request)
  738. return cv.to_suc(rst)
  739. except Exception as e:
  740. return cv.to_fail(e)
  741. class V3SignupInfoView(cv.AuthView):
  742. def get(self, request):
  743. """#报名信息v3(3.0小程序)
  744. """
  745. try:
  746. rst = ctl.get_signup_info(request)
  747. return cv.to_suc(rst)
  748. except Exception as e:
  749. return cv.to_fail(e)
  750. class V3SignupWebView(cv.BaseView):
  751. def get(self, request):
  752. """#报名信息v3(3.0小程序)
  753. """
  754. try:
  755. rst = ctl.get_signup_info(request)
  756. return cv.to_suc(rst)
  757. except Exception as e:
  758. return cv.to_fail(e)
  759. class V3SignupWXPayView(cv.AuthView):
  760. def post(self, request):
  761. """#微信支付v3(3.0小程序)
  762. @match_id:1,
  763. @match_name:"测试比赛",
  764. @signup_type:1,1/游客报名,2/选手报名,
  765. @total_fee:10,总价
  766. """
  767. try:
  768. rst = ctl.do_wx_pay(request)
  769. return cv.to_suc(rst)
  770. except Exception as e:
  771. cv.tracefail()
  772. return cv.to_fail(e)
  773. class V3SignupNotifyView(cv.BaseView):
  774. def post(self, request):
  775. """#微信支付回调v3(3.0小程序)
  776. @match_id:1,
  777. @match_name:"",
  778. @signup_type:1,1游客报名/2选手报名
  779. @total_fee:200,总价
  780. """
  781. try:
  782. rst = ctl.do_wxpay_notify(request)
  783. return cv.to_suc(rst)
  784. except Exception as e:
  785. return cv.to_fail(e)
  786. class V3CommentsListView(cv.AuthView):
  787. def get(self, request):
  788. """#获取评论列表v3(3.0小程序)
  789. @record_id:29411,作业id
  790. """
  791. try:
  792. total,rst = ctl.get_user_comments(request)
  793. return cv.to_suc({"total":total,"list":rst})
  794. except Exception as e:
  795. cv.tracefail()
  796. return cv.to_fail(e)
  797. class V3WanzhuConsultListView(cv.AuthView):
  798. def get(self, request):
  799. """#获取我的咨询列表v3(3.0小程序)
  800. """
  801. try:
  802. total,rst = ctl.get_user_consult_list(request)
  803. return cv.to_suc({"total":total,"list":rst})
  804. except Exception as e:
  805. cv.tracefail()
  806. return cv.to_fail(e)
  807. class V3ZanCountView(cv.AuthView):
  808. def get(self, request):
  809. """#获取点赞数v3(3.0小程序)
  810. @record_id:1,作业id
  811. """
  812. try:
  813. rst = ctl.get_user_zans(request)
  814. return cv.to_suc(rst)
  815. except Exception as e:
  816. cv.tracefail()
  817. return cv.to_fail(e)
  818. class V3CommentsCountView(cv.AuthView):
  819. def get(self, request):
  820. """#获取评论数v3(3.0小程序)
  821. @record_id:1,作业id
  822. @stock_id:1,股票id
  823. """
  824. try:
  825. rst = ctl.get_user_comments_count(request)
  826. return cv.to_suc(rst)
  827. except Exception as e:
  828. return cv.to_fail(e)
  829. class V3WanzhuConsultView(cv.AuthView):
  830. def post(self, request):
  831. """#顽主咨询v3(3.0小程序)
  832. @cotent:"咨询内容"
  833. @pid:1,评论id(相当于回复哪条评论)
  834. """
  835. try:
  836. rst = ctl.add_wanzhu_consult(request)
  837. return cv.to_suc(rst)
  838. except Exception as e:
  839. return cv.to_fail(e)
  840. class V3CommentsView(cv.AuthView):
  841. def post(self, request):
  842. """#评论v3(3.0小程序)
  843. @record_id:1,作业id
  844. @stock_id:1,股票id
  845. @cotent:"评论内容"
  846. @pid:1,评论id
  847. """
  848. try:
  849. rst = ctl.add_comments(request)
  850. return cv.to_suc(rst)
  851. except Exception as e:
  852. return cv.to_fail(e)
  853. def delete(self, request):
  854. """#删除评论v3(3.0小程序)
  855. @id:1,评论id
  856. """
  857. try:
  858. rst = ctl.delete_comments(request)
  859. return cv.to_suc(rst)
  860. except Exception as e:
  861. return cv.to_fail(e)
  862. class V3ZanView(cv.AuthView):
  863. def post(self, request):
  864. """#点赞v3(3.0小程序)
  865. @record_id:1,作业id
  866. """
  867. try:
  868. rst = ctl.add_zan(request)
  869. return cv.to_suc(rst)
  870. except Exception as e:
  871. cv.tracefail()
  872. return cv.to_fail(e)
  873. class V3ExperienceView(cv.AuthView):
  874. def get(self, request):
  875. """#今日反思列表v3(3.0小程序)
  876. """
  877. try:
  878. total,rst = ctl.get_experience_list(request)
  879. return cv.to_suc({"total":total,"list":rst})
  880. except Exception as e:
  881. cv.tracefail()
  882. return cv.to_fail(e)
  883. class V3UserFundModifyView(cv.AuthView):
  884. def put(self, request):
  885. """#修改初始资金v3(3.0小程序)
  886. @out_fund:10
  887. @in_fund:10
  888. @account_img:""
  889. """
  890. try:
  891. rst = ctl.modify_user_fund(request)
  892. return cv.to_suc(rst)
  893. except Exception as e:
  894. cv.tracefail()
  895. return cv.to_fail(e)
  896. class V3UserChoiceListView(cv.AuthView):
  897. def get(self, request):
  898. """#我的自选v3(3.0小程序)
  899. @stock_id:1
  900. """
  901. try:
  902. total,rst = ctl.get_user_choices(request)
  903. return cv.to_suc({"total":total,"list":rst})
  904. except Exception as e:
  905. cv.tracefail()
  906. return cv.to_fail(e)
  907. class V3UserChoiceView(cv.AuthView):
  908. def post(self, request):
  909. """#加入首选v3(3.0小程序)
  910. @stock_id:""
  911. """
  912. try:
  913. rst = ctl.add_choice(request)
  914. return cv.to_suc(rst)
  915. except Exception as e:
  916. return cv.to_fail(e)
  917. def delete(self,request):
  918. """#取消自选(3.0小程序)
  919. @id:"1",多个逗号分隔
  920. @stock_id:"1",股票id
  921. """
  922. qdata = request.json
  923. need_params = ["stock_id"]
  924. mse = ccf.check_params(*need_params,**qdata)
  925. if mse:
  926. raise ce.TipException(mse)
  927. try:
  928. vals = ccf.get_need_params(*need_params,**qdata)
  929. rst = ctl.delete_choice(request)
  930. return cv.to_suc(rst)
  931. except Exception as e:
  932. cv.tracefail()
  933. return cv.to_fail(e)
  934. class UserMatchListView(cv.AuthView):
  935. def get(self, request):
  936. """#用户参赛列表v3(3.0小程序)
  937. """
  938. try:
  939. total,rst = ctl.get_user_match_list(request)
  940. return cv.to_suc({"total":total,"list":rst})
  941. except Exception as e:
  942. cv.tracefail()
  943. return cv.to_fail(e)
  944. class UserInfoView(cv.AuthView):
  945. def get(self, request):
  946. """#用户信息(公共)
  947. """
  948. try:
  949. rst = ctl.get_format_user_info(request)
  950. return cv.to_suc(rst)
  951. except Exception as e:
  952. cv.tracefail()
  953. return cv.to_fail(e)
  954. class StockUserListView(cv.AuthView):
  955. def get(self, request):
  956. """#股票持仓选手数据(3.0小程序)
  957. """
  958. try:
  959. qdata = request.json
  960. total,rst = ctl.get_stock_players(**qdata)
  961. return cv.to_suc({"total":total,"list":rst})
  962. except Exception as e:
  963. cv.tracefail()
  964. return cv.to_fail(e)
  965. class UserInOutListView(cv.AuthView):
  966. def get(self, request):
  967. """#每日盈亏(3.0小程序)
  968. """
  969. try:
  970. total,rst = ctl.get_day_inout_rank_list(request)
  971. return cv.to_suc({"total":total,"list":rst})
  972. except Exception as e:
  973. cv.tracefail()
  974. return cv.to_fail(e)
  975. class V3FollowUserListView(cv.AuthView):
  976. def get(self, request):
  977. """#我的关注(2.0小程序)
  978. """
  979. try:
  980. total,rst = ctl.get_user_follows_v3(request)
  981. return cv.to_suc({"total":total,"list":rst})
  982. except Exception as e:
  983. cv.tracefail()
  984. return cv.to_fail(e)
  985. class V3LatestMatchView(cv.AuthView):
  986. def get(self, request):
  987. """#最新赛事与分组信息(3.0app)
  988. """
  989. try:
  990. rst = ctl.get_latest_match_info(request)
  991. return cv.to_suc(rst)
  992. except Exception as e:
  993. cv.tracefail()
  994. return cv.to_fail(e)
  995. class V3StockView(cv.AuthView):
  996. def get(self, request):
  997. """#股票詳情(3.0小程序)
  998. @id:1
  999. """
  1000. qdata = request.json
  1001. need_params = ["id"]
  1002. mse = ccf.check_params(*need_params,**qdata)
  1003. if mse:
  1004. raise ce.TipException(mse)
  1005. try:
  1006. vals = ccf.get_need_params(*need_params,**qdata)
  1007. #vals["user_id"] = request.user.get("id")
  1008. stock_id = vals.get("id")
  1009. rst = ctl.get_stock_info(stock_id)
  1010. return cv.to_suc(rst)
  1011. except Exception as e:
  1012. cv.tracefail()
  1013. return cv.to_fail(e)
  1014. class V3StockPlayersListView(cv.BaseView):
  1015. def get(self, request):
  1016. """#股票持仓列表(3.0小程序)
  1017. @id:1
  1018. @page:1
  1019. @page_size:1
  1020. """
  1021. qdata = request.json
  1022. need_params = ["id"]
  1023. mse = ccf.check_params(*need_params,**qdata)
  1024. if mse:
  1025. raise ce.TipException(mse)
  1026. try:
  1027. need_params.extend(["page","page_size","stock_date"])
  1028. vals = ccf.get_need_params(*need_params,**qdata)
  1029. #vals["user_id"] = request.user.get("id")
  1030. vals["stock_id"] = vals.get("id")
  1031. vals["v3"] = 1
  1032. total,rst = ctl.get_stock_players(**vals)
  1033. return cv.to_suc({"total":total,"list":rst})
  1034. #return cv.to_suc(rst)
  1035. except Exception as e:
  1036. cv.tracefail()
  1037. return cv.to_fail(e)
  1038. class V3ArticleDetailView(cv.BaseView):
  1039. def get(self, request):
  1040. """#文章详情(APP)
  1041. @id:1
  1042. """
  1043. qdata = request.json
  1044. need_params = ["id"]
  1045. mse = ccf.check_params(*need_params,**qdata)
  1046. if mse:
  1047. raise ce.TipException(mse)
  1048. try:
  1049. vals = ccf.get_need_params(*need_params,**qdata)
  1050. rst = ctl.get_article_info(**vals)
  1051. return cv.to_suc(rst)
  1052. except Exception as e:
  1053. cv.tracefail()
  1054. return cv.to_fail(e)
  1055. class ProfitRankListView(cv.BaseView):
  1056. def get(self, request):
  1057. """#盈亏列表(小程序)
  1058. @id:1
  1059. """
  1060. qdata = request.json
  1061. try:
  1062. total,rst = ctl.get_profit_list(**qdata)
  1063. return cv.to_suc({"total":total,"list":rst})
  1064. except Exception as e:
  1065. cv.tracefail()
  1066. return cv.to_fail(e)
  1067. class V3GroupRankView(cv.AuthView):
  1068. def get(self, request):
  1069. """#分组排名(小程序)
  1070. """
  1071. try:
  1072. total,rst = ctl.get_group_rank_list_v3(request)
  1073. return cv.to_suc({"total":total,"list":rst})
  1074. except Exception as e:
  1075. cv.tracefail()
  1076. return cv.to_fail(e)
  1077. class V3ArticleTypeListView(cv.BaseView):
  1078. def get(self, request):
  1079. """#盈亏列表(小程序)
  1080. @id:1
  1081. """
  1082. qdata = request.json
  1083. try:
  1084. rst = ctl.get_article_type_list(**qdata)
  1085. return cv.to_suc(rst)
  1086. except Exception as e:
  1087. cv.tracefail()
  1088. return cv.to_fail(e)
  1089. class ConsultListView(cv.AuthView):
  1090. def get(self, request):
  1091. """#顽主咨询列表(平台管理后台)
  1092. @name:"股票名称"
  1093. @page:1
  1094. @page_size:20
  1095. """
  1096. qdata = request.json
  1097. try:
  1098. total,rst = ctl.get_wanzhu_consult_list(**qdata)
  1099. return cv.to_suc({"total":total,"list":rst})
  1100. except Exception as e:
  1101. cv.tracefail()
  1102. return cv.to_fail(e)
  1103. class BaikeCategoryListView(cv.AuthView):
  1104. def get(self, request):
  1105. """#百科词条分类列表(平台管理后台)
  1106. @name:"股票名称"
  1107. @page:1
  1108. @page_size:20
  1109. """
  1110. qdata = request.json
  1111. try:
  1112. rst = ctl.get_baike_category_tree(**qdata)
  1113. return cv.to_suc(rst)
  1114. except Exception as e:
  1115. cv.tracefail()
  1116. return cv.to_fail(e)
  1117. class BaikeListView(cv.BaseView):
  1118. def get(self, request):
  1119. """#百科词条列表(平台管理后台)
  1120. @category_id:1,分类id
  1121. """
  1122. qdata = request.json
  1123. try:
  1124. total,rst = ctl.get_baike_list_by_category(**qdata)
  1125. return cv.to_suc({"total":total,"list":rst})
  1126. except Exception as e:
  1127. cv.tracefail()
  1128. return cv.to_fail(e)
  1129. class BaikeDetailView(cv.AuthView):
  1130. def get(self, request):
  1131. """#百科词条列表(平台管理后台)
  1132. @id:1,百科id
  1133. """
  1134. qdata = request.json
  1135. try:
  1136. rst = ctl.get_baike_detail(**qdata)
  1137. return cv.to_suc(rst)
  1138. except Exception as e:
  1139. cv.tracefail()
  1140. return cv.to_fail(e)
  1141. def post(self, request):
  1142. """#新增百科词条(3.0小程序)
  1143. """
  1144. qdata = request.json
  1145. now = datetime.datetime.now()
  1146. need_params = ["name","content"]
  1147. mse = ccf.check_params(*need_params,**qdata)
  1148. if mse:
  1149. raise ce.TipException(mse)
  1150. try:
  1151. need_params.extend(["editor"])
  1152. vals = ccf.get_need_params(*need_params,**qdata)
  1153. vals["cid"] = request.user.get("id",0)
  1154. vals["cname"] = request.user.get("username","")
  1155. rst = ctl.add_model(self,**vals)
  1156. return cv.to_suc(rst)
  1157. except Exception as e:
  1158. cv.tracefail()
  1159. return cv.to_fail(e)
  1160. class V3AuthinfoView(cv.BaseView):
  1161. def get(self,request):
  1162. """#获取用户信息(小程序)
  1163. """
  1164. try:
  1165. rst = ca.get_wxauth_info_v3(request)
  1166. return cv.to_suc(rst)
  1167. except Exception as e:
  1168. cv.tracefail()
  1169. return cv.to_fail(e)
  1170. class V3APPVersionView(cv.BaseView):
  1171. def get(self,request):
  1172. """#获取用户信息(小程序)
  1173. """
  1174. try:
  1175. rst = ctl.get_app_version(request)
  1176. return cv.to_suc(rst)
  1177. except Exception as e:
  1178. cv.tracefail()
  1179. return cv.to_fail(e)
  1180. class WanzhuConsultReplyView(cv.AuthView):
  1181. def post(self, request):
  1182. """#顽主咨询回复(平台管理后台)
  1183. @id:1
  1184. """
  1185. qdata = request.json
  1186. need_params = ["reply_content","user_id"]
  1187. mse = ccf.check_params(*need_params,**qdata)
  1188. if mse:
  1189. raise ce.TipException(mse)
  1190. try:
  1191. need_params.extend(["pid","action","width","height"])
  1192. vals = ccf.get_need_params(*need_params,**qdata)
  1193. rst = ctl.reply_wanzhu_consult(**vals)
  1194. return cv.to_suc(rst)
  1195. except Exception as e:
  1196. cv.tracefail()
  1197. return cv.to_fail(e)
  1198. class UserDeleteView(cv.AuthView):
  1199. def delete(self, request):
  1200. """#删除评论v3(3.0小程序)
  1201. @id:1,评论id
  1202. """
  1203. try:
  1204. rst = ctl.delete_user_info(request)
  1205. return cv.to_suc(rst)
  1206. except Exception as e:
  1207. return cv.to_fail(e)
  1208. class StockCommentsListView(cv.AuthView):
  1209. def get(self, request):
  1210. """#股票评论列表(平台管理后台)
  1211. @stock_id:""
  1212. @page:1
  1213. @page_size:20
  1214. """
  1215. qdata = request.json
  1216. try:
  1217. total,rst = ctl.get_list_info(self,**qdata)
  1218. return cv.to_suc({"total":total,"list":rst})
  1219. except Exception as e:
  1220. cv.tracefail()
  1221. return cv.to_fail(e)
  1222. class UserArticleRelationListView(cv.AuthView):
  1223. def get(self, request):
  1224. """#名人堂列表(平台管理后台)
  1225. @page:1
  1226. @page_size:20
  1227. """
  1228. qdata = request.json
  1229. try:
  1230. total,rst = ctl.get_list_info(self,**qdata)
  1231. return cv.to_suc({"total":total,"list":rst})
  1232. except Exception as e:
  1233. cv.tracefail()
  1234. return cv.to_fail(e)
  1235. class UserArticleRelationView(cv.AuthView):
  1236. def get(self, request):
  1237. """#名人堂详情(小程序)
  1238. @id:1
  1239. """
  1240. qdata = request.json
  1241. need_params = ["id"]
  1242. mse = ccf.check_params(*need_params,**qdata)
  1243. if mse:
  1244. raise ce.TipException(mse)
  1245. try:
  1246. vals = ccf.get_need_params(*need_params,**qdata)
  1247. rst = ctl.get_detail_info(self,**vals)
  1248. return cv.to_suc(rst)
  1249. except Exception as e:
  1250. cv.tracefail()
  1251. return cv.to_fail(e)
  1252. class BaikeRandomListView(cv.AuthView):
  1253. def get(self, request):
  1254. """#随机百科词条(小程序)
  1255. """
  1256. qdata = request.json
  1257. try:
  1258. rst = ctl.get_random_bake_list(**qdata)
  1259. return cv.to_suc(rst)
  1260. except Exception as e:
  1261. cv.tracefail()
  1262. return cv.to_fail(e)
  1263. class TypeArticleTop5ListView(cv.AuthView):
  1264. def get(self, request):
  1265. """#每个分类下最新5条数据(小程序)
  1266. """
  1267. qdata = request.json
  1268. try:
  1269. rst = ctl.articles_top5_by_type(**qdata)
  1270. return cv.to_suc(rst)
  1271. except Exception as e:
  1272. cv.tracefail()
  1273. return cv.to_fail(e)
  1274. class MatchWinlostTop5ListView(cv.BaseView):
  1275. def get(self, request):
  1276. """#每届比赛收益top5(小程序)
  1277. """
  1278. qdata = request.json
  1279. try:
  1280. rst = ctl.get_match_winlost_top5(**qdata)
  1281. return cv.to_suc(rst)
  1282. except Exception as e:
  1283. cv.tracefail()
  1284. return cv.to_fail(e)
  1285. class AiDetectImageView(cv.BaseView):
  1286. def post(self, request):
  1287. """
  1288. #ai图片检测(小程序)
  1289. @imgurl:"",图片地址
  1290. """
  1291. qdata = request.json
  1292. try:
  1293. imgurl = qdata.get("imgurl")
  1294. rst = baidu_ai_detect_image(imgurl)
  1295. return cv.to_suc(rst)
  1296. except Exception as e:
  1297. cv.tracefail()
  1298. return cv.to_fail(e)
  1299. class AiDetectTxtView(cv.AuthView):
  1300. def post(self, request):
  1301. """
  1302. #ai文本检测(小程序)
  1303. @content:"",检测文本
  1304. """
  1305. qdata = request.json
  1306. try:
  1307. content = qdata.get("content")
  1308. rst = baidu_ai_detect_txt(content)
  1309. return cv.to_suc(rst)
  1310. except Exception as e:
  1311. cv.tracefail()
  1312. return cv.to_fail(e)
  1313. class AiOcr(cv.AuthView):
  1314. def post(self, request):
  1315. """
  1316. extract balance, stocks and money from screenshots by ocr using baidu.
  1317. @source: str | None, source of image. optional['tonghuashun']
  1318. @img_url: str, the url of image
  1319. """
  1320. qdata = request.json
  1321. try:
  1322. source = qdata.get('source')
  1323. content = qdata.get('img_url')
  1324. if not content:
  1325. return cv.to_fail('img_url can not be empty')
  1326. # rst = BaiduOcrForm.do_ocr(source, content)
  1327. rst = OcrManage.loadOcr(content,source)
  1328. return cv.to_suc(rst)
  1329. except Exception as e:
  1330. cv.tracefail()
  1331. return cv.to_fail(e)
  1332. class UserBlacksView(cv.AuthView):
  1333. def post(self, request):
  1334. """#拉黑用户(3.0小程序)
  1335. @black_user_id:1,拉黑用户id
  1336. """
  1337. try:
  1338. rst = ctl.black_user(request)
  1339. return cv.to_suc(rst)
  1340. except Exception as e:
  1341. return cv.to_fail(e)
  1342. def delete(self, request):
  1343. """#取消拉黑用户v3(3.0小程序)
  1344. @black_user_id:1,拉黑用户id
  1345. """
  1346. try:
  1347. rst = ctl.delete_black_user(request)
  1348. return cv.to_suc(rst)
  1349. except Exception as e:
  1350. return cv.to_fail(e)
  1351. class UserBlacksListView(cv.AuthView):
  1352. def get(self, request):
  1353. """#用户黑名单(小程序)
  1354. """
  1355. try:
  1356. total,rst = ctl.get_user_black_user_list(request)
  1357. return cv.to_suc({"total":total,"list":rst})
  1358. except Exception as e:
  1359. cv.tracefail()
  1360. return cv.to_fail(e)
  1361. class StockNbCommentsListView(cv.BaseView):
  1362. def get(self, request):
  1363. """#获取牛人v3(3.0小程序)
  1364. @date:"2023-07-16",评论时间
  1365. """
  1366. try:
  1367. total,rst = ctl.get_stock_nb_comments(request)
  1368. return cv.to_suc({"total":total,"list":rst})
  1369. except Exception as e:
  1370. cv.tracefail()
  1371. return cv.to_fail(e)
  1372. ####
  1373. class OpModelGroupListView(cv.BaseView):
  1374. def get(self, request):
  1375. """#获取所有操作模式分组(微信小程序)
  1376. """
  1377. qdata = request.json
  1378. try:
  1379. total,rst = ctl.get_list_info(self,**qdata)
  1380. return cv.to_suc({"total":total,"list":rst})
  1381. except Exception as e:
  1382. cv.tracefail()
  1383. return cv.to_fail(e)
  1384. class OpModelGroupRankListView(cv.BaseView):
  1385. def get(self, request):
  1386. """#获取所有操作模式分组排名(微信小程序)
  1387. """
  1388. qdata = request.json
  1389. try:
  1390. rst = ctl.get_opmode_group_rank_list(**qdata)
  1391. return cv.to_suc(rst)
  1392. except Exception as e:
  1393. cv.tracefail()
  1394. return cv.to_fail(e)
  1395. class OpModelGroupRankInfoView(cv.BaseView):
  1396. def get(self, request):
  1397. """#获取模式分组信息(微信小程序)
  1398. """
  1399. qdata = request.json
  1400. try:
  1401. statistic = ctl.get_opmode_group_statistic(**qdata)
  1402. return cv.to_suc(statistic)
  1403. except Exception as e:
  1404. cv.tracefail()
  1405. return cv.to_fail(e)
  1406. class OpModelGroupRankInfoListView(cv.BaseView):
  1407. def get(self, request):
  1408. """#获取模式分组信息(微信小程序)
  1409. """
  1410. qdata = request.json
  1411. try:
  1412. total,rst = ctl.get_opmode_group_rank_info_list(**qdata)
  1413. return cv.to_suc({"total":total,"list":rst})
  1414. except Exception as e:
  1415. cv.tracefail()
  1416. return cv.to_fail(e)
  1417. class MatchGroupWinloseStatisticView(cv.BaseView):
  1418. def get(self, request):
  1419. """#获取分组盈亏统计量
  1420. """
  1421. qdata = request.json
  1422. try:
  1423. rst = ctl.get_match_group_winlose_statistic(**qdata)
  1424. return cv.to_suc(rst)
  1425. except Exception as e:
  1426. cv.tracefail()
  1427. return cv.to_fail(e)
  1428. class MatchGroupListView(cv.BaseView):
  1429. def get(self, request):
  1430. """#获取比赛分组
  1431. """
  1432. qdata = request.json
  1433. try:
  1434. rst = ctl.get_match_group_list(**qdata)
  1435. return cv.to_suc(rst)
  1436. except Exception as e:
  1437. cv.tracefail()
  1438. return cv.to_fail(e)
  1439. class UserMarkScoreView(cv.AuthView):
  1440. def post(self, request):
  1441. """新增评分
  1442. """
  1443. qdata = request.json
  1444. now = datetime.datetime.now()
  1445. need_params = ["score"]
  1446. mse = ccf.check_params(*need_params,**qdata)
  1447. if mse:
  1448. raise ce.TipException(mse)
  1449. try:
  1450. today = qdata.get("stock_date")
  1451. if not today:
  1452. today = get_today_date()
  1453. vals = ccf.get_need_params(*need_params,**qdata)
  1454. vals["user_id"] = request.user.get("id")
  1455. rst = ctl.user_mark_score(**vals)
  1456. return cv.to_suc()
  1457. except Exception as e:
  1458. cv.tracefail()
  1459. return cv.to_fail(e)
  1460. class UserMarkScoreListView(cv.AuthView):
  1461. def get(self, request):
  1462. """#获取分组盈亏统计量
  1463. """
  1464. qdata = request.json
  1465. try:
  1466. qdata["user_id"] = request.user.get("id")
  1467. rst = ctl.get_user_markscore_list(**qdata)
  1468. return cv.to_suc(rst)
  1469. except Exception as e:
  1470. cv.tracefail()
  1471. return cv.to_fail(e)
  1472. class UserMarkScoreCheckView(cv.AuthView):
  1473. def get(self, request):
  1474. """#获取分组盈亏统计量
  1475. """
  1476. qdata = request.json
  1477. try:
  1478. qdata["user_id"] = request.user.get("id",0)
  1479. rst = ctl.get_user_markscore_list(**qdata)
  1480. return cv.to_suc(rst)
  1481. except Exception as e:
  1482. cv.tracefail()
  1483. return cv.to_fail(e)
  1484. class MatchGroupWinloseAllDayView(cv.BaseView):
  1485. def get(self, request):
  1486. """#获取分组盈亏统计量
  1487. """
  1488. qdata = request.json
  1489. try:
  1490. rst = ctl.get_match_group_winlose_allday(**qdata)
  1491. return cv.to_suc(rst)
  1492. except Exception as e:
  1493. cv.tracefail()
  1494. return cv.to_fail(e)
  1495. class MatchGroupWinloseAvgAllDayView(cv.BaseView):
  1496. def get(self, request):
  1497. """#获取分组盈亏统计量
  1498. """
  1499. qdata = request.json
  1500. try:
  1501. rst = ctl.get_match_group_winlose_avg_allday(**qdata)
  1502. return cv.to_suc(rst)
  1503. except Exception as e:
  1504. cv.tracefail()
  1505. return cv.to_fail(e)
  1506. class UserMatchStockWinLossListView(cv.BaseView):
  1507. def get(self, request):
  1508. """#获取个人股票盈亏排名
  1509. """
  1510. qdata = request.json
  1511. try:
  1512. rst = ctl.get_user_match_stock_winloss_rank_list(**qdata)
  1513. return cv.to_suc(rst)
  1514. except Exception as e:
  1515. cv.tracefail()
  1516. return cv.to_fail(e)
  1517. class PlayerMatchExternalView(cv.BaseView):
  1518. def get(self, request):
  1519. """#选手参赛详情(小程序)
  1520. """
  1521. try:
  1522. rst = ctl.get_player_match_detail(request)
  1523. return cv.to_suc(rst)
  1524. except Exception as e:
  1525. cv.tracefail()
  1526. return cv.to_fail(e)
  1527. class PlayerMatchCalendarExternalView(cv.BaseView):
  1528. def get(self, request):
  1529. """#获取日历收益(2.0小程序)
  1530. @match_id:1
  1531. @user_id:1
  1532. @month:2021-12
  1533. """
  1534. qdata = request.json
  1535. need_params = ["user_id","match_id","month"]
  1536. mse = ccf.check_params(*need_params,**qdata)
  1537. if mse:
  1538. raise ce.TipException(mse)
  1539. try:
  1540. vals = ccf.get_need_params(*need_params,**qdata)
  1541. rst = ctl.get_player_match_calendar(**vals)
  1542. return cv.to_suc(rst)
  1543. except Exception as e:
  1544. cv.tracefail()
  1545. return cv.to_fail(e)
  1546. class OSS2PolicyAndSignView(cv.BaseView):
  1547. def get(self, request):
  1548. """#获取oss签名和上传策略
  1549. """
  1550. try:
  1551. rst = ctl.get_oss2_policy_sign(request)
  1552. return cv.to_suc(rst)
  1553. except Exception as e:
  1554. cv.tracefail()
  1555. return cv.to_fail(e)
  1556. class UserMarkWekkAvgView(cv.BaseView):
  1557. def get(self, request):
  1558. """#用户每周平均值
  1559. """
  1560. try:
  1561. rst = ctl.get_user_markscore_week_avg(request)
  1562. return cv.to_suc(rst)
  1563. except Exception as e:
  1564. cv.tracefail()
  1565. return cv.to_fail(e)