123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- from __future__ import division
- from curtail_uuid import CurtailUUID
- from django.contrib.auth.hashers import check_password
- from django.db import transaction
- from isoweek import Week
- from logit import logit
- from paginator import pagination
- from TimeConvert import TimeConvert as tc
- from account.models import LensmanInfo, UserIncomeExpensesInfo, UserInfo
- from group.models import GroupInfo, GroupPhotoInfo, GroupPhotoOrderInfo
- from message.models import SystemMessageInfo
- from pay.models import OrderInfo
- from photo.models import PhotosInfo
- from utils.error.errno_utils import LensmanStatusCode, OrderStatusCode, UserStatusCode
- from utils.error.response_utils import response
- from utils.message_utils import system_messages
- from utils.redis.connect import r
- from utils.redis.rbrief import set_brief_info
- from utils.redis.rgroup import set_group_info, set_group_info_by_id
- from utils.redis.rkeys import GROUP_LAST_PHOTO_PK, TODAY_INCOME, TODAY_UPLOAD_PHOTO_AMOUNT, WEEK_INCOME, WEEK_SOLD
- from utils.redis.rlock import upload_lock
- from utils.redis.rorder import set_lensman_order_record
- from utils.redis.rprice import get_lensman_price_fixed, set_lensman_price_fixed
- from utils.redis.rprofile import set_profile_info
- from utils.storage_utils import file_save
- @logit
- def lensman_submit_api(request):
- """ 摄影师信息提交 """
- unionid = request.POST.get('unionid', '')
- openid = request.POST.get('openid', '')
- phone = request.POST.get('phone', '')
- if LensmanInfo.objects.filter(phone=phone).exclude(unionid=unionid).exists():
- return response(LensmanStatusCode.LENSMAN_PHONE_ALREADY_EXISTS)
- fields = {
- 'name': request.POST.get('name', ''),
- 'sex': int(request.POST.get('sex', 1)),
- 'phone': phone,
- 'location': request.POST.get('location', ''),
- 'user_status': LensmanInfo.UNVERIFIED,
- }
- lensman, created = LensmanInfo.objects.get_or_create(unionid=unionid, defaults=fields)
-
- if lensman.user_status not in [LensmanInfo.UNVERIFIED, LensmanInfo.REFUSED]:
- return response(LensmanStatusCode.LENSMAN_ALREADY_NOT_UNVERIFIED)
- if not created:
- for key, value in fields.iteritems():
- setattr(lensman, key, value)
- lensman.save()
- return response(200, 'Submit Success', u'提交成功', {})
- @logit
- def lensman_login_api(request):
- """ 摄影师登录 """
- username = request.POST.get('username', '')
- password = request.POST.get('password', '')
- try:
- lensman = LensmanInfo.objects.get(username=username, status=True)
- except LensmanInfo.DoesNotExist:
- return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
- if not check_password(password, lensman.encryption):
- return response(LensmanStatusCode.LENSMAN_PASSWORD_ERROR)
- try:
- user = UserInfo.objects.get(user_id=lensman.lensman_id, status=True)
- except UserInfo.DoesNotExist:
- return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
- return response(200, 'Login Success', u'登录成功', user.data)
- @logit
- def lensman_wx_authorize_api(request):
- unionid = request.POST.get('unionid', '')
- openid = request.POST.get('openid', '')
- sex = request.POST.get('sex', 0)
- nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '')
- avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '')
- country = request.POST.get('country', '')
- province = request.POST.get('province', '')
- city = request.POST.get('city', '')
- try:
- user = UserInfo.objects.get(unionid=unionid, islensman=True, status=True)
- except UserInfo.DoesNotExist:
- return response(LensmanStatusCode.LENSMAN_NOT_FOUND)
- if user.user_status != UserInfo.ACTIVATED:
- return response(LensmanStatusCode.LENSMAN_NOT_ACTIVATED)
- user.openid = openid
- user.sex = sex
- user.nickname = nickname
- user.avatar = avatar
- user.country = country
- user.province = province
- user.city = city
- user.save()
- set_profile_info(user)
- return response(200, 'Lensman Login Success', u'摄影师登录成功', user.data)
- @logit
- def lensman_price_fix_api(request):
- lensman_id = request.POST.get('user_id', '')
- nomark = request.POST.get('nomark', 299)
- origin = request.POST.get('origin', 999)
-
- try:
- lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)
- except LensmanInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- if 'nomark' in request.POST:
- lensman.nomark = nomark
- if 'origin' in request.POST:
- lensman.origin = origin
- lensman.save()
- set_lensman_price_fixed(lensman_id)
- return response(200, 'Lensman Price Fix Success', u'摄影师定价修改成功')
- @logit
- def lensman_photo_upload_api(request):
- """ 摄影师照片上传 """
- user_id = lensman_id = request.POST.get('user_id', '')
- nickname = request.POST.get('nickname', '')
- group_id = request.POST.get('group_id', '')
- session_id = request.POST.get('session_id', '')
- photo_id = request.POST.get('photo_id', '')
- photo = request.FILES.get('photo', '')
-
- try:
- user = UserInfo.objects.get(user_id=user_id, status=True)
- except UserInfo.DoesNotExist:
- return response(UserStatusCode.USER_NOT_FOUND)
- if not group_id:
-
- group, group_created = GroupInfo.objects.get_or_create(session_id=session_id, group_from=GroupInfo.SESSION_GROUP, defaults={
- 'group_id': CurtailUUID.uuid(GroupInfo, 'group_id'),
- 'admin_id': user_id,
- 'group_name': user.final_nickname,
- 'group_default_avatar': 0,
- })
-
- if group_created:
- set_group_info(group)
- group_id = group.group_id
- if photo and upload_lock(group_id, user_id, photo):
-
- photo_info = file_save(photo, prefix='photo', ext='jpeg', watermark=True, thumbnail=True)
- photo, created = PhotosInfo.objects.get_or_create(
- lensman_id=lensman_id,
- session_id=session_id,
- photo_id=photo_id,
- )
- photo.m_photo_path = photo_info.photo_path
- photo.p_photo_path = photo_info.photo_watermark_path
- photo.save()
-
- price_info = get_lensman_price_fixed(user_id)
-
- group_photo, created = GroupPhotoInfo.objects.get_or_create(
- group_id=group_id,
- user_id=user_id,
- photo_md5=photo_info.photo_md5,
- defaults={
- 'nickname': user.final_nickname,
- 'avatar': user.avatar,
- 'photo_path': photo_info.photo_path,
- 'photo_w': photo_info.photo_w,
- 'photo_h': photo_info.photo_h,
- 'photo_thumbnail_path': photo_info.photo_thumbnail_path,
- 'photo_thumbnail_w': photo_info.photo_thumbnail_w,
- 'photo_thumbnail_h': photo_info.photo_thumbnail_h,
- 'photo_thumbnail2_path': photo_info.photo_thumbnail2_path,
- 'photo_thumbnail2_w': photo_info.photo_thumbnail2_w,
- 'photo_thumbnail2_h': photo_info.photo_thumbnail2_h,
- 'photo_from': GroupPhotoInfo.SESSION_GROUP,
- 'session_id': photo.session_id,
- 'lensman_id': photo.lensman_id,
- 'lensman_photo_id': photo.photo_id,
- 'nomark': price_info.get('nomark', 999),
- 'origin': price_info.get('origin', 999),
- }
- )
- if created:
-
- r.set(GROUP_LAST_PHOTO_PK % group_id, group_photo.pk)
-
- r.incr(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, tc.local_string(format='%Y%m%d')))
-
- set_group_info_by_id(group_id)
- return response(200, 'Lensman Upload Photo Success', u'摄影师照片上传成功', {
- 'group_id': group_id,
- })
- @logit
- @transaction.atomic
- def lensman_origin_photo_upload_api(request):
- order_id = request.POST.get('order_id', '')
- user_id = lensman_id = request.POST.get('user_id', '')
- session_id = request.POST.get('session_id', '')
- photo_id = request.POST.get('photo_id', '')
- deleted = int(request.POST.get('deleted', 0))
- photo = request.FILES.get('photo', '')
- try:
- order = OrderInfo.objects.select_for_update().get(order_id=order_id, pay_status=OrderInfo.PAID)
- except OrderInfo.DoesNotExist:
- return response(OrderStatusCode.WX_ORDER_NOT_FOUND)
-
- if deleted and order.photo_status == OrderInfo.WANTED:
-
- try:
- from_user = UserInfo.objects.select_for_update().get(user_id=order.from_uid)
- except UserInfo.DoesNotExist:
- pass
- if from_user:
-
- from_user.balance += order.total_fee
- from_user.save()
-
- UserIncomeExpensesInfo.objects.create(
- user_id=order.from_uid,
- photo_id=order.photo_id,
- type=UserIncomeExpensesInfo.INCOME,
- amount=order.total_fee,
- balance=from_user.balance,
- freeze_income_amount=0,
- freeze_income_balance=from_user.freeze_income_balance,
- remark=u'高清图购买退款',
- )
-
- try:
- to_user = UserInfo.objects.select_for_update().get(user_id=order.to_uid)
- except UserInfo.DoesNotExist:
- pass
- if to_user:
-
- to_user.freeze_income_balance -= order.total_fee
- to_user.save()
-
- UserIncomeExpensesInfo.objects.create(
- user_id=order.to_uid,
- photo_id=order.photo_id,
- type=UserIncomeExpensesInfo.EXPENSE,
- amount=order.total_fee,
- balance=to_user.balance,
- freeze_income_amount=0,
- freeze_income_balance=to_user.freeze_income_balance,
- remark=u'高清图购买退款',
- )
-
- order.photo_status = OrderInfo.DELETED
- order.reback_status = True
- order.reback_at = tc.utc_datetime()
- order.save()
- if photo and upload_lock(order_id, user_id, photo):
-
- photo_info = file_save(photo, prefix='photo', ext='jpeg')
- PhotosInfo.objects.filter(
- lensman_id=lensman_id,
- session_id=session_id,
- photo_id=photo_id,
- ).update(
- r_photo_path=photo_info.photo_path
- )
- porder, created = GroupPhotoOrderInfo.objects.select_for_update().get_or_create(
- group_id=order.group_id,
- session_id=session_id,
- user_id=order.from_uid,
- photo_id=order.photo_id,
- lensman_photo_id=photo_id,
- )
- porder.r_photo_path = photo_info.photo_path
- porder.save()
- set_lensman_order_record(porder)
-
- try:
- to_user = UserInfo.objects.select_for_update().get(user_id=order.to_uid)
- except UserInfo.DoesNotExist:
- pass
- if to_user:
-
- to_user.balance += order.total_fee
- to_user.freeze_income_balance -= order.total_fee
- to_user.save()
-
- set_brief_info(order.to_uid, order.photo_type, order.total_fee, dt=order.created_at)
-
- UserIncomeExpensesInfo.objects.create(
- user_id=order.to_uid,
- photo_id=order.photo_id,
- type=UserIncomeExpensesInfo.UNFREEZE,
- amount=order.total_fee,
- balance=to_user.balance,
- freeze_income_amount=order.total_fee,
- freeze_income_balance=to_user.freeze_income_balance,
- remark=u'高清图购买退款',
- )
- order.photo_status = OrderInfo.FETCHED
- order.save()
- return response(200, 'Lensman Upload Origin Photo Success', u'摄影师照片高清图上传成功')
- @logit
- def lensman_brief_api(request):
- user_id = request.POST.get('user_id', '')
- ymd = tc.local_string(format='%Y%m%d')
- week = Week.thisweek().isoformat()
-
- origin_week_income = int(r.get(WEEK_INCOME % (user_id, OrderInfo.ORIGIN, week)) or 0)
-
- nomark_today_income = int(r.get(TODAY_INCOME % (user_id, OrderInfo.NOMARK, ymd)) or 0)
-
- today_upload = int(r.get(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, ymd)) or 0)
-
- week_sold = int(r.get(WEEK_SOLD % (user_id, OrderInfo.ORIGIN, ymd)) or 0)
-
- systems = system_messages(user_id, SystemMessageInfo.PAIAI_LENSMAN)
- systems, left = pagination(systems, 1, 10)
- systems = [msg.msg_info(user_id) for msg in systems]
-
- orders = OrderInfo.objects.filter(to_uid=user_id, pay_status=OrderInfo.PAID, status=True).order_by('-pk')
- orders, left = pagination(orders, 1, 10)
- orders = [order.data(user_id) for order in orders]
-
- price_fixed = get_lensman_price_fixed(user_id)
- return response(200, 'Get Lensman Brief Success', u'获取摄影师简报成功', {
- 'origin_week_income': origin_week_income,
- 'nomark_today_income': nomark_today_income,
- 'today_upload': today_upload,
- 'week_sold': week_sold,
- 'messages': {
- 'system': systems,
- 'orders': orders,
- },
- 'price_fixed': price_fixed,
- })
- @logit
- def lensman_origin_wanted_api(request):
- user_id = request.POST.get('user_id', '')
- orders = OrderInfo.objects.filter(
- to_uid=user_id,
- photo_type=OrderInfo.ORIGIN,
- photo_status=OrderInfo.WANTED,
- pay_status=OrderInfo.PAID,
- status=True
- ).order_by('pk')
- wanted = [order.lensdata for order in orders]
- return response(200, 'Get Origin Wanted Success', u'获取需要上传原图成功', {
- 'wanted': wanted
- })
|