@@ -70,22 +70,22 @@ urlpatterns += [  | 
            ||
| 70 | 70 | 
                # url(r'^g/refuse$', group_views.group_refuse_api, name='group_refuse_api'), # 申请拒绝  | 
            
| 71 | 71 | 
                ]  | 
            
| 72 | 72 | 
                 | 
            
| 73 | 
                -# 导游团相关  | 
            |
| 73 | 
                +# 旅行团相关  | 
            |
| 74 | 74 | 
                urlpatterns += [  | 
            
| 75 | 
                - url(r'^tg/create$', tourguidegroup_views.tg_group_create_api, name='tg_group_create_api'), # 导游团创建  | 
            |
| 76 | 
                - url(r'^tg/detail$', tourguidegroup_views.tg_group_detail_api, name='tg_group_detail_api'), # 导游团详情  | 
            |
| 77 | 
                - url(r'^tg/update$', tourguidegroup_views.tg_group_update_api, name='tg_group_update_api'), # 导游团更新  | 
            |
| 78 | 
                - url(r'^tg/close$', tourguidegroup_views.tg_group_close_api, name='tg_group_close_api'), # 导游团关闭  | 
            |
| 79 | 
                - url(r'^tg/gather/start$', tourguidegroup_views.tg_group_gather_start_api, name='tg_group_gather_start_api'), # 导游团设置集合时间和地点  | 
            |
| 80 | 
                - # url(r'^tg/gather/end$', tourguidegroup_views.tg_group_gather_end_api, name='tg_group_gather_end_api'), # 导游团集合结束,清理数据  | 
            |
| 75 | 
                + url(r'^tg/create$', tourguidegroup_views.tg_group_create_api, name='tg_group_create_api'), # 旅行团创建  | 
            |
| 76 | 
                + url(r'^tg/detail$', tourguidegroup_views.tg_group_detail_api, name='tg_group_detail_api'), # 旅行团详情  | 
            |
| 77 | 
                + url(r'^tg/update$', tourguidegroup_views.tg_group_update_api, name='tg_group_update_api'), # 旅行团更新  | 
            |
| 78 | 
                + url(r'^tg/close$', tourguidegroup_views.tg_group_close_api, name='tg_group_close_api'), # 旅行团关闭  | 
            |
| 79 | 
                + url(r'^tg/gather/start$', tourguidegroup_views.tg_group_gather_start_api, name='tg_group_gather_start_api'), # 旅行团设置集合时间和地点  | 
            |
| 80 | 
                + # url(r'^tg/gather/end$', tourguidegroup_views.tg_group_gather_end_api, name='tg_group_gather_end_api'), # 旅行团集合结束,清理数据  | 
            |
| 81 | 81 | 
                ]  | 
            
| 82 | 82 | 
                 | 
            
| 83 | 
                -# 导游团用户相关  | 
            |
| 83 | 
                +# 旅行团用户相关  | 
            |
| 84 | 84 | 
                urlpatterns += [  | 
            
| 85 | 
                - url(r'^tgu/join$', tourguidegroupuser_views.tgu_group_user_join_api, name='tgu_group_user_join_api'), # 导游团用户加群  | 
            |
| 86 | 
                - url(r'^tgu/update$', tourguidegroupuser_views.tgu_group_user_update_api, name='tg_group_update_api'), # 导游团用户更新  | 
            |
| 87 | 
                - url(r'^tgu/locations$', tourguidegroupuser_views.tgu_group_user_locations_api, name='tgu_group_user_locations_api'), # 导游团所有用户位置信息  | 
            |
| 88 | 
                - url(r'^tgu/location$', tourguidegroupuser_views.tgu_group_user_location_api, name='tgu_group_user_location_api'), # 导游团单个用户位置信息  | 
            |
| 85 | 
                + url(r'^tgu/join$', tourguidegroupuser_views.tgu_group_user_join_api, name='tgu_group_user_join_api'), # 旅行团用户加群  | 
            |
| 86 | 
                + url(r'^tgu/update$', tourguidegroupuser_views.tgu_group_user_update_api, name='tg_group_update_api'), # 旅行团用户更新  | 
            |
| 87 | 
                + url(r'^tgu/locations$', tourguidegroupuser_views.tgu_group_user_locations_api, name='tgu_group_user_locations_api'), # 旅行团所有用户位置信息  | 
            |
| 88 | 
                + url(r'^tgu/location$', tourguidegroupuser_views.tgu_group_user_location_api, name='tgu_group_user_location_api'), # 旅行团单个用户位置信息  | 
            |
| 89 | 89 | 
                ]  | 
            
