| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789 |
- from __future__ import division
- from django.conf import settings
- from django.db import transaction
- from django.db.models import Sum
- from django_logit import logit
- from django_query import get_query_value
- from django_response import response
- from paginator import pagination
- from pywe_miniapp import get_shareinfo
- from pywe_storage import RedisStorage
- from TimeConvert import TimeConvert as tc
- from account.models import UserInfo, UserIntegralIncomeExpensesInfo
- from coupon.models import UserCouponInfo
- from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo,
- MemberActivityContributionWelfareUnlockingInfo, MemberActivityGroupShareInfo,
- MemberActivityInfo, MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo)
- from utils.error.errno_utils import (MemberActivityContributionStatusCode,
- MemberActivityContributionWelfareUnblockingStatusCode, MemberActivityStatusCode,
- MemberCouponStatusCode, MemberGoodStatusCode, MemberRightStatusCode,
- PermissionStatusCode, UserStatusCode)
- from utils.redis.connect import r
- from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST, MEMBER_UPGRADE_INFO
- from utils.redis.rshot import get_member_shot_data
- WECHAT = settings.WECHAT
- @logit
- def member(request):
- brand_id = request.POST.get('brand_id') or 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(only_for_member=False, left_num__gt=0, status=True).order_by('position')
- goods = [good.data(user_id) for good in goods][:2]
- member_goods = GoodsInfo.objects.filter(only_for_member=True, left_num__gt=0, minlevel__lte=user.level, status=True).order_by('position')
- member_goods = [good.data(user_id) for good in member_goods]
- member_goods = [good for good in member_goods if not good['has_member_exchange']]
- upgrade_info, _ = r.getdel(MEMBER_UPGRADE_INFO % (brand_id, user_id))
- return response(data={
- 'nickname': user.final_nickname,
- 'avatar': user.final_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,
- 'member_goods': member_goods,
- 'has_upgrade': bool(upgrade_info),
- })
- @logit
- def rights(request):
- brand_id = request.POST.get('brand_id') or 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(data={
- 'nickname': user.final_nickname,
- 'avatar': user.final_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') or 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(data={
- 'right': right.data,
- })
- @logit
- def goods(request):
- brand_id = request.POST.get('brand_id') or 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(only_for_member=False, left_num__gt=0, good_state=GoodsInfo.SHELVES, status=True).order_by('position', '-pk')
- banners = goods = []
- for good in raw_goods:
- if good.is_slider:
- banners.append(good.data(user_id))
- else:
- goods.append(good.data(user_id))
- return response(data={
- 'nickname': user.final_nickname,
- 'avatar': user.final_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') or 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(data={
- 'nickname': user.final_nickname,
- 'avatar': user.final_avatar,
- 'integral': user.integral,
- 'freeze_integral': user.freeze_integral,
- 'final_integral': user.final_integral,
- 'shots_num': user.shots_num,
- 'level': user.level,
- 'good': good.details(user_id),
- })
- @logit
- @transaction.atomic
- def good_exchange(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- user_id = request.POST.get('user_id', '')
- good_id = request.POST.get('good_id', '')
- good_ids = get_query_value(request, 'good_ids', val_cast_type='listjson')
- 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)
- if good_id:
- good_ids.append(good_id)
- goods = []
- for good_id in good_ids:
- try:
- good = GoodsInfo.objects.select_for_update().get(good_id=good_id)
- except GoodsInfo.DoesNotExist:
- return response(MemberGoodStatusCode.GOOD_NOT_FOUND)
- if good.left_num <= 0:
- return response(MemberGoodStatusCode.GOOD_STOCK_NOT_ENOUGH)
- if user.level < good.minlevel:
- return response(MemberGoodStatusCode.GOOD_NO_EXCHANGE_PERMISSION)
- if user.integral < good.integral:
- return response(MemberGoodStatusCode.GOOD_INTEGRAL_NOT_ENOUGH)
-
- if good.only_once and GoodsOrderInfo.objects.filter(user_id=user_id, good_id=good_id, status=True).exists():
- return response(MemberGoodStatusCode.GOOD_EXCHANGE_ONLY_ONCE)
- if good.good_type == GoodsInfo.PHYSICAL and address == '':
- return response(MemberGoodStatusCode.GOOD_NO_ADDRESS)
- user.integral -= good.integral
- user.save()
- good.left_num -= 1
- good.save()
- GoodsOrderInfo.objects.create(
- user_id=user_id,
- good_id=good_id,
- good_type=good.good_type,
- title=good.title,
- relate_good_title=good.relate_good_title,
- name=name,
- phone=phone,
- address=address,
- integral=good.integral,
- )
- if good.good_type == GoodsInfo.PHYSICAL:
-
- pass
- else:
-
- if good.coupon_id:
-
- r.rpushjson(MEMBER_SEND_COUPON_LIST, {
- 'brand_id': brand_id,
- 'user_id': user_id,
- 'coupon_id': good.coupon_id,
- })
- else:
- pass
- goods.append(good.data(user_id))
- return response(data={
- 'nickname': user.final_nickname,
- 'avatar': user.final_avatar,
- 'integral': user.integral,
- 'freeze_integral': user.freeze_integral,
- 'final_integral': user.final_integral,
- 'shots_num': user.shots_num,
- 'level': user.level,
- 'goods': goods,
- })
- @logit
- def coupons(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- user_id = request.POST.get('user_id', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- coupons = UserCouponInfo.objects.filter(user_id=user_id, status=True).order_by('-pk')
- coupons, left = pagination(coupons, page, num)
- coupons = [coupon.data for coupon in coupons]
- return response(data={
- 'coupons': coupons,
- 'left': left,
- })
- @logit
- def user_coupon_detail(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- user_coupon_id = request.POST.get('user_coupon_id', '')
- try:
- coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id, status=True)
- except UserCouponInfo.DoesNotExist:
- return response(MemberCouponStatusCode.USER_COUPON_NOT_FOUND)
- return response(data=coupon.data)
- @logit
- @transaction.atomic
- def user_coupon_use(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- admin_id = request.POST.get('admin_id', '')
- user_coupon_id = request.POST.get('user_coupon_id', '')
- try:
- coupon = UserCouponInfo.objects.select_for_update().get(user_coupon_id=user_coupon_id, status=True)
- except UserCouponInfo.DoesNotExist:
- return response(MemberCouponStatusCode.USER_COUPON_NOT_FOUND)
- if not coupon.has_actived:
- return response(MemberCouponStatusCode.USER_COUPON_NOT_ACTIVED)
- if coupon.has_expired:
- return response(MemberCouponStatusCode.USER_COUPON_HAS_EXPIRED)
- if coupon.has_used:
- return response(MemberCouponStatusCode.USER_COUPON_HAS_USED)
- coupon.has_used = True
- coupon.admin_id = admin_id
- coupon.used_at = tc.utc_datetime()
- coupon.save()
- return response(data=coupon.data)
- @logit
- def integrals(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- return response(data={
- 'shots_types': get_member_shot_data(),
- 'enable_photo_upvote_integral': True,
- 'mp_url': 'https://mp.weixin.qq.com/s/2K6PAnf3KrxtrP40-DBuww',
- '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') or settings.KODO_DEFAULT_BRAND_ID
- user_id = request.POST.get('user_id', '')
- raw_activitys = MemberActivityInfo.objects.filter(activity_state=1, status=True).order_by('-date')
- banners = []
- activitys = []
- for act in raw_activitys:
- if act.is_slider:
- banners.append(act.data(user_id))
- else:
- activitys.append(act.data(user_id))
- return response(data={
- 'banners': banners,
- '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', '')
- avatar = request.POST.get('avatar', '')
- 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,
- 'avatar': avatar,
- 'phone': phone,
- })
- MemberActivityContributionInfo.objects.filter(user_id=user_id, activity_id=activity_id).update(user_name=name, user_avatar=avatar)
-
-
- return response(data={
- 'activity': act.data(user_id),
- })
- @logit
- def activity_signup_info(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()
- try:
- contribution = MemberActivityContributionInfo.objects.get(user_id=user_id, activity_id=activity_id, content_type=0, status=True)
- except MemberActivityContributionInfo.DoesNotExist:
- return response(MemberActivityContributionStatusCode.ACTIVITY_CONTRIBUTION_NOT_FOUND)
- return response(data={
- 'signup_info': signup_info.data,
- 'contribution': 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)
- MemberActivitySigninInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
- 'title': act.title,
- })
- user.integral += act.integral
- user.save()
-
- return response(data={
- 'activity': act.data(user_id),
- })
- def get_group_share_info_integral(activity_id, share_user_id, open_gid, group_share_integral, group_share_max_integral):
-
- if open_gid:
- has_integral = MemberActivityGroupShareInfo.objects.filter(activity_id=activity_id, share_user_id=share_user_id, open_gid=open_gid, is_integral=True).exists()
- else:
- has_integral = MemberActivityGroupShareInfo.objects.filter(activity_id=activity_id, share_user_id=share_user_id, is_integral=True).exists()
- if has_integral:
- return False, 0
-
- total_integral = MemberActivityGroupShareInfo.objects.filter(activity_id=activity_id, share_user_id=share_user_id).aggregate(Sum('integral')).get('integral__sum', 0) or 0
- if total_integral + group_share_integral > group_share_max_integral:
- return False, 0
- return True, group_share_integral
- @logit
- @transaction.atomic
- def activity_group_share(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- share_user_id = request.POST.get('share_user_id', '')
- click_user_id = request.POST.get('click_user_id', '')
- activity_id = request.POST.get('activity_id', '')
- iv = request.POST.get('iv', '')
- encryptedData = request.POST.get('encryptedData', '')
- open_gid = None
- if iv and encryptedData:
- wxcfg = WECHAT.get('MINIAPP', {})
- appid = wxcfg.get('appID')
- secret = wxcfg.get('appsecret')
-
-
-
- shareinfo = get_shareinfo(appid=appid, secret=secret, unid=click_user_id, session_key=None, encryptedData=encryptedData, iv=iv, storage=RedisStorage(r))
- open_gid = shareinfo.get('openGId')
- if not open_gid:
- return response()
- try:
- user = UserInfo.objects.select_for_update().get(user_id=share_user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- try:
- act = MemberActivityInfo.objects.select_for_update().get(activity_id=activity_id, status=True)
- except MemberActivityInfo.DoesNotExist:
- return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)
- isOffline = act.activity_state != 1 or act.final_state == '已结束'
-
- is_integral, integral = get_group_share_info_integral(act.activity_id, share_user_id, open_gid, act.group_share_integral, act.group_share_max_integral)
-
- if is_integral:
- MemberActivityGroupShareInfo.objects.create(**{
- 'brand_id': act.brand_id,
- 'brand_name': act.brand_name,
- 'share_user_id': share_user_id,
- 'click_user_id': click_user_id,
- 'open_gid': open_gid,
- 'activity_id': activity_id,
- 'title': act.title,
- 'is_integral': is_integral,
- 'integral': 0 if isOffline else integral,
- })
- if not isOffline:
- user.integral += integral
- user.save()
- if isOffline:
- return response(400002, 'Activity has been offline', '会员活动已下线')
- return response()
- @logit
- def activity_contribute(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', '')
- 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', '')
-
- try:
- UserInfo.objects.get(user_id=user_id)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- try:
- signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
- except MemberActivitySignupInfo.DoesNotExist:
- signup_info = None
- contribution = MemberActivityContributionInfo.objects.create(
- brand_id=brand_id,
- user_id=user_id,
- activity_id=activity_id,
- content_type=content_type,
- 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 '',
- )
- 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', '')
- 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', '')
-
- try:
- UserInfo.objects.get(user_id=user_id)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- try:
- signup_info = MemberActivitySignupInfo.objects.get(user_id=user_id, activity_id=activity_id, status=True)
- 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_welfare_unlocking_list(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- user_id = request.POST.get('user_id', '')
- page = request.POST.get('page', 1)
- num = request.POST.get('num', 20)
- unlockings = MemberActivityContributionWelfareUnlockingInfo.objects.filter(user_id=user_id, is_handled=False, status=True).order_by('-pk')
- unlockings, left = pagination(unlockings, page, num)
- unlockings = [unlocking.data for unlocking in unlockings]
- return response(data={
- 'unlockings': unlockings,
- 'left': left,
- })
- @logit
- def activity_contribute_welfare_unlocking_detail(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- unlocking_id = request.POST.get('unlocking_id', '')
- user_id = request.POST.get('user_id', '')
- try:
- unlocking = MemberActivityContributionWelfareUnlockingInfo.objects.get(unlocking_id=unlocking_id, status=True)
- except MemberActivityContributionWelfareUnlockingInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_NOT_FOUND)
- if user_id != unlocking.user_id:
- return response(PermissionStatusCode.PERMISSION_DENIED)
- return response(data=unlocking.data)
- @logit
- @transaction.atomic
- def activity_contribute_welfare_unlocking_update(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- unlocking_id = request.POST.get('unlocking_id', '')
- user_id = request.POST.get('user_id', '')
- name = request.POST.get('name', '')
- phone = request.POST.get('phone', '')
- address = request.POST.get('address', '')
- try:
- unlocking = MemberActivityContributionWelfareUnlockingInfo.objects.select_for_update().get(unlocking_id=unlocking_id, status=True)
- except MemberActivityContributionWelfareUnlockingInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_NOT_FOUND)
- if user_id != unlocking.user_id:
- return response(PermissionStatusCode.PERMISSION_DENIED)
- if name:
- unlocking.name = name
- if phone:
- unlocking.phone = phone
- if address:
- unlocking.address = address
- unlocking.is_handled = True
- unlocking.save()
- return response(200, 'Update Member Activity Contribute Welfare Unblocking Success', u'更新会员活动投稿福利解锁成功')
- @logit
- @transaction.atomic
- def activity_contribute_welfare_unlocking_handled(request):
- brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
- unlocking_id = request.POST.get('unlocking_id', '')
- user_id = request.POST.get('user_id', '')
- try:
- unlocking = MemberActivityContributionWelfareUnlockingInfo.objects.select_for_update().get(unlocking_id=unlocking_id, status=True)
- except MemberActivityContributionWelfareUnlockingInfo.DoesNotExist:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_NOT_FOUND)
- if unlocking.is_handled:
- return response(MemberActivityContributionWelfareUnblockingStatusCode.ACTIVITY_CONTRIBUTION_WELFARE_UNBLOCKING_HAS_HANDLED)
- if user_id != unlocking.user_id:
- return response(PermissionStatusCode.PERMISSION_DENIED)
- unlocking.is_handled = True
- unlocking.save()
- if unlocking.welfare_type == MemberActivityContributionWelfareUnlockingInfo.WELFARE_INTEGRAL:
- try:
- user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- user.integral += unlocking.welfare_value
- user.save()
- UserIntegralIncomeExpensesInfo.objects.create(
- brand_id=brand_id,
- user_id=user_id,
- integral_from=UserIntegralIncomeExpensesInfo.MEMBER_ACTIVITY_CONTRIBUTION_WELFARE,
- integral=unlocking.welfare_value,
- final_integral=user.integral,
- remark=unlocking.id,
- )
- return response(200, 'Update Member Activity Contribute Welfare Unblocking Success', u'处理会员活动投稿福利解锁成功')
|