124 lines
4.5 KiB
Python
124 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from django.db import transaction
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from competition.models import BankInfo, CompetitionKindInfo
|
|
from business.models import BusinessAccountInfo, AppConfigInfo, BusinessAppInfo
|
|
from account.models import Profile
|
|
|
|
from utils.response import json_response
|
|
from utils.redis.rpageconfig import set_pageconfig
|
|
from utils.errors import SetError, BizError, ProfileError
|
|
from utils.decorators import check_login, logerr
|
|
|
|
|
|
def banks(request, s):
|
|
if s == '999':
|
|
banks = BankInfo.objects.values_list('bank_name', 'bank_id', 'kind_num', 'choice_num', 'fillinblank_num').order_by('-kind_num')
|
|
return json_response(200, 'OK', {'banks': [{'bank_name': b[0], 'bank_id': b[1], 'kind_num': b[2], 'total_question_num': b[3] + b[4]} for b in banks]})
|
|
bank_types = [t[0] for t in BankInfo.BANK_TYPES]
|
|
|
|
if int(s) in bank_types:
|
|
banks = BankInfo.objects.filter(bank_type=s).values_list('bank_name', 'bank_id', 'kind_num', 'choice_num', 'fillinblank_num')
|
|
return json_response(200, 'OK', {'banks': [{'bank_name': b[0], 'bank_id': b[1], 'kind_num': b[2], 'total_question_num': b[3] + b[4]} for b in banks]})
|
|
|
|
return json_response(*SetError.BankTypeError)
|
|
|
|
|
|
def bank_detail(request, bank_id):
|
|
try:
|
|
bank = BankInfo.objects.get(bank_id=bank_id)
|
|
except BankInfo.DoesNotExist:
|
|
return json_response(*SetError.BankInfoNotFound)
|
|
|
|
return json_response(200, 'OK', {'bank_info': bank.data})
|
|
|
|
|
|
@logerr
|
|
@csrf_exempt
|
|
@check_login
|
|
@transaction.atomic
|
|
def set_bank(request):
|
|
account_id = request.POST.get('account_id', '')
|
|
uid = request.POST.get('uid', '')
|
|
bank_id = request.POST.get('bank_id', '')
|
|
kind_name = request.POST.get('kind_name', '')
|
|
sponsor_name = request.POST.get('sponsor_name', '')
|
|
question_num = int(request.POST.get('question_num', 1))
|
|
total_score = int(request.POST.get('total_score', 100))
|
|
cop_startat = request.POST.get('cop_startat')
|
|
cop_finishat = request.POST.get('cop_finishat')
|
|
period = request.POST.get('period')
|
|
rule_text = request.POST.get('rule_text', '')
|
|
is_show_userinfo = request.POST.get('is_show_userinfo', 'false')
|
|
form_data = request.POST.get('form_data', '')
|
|
field_name_data = request.POST.get('field_name_data', '')
|
|
option_data = request.POST.get('option_data', '')
|
|
|
|
try:
|
|
BusinessAccountInfo.objects.select_for_update().get(account_id=account_id)
|
|
except BusinessAccountInfo.DoesNotExist:
|
|
return json_response(*BizError.BizAccountNotFound)
|
|
|
|
try:
|
|
profile = Profile.objects.select_for_update().get(uid=uid)
|
|
except Profile.DoesNotExist:
|
|
return json_response(*ProfileError.ProfileNotFound)
|
|
|
|
try:
|
|
bank_info = BankInfo.objects.select_for_update().get(bank_id=bank_id)
|
|
except BankInfo.DoesNotExist:
|
|
return json_response(*SetError.BankInfoNotFound)
|
|
|
|
app_info = BusinessAppInfo.objects.select_for_update().create(
|
|
account_id=account_id,
|
|
app_name=kind_name
|
|
)
|
|
|
|
app_config_values = {
|
|
'app_name': kind_name,
|
|
'rule_text': rule_text,
|
|
'is_show_userinfo': True if is_show_userinfo == 'true' else False,
|
|
'userinfo_fields': form_data.rstrip('#'),
|
|
'userinfo_field_names': field_name_data.rstrip('#'),
|
|
'option_fields': option_data.rstrip('#'),
|
|
}
|
|
|
|
app_config_info, app_config_created = AppConfigInfo.objects.select_for_update().get_or_create(
|
|
app_id=app_info.app_id,
|
|
defaults=app_config_values
|
|
)
|
|
|
|
if not app_config_created:
|
|
for k, v in app_config_values.items():
|
|
setattr(app_config_info, k, v)
|
|
app_config_info.save()
|
|
|
|
kind_values = {
|
|
'kind_name': kind_name,
|
|
'sponsor_name': sponsor_name,
|
|
'kind_type': bank_info.bank_type,
|
|
'total_score': total_score,
|
|
'question_num': question_num,
|
|
'cop_startat': cop_startat,
|
|
'period_time': period or 0,
|
|
'cop_finishat': cop_finishat
|
|
}
|
|
kind_info, kind_created = CompetitionKindInfo.objects.select_for_update().get_or_create(
|
|
account_id=account_id,
|
|
app_id=app_info.app_id,
|
|
bank_id=bank_id,
|
|
defaults=kind_values
|
|
)
|
|
|
|
if not kind_created:
|
|
for k, v in kind_values.items():
|
|
setattr(kind_info, k, v)
|
|
kind_info.save()
|
|
|
|
set_pageconfig(app_config_info.data)
|
|
|
|
return json_response(200, 'OK', {
|
|
'kind_info': kind_info.data,
|
|
}) |