+ group_user.name = name
+ group_user.phone = phone
+ group_user.relative_person = relative_person
+ group_user.remark = remark
+ group_user.save()
+
+ # Redis 群组用户数据缓存
+ group_users = set_group_users_info(group)
+
+ return response(200, 'Update Group Success', u'群组更新成功', {
+ 'group_id': group_id,
+ 'group': group.data,
+ 'users': group_users,
+ })
+
+
+@logit
+def tgu_group_user_locations_api(request):
+ """
+ 导游团所有用户位置信息
+ :param request:
+ :return:
+ """
+ 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)
+
+ return response(200, 'Get Tour Guide Group All User Location Success', u'获取导游团用户地理位置信息成功', {
+ 'group_id': group_id,
+ 'locations': r.georadius(TOUR_GUIDE_GROUP_GEO_INFO % group_id, 0, 0, '+inf', unit='m', withdist=True, withcoord=True, sort='ASC')
+ # 'locations': [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)]]
+ })
+
+
+@logit
+def tgu_group_user_location_api(request):
+ """
+ 导游团单个用户位置信息
+ :param request:
+ :return:
+ """
+ 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]
+ })
@@ -46,6 +46,7 @@ INSTALLED_APPS = ( |
||
| 46 | 46 |
'django_q', |
| 47 | 47 |
'api', |
| 48 | 48 |
'account', |
| 49 |
+ 'geo', |
|
| 49 | 50 |
'group', |
| 50 | 51 |
'message', |
| 51 | 52 |
'operation', |
@@ -54,26 +54,34 @@ class PhotoStatusCode(BaseStatusCode): |
||
| 54 | 54 |
|
| 55 | 55 |
|
| 56 | 56 |
class GroupStatusCode(BaseStatusCode): |
| 57 |
- """ 群组相关错误码 4020xx """ |
|
| 57 |
+ """ 群组/团相关错误码 4020xx """ |
|
| 58 | 58 |
GROUP_NOT_FOUND = StatusCodeField(402001, u'Group Not Found', description=u'群组不存在') |
| 59 | 59 |
GROUP_HAS_LOCKED = StatusCodeField(402002, u'Group Has Locked', description=u'群组已锁定') |
| 60 | 60 |
NOT_GROUP_ADMIN = StatusCodeField(402003, u'Not Group Admin', description=u'非群组管理员') |
| 61 |
- NO_UPDATE_PERMISSION = StatusCodeField(402004, u'No Update Permission', description=u'没有更新权限') |
|
| 62 |
- NO_LOCK_PERMISSION = StatusCodeField(402005, u'No Lock Permission', description=u'没有锁定权限') |
|
| 63 |
- NO_UNLOCK_PERMISSION = StatusCodeField(402006, u'No Unlock Permission', description=u'没有解锁权限') |
|
| 64 |
- NO_REMOVE_PERMISSION = StatusCodeField(402007, u'No Remove Permission', description=u'没有移除权限') |
|
| 65 |
- NO_QUIT_PERMISSION = StatusCodeField(402008, u'No Quit Permission', description=u'没有退出权限') |
|
| 66 |
- NO_PASS_PERMISSION = StatusCodeField(402009, u'No Pass Permission', description=u'没有通过权限') |
|
| 67 |
- NO_REFUSE_PERMISSION = StatusCodeField(402010, u'No Refuse Permission', description=u'没有拒绝权限') |
|
| 68 |
- DUPLICATE_JOIN_REQUEST = StatusCodeField(402011, u'Duplicate Join Request', description=u'重复加群申请') |
|
| 69 |
- JOIN_REQUEST_NOT_FOUND = StatusCodeField(402012, u'Join Request Not Found', description=u'加群申请不存在') |
|
| 61 |
+ |
|
| 62 |
+ NO_UPDATE_PERMISSION = StatusCodeField(402010, u'No Update Permission', description=u'没有更新权限') |
|
| 63 |
+ NO_LOCK_PERMISSION = StatusCodeField(402011, u'No Lock Permission', description=u'没有锁定权限') |
|
| 64 |
+ NO_UNLOCK_PERMISSION = StatusCodeField(402012, u'No Unlock Permission', description=u'没有解锁权限') |
|
| 65 |
+ NO_REMOVE_PERMISSION = StatusCodeField(402013, u'No Remove Permission', description=u'没有移除权限') |
|
| 66 |
+ NO_QUIT_PERMISSION = StatusCodeField(402014, u'No Quit Permission', description=u'没有退出权限') |
|
| 67 |
+ NO_PASS_PERMISSION = StatusCodeField(402015, u'No Pass Permission', description=u'没有通过权限') |
|
| 68 |
+ NO_REFUSE_PERMISSION = StatusCodeField(402016, u'No Refuse Permission', description=u'没有拒绝权限') |
|
| 69 |
+ NO_CLOSE_PERMISSION = StatusCodeField(402017, u'No Close Permission', description=u'没有关闭权限') |
|
| 70 |
+ NO_LOCATION_PERMISSION = StatusCodeField(402018, u'No Location Permission', description=u'没有地理位置权限') |
|
| 71 |
+ |
|
| 72 |
+ DUPLICATE_JOIN_REQUEST = StatusCodeField(402020, u'Duplicate Join Request', description=u'重复加群申请') |
|
| 73 |
+ JOIN_REQUEST_NOT_FOUND = StatusCodeField(402021, u'Join Request Not Found', description=u'加群申请不存在') |
|
| 74 |
+ |
|
| 75 |
+ COULD_HAVE_ONLY_ONE_ACTIVE_GROUP = StatusCodeField(402030, u'Could Have Only One Active Group', description=u'只能创建一个活跃团') |
|
| 70 | 76 |
|
| 71 | 77 |
|
| 72 | 78 |
class GroupUserStatusCode(BaseStatusCode): |
| 73 |
- """ 群组用户相关错误码 4021xx """ |
|
| 79 |
+ """ 群组/团用户相关错误码 4021xx """ |
|
| 74 | 80 |
GROUP_USER_NOT_FOUND = StatusCodeField(402101, u'Group User Not Found', description=u'群组用户不存在') |
| 75 | 81 |
GROUP_USER_HAS_DELETED = StatusCodeField(402102, u'Group User Has Deleted', description=u'群组用户被移除') |
| 76 | 82 |
|
| 83 |
+ USER_HAS_NOT_JOIN_GROUP = StatusCodeField(402131, u'User Has Not Join Group', description=u'用户未加入导游团') |
|
| 84 |
+ |
|
| 77 | 85 |
|
| 78 | 86 |
class GroupPhotoStatusCode(BaseStatusCode): |
| 79 | 87 |
""" 群组照片(飞图)相关错误码 4022xx """ |
@@ -6,6 +6,14 @@ UUID_LIST = 'uuid:list' # List, 唯一标识列表 |
||
| 6 | 6 |
# 用户相关 |
| 7 | 7 |
PROFILE_INFO = 'profile:info:%s' # STRING,用户信息,user_id |
| 8 | 8 |
|
| 9 |
+# 导游相关 |
|
| 10 |
+TOUR_GUIDE_GROUP_GEO_INFO = 'tour:guide:group:geo:info:%s' # ZSET,旅游团地理位置信息,group_id |
|
| 11 |
+TOUR_GUIDE_GROUP_CUR_SESSION = 'tour:guide:group:cur:session:%s' # STRING,旅游团当前Session,group_id,导游设置集合时间的时候更新 |
|
| 12 |
+TOUR_GUIDE_GROUP_USER_GEO_LIST = 'tour:guide:group:user:geo:list:%s:%s:%s' # LIST,旅游团当前用户地理位置列表,group_id、session_id、user_id |
|
| 13 |
+ |
|
| 14 |
+TOUR_GUIDE_GROUP_USER_OWN = 'tour:guide:group:user:own:%s' # STRING,导游当前拥有的导游团,user_id,导游创建导游团的时候更新 |
|
| 15 |
+TOUR_GUIDE_GROUP_USER_BELONG = 'tour:guide:group:user:belong:%s' # STRING,用户当前所属导游团,user_id,用户加入导游团的时候更新 |
|
| 16 |
+ |
|
| 9 | 17 |
# 群组相关 |
| 10 | 18 |
GROUP_INFO = 'group:info:%s' # STRING,群组信息,group_id |
| 11 | 19 |
|
@@ -0,0 +1,21 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from django.conf import settings |
|
| 4 |
+ |
|
| 5 |
+from utils.redis.rkeys import TOUR_GUIDE_GROUP_USER_OWN |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+r = settings.REDIS_CACHE |
|
| 9 |
+ |
|
| 10 |
+ |
|
| 11 |
+# 导游相关 |
|
| 12 |
+ |
|
| 13 |
+ |
|
| 14 |
+def set_tour_guide_own_group(user_id, group_id): |
|
| 15 |
+ """ 设置导游拥有的导游团 """ |
|
| 16 |
+ r.set(TOUR_GUIDE_GROUP_USER_OWN % user_id, group_id) |
|
| 17 |
+ |
|
| 18 |
+ |
|
| 19 |
+def get_tour_guide_own_group(user_id): |
|
| 20 |
+ """ 获取导游拥有的导游团 """ |
|
| 21 |
+ return r.get(TOUR_GUIDE_GROUP_USER_OWN % user_id) |