| 
              # -*- 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,
    })
 
  |