Add geo submit flag for api tgu_group_user_locations_api

Brightcells 8 年之前
父节点
当前提交
4f1aa7665d
共有 1 个文件被更改,包括 19 次插入2 次删除
  1. 19 2
      group/tourguidegroupuser_views.py

+ 19 - 2
group/tourguidegroupuser_views.py

@@ -17,7 +17,8 @@ from utils.group_photo_utils import get_current_photos
17 17
 from utils.redis.rgroup import get_group_info, get_group_users_info, get_group_users_kv_info, set_group_users_info
18 18
 from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET,
19 19
                                GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET, TOUR_GUIDE_GROUP_CUR_GATHER_INFO,
20
-                               TOUR_GUIDE_GROUP_CUR_SESSION, TOUR_GUIDE_GROUP_GEO_INFO, TOUR_GUIDE_GROUP_USER_GEO_LIST)
20
+                               TOUR_GUIDE_GROUP_CUR_SESSION, TOUR_GUIDE_GROUP_GEO_INFO, TOUR_GUIDE_GROUP_GEO_SUBMIT_DT,
21
+                               TOUR_GUIDE_GROUP_USER_GEO_LIST)
21 22
 from utils.redis.rtourguide import get_tour_guide_own_group
22 23
 from utils.redis.rtouruser import set_tour_user_belong_group
23 24
 
@@ -217,6 +218,18 @@ def tgu_group_user_update_api(request):
217 218
     })
218 219
 
219 220
 
221
+def get_geo_submit_flag(geo_at, gather_at):
222
+    """ 是否上传过位置字段(即是否失联) """
223
+    if geo_at and gather_at:
224
+        current_dt = tc.utc_datetime()
225
+        delta_seconds = tc.total_seconds(gather_at - current_dt)
226
+        # 距离集合时间超过30分钟是5分钟,15分钟到30分钟是3分钟,15分钟以内是1分钟
227
+        for delta, gdt in [(1800, 300), (900, 180), (0, 60)]:
228
+            if delta_seconds > delta:
229
+                return tc.total_seconds(current_dt - geo_at) <= gdt
230
+    return False
231
+
232
+
220 233
 @logit
221 234
 def tgu_group_user_locations_api(request):
222 235
     """ 旅行团所有成员位置信息 """
@@ -230,6 +243,9 @@ def tgu_group_user_locations_api(request):
230 243
     # 获取集合经纬度
231 244
     gather_info = json.loads(r.get(TOUR_GUIDE_GROUP_CUR_GATHER_INFO % group_id) or '{}')
232 245
 
246
+    # GEO submit dts
247
+    geo_dts = r.hgetall(TOUR_GUIDE_GROUP_GEO_SUBMIT_DT % group_id)
248
+
233 249
     # [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)], []]
234 250
     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')
235 251
     # [{'lon': 2.68220901489e-06, 'lat': 26736058093e-06, 'dist': 0.33, etc...}, {}]
@@ -238,7 +254,8 @@ def tgu_group_user_locations_api(request):
238 254
     locations = [dict(group_users_kv_info[loc[0]], **{
239 255
         'lon': loc[2][0],
240 256
         'lat': loc[2][1],
241
-        'dist': loc[1]
257
+        'dist': loc[1],
258
+        'geo_submited': get_geo_submit_flag(tc.utc_string_to_utc_datetime(geo_dts.get(loc[0], '')), gather_info.get('gather_at', '')),
242 259
     }) for loc in locations]
243 260
 
244 261
     return response(200, 'Get Tour Guide Group All User Location Success', u'获取旅行团成员地理位置信息成功', {