| 90 | 90 | 
                 | 
            
| 91 | 91 | 
                # 飞图相关  | 
            
                @@ -22,7 +22,7 @@ def geo_submit_api(request):  | 
            ||
| 22 | 22 | 
                     longitude = request.POST.get('lon', '')  # 经度
               | 
            
| 23 | 23 | 
                     latitude = request.POST.get('lat', '')  # 纬度
               | 
            
| 24 | 24 | 
                 | 
            
| 25 | 
                - # 获取用户当前所处导游群组  | 
            |
| 25 | 
                + # 获取用户当前所处旅行团  | 
            |
| 26 | 26 | 
                group_id = r.get(TOUR_GUIDE_GROUP_USER_BELONG % user_id)  | 
            
| 27 | 27 | 
                if not group_id:  | 
            
| 28 | 28 | 
                return response(GroupUserStatusCode.USER_HAS_NOT_JOIN_GROUP)  | 
            
                @@ -0,0 +1,54 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +from __future__ import unicode_literals  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +from django.db import models, migrations  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +class Migration(migrations.Migration):  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                + dependencies = [  | 
            |
| 10 | 
                +        ('group', '0024_auto_20161214_1329'),
               | 
            |
| 11 | 
                + ]  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                + operations = [  | 
            |
| 14 | 
                + migrations.AddField(  | 
            |
| 15 | 
                + model_name='groupinfo',  | 
            |
| 16 | 
                + name='name',  | 
            |
| 17 | 
                + field=models.CharField(help_text='\u5bfc\u6e38\u59d3\u540d', max_length=255, null=True, verbose_name='name', blank=True),  | 
            |
| 18 | 
                + ),  | 
            |
| 19 | 
                + migrations.AddField(  | 
            |
| 20 | 
                + model_name='groupinfo',  | 
            |
| 21 | 
                + name='phone',  | 
            |
| 22 | 
                + field=models.CharField(help_text='\u5bfc\u6e38\u7535\u8bdd', max_length=255, null=True, verbose_name='phone', blank=True),  | 
            |
| 23 | 
                + ),  | 
            |
| 24 | 
                + migrations.AlterField(  | 
            |
| 25 | 
                + model_name='groupinfo',  | 
            |
| 26 | 
                + name='ended_at',  | 
            |
| 27 | 
                + field=models.DateTimeField(help_text='\u65c5\u6e38\u56e2\u7ed3\u675f\u65f6\u95f4', null=True, verbose_name='ended_at', blank=True),  | 
            |
| 28 | 
                + ),  | 
            |
| 29 | 
                + migrations.AlterField(  | 
            |
| 30 | 
                + model_name='groupinfo',  | 
            |
| 31 | 
                + name='gather_at',  | 
            |
| 32 | 
                + field=models.DateTimeField(help_text='\u65c5\u6e38\u56e2\u96c6\u5408\u65f6\u95f4', null=True, verbose_name='gather_at', blank=True),  | 
            |
| 33 | 
                + ),  | 
            |
| 34 | 
                + migrations.AlterField(  | 
            |
| 35 | 
                + model_name='groupinfo',  | 
            |
| 36 | 
                + name='gather_lat',  | 
            |
| 37 | 
                + field=models.FloatField(help_text='\u65c5\u6e38\u56e2\u96c6\u5408\u7eac\u5ea6', null=True, verbose_name='gather_lat', blank=True),  | 
            |
| 38 | 
                + ),  | 
            |
| 39 | 
                + migrations.AlterField(  | 
            |
| 40 | 
                + model_name='groupinfo',  | 
            |
| 41 | 
                + name='gather_lon',  | 
            |
| 42 | 
                + field=models.FloatField(help_text='\u65c5\u6e38\u56e2\u96c6\u5408\u7ecf\u5ea6', null=True, verbose_name='gather_lon', blank=True),  | 
            |
| 43 | 
                + ),  | 
            |
| 44 | 
                + migrations.AlterField(  | 
            |
| 45 | 
                + model_name='groupinfo',  | 
            |
| 46 | 
                + name='group_closed',  | 
            |
| 47 | 
                + field=models.BooleanField(default=False, help_text='\u65c5\u6e38\u56e2\u5173\u95ed', verbose_name='group_closed'),  | 
            |
| 48 | 
                + ),  | 
            |
| 49 | 
                + migrations.AlterField(  | 
            |
| 50 | 
                + model_name='groupinfo',  | 
            |
| 51 | 
                + name='started_at',  | 
            |
| 52 | 
                + field=models.DateTimeField(help_text='\u65c5\u6e38\u56e2\u5f00\u59cb\u65f6\u95f4', null=True, verbose_name='started_at', blank=True),  | 
            |
| 53 | 
                + ),  | 
            |
| 54 | 
                + ]  | 
            
                @@ -3,6 +3,7 @@  | 
            ||
