#答题
@csrf_exempt
def submitanswer(request):
code=request.POST["code"]
suboption=request.POST["suboption"]
questionid=request.POST["questionid"]
res=get_sessionkey_openid(code)
openid=res[0]
guserinfo=guser.objects.get(guser_openid=openid)
questioninfo=idiom.objects.get(id=questionid)
answerexist=answer_detail.objects.filter(answer_linkguser=openid)
if answerexist:
#取最近一条答题记录
txinfo=answer_detail.objects.filter(answer_linkguser=openid).order_by("answer_time").last()
if txinfo.answer_linkidiom==int(questionid):
resdata={}
resdata["result"]="norepeat"
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")
else:
#校验金币是否足够每局100
if guserinfo.guser_curgold>=100:
#【答对处理逻辑】
if suboption==questioninfo.idiom_lack:
#每局金币减少100
guserinfo.guser_curgold=guserinfo.guser_curgold-100
#闯关数+1
guserinfo.guser_pass+=1
#取倍数
mult=getmult(guserinfo.guser_continright)
#取翻倍
doublenum=getdouble()
#获取元宝
if guserinfo.guser_isblack==0:
#黑名单
yb=1
guserinfo.guser_curyb=guserinfo.guser_curyb+yb
guserinfo.guser_countyb=guserinfo.guser_countyb+yb
else:
#白名单调用获取元宝
yb=getyb(guserinfo.guser_pass)
guserinfo.guser_curyb=guserinfo.guser_curyb+yb*mult
guserinfo.guser_countyb=guserinfo.guser_countyb+yb*mult
guserinfo.save()
#线程执行
nowtime=timeadd8()
res=1
subtask=threading.Thread(target=subanswertask, args=(openid,questionid,suboption,res,nowtime))
subtask.start()
goldbefore=guserinfo.guser_curgold+100
goldchange=-100
goldafter=guserinfo.guser_curgold
goldremark="答题金币"
goldtask=threading.Thread(target=golddetailtask, args=(openid,goldbefore,goldchange,goldafter,goldremark,nowtime))
goldtask.start()
ybbefore=guserinfo.guser_curyb-yb*mult
ybchange=yb*mult
ybafter=guserinfo.guser_curyb
ybremark="答题"
ybtask=threading.Thread(target=ybdetailtask, args=(openid,ybbefore,ybchange,ybafter,ybremark,nowtime))
ybtask.start()
resdata={}
resdata["result"]="success"
resdata["explain"]=questioninfo.idiom_explain
resdata["ybchange"]=yb
resdata["mult"]=mult
resdata["doublenum"]=doublenum
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")
#答错处理逻辑
else:
#每局金币减少100
guserinfo.guser_curgold=guserinfo.guser_curgold-100
#闯关数-1
guserinfo.guser_pass-=1
#闯关数变为负数处理
if guserinfo.guser_pass<=0:
guserinfo.guser_pass=0
guserinfo.save()
#线程执行
nowtime=timeadd8()
res=0
subtask=threading.Thread(target=subanswertask, args=(openid,questionid,suboption,res,nowtime))
subtask.start()
goldbefore=guserinfo.guser_curgold+100
goldchange=-100
goldafter=guserinfo.guser_curgold
goldremark="答题金币"
goldtask=threading.Thread(target=golddetailtask, args=(openid,goldbefore,goldchange,goldafter,goldremark,nowtime))
goldtask.start()
ybbefore=guserinfo.guser_curyb
ybchange=0
ybafter=guserinfo.guser_curyb
ybremark="答题"
ybtask=threading.Thread(target=ybdetailtask, args=(openid,ybbefore,ybchange,ybafter,ybremark,nowtime))
ybtask.start()
resdata={}
resdata["result"]="fail"
resdata["explain"]=questioninfo.idiom_explain
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")
else:
resdata={}
resdata["result"]="nogold"
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")
else:
#校验金币是否足够每局100
if guserinfo.guser_curgold>=100:
#【答对处理逻辑】
if suboption==questioninfo.idiom_lack:
#每局金币减少100
guserinfo.guser_curgold=guserinfo.guser_curgold-100
#闯关数+1
guserinfo.guser_pass+=1
#取倍数
mult=getmult(guserinfo.guser_continright)
#取翻倍
doublenum=getdouble()
#获取元宝
if guserinfo.guser_isblack==0:
#黑名单
yb=1
guserinfo.guser_curyb=guserinfo.guser_curyb+yb
guserinfo.guser_countyb=guserinfo.guser_countyb+yb
else:
#白名单调用获取元宝
yb=getyb(guserinfo.guser_pass)
guserinfo.guser_curyb=guserinfo.guser_curyb+yb*mult
guserinfo.guser_countyb=guserinfo.guser_countyb+yb*mult
guserinfo.save()
#线程执行
nowtime=timeadd8()
res=1
subtask=threading.Thread(target=subanswertask, args=(openid,questionid,suboption,res,nowtime))
subtask.start()
goldbefore=guserinfo.guser_curgold+100
goldchange=-100
goldafter=guserinfo.guser_curgold
goldremark="答题金币"
goldtask=threading.Thread(target=golddetailtask, args=(openid,goldbefore,goldchange,goldafter,goldremark,nowtime))
goldtask.start()
ybbefore=guserinfo.guser_curyb-yb**mult
ybchange=yb**mult
ybafter=guserinfo.guser_curyb
ybremark="答题"
ybtask=threading.Thread(target=ybdetailtask, args=(openid,ybbefore,ybchange,ybafter,ybremark,nowtime))
ybtask.start()
resdata={}
resdata["result"]="success"
resdata["explain"]=questioninfo.idiom_explain
resdata["ybchange"]=yb
resdata["mult"]=mult
resdata["doublenum"]=doublenum
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")
#答错处理逻辑
else:
#每局金币减少100
guserinfo.guser_curgold=guserinfo.guser_curgold-100
#闯关数-1
guserinfo.guser_pass-=1
#闯关数变为负数处理
if guserinfo.guser_pass<=0:
guserinfo.guser_pass=0
guserinfo.save()
#线程执行
nowtime=timeadd8()
res=0
subtask=threading.Thread(target=subanswertask, args=(openid,questionid,suboption,res,nowtime))
subtask.start()
goldbefore=guserinfo.guser_curgold+100
goldchange=-100
goldafter=guserinfo.guser_curgold
goldremark="答题金币"
goldtask=threading.Thread(target=golddetailtask, args=(openid,goldbefore,goldchange,goldafter,goldremark,nowtime))
goldtask.start()
ybbefore=guserinfo.guser_curyb
ybchange=0
ybafter=guserinfo.guser_curyb
ybremark="答题"
ybtask=threading.Thread(target=ybdetailtask, args=(openid,ybbefore,ybchange,ybafter,ybremark,nowtime))
ybtask.start()
resdata={}
resdata["result"]="fail"
resdata["explain"]=questioninfo.idiom_explain
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")
else:
resdata={}
resdata["result"]="nogold"
resdata=json.dumps(resdata)
return HttpResponse(resdata,content_type="application/json")