Keine Beschreibung

member_views.py 9.4KB

    # -*- coding: utf-8 -*- from __future__ import division from django.conf import settings from django.db import transaction from django_logit import logit from django_response import response from account.models import UserInfo from member.models import GoodsInfo, GoodsOrderInfo, MemberActivityInfo, MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo from utils.error.errno_utils import MemberActivityStatusCode, MemberGoodStatusCode, MemberRightStatusCode, UserStatusCode from utils.redis.rshot import get_shot_member_data @logit def member(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) rights = RightInfo.objects.filter(status=True).order_by('position') rights = [right.data for right in rights] goods = GoodsInfo.objects.filter(status=True).order_by('position') goods = [good.data for good in goods] return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'rights': rights, 'goods': goods, }) @logit def rights(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') level = request.POST.get('level', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) rights = RightInfo.objects.filter(status=True).order_by('position') rights = [right.data for right in rights] return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'rights': rights, }) @logit def right_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') right_id = request.POST.get('right_id', '') try: right = RightInfo.objects.get(right_id=right_id) except RightInfo.DoesNotExist: return response(MemberRightStatusCode.RIGHT_NOT_FOUND) return response(200, data={ 'right': right.data, }) @logit def goods(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) raw_goods = GoodsInfo.objects.filter(status=True).order_by('position') banners = goods = [] for good in raw_goods: if good.is_slider: banners.append(good.data) else: goods.append(good.data) return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'banners': banners, 'goods': goods, }) @logit def good_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') good_id = request.POST.get('good_id', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: good = GoodsInfo.objects.get(good_id=good_id) except GoodsInfo.DoesNotExist: return response(MemberGoodStatusCode.GOOD_NOT_FOUND) return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'good': good.data, }) @logit @transaction.atomic def good_exchange(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') good_id = request.POST.get('good_id', '') name = request.POST.get('name', '') phone = request.POST.get('phone', '') address = request.POST.get('address', '') # 校验用户是否存在 try: user = UserInfo.objects.select_for_update().get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: good = GoodsInfo.objects.get(good_id=good_id) except GoodsInfo.DoesNotExist: return response(MemberGoodStatusCode.GOOD_NOT_FOUND) if user.level < good.minlevel: return response(MemberGoodStatusCode.GOOD_NO_EXCHANGE_PERMISSION) if user.integral < good.integral: return response(MemberGoodStatusCode.GOOD_INTEGRAL_NOT_ENOUGH) user.integral -= good.integral user.save() GoodsOrderInfo.objects.create( user_id=user_id, good_id=good_id, good_type=good.good_type, name=name, phone=phone, address=address, ) if good.good_type == GoodsInfo.PHYSICAL: # TODO: 通知客服发快递 pass else: # TODO: 发放虚拟商品 pass return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'good': good.data, }) @logit def integrals(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) return response(200, data={ 'shots_types': get_shot_member_data(), 'enable_photo_upvote_integral': True, 'photo_upvote_integrals': { 'headers': [u'排名', u'日', u'周', u'月'], 'ranks': [ [u'第1名', '10', '20', '30'], [u'第2名', '5', '10', '15'], [u'第3名', '3', '6', '9'], [u'第4-10名', '1', '2', '3'], ] }, 'enable_activity_integral': True, }) @logit def activity_list(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) raw_activitys = MemberActivityInfo.objects.filter(status=True).order_by('position') banners = [] activitys = [] for act in raw_activitys: if act.is_slider: banners.append(act.data) else: activitys.append(act.data) return response(200, data={ 'banners': banners, 'activitys': activitys, }) @logit def activity_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_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(200, data={ 'activity': act.data, }) @logit def activity_signup(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') activity_id = request.POST.get('activity_id') name = request.POST.get('name', '') phone = request.POST.get('phone', '') 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, 'name': name, 'phone': phone, }) # TODO: 立即推送模版消息(报名成功,时间,地点) # TODO: 延迟(活动当天)推送模版消息(时间,地点) return response(200, data={ 'activity': act.data, }) @logit @transaction.atomic def activity_signin(request): brand_id = request.POST.get('brand_id', 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) MemberActivitySigninInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={ 'title': act.title, }) user.integral += act.integral user.save() # TODO: 立即推送模版消息(感谢您参加活动,获得的积分) return response(200, data={ 'activity': act.data, })