| 3 | 3 | 
                from django.conf import settings  | 
            
| 4 | 4 | 
                from django.db import models  | 
            
| 5 | 5 | 
                from django.utils.translation import ugettext_lazy as _  | 
            
| 6 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 6 | 7 | 
                 | 
            
| 7 | 8 | 
                from pai2.basemodels import CreateUpdateMixin  | 
            
| 8 | 9 | 
                from utils.redis.rgroup import get_group_photo_thumbup_flag  | 
            
                @@ -35,13 +36,15 @@ class GroupInfo(CreateUpdateMixin):  | 
            ||
| 35 | 36 | 
                session_id = models.CharField(_(u'session_id'), max_length=255, blank=True, null=True, help_text=u'照片组唯一标识', db_index=True)  | 
            
| 36 | 37 | 
                group_lock = models.BooleanField(_(u'group_lock'), default=False, help_text=u'群组锁定')  | 
            
| 37 | 38 | 
                group_initio = models.BooleanField(_(u'group_initio'), default=False, help_text=u'群组查看照片从头开始')  | 
            
| 38 | 
                - # 导游团  | 
            |
| 39 | 
                - started_at = models.DateTimeField(_(u'started_at'), blank=True, null=True, help_text=_(u'开始时间'))  | 
            |
| 40 | 
                - ended_at = models.DateTimeField(_(u'ended_at'), blank=True, null=True, help_text=_(u'结束时间'))  | 
            |
| 41 | 
                - group_closed = models.BooleanField(_(u'group_closed'), default=False, help_text=u'群组关闭')  | 
            |
| 42 | 
                - gather_at = models.DateTimeField(_(u'gather_at'), blank=True, null=True, help_text=_(u'集合时间'))  | 
            |
| 43 | 
                - gather_lon = models.FloatField(_(u'gather_lon'), blank=True, null=True, help_text=_(u'集合经度'))  | 
            |
| 44 | 
                - gather_lat = models.FloatField(_(u'gather_lat'), blank=True, null=True, help_text=_(u'集合纬度'))  | 
            |
| 39 | 
                + # 旅行团  | 
            |
| 40 | 
                + name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'导游姓名')  | 
            |
| 41 | 
                + phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'导游电话')  | 
            |
| 42 | 
                + started_at = models.DateTimeField(_(u'started_at'), blank=True, null=True, help_text=_(u'旅游团开始时间'))  | 
            |
| 43 | 
                + ended_at = models.DateTimeField(_(u'ended_at'), blank=True, null=True, help_text=_(u'旅游团结束时间'))  | 
            |
| 44 | 
                + group_closed = models.BooleanField(_(u'group_closed'), default=False, help_text=u'旅游团关闭')  | 
            |
| 45 | 
                + gather_at = models.DateTimeField(_(u'gather_at'), blank=True, null=True, help_text=_(u'旅游团集合时间'))  | 
            |
| 46 | 
                + gather_lon = models.FloatField(_(u'gather_lon'), blank=True, null=True, help_text=_(u'旅游团集合经度'))  | 
            |
| 47 | 
                + gather_lat = models.FloatField(_(u'gather_lat'), blank=True, null=True, help_text=_(u'旅游团集合纬度'))  | 
            |
| 45 | 48 | 
                 | 
            
| 46 | 49 | 
                class Meta:  | 
            
| 47 | 50 | 
                verbose_name = _(u'groupinfo')  | 
            
                @@ -66,12 +69,14 @@ class GroupInfo(CreateUpdateMixin):  | 
            ||
| 66 | 69 | 
                'group_from': self.group_from,  | 
            
| 67 | 70 | 
                'group_lock': self.group_lock,  | 
            
| 68 | 71 | 
                'group_initio': self.group_initio,  | 
            
| 69 | 
                - 'started_at': self.started_at.replace(microsecond=0),  | 
            |
