|
# -*- coding: utf-8 -*-
from django.conf import settings
from django.db import transaction
from django_logit import logit
from django_query import get_query_value
from django_response import response
from paginator import pagination
from account.models import UserInfo, LensmanInfo
from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo, MemberActivityDataInfo
from utils.error.errno_utils import MemberActivityContributionStatusCode, MemberActivityStatusCode, UserStatusCode
@logit
def activity_home(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
banners = MemberActivityInfo.objects.filter(activity_state=1, is_slider=True, is_series=False, status=True).order_by('-date')
banners = [act.data(user_id) for act in banners]
return response(data={
'banners': banners,
})
@logit
def activity_list(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_section = request.POST.get('activity_section', 3)
activitys = MemberActivityInfo.objects.filter(activity_state=1, activity_section=activity_section, is_series=False, status=True).order_by('-date')
activitys = [act.data(user_id) for act in activitys]
return response(data={
'activitys': activitys,
})
@logit
def activity_list_v2(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_section = request.POST.get('activity_section', 3)
activitys = MemberActivityInfo.objects.filter(activity_state=1, activity_section=activity_section, main_activity_id='', status=True).order_by('-date')
activitys = [act.data(user_id) for act in activitys]
return response(data={
'activitys': activitys,
})
@logit
def activity_series_list(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
main_activity_id = request.POST.get('main_activity_id', '')
activitys = MemberActivityInfo.objects.filter(activity_state=1, main_activity_id=main_activity_id, status=True).order_by('-date')
activitys = [act.data(user_id) for act in activitys]
return response(data={
'activitys': activitys,
})
@logit
def activity_detail(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
try:
act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
except MemberActivityInfo.DoesNotExist:
return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
return response(data={
'activity': act.details(user_id),
})
@logit
def activity_signup(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
lensman_id = request.POST.get('lensman_id', '')
name = request.POST.get('name', '')
phone = request.POST.get('phone', '')
activity_id = request.POST.get('activity_id', '')
fields = request.POST.get('fields', '[]')
try:
act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
except MemberActivityInfo.DoesNotExist:
return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
'title': act.title,
'lensman_id': lensman_id,
'name': name,
'phone': phone,
'fields': fields,
})
# TODO: 立即推送模版消息(报名成功,时间,地点)
# TODO: 延迟(活动当天)推送模版消息(时间,地点)
return response(data={
'activity': act.data(user_id),
})
@logit
def activity_signup_detail(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
try:
signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
except MemberActivitySignupInfo.DoesNotExist:
return response()
return response(data={
'signup_info': signup_info.data,
})
@logit
def activity_data_submit(request):
user_id = request.POST.get('user_id', '')
lensman_id = request.POST.get('lensman_id', '')
activity_id = request.POST.get('activity_id', '')
data_fields = request.POST.get('data_fields', '[]')
try:
act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
except MemberActivityInfo.DoesNotExist:
return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
try:
lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
except LensmanInfo.DoesNotExist:
return response('400001', 'LensmanInfo Not Found', '摄影师不存在')
if lensman.is_expired:
return response(40001, 'Lensman Has Expired', '摄影师合作已到期')
MemberActivityDataInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
'title': act.title,
'lensman_id': lensman_id,
'lensman_name': lensman.name,
'lensman_phone': lensman.phone,
'data_fields': data_fields,
})
return response(data={
'activity': act.data(user_id),
})
@logit
def activity_data_detail(request):
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
try:
data_info = MemberActivityDataInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
except MemberActivityDataInfo.DoesNotExist:
return response()
return response(data={
'data_info': data_info.data,
})
@logit
def activity_contribute_create(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
main_activity_id = request.POST.get('main_activity_id', '')
content_type = get_query_value(request, 'content_type', val_cast_type='int')
title = request.POST.get('title', '')
content = request.POST.get('content', '')
images = get_query_value(request, 'images', val_cast_type='listjson')
video_url = request.POST.get('video_url', '')
# 报名字段
user_name = request.POST.get('user_name', '')
user_avatar = request.POST.get('user_avatar', '')
act = MemberActivityInfo.objects.get(activity_id=activity_id)
try:
signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
if user_name and user_avatar:
signup_info.name = user_name
signup_info.avatar = user_avatar
signup_info.save()
MemberActivityContributionInfo.objects.filter(user_id=user_id, activity_id=activity_id).update(user_name=user_name, user_avatar=user_avatar)
except MemberActivitySignupInfo.DoesNotExist:
signup_info = MemberActivitySignupInfo.objects.create(
user_id=user_id,
activity_id=activity_id,
title=act.title,
name=user_name,
avatar=user_avatar,
)
contribution = MemberActivityContributionInfo.objects.create(
brand_id=brand_id,
user_id=user_id,
activity_id=activity_id,
main_activity_id=main_activity_id,
content_type=content_type,
title=title,
content=content,
images=images,
video_url=video_url,
user_name=signup_info.name,
user_avatar=signup_info.final_avatar,
)
return response(data={
'contribution': contribution.data,
})
@logit
def activity_contribute_update(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
main_activity_id = request.POST.get('main_activity_id', '')
content_type = get_query_value(request, 'content_type', val_cast_type='int')
contribution_id = request.POST.get('contribution_id', '')
title = request.POST.get('title', '')
content = request.POST.get('content', '')
images = get_query_value(request, 'images', val_cast_type='listjson')
video_url = request.POST.get('video_url', '')
# 报名字段
user_name = request.POST.get('user_name', '')
user_avatar = request.POST.get('user_avatar', '')
try:
signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
if user_name and user_avatar:
signup_info.name = user_name
signup_info.avatar = user_avatar
signup_info.save()
MemberActivityContributionInfo.objects.filter(user_id=user_id, activity_id=activity_id).update(user_name=user_name, user_avatar=user_avatar)
except MemberActivitySignupInfo.DoesNotExist:
signup_info = None
contribution, _ = MemberActivityContributionInfo.objects.update_or_create(brand_id=brand_id, user_id=user_id, activity_id=activity_id, contribution_id=contribution_id, defaults={
'title': title,
'content': content,
'images': images,
'video_url': video_url,
'user_name': signup_info.name if signup_info else '',
'user_avatar': signup_info.final_avatar if signup_info else '',
'audit_status': 0,
})
return response(data={
'contribution': contribution.data,
})
@logit
def activity_contribute_list(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
main_activity_id = request.POST.get('main_activity_id', '')
activity_id = request.POST.get('activity_id', '')
content_type = get_query_value(request, 'content_type', val_cast_type='int')
is_myself = get_query_value(request, 'is_myself', val_cast_type='int')
audit_status = get_query_value(request, 'audit_status', val_cast_type='int')
is_audit_pass = get_query_value(request, 'is_audit_pass', val_cast_type='int')
is_selected = get_query_value(request, 'is_selected', val_cast_type='int')
page = request.POST.get('page', 1)
num = request.POST.get('num', 20)
if main_activity_id:
contributions = MemberActivityContributionInfo.objects.filter(main_activity_id=main_activity_id, status=True)
else:
contributions = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, status=True)
if 'content_type' in request.POST:
contributions = contributions.filter(content_type=content_type)
if 'is_myself' in request.POST:
if is_myself:
contributions = contributions.filter(user_id=user_id)
else:
contributions = contributions.exclude(user_id=user_id)
if 'audit_status' in request.POST:
contributions = contributions.filter(audit_status=audit_status)
if 'is_audit_pass' in request.POST:
if is_audit_pass:
contributions = contributions.filter(audit_status=MemberActivityContributionInfo.AUDIT_PASS)
else:
contributions = contributions.exclude(audit_status=MemberActivityContributionInfo.AUDIT_PASS)
if 'is_selected' in request.POST:
contributions = contributions.filter(is_selected=is_selected)
contributions = contributions.order_by('-pk')
contributions, left = pagination(contributions, page, num)
contributions = [contribution.data for contribution in contributions]
return response(data={
'contributions': contributions,
'left': left,
})
@logit
def activity_contribute_detail(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
contribution_id = request.POST.get('contribution_id', '')
try:
contribution = MemberActivityContributionInfo.objects.get(contribution_id=contribution_id, status=True)
except MemberActivityContributionInfo.DoesNotExist:
return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
return response(data=contribution.data)
@logit
def activity_contribute_detail_lastest(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
contribution = MemberActivityContributionInfo.objects.filter(activity_id=activity_id, user_id=user_id, status=True).first()
return response(data=contribution.data)
@logit
@transaction.atomic
def activity_signin(request):
brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
user_id = request.POST.get('user_id', '')
activity_id = request.POST.get('activity_id', '')
# 校验用户是否存在
try:
user = UserInfo.objects.select_for_update().get(user_id=user_id)
except UserInfo.DoesNotExist:
return response(UserStatusCode.USER_NOT_FOUND)
try:
act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)
except MemberActivityInfo.DoesNotExist:
return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
try:
signup_info = MemberActivitySignupInfo.objects.get(activity_id=activity_id, user_id=user_id, status=True)
except MemberActivitySignupInfo.DoesNotExist:
return response(40001, 'Signup Info Not Found', u'用户未报名')
signup_info.is_signin = True
signup_info.save()
return response(data={
'activity': act.data(user_id)
})
|