ss="item " data-url="/Pai2/pai2/src/tamron">tamron
  • group_photo_utils.py 1.1KB

      # -*- coding: utf-8 -*- import itertools from group.models import GroupPhotoInfo def get_current_photos(group_id, user_id, current_id, request=None): # 获取从 current_id 到 now 的群组照片列表 group_photos = GroupPhotoInfo.objects.filter( group_id=group_id, status=True, pk__gt=current_id, ) # 最新照片 group_tmp_photos = group_photos.order_by( '-pk', ) latest_photo = group_tmp_photos.first() # 照片按照 session_id 分组 # TODO: How to order by session_id and session_id's created time # group_photos = group_photos.order_by( # '-session_id', # '-pk', # ) group_photos = group_photos.order_by( '-pk', ) if request and request.weixin: group_photos = group_photos[:30] group_photos = map(lambda x: {'session_id': x[0], 'photos': [y.photo_info(user_id) for y in x[1]]}, itertools.groupby(group_photos, lambda x: x.session_id)) return { 'current_id': latest_photo and latest_photo.pk or current_id, 'photos': group_photos, }
    kodo - Gogs: Go Git Service

    No Description

    tourguidegroupuser_views.py 9.9KB

      # -*- coding: utf-8 -*- from __future__ import division import json from django.conf import settings from django.db import transaction from logit import logit from TimeConvert import TimeConvert as tc from account.models import UserInfo from group.models import GroupInfo, GroupUserInfo from utils.error.errno_utils import GroupStatusCode, GroupUserStatusCode, UserStatusCode from utils.error.response_utils import response from utils.group_photo_utils import get_current_photos from utils.redis.rgroup import get_group_info, get_group_users_info, get_group_users_kv_info, set_group_users_info from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET, GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET, TOUR_GUIDE_GROUP_CUR_GATHER_INFO, TOUR_GUIDE_GROUP_CUR_SESSION, TOUR_GUIDE_GROUP_GEO_INFO, TOUR_GUIDE_GROUP_USER_GEO_LIST) from utils.redis.rtourguide import get_tour_guide_own_group from utils.redis.rtouruser import set_tour_user_belong_group r = settings.REDIS_CACHE @logit(res=settings.LOGIT_RES_FLAG) def tgu_group_user_join_api(request): """ 旅行团成员加团 """ admin_id = request.POST.get('admin_id', '') # 导游唯一标识,识别二维码获取 user_id = request.POST.get('user_id', '') nickname = request.POST.get('nickname', '') name = request.POST.get('name', '') phone = request.POST.get('phone', '') relative_persons = int(request.POST.get('relative_persons', 1)) authority = bool(int(request.POST.get('authority', 1))) remark = request.POST.get('remark', '') # 获取旅行团唯一标识 group_id = get_tour_guide_own_group(admin_id) # 用户校验 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) # 群组校验 try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 群组锁定校验 if group.group_lock: return response(GroupStatusCode.GROUP_HAS_LOCKED) # 群组用户记录创建,若记录不存在,则创建,若记录已存在,则更新 group_user, created = GroupUserInfo.objects.get_or_create( group_id=group_id, user_id=user_id, defaults={ 'name': name, 'phone': phone, 'relative_persons': relative_persons, 'authority': authority, 'remark': remark, } ) if not created: group_user.name = name group_user.phone = phone group_user.relative_persons = relative_persons group_user.authority = authority group_user.remark = remark group_user.save() if group_user.user_status != GroupUserInfo.PASSED: group_user.current_id = int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1) group_user.nickname = nickname or user.final_nickname group_user.avatar = user.avatar # group_user.admin = False # Admin Field Default False, Should Not Assign group_user.user_status = GroupUserInfo.PASSED group_user.passed_at = tc.utc_datetime() group_user.save() # Redis 群组用户数据缓存 set_group_users_info(group) # Redis 群组通过集合缓存 r.srem(GROUP_USERS_REFUSED_SET % group_id, user_id) r.srem(GROUP_USERS_DELETED_SET % group_id, user_id) r.srem(GROUP_USERS_QUIT_SET % group_id, user_id) r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id) curinfo = get_current_photos(group_id, user_id, group_user.current_id) # 添加默认地理位置信息 r.geoadd(TOUR_GUIDE_GROUP_GEO_INFO % group_id, 0, 0, user_id) # 设置旅行团成员所属的旅行团 set_tour_user_belong_group(user_id, group_id) return response(200, 'Tour Guide User Join Success', u'旅行团成员加团成功', { 'current_id': curinfo.get('current_id', ''), 'photos': curinfo.get('photos', ''), 'group_id': group_id, 'group': get_group_info(group_id), 'user_id': user_id, 'users': get_group_users_info(group_id, user_id), }) @logit def tgu_group_user_remove_api(request): """ 旅行团成员移除,管理员主动,团成员被动 """ group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') # 导游唯一标识 user_id = request.POST.get('user_id', '') # 群组校验 try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 权限校验 if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists() or admin_id == user_id: # 管理员也不允许将自己移除 return response(GroupStatusCode.NO_UPDATE_PERMISSION) # 群组用户校验 try: group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, status=True) except GroupUserInfo.DoesNotExist: return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND) # 群组用户移除 group_user.user_status = GroupUserInfo.DELETED group_user.deleted_at = tc.utc_datetime() group_user.save() # Redis 群组数据缓存更新 group_users = set_group_users_info(group) # Redis 群组删除集合缓存 r.srem(GROUP_USERS_PASSED_SET % group_id, user_id) r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id) # 移除地理位置信息 r.georem(TOUR_GUIDE_GROUP_GEO_INFO % group_id, user_id) return response(200, 'Tour Guide User Remove Success', u'旅行团成员移除成功', { 'group_id': group_id, 'users': group_users, }) @logit @transaction.atomic def tgu_group_user_update_api(request): """ 旅行团成员信息更新 """ group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') # 导游唯一标识 user_id = request.POST.get('user_id', '') name = request.POST.get('name', '') phone = request.POST.get('phone', '') relative_persons = int(request.POST.get('relative_persons', 0)) authority = bool(int(request.POST.get('authority', 0))) remark = request.POST.get('remark', '') # 群组校验 try: group = GroupInfo.objects.get(group_id=group_id) except GroupInfo.DoesNotExist: return response(GroupStatusCode.GROUP_NOT_FOUND) # 权限校验 if admin_id: if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists(): return response(GroupStatusCode.NO_UPDATE_PERMISSION) else: if not GroupUserInfo.objects.filter(group_id=group_id, user_id=user_id, status=True).exists(): return response(GroupStatusCode.NO_UPDATE_PERMISSION) # 权限 try: group_user = GroupUserInfo.objects.select_for_update().get(group_id=group_id, user_id=user_id, status=True) except GroupUserInfo.DoesNotExist: return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND) # 用户信息更新 # TODO: Whether sync name and phone to UserInfo or not? if name: group_user.name = name if phone: group_user.phone = phone if relative_persons: # TODO & UNDO: Should check not gt GroupInfo.total_persons & App remind group_user.relative_persons = relative_persons if authority: group_user.authority = authority if remark: group_user.remark = remark group_user.save() # Redis 群组用户数据缓存 group_users = set_group_users_info(group) return response(200, 'Tour Guide User Update Success', u'旅行团成员信息更新成功', { 'group_id': group_id, 'group': group.data, 'users': group_users, }) @logit def tgu_group_user_locations_api(request): """ 旅行团所有成员位置信息 """ group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') # 导游唯一标识 # 权限校验 if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists(): return response(GroupStatusCode.NO_LOCATION_PERMISSION) # 获取集合经纬度 gather_info = json.loads(r.get(TOUR_GUIDE_GROUP_CUR_GATHER_INFO % group_id) or '{}') # [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)], []] locations = r.georadius(TOUR_GUIDE_GROUP_GEO_INFO % group_id, gather_info.get('gather_lon', 0), gather_info.get('gather_lat', 0), '+inf', unit='m', withdist=True, withcoord=True, sort='ASC') # [{'lon': 2.68220901489e-06, 'lat': 26736058093e-06, 'dist': 0.33, etc...}, {}] # 获取旅行团用户 KV 信息 group_users_kv_info = get_group_users_kv_info(group_id) locations = [dict(group_users_kv_info[loc[0]], **{ 'lon': loc[2][0], 'lat': loc[2][1], 'dist': loc[1] }) for loc in locations] return response(200, 'Get Tour Guide Group All User Location Success', u'获取旅行团成员地理位置信息成功', { 'group_id': group_id, 'locations': locations, }) @logit def tgu_group_user_location_api(request): """ 旅行团单个成员位置信息 """ group_id = request.POST.get('group_id', '') admin_id = request.POST.get('admin_id', '') # 导游唯一标识 user_id = request.POST.get('user_id', '') # 权限校验 if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists(): return response(GroupStatusCode.NO_LOCATION_PERMISSION) session_id = r.get(TOUR_GUIDE_GROUP_CUR_SESSION % group_id) locations = r.lrange(TOUR_GUIDE_GROUP_USER_GEO_LIST % (group_id, session_id, user_id), 0, -1) return response(200, 'Get Tour Guide Group User Location Success', u'获取旅行团成员地理位置信息成功', { 'group_id': group_id, 'user_id': user_id, 'locations': [json.loads(loc) for loc in locations] })
    pai2 - Gogs: Go Git Service

    拍爱

    Brightcells: 42f466c0a5 Change to use django-ip to get client ip 9 ans auparavant
    ..
    migrations 8a213207ea Add tour guide oauth 9 ans auparavant
    __init__.py 4defb80fdc gogs first init 10 ans auparavant
    admin.py 768af5a2ae Add list_filter for UserInfo 9 ans auparavant
    models.py 0a58248c81 Realize tour guide upload photo when auth in FE 9 ans auparavant
    serializers.py f72ccb1875 isort import 10 ans auparavant
    tests.py fabef63211 set line_length=200 for isort 10 ans auparavant
    tourguide_views.py 246a9ff4b8 Change to 'from utils.redis.connect import r' 9 ans auparavant
    views.py 42f466c0a5 Change to use django-ip to get client ip 9 ans auparavant