| 70 | 
                - 'ended_at': self.ended_at.replace(microsecond=0),  | 
            |
| 71 | 
                - 'gather_at': self.gather_at.replace(microsecond=0),  | 
            |
| 72 | 
                + 'name': self.name,  | 
            |
| 73 | 
                + 'phone': self.phone,  | 
            |
| 74 | 
                + 'started_at': tc.remove_microsecond(self.started_at),  | 
            |
| 75 | 
                + 'ended_at': tc.remove_microsecond(self.ended_at),  | 
            |
| 76 | 
                + 'gather_at': tc.remove_microsecond(self.gather_at),  | 
            |
| 72 | 77 | 
                'gather_lon': self.gather_lon,  | 
            
| 73 | 78 | 
                'gather_lat': self.gather_lat,  | 
            
| 74 | 
                - 'created_at': self.created_at.replace(microsecond=0),  | 
            |
| 79 | 
                + 'created_at': tc.remove_microsecond(self.created_at),  | 
            |
| 75 | 80 | 
                }  | 
            
| 76 | 81 | 
                 | 
            
| 77 | 82 | 
                def users(self, admin=True, user_id=None):  | 
            
                @@ -125,7 +130,7 @@ class GroupUserInfo(CreateUpdateMixin):  | 
            ||
| 125 | 130 | 
                refused_at = models.DateTimeField(_(u'refused_at'), blank=True, null=True, help_text=_(u'拒绝时间'))  | 
            
| 126 | 131 | 
                deleted_at = models.DateTimeField(_(u'deleted_at'), blank=True, null=True, help_text=_(u'删除时间'))  | 
            
| 127 | 132 | 
                quit_at = models.DateTimeField(_(u'quit_at'), blank=True, null=True, help_text=_(u'退出时间'))  | 
            
| 128 | 
                - # 导游团相关  | 
            |
| 133 | 
                + # 旅行团相关  | 
            |
| 129 | 134 | 
                subadmin = models.BooleanField(_(u'subadmin'), default=False, help_text=u'副群组管理员')  | 
            
| 130 | 135 | 
                name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名')  | 
            
| 131 | 136 | 
                phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'用户电话')  | 
            
                @@ -321,7 +326,7 @@ class PhotoCommentInfo(CreateUpdateMixin):  | 
            ||
| 321 | 326 | 
                'avatar': self.avatar,  | 
            
| 322 | 327 | 
                'to_uid': self.to_uid,  | 
            
| 323 | 328 | 
                'comment': self.comment,  | 
            
| 324 | 
                - 'created_at': self.created_at.replace(microsecond=0),  | 
            |
| 329 | 
                + 'created_at': tc.remove_microsecond(self.created_at),  | 
            |
| 325 | 330 | 
                }  | 
            
| 326 | 331 | 
                 | 
            
| 327 | 332 | 
                 | 
            
                @@ -26,7 +26,7 @@ r = settings.REDIS_CACHE  | 
            ||
| 26 | 26 | 
                @logit  | 
            
| 27 | 27 | 
                def tg_group_create_api(request):  | 
            
| 28 | 28 | 
                """  | 
            
| 29 | 
                - 导游团创建  | 
            |
| 29 | 
                + 旅行团创建  | 
            |
| 30 | 30 | 
                :param request:  | 
            
| 31 | 31 | 
                :return:  | 
            
| 32 | 32 | 
                """  | 
            
                @@ -46,7 +46,7 @@ def tg_group_create_api(request):  | 
            ||
| 46 | 46 | 
                if not user.istourguide:  | 
            
| 47 | 47 | 
                return response(GroupStatusCode.NOT_GROUP_ADMIN)  | 
            
| 48 | 48 | 
                 | 
            
| 49 | 
                - # 导游团校验  | 
            |
| 49 | 
                + # 旅行团校验  | 
            |
| 50 | 50 | 
                if GroupInfo.objects.filter(  | 
            
| 51 | 51 | 
                admin_id=user_id,  | 
            
| 52 | 52 | 
                group_closed=False,  | 
            
                @@ -65,6 +65,8 @@ def tg_group_create_api(request):  | 
            ||
| 65 | 65 | 
                group_name=group_name,  | 
            
| 66 | 66 | 
                group_default_avatar=group_default_avatar,  | 
            
| 67 | 67 | 
                group_from=GroupInfo.TOURGUIDE_GROUP,  | 
            
| 68 | 
                + name=user.name,  | 
            |
| 69 | 
                + phone=user.phone,  | 
            |
| 68 | 70 | 
                started_at=started_at,  | 
            
| 69 | 71 | 
                ended_at=ended_at,  | 
            
| 70 | 72 | 
                )  | 
            
                @@ -87,10 +89,10 @@ def tg_group_create_api(request):  | 
            ||
| 87 | 89 | 
                # Redis 群组用户数据缓存  | 
            
| 88 | 90 | 
                group_users = set_group_users_info(group)  | 
            
| 89 | 91 | 
                 | 
            
| 90 | 
                - # Redis 设置导游拥有的导游团  | 
            |
| 92 | 
                + # Redis 设置导游拥有的旅行团  | 
            |
| 91 | 93 | 
                set_tour_guide_own_group(user_id, group_id)  | 
            
| 92 | 94 | 
                 | 
            
| 93 | 
                -    return response(200, 'Create Tour Guide Group Success', u'导游团创建成功', {
               | 
            |
| 95 | 
                +    return response(200, 'Create Tour Guide Group Success', u'旅行团创建成功', {
               | 
            |
| 94 | 96 | 
                'group_id': group_id,  | 
            
| 95 | 97 | 
                'group': group_info,  | 
            
| 96 | 98 | 
                'users': group_users,  | 
            
                @@ -100,14 +102,14 @@ def tg_group_create_api(request):  | 
            ||
| 100 | 102 | 
                @logit  | 
            
| 101 | 103 | 
                def tg_group_detail_api(request):  | 
            
| 102 | 104 | 
                """  | 
            
| 103 | 
                - 导游团详情  | 
            |
| 105 | 
                + 旅行团详情  | 
            |
| 104 | 106 | 
                :param request:  | 
            
| 105 | 107 | 
                :return:  | 
            
| 106 | 108 | 
                """  | 
            
| 107 | 109 | 
                     group_id = request.POST.get('group_id', '')
               | 
            
| 108 | 110 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
| 109 | 111 | 
                 | 
            
| 110 | 
                -    return response(200, 'Get Tour Guide Group Detail Info Success', u'获取导游团详情成功', {
               | 
            |
| 112 | 
                +    return response(200, 'Get Tour Guide Group Detail Info Success', u'获取旅行团详情成功', {
               | 
            |
| 111 | 113 | 
                'group_id': group_id,  | 
            
| 112 | 114 | 
                'group': get_group_info(group_id),  | 
            
| 113 | 115 | 
                'users': get_group_users_info(group_id, user_id),  | 
            
                @@ -117,7 +119,7 @@ def tg_group_detail_api(request):  | 
            ||
| 117 | 119 | 
                @logit  | 
            
| 118 | 120 | 
                def tg_group_update_api(request):  | 
            
| 119 | 121 | 
                """  | 
            
| 120 | 
                - 导游团更新  | 
            |
| 122 | 
                + 旅行团更新  | 
            |
| 121 | 123 | 
                :param request:  | 
            
| 122 | 124 | 
                :return:  | 
            
| 123 | 125 | 
                """  | 
            
                @@ -128,8 +130,8 @@ def tg_group_update_api(request):  | 
            ||
| 128 | 130 | 
                 | 
            
| 129 | 131 | 
                     group_avatar = request.FILES.get('group_avatar', '')
               | 
            
| 130 | 132 | 
                 | 
            
| 131 | 
                -    started_at = request.POST.get('started_at', '')
               | 
            |
| 132 | 
                -    ended_at = request.POST.get('ended_at', '')
               | 
            |
| 133 | 
                +    started_at = request.POST.get('started_at', '')  # UTC, %Y-%m-%dT%H:%M:%SZ
               | 
            |
| 134 | 
                +    ended_at = request.POST.get('ended_at', '')  # UTC, %Y-%m-%dT%H:%M:%SZ
               | 
            |
| 133 | 135 | 
                 | 
            
| 134 | 136 | 
                # 群组校验  | 
            
| 135 | 137 | 
                try:  | 
            
                @@ -173,7 +175,7 @@ def tg_group_update_api(request):  | 
            ||
| 173 | 175 | 
                @logit  | 
            
| 174 | 176 | 
                def tg_group_close_api(request):  | 
            
| 175 | 177 | 
                """  | 
            
| 176 | 
                - 导游团关闭  | 
            |
| 178 | 
                + 旅行团关闭  | 
            |
| 177 | 179 | 
                :param request:  | 
            
| 178 | 180 | 
                :return:  | 
            
| 179 | 181 | 
                """  | 
            
                @@ -198,19 +200,19 @@ def tg_group_close_api(request):  | 
            ||
| 198 | 200 | 
                # Redis 群组数据缓存更新  | 
            
| 199 | 201 | 
                set_group_info(group)  | 
            
| 200 | 202 | 
                 | 
            
| 201 | 
                - return response(200, u'Close Tour Guide Group Success', u'导游团关闭成功')  | 
            |
| 203 | 
                + return response(200, u'Close Tour Guide Group Success', u'旅行团关闭成功')  | 
            |
| 202 | 204 | 
                 | 
            
| 203 | 205 | 
                 | 
            
| 204 | 206 | 
                @logit  | 
            
| 205 | 207 | 
                def tg_group_gather_start_api(request):  | 
            
| 206 | 208 | 
                """  | 
            
| 207 | 
                - 导游团设置集合时间和地点  | 
            |
| 209 | 
                + 旅行团设置集合时间和地点  | 
            |
| 208 | 210 | 
                :param request:  | 
            
| 209 | 211 | 
                :return:  | 
            
| 210 | 212 | 
                """  | 
            
| 211 | 213 | 
                     group_id = request.POST.get('group_id', '')
               | 
            
| 212 | 214 | 
                     admin_id = request.POST.get('admin_id', '') or request.POST.get('user_id', '')
               | 
            
| 213 | 
                -    gather_at = request.POST.get('gather_at', '')
               | 
            |
| 215 | 
                +    gather_at = request.POST.get('gather_at', '')  # UTC, %Y-%m-%dT%H:%M:%SZ
               | 
            |
| 214 | 216 | 
                     gather_lon = request.POST.get('lon', '')  # 经度
               | 
            
| 215 | 217 | 
                     gather_lat = request.POST.get('lat', '')  # 纬度
               | 
            
| 216 | 218 | 
                 | 
            
                @@ -236,4 +238,4 @@ def tg_group_gather_start_api(request):  | 
            ||
| 236 | 238 | 
                # 更新Session  | 
            
| 237 | 239 | 
                r.set(TOUR_GUIDE_GROUP_CUR_SESSION, shortuuid.uuid())  | 
            
| 238 | 240 | 
                 | 
            
| 239 | 
                - return response(200, u'Set Tour Guide Group Gather Info Success', u'设置导游团集合信息成功')  | 
            |
| 241 | 
                + return response(200, u'Set Tour Guide Group Gather Info Success', u'设置旅行团集合信息成功')  | 
            
                @@ -26,7 +26,7 @@ r = settings.REDIS_CACHE  | 
            ||
| 26 | 26 | 
                @logit  | 
            
| 27 | 27 | 
                def tgu_group_user_join_api(request):  | 
            
| 28 | 28 | 
                """  | 
            
| 29 | 
                - 导游团用户加群  | 
            |
| 29 | 
                + 旅行团用户加群  | 
            |
| 30 | 30 | 
                :param request:  | 
            
| 31 | 31 | 
                :return:  | 
            
| 32 | 32 | 
                """  | 
            
                @@ -34,7 +34,7 @@ def tgu_group_user_join_api(request):  | 
            ||
| 34 | 34 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
| 35 | 35 | 
                     nickname = request.POST.get('nickname', '')
               | 
            
| 36 | 36 | 
                 | 
            
| 37 | 
                - # 获取导游团唯一标识  | 
            |
| 37 | 
                + # 获取旅行团唯一标识  | 
            |
| 38 | 38 | 
                group_id = get_tour_guide_own_group(admin_id)  | 
            
| 39 | 39 | 
                 | 
            
| 40 | 40 | 
                # 用户校验  | 
            
                @@ -92,7 +92,7 @@ def tgu_group_user_join_api(request):  | 
            ||
| 92 | 92 | 
                @logit  | 
            
| 93 | 93 | 
                def tgu_group_user_update_api(request):  | 
            
| 94 | 94 | 
                """  | 
            
| 95 | 
                - 导游团用户更新  | 
            |
| 95 | 
                + 旅行团用户更新  | 
            |
| 96 | 96 | 
                :param request:  | 
            
| 97 | 97 | 
                :return:  | 
            
| 98 | 98 | 
                """  | 
            
                @@ -141,7 +141,7 @@ def tgu_group_user_update_api(request):  | 
            ||
| 141 | 141 | 
                @logit  | 
            
| 142 | 142 | 
                def tgu_group_user_locations_api(request):  | 
            
| 143 | 143 | 
                """  | 
            
| 144 | 
                - 导游团所有用户位置信息  | 
            |
| 144 | 
                + 旅行团所有用户位置信息  | 
            |
| 145 | 145 | 
                :param request:  | 
            
| 146 | 146 | 
                :return:  | 
            
| 147 | 147 | 
                """  | 
            
                @@ -152,7 +152,7 @@ def tgu_group_user_locations_api(request):  | 
            ||
| 152 | 152 | 
                if not GroupUserInfo.objects.filter(group_id=group_id, user_id=admin_id, subadmin=True, status=True).exists():  | 
            
| 153 | 153 | 
                return response(GroupStatusCode.NO_LOCATION_PERMISSION)  | 
            
| 154 | 154 | 
                 | 
            
| 155 | 
                -    return response(200, 'Get Tour Guide Group All User Location Success', u'获取导游团用户地理位置信息成功', {
               | 
            |
| 155 | 
                +    return response(200, 'Get Tour Guide Group All User Location Success', u'获取旅行团用户地理位置信息成功', {
               | 
            |
| 156 | 156 | 
                'group_id': group_id,  | 
            
| 157 | 157 | 
                'locations': r.georadius(TOUR_GUIDE_GROUP_GEO_INFO % group_id, 0, 0, '+inf', unit='m', withdist=True, withcoord=True, sort='ASC')  | 
            
| 158 | 158 | 
                # 'locations': [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)]]  | 
            
                @@ -162,7 +162,7 @@ def tgu_group_user_locations_api(request):  | 
            ||
| 162 | 162 | 
                @logit  | 
            
| 163 | 163 | 
                def tgu_group_user_location_api(request):  | 
            
| 164 | 164 | 
                """  | 
            
| 165 | 
                - 导游团单个用户位置信息  | 
            |
| 165 | 
                + 旅行团单个用户位置信息  | 
            |
| 166 | 166 | 
                :param request:  | 
            
| 167 | 167 | 
                :return:  | 
            
| 168 | 168 | 
                """  | 
            
                @@ -177,7 +177,7 @@ def tgu_group_user_location_api(request):  | 
            ||
| 177 | 177 | 
                session_id = r.get(TOUR_GUIDE_GROUP_CUR_SESSION % group_id)  | 
            
| 178 | 178 | 
                locations = r.lrange(TOUR_GUIDE_GROUP_USER_GEO_LIST % (group_id, session_id, user_id), 0, -1)  | 
            
| 179 | 179 | 
                 | 
            
| 180 | 
                -    return response(200, 'Get Tour Guide Group User Location Success', u'获取导游团用户地理位置信息成功', {
               | 
            |
| 180 | 
                +    return response(200, 'Get Tour Guide Group User Location Success', u'获取旅行团用户地理位置信息成功', {
               | 
            |
| 181 | 181 | 
                'group_id': group_id,  | 
            
| 182 | 182 | 
                'user_id': user_id,  | 
            
| 183 | 183 | 
                'locations': [json.loads(loc) for loc in locations]  | 
            
                @@ -3,6 +3,7 @@  | 
            ||
| 3 | 3 | 
                from django.conf import settings  | 
            
| 4 | 4 | 
                from django.db import models  | 
            
| 5 | 5 | 
                from django.utils.translation import ugettext_lazy as _  | 
            
| 6 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 6 | 7 | 
                 | 
            
| 7 | 8 | 
                from group.models import GroupPhotoInfo  | 
            
| 8 | 9 | 
                from pai2.basemodels import CreateUpdateMixin  | 
            
                @@ -72,7 +73,7 @@ class UserMessageInfo(CreateUpdateMixin):  | 
            ||
| 72 | 73 | 
                'msg_title': self.msg_title,  | 
            
| 73 | 74 | 
                'msg_content': self.msg_content,  | 
            
| 74 | 75 | 
                'read': self.read,  | 
            
| 75 | 
                - 'created_at': self.created_at.replace(microsecond=0),  | 
            |
| 76 | 
                + 'created_at': tc.remove_microsecond(self.created_at),  | 
            |
| 76 | 77 | 
                }  | 
            
| 77 | 78 | 
                 | 
            
| 78 | 79 | 
                 | 
            
                @@ -3,6 +3,7 @@  | 
            ||
| 3 | 3 | 
                from django.db import models  | 
            
| 4 | 4 | 
                from django.utils.translation import ugettext_lazy as _  | 
            
| 5 | 5 | 
                from shortuuidfield import ShortUUIDField  | 
            
| 6 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 6 | 7 | 
                 | 
            
| 7 | 8 | 
                from group.models import GroupPhotoInfo  | 
            
| 8 | 9 | 
                from pai2.basemodels import CreateUpdateMixin  | 
            
                @@ -96,8 +97,8 @@ class OrderInfo(CreateUpdateMixin):  | 
            ||
| 96 | 97 | 
                'body': self.body,  | 
            
| 97 | 98 | 
                'total_fee': self.total_fee,  | 
            
| 98 | 99 | 
                'pay_status': self.pay_status,  | 
            
| 99 | 
                - 'paid_at': self.paid_at and self.paid_at.replace(microsecond=0),  | 
            |
| 100 | 
                - 'created_at': self.created_at.replace(microsecond=0),  | 
            |
| 100 | 
                + 'paid_at': tc.remove_microsecond(self.paid_at),  | 
            |
| 101 | 
                + 'created_at': tc.remove_microsecond(self.created_at),  | 
            |
| 101 | 102 | 
                }  | 
            
| 102 | 103 | 
                 | 
            
| 103 | 104 | 
                @property  | 
            
                @@ -80,7 +80,7 @@ class GroupUserStatusCode(BaseStatusCode):  | 
            ||
| 80 | 80 | 
                GROUP_USER_NOT_FOUND = StatusCodeField(402101, u'Group User Not Found', description=u'群组用户不存在')  | 
            
| 81 | 81 | 
                GROUP_USER_HAS_DELETED = StatusCodeField(402102, u'Group User Has Deleted', description=u'群组用户被移除')  | 
            
| 82 | 82 | 
                 | 
            
| 83 | 
                - USER_HAS_NOT_JOIN_GROUP = StatusCodeField(402131, u'User Has Not Join Group', description=u'用户未加入导游团')  | 
            |
| 83 | 
                + USER_HAS_NOT_JOIN_GROUP = StatusCodeField(402131, u'User Has Not Join Group', description=u'用户未加入旅行团')  | 
            |
| 84 | 84 | 
                 | 
            
| 85 | 85 | 
                 | 
            
| 86 | 86 | 
                class GroupPhotoStatusCode(BaseStatusCode):  | 
            
                @@ -11,8 +11,8 @@ TOUR_GUIDE_GROUP_GEO_INFO = 'tour:guide:group:geo:info:%s' # ZSET,旅游团  | 
            ||
| 11 | 11 | 
                TOUR_GUIDE_GROUP_CUR_SESSION = 'tour:guide:group:cur:session:%s' # STRING,旅游团当前Session,group_id,导游设置集合时间的时候更新  | 
            
| 12 | 12 | 
                TOUR_GUIDE_GROUP_USER_GEO_LIST = 'tour:guide:group:user:geo:list:%s:%s:%s' # LIST,旅游团当前用户地理位置列表,group_id、session_id、user_id  | 
            
| 13 | 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,用户加入导游团的时候更新  | 
            |
| 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 | 16 | 
                 | 
            
| 17 | 17 | 
                # 群组相关  | 
            
| 18 | 18 | 
                GROUP_INFO = 'group:info:%s' # STRING,群组信息,group_id  | 
            
                @@ -12,10 +12,10 @@ r = settings.REDIS_CACHE  | 
            ||
| 12 | 12 | 
                 | 
            
| 13 | 13 | 
                 | 
            
| 14 | 14 | 
                def set_tour_guide_own_group(user_id, group_id):  | 
            
| 15 | 
                - """ 设置导游拥有的导游团 """  | 
            |
| 15 | 
                + """ 设置导游拥有的旅行团 """  | 
            |
| 16 | 16 | 
                r.set(TOUR_GUIDE_GROUP_USER_OWN % user_id, group_id)  | 
            
| 17 | 17 | 
                 | 
            
| 18 | 18 | 
                 | 
            
| 19 | 19 | 
                def get_tour_guide_own_group(user_id):  | 
            
| 20 | 
                - """ 获取导游拥有的导游团 """  | 
            |
| 20 | 
                + """ 获取导游拥有的旅行团 """  | 
            |
| 21 | 21 | 
                return r.get(TOUR_GUIDE_GROUP_USER_OWN % user_id)  |