135
+        'group_id': group_id,
136
+        'group': group.data,
137
+        'users': group_users,
138
+    })
139
+
140
+
141
+@logit
142
+def tgu_group_user_locations_api(request):
143
+    """
144
+    导游团所有用户位置信息
145
+    :param request:
146
+    :return:
147
+    """
148
+    group_id = request.POST.get('group_id', '')
149
+    admin_id = request.POST.get('admin_id', '')  # 导游唯一标识
150
+
151
+    # 权限校验
152
+    if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists():
153
+        return response(GroupStatusCode.NO_LOCATION_PERMISSION)
154
+
155
+    return response(200, 'Get Tour Guide Group All User Location Success', u'获取导游团用户地理位置信息成功', {
156
+        'group_id': group_id,
157
+        'locations': r.georadius(TOUR_GUIDE_GROUP_GEO_INFO % group_id, 0, 0, '+inf', unit='m', withdist=True, withcoord=True, sort='ASC')
158
+        # 'locations': [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)]]
159
+    })
160
+
161
+
162
+@logit
163
+def tgu_group_user_location_api(request):
164
+    """
165
+    导游团单个用户位置信息
166
+    :param request:
167
+    :return:
168
+    """
169
+    group_id = request.POST.get('group_id', '')
170
+    admin_id = request.POST.get('admin_id', '')  # 导游唯一标识
171
+    user_id = request.POST.get('user_id', '')
172
+
173
+    # 权限校验
174
+    if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists():
175
+        return response(GroupStatusCode.NO_LOCATION_PERMISSION)
176
+
177
+    session_id = r.get(TOUR_GUIDE_GROUP_CUR_SESSION % group_id)
178
+    locations = r.lrange(TOUR_GUIDE_GROUP_USER_GEO_LIST % (group_id, session_id, user_id), 0, -1)
179
+
180
+    return response(200, 'Get Tour Guide Group User Location Success', u'获取导游团用户地理位置信息成功', {
181
+        'group_id': group_id,
182
+        'user_id': user_id,
183
+        'locations': [json.loads(loc) for loc in locations]
184
+    })

+ 1 - 0
pai2/settings.py

@@ -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',

+ 19 - 11
utils/error/errno_utils.py

@@ -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 """

+ 8 - 0
utils/redis/rkeys.py

@@ -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
 

+ 21 - 0
utils/redis/rtourguide.py

@@ -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)

kodo - Gogs: Go Git Service

Sin Descripción

0008_appsettingsinfo.py 1.6KB

    # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ('operation', '0007_auto_20160907_1740'), ] operations = [ migrations.CreateModel( name='APPSettingsInfo', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')), ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)), ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)), ('platform', models.IntegerField(default=0, help_text='\u652f\u6301\u5e73\u53f0', db_index=True, verbose_name='plat', choices=[(0, '\u5168\u5e73\u53f0'), (1, 'Android'), (2, 'iOS')])), ('channel', models.CharField(help_text='\u6e20\u9053', max_length=255, null=True, verbose_name='channel', blank=True)), ('version', models.CharField(help_text='\u7248\u672c', max_length=255, null=True, verbose_name='version', blank=True)), ('online', models.BooleanField(default=True, help_text='\u662f\u5426\u4e0a\u7ebf', verbose_name='online')), ], options={ 'verbose_name': 'appsettingsinfo', 'verbose_name_plural': 'appsettingsinfo', }, ), ]