暫無描述

activity_mp_views.py 11KB

    # -*- 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 from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo from utils.error.errno_utils import 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_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', '') 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, '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_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) })