@@ -17,8 +17,10 @@ urlpatterns = [  | 
            ||
| 17 | 17 | 
                urlpatterns = [  | 
            
| 18 | 18 | 
                url(r'^g/create$', group_views.group_create_api, name='group_create_api'), # 群组创建  | 
            
| 19 | 19 | 
                url(r'^g/detail$', group_views.group_detail_api, name='group_detail_api'), # 群组详情  | 
            
| 20 | 
                + url(r'^g/update$', group_views.group_update_api, name='group_update_api'), # 群组更新  | 
            |
| 20 | 21 | 
                url(r'^g/join$', group_views.group_join_api, name='group_join_api'), # 申请加群  | 
            
| 21 | 22 | 
                url(r'^g/lock$', group_views.group_lock_api, name='group_lock_api'), # 群组锁定  | 
            
| 23 | 
                + url(r'^g/remove$', group_views.group_remove_api, name='group_remove_api'), # 成员移除  | 
            |
| 22 | 24 | 
                url(r'^g/pass$', group_views.group_pass_api, name='group_pass_api'), # 申请通过  | 
            
| 23 | 25 | 
                url(r'^g/refuse$', group_views.group_refuse_api, name='group_refuse_api'), # 申请拒绝  | 
            
| 24 | 26 | 
                ]  | 
            
                @@ -17,8 +17,11 @@  | 
            ||
| 17 | 17 | 
                4020 —— 群组不存在  | 
            
| 18 | 18 | 
                4021 —— 群组已锁定  | 
            
| 19 | 19 | 
                4022 —— 非群组管理员  | 
            
| 20 | 
                - 4023 —— 没有锁定权限  | 
            |
| 21 | 
                - 4024 —— 没有通过权限  | 
            |
| 22 | 
                - 4025 —— 没有拒绝权限  | 
            |
| 23 | 
                - 4026 —— 重复加群申请  | 
            |
| 24 | 
                - 4027 —— 加群申请不存在  | 
            |
| 20 | 
                + 40220 —— 没有更新权限  | 
            |
| 21 | 
                + 40221 —— 没有锁定权限  | 
            |
| 22 | 
                + 40222 —— 没有移除权限  | 
            |
| 23 | 
                + 40223 —— 没有通过权限  | 
            |
| 24 | 
                + 40224 —— 没有拒绝权限  | 
            |
| 25 | 
                + 4027 —— 重复加群申请  | 
            |
| 26 | 
                + 4028 —— 加群申请不存在  | 
            |
| 27 | 
                + 4029 —— 该用户不在群组  | 
            
                @@ -0,0 +1,23 @@  | 
            ||
| 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', '0003_groupinfo_admin_id'),
               | 
            |
| 11 | 
                + ]  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                + operations = [  | 
            |
| 14 | 
                + migrations.AlterModelOptions(  | 
            |
| 15 | 
                + name='groupphotoinfo',  | 
            |
| 16 | 
                +            options={'verbose_name': 'groupphotoinfo', 'verbose_name_plural': 'groupphotoinfo'},
               | 
            |
| 17 | 
                + ),  | 
            |
| 18 | 
                + migrations.AddField(  | 
            |
| 19 | 
                + model_name='groupuserinfo',  | 
            |
| 20 | 
                + name='deleted_at',  | 
            |
| 21 | 
                + field=models.DateTimeField(help_text='\u5220\u9664\u65f6\u95f4', null=True, verbose_name='deleted_at', blank=True),  | 
            |
| 22 | 
                + ),  | 
            |
| 23 | 
                + ]  | 
            
                @@ -31,6 +31,17 @@ class GroupInfo(CreateUpdateMixin):  | 
            ||
| 31 | 31 | 
                def __unicode__(self):  | 
            
| 32 | 32 | 
                return unicode(self.group_id)  | 
            
| 33 | 33 | 
                 | 
            
| 34 | 
                + @property  | 
            |
| 35 | 
                + def data(self):  | 
            |
| 36 | 
                +        return {
               | 
            |
| 37 | 
                + 'group_id': self.group_id,  | 
            |
| 38 | 
                + 'group_name': self.group_name,  | 
            |
| 39 | 
                + 'group_desc': self.group_desc,  | 
            |
| 40 | 
                + 'group_from': self.group_from,  | 
            |
| 41 | 
                + 'group_lock': self.group_lock,  | 
            |
| 42 | 
                + 'created_at': self.created_at,  | 
            |
| 43 | 
                + }  | 
            |
| 44 | 
                +  | 
            |
| 34 | 45 | 
                def users(self, user_id):  | 
            
| 35 | 46 | 
                all_users = GroupUserInfo.objects.filter(group_id=self.group_id)  | 
            
| 36 | 47 | 
                 | 
            
                @@ -60,6 +71,7 @@ class GroupUserInfo(CreateUpdateMixin):  | 
            ||
| 60 | 71 | 
                APPLYING = 0  | 
            
| 61 | 72 | 
                PASSED = 1  | 
            
| 62 | 73 | 
                REFUSED = 2  | 
            
| 74 | 
                + DELETED = 3  | 
            |
| 63 | 75 | 
                 | 
            
| 64 | 76 | 
                USER_STATUS = (  | 
            
| 65 | 77 | 
                (APPLYING, u'申请中'),  | 
            
                @@ -74,6 +86,7 @@ class GroupUserInfo(CreateUpdateMixin):  | 
            ||
| 74 | 86 | 
                user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=APPLYING)  | 
            
| 75 | 87 | 
                passed_at = models.DateTimeField(_(u'passed_at'), blank=True, null=True, help_text=_(u'通过时间'))  | 
            
| 76 | 88 | 
                refused_at = models.DateTimeField(_(u'refused_at'), blank=True, null=True, help_text=_(u'拒绝时间'))  | 
            
| 89 | 
                + deleted_at = models.DateTimeField(_(u'deleted_at'), blank=True, null=True, help_text=_(u'删除时间'))  | 
            |
| 77 | 90 | 
                 | 
            
| 78 | 91 | 
                class Meta:  | 
            
| 79 | 92 | 
                verbose_name = _(u'groupuserinfo')  | 
            
                @@ -47,6 +47,7 @@ def group_create_api(request):  | 
            ||
| 47 | 47 | 
                'message': u'群组创建成功',  | 
            
| 48 | 48 | 
                         'data': {
               | 
            
| 49 | 49 | 
                'group_id': group_id,  | 
            
| 50 | 
                + 'group': group.data,  | 
            |
| 50 | 51 | 
                'users': group.users(user_id)  | 
            
| 51 | 52 | 
                },  | 
            
| 52 | 53 | 
                })  | 
            
                @@ -77,11 +78,55 @@ def group_detail_api(request):  | 
            ||
| 77 | 78 | 
                'message': u'获取群组详情成功',  | 
            
| 78 | 79 | 
                         'data': {
               | 
            
| 79 | 80 | 
                'group_id': group_id,  | 
            
| 81 | 
                + 'group': group.data,  | 
            |
| 80 | 82 | 
                'users': group.users(user_id)  | 
            
| 81 | 83 | 
                },  | 
            
| 82 | 84 | 
                })  | 
            
| 83 | 85 | 
                 | 
            
| 84 | 86 | 
                 | 
            
| 87 | 
                +def group_update_api(request):  | 
            |
| 88 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 89 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 90 | 
                +    group_name = request.POST.get('group_name', '')
               | 
            |
| 91 | 
                +    group_desc = request.POST.get('group_desc', '')
               | 
            |
| 92 | 
                +  | 
            |
| 93 | 
                + try:  | 
            |
| 94 | 
                + admin = UserInfo.objects.get(user_id=admin_id)  | 
            |
| 95 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 96 | 
                +        return JsonResponse({
               | 
            |
| 97 | 
                + 'status': 4011,  | 
            |
| 98 | 
                + 'message': u'用户不存在',  | 
            |
| 99 | 
                + })  | 
            |
| 100 | 
                +  | 
            |
| 101 | 
                + try:  | 
            |
| 102 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 103 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 104 | 
                +        return JsonResponse({
               | 
            |
| 105 | 
                + 'status': 4020,  | 
            |
| 106 | 
                + 'message': u'群组不存在',  | 
            |
| 107 | 
                + })  | 
            |
| 108 | 
                + if group.admin_id != admin_id:  | 
            |
| 109 | 
                +        return JsonResponse({
               | 
            |
| 110 | 
                + 'status': 40220,  | 
            |
| 111 | 
                + 'message': u'没有更新权限',  | 
            |
| 112 | 
                + })  | 
            |
| 113 | 
                + if group_name:  | 
            |
| 114 | 
                + group.group_name = group_name  | 
            |
| 115 | 
                + if group_desc:  | 
            |
| 116 | 
                + group.group_desc = group_desc  | 
            |
| 117 | 
                + group.save()  | 
            |
| 118 | 
                +  | 
            |
| 119 | 
                +    return JsonResponse({
               | 
            |
| 120 | 
                + 'status': 200,  | 
            |
| 121 | 
                + 'message': u'用户更新成功',  | 
            |
| 122 | 
                +        'data': {
               | 
            |
| 123 | 
                + 'group_id': group_id,  | 
            |
| 124 | 
                + 'group': group.data,  | 
            |
| 125 | 
                + 'users': group.users(admin_id)  | 
            |
| 126 | 
                + },  | 
            |
| 127 | 
                + })  | 
            |
| 128 | 
                +  | 
            |
| 129 | 
                +  | 
            |
| 85 | 130 | 
                def group_join_api(request):  | 
            
| 86 | 131 | 
                     group_id = request.POST.get('group_id', '')
               | 
            
| 87 | 132 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
                @@ -110,7 +155,7 @@ def group_join_api(request):  | 
            ||
| 110 | 155 | 
                 | 
            
| 111 | 156 | 
                if GroupUserInfo.objects.filter(group_id=group_id, user_id=user_id, user_status__in=[GroupUserInfo.APPLYING, GroupUserInfo.PASSED]).exists():  | 
            
| 112 | 157 | 
                         return JsonResponse({
               | 
            
| 113 | 
                - 'status': 4026,  | 
            |
| 158 | 
                + 'status': 4027,  | 
            |
| 114 | 159 | 
                'message': u'重复加群申请',  | 
            
| 115 | 160 | 
                })  | 
            
| 116 | 161 | 
                 | 
            
                @@ -149,7 +194,7 @@ def group_lock_api(request):  | 
            ||
| 149 | 194 | 
                })  | 
            
| 150 | 195 | 
                if group.admin_id != user_id:  | 
            
| 151 | 196 | 
                         return JsonResponse({
               | 
            
| 152 | 
                - 'status': 4023,  | 
            |
| 197 | 
                + 'status': 40221,  | 
            |
| 153 | 198 | 
                'message': u'没有锁定权限',  | 
            
| 154 | 199 | 
                })  | 
            
| 155 | 200 | 
                 | 
            
                @@ -162,6 +207,60 @@ def group_lock_api(request):  | 
            ||
| 162 | 207 | 
                })  | 
            
| 163 | 208 | 
                 | 
            
| 164 | 209 | 
                 | 
            
| 210 | 
                +def group_remove_api(request):  | 
            |
| 211 | 
                +    group_id = request.POST.get('group_id', '')
               | 
            |
| 212 | 
                +    admin_id = request.POST.get('admin_id', '')
               | 
            |
| 213 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 214 | 
                +  | 
            |
| 215 | 
                + try:  | 
            |
| 216 | 
                + admin = UserInfo.objects.get(user_id=admin_id)  | 
            |
| 217 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 218 | 
                +        return JsonResponse({
               | 
            |
| 219 | 
                + 'status': 4011,  | 
            |
| 220 | 
                + 'message': u'用户不存在',  | 
            |
| 221 | 
                + })  | 
            |
| 222 | 
                + try:  | 
            |
| 223 | 
                + user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 224 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 225 | 
                +        return JsonResponse({
               | 
            |
| 226 | 
                + 'status': 4011,  | 
            |
| 227 | 
                + 'message': u'用户不存在',  | 
            |
| 228 | 
                + })  | 
            |
| 229 | 
                +  | 
            |
| 230 | 
                + try:  | 
            |
| 231 | 
                + group = GroupInfo.objects.get(group_id=group_id)  | 
            |
| 232 | 
                + except GroupInfo.DoesNotExist:  | 
            |
| 233 | 
                +        return JsonResponse({
               | 
            |
| 234 | 
                + 'status': 4020,  | 
            |
| 235 | 
                + 'message': u'群组不存在',  | 
            |
| 236 | 
                + })  | 
            |
| 237 | 
                + if group.admin_id != admin_id:  | 
            |
| 238 | 
                +        return JsonResponse({
               | 
            |
| 239 | 
                + 'status': 40222,  | 
            |
| 240 | 
                + 'message': u'没有移除权限',  | 
            |
| 241 | 
                + })  | 
            |
| 242 | 
                +  | 
            |
| 243 | 
                + try:  | 
            |
| 244 | 
                + group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)  | 
            |
| 245 | 
                + except GroupUserInfo.DoesNotExist:  | 
            |
| 246 | 
                +        return JsonResponse({
               | 
            |
| 247 | 
                + 'status': 4029,  | 
            |
| 248 | 
                + 'message': u'该用户不在群组',  | 
            |
| 249 | 
                + })  | 
            |
| 250 | 
                + group_user.user_status = GroupUserInfo.DELETED  | 
            |
| 251 | 
                + group_user.deleted_at = tc.utc_datetime()  | 
            |
| 252 | 
                + group_user.save()  | 
            |
| 253 | 
                +  | 
            |
| 254 | 
                +    return JsonResponse({
               | 
            |
| 255 | 
                + 'status': 200,  | 
            |
| 256 | 
                + 'message': u'用户移除成功',  | 
            |
| 257 | 
                +        'data': {
               | 
            |
| 258 | 
                + 'group_id': group_id,  | 
            |
| 259 | 
                + 'users': group.users(admin_id)  | 
            |
| 260 | 
                + },  | 
            |
| 261 | 
                + })  | 
            |
| 262 | 
                +  | 
            |
| 263 | 
                +  | 
            |
| 165 | 264 | 
                def group_pass_api(request):  | 
            
| 166 | 265 | 
                     group_id = request.POST.get('group_id', '')
               | 
            
| 167 | 266 | 
                     admin_id = request.POST.get('admin_id', '')
               | 
            
                @@ -191,7 +290,7 @@ def group_pass_api(request):  | 
            ||
| 191 | 290 | 
                })  | 
            
| 192 | 291 | 
                if group.admin_id != admin_id:  | 
            
| 193 | 292 | 
                         return JsonResponse({
               | 
            
| 194 | 
                - 'status': 4024,  | 
            |
| 293 | 
                + 'status': 40223,  | 
            |
| 195 | 294 | 
                'message': u'没有通过权限',  | 
            
| 196 | 295 | 
                })  | 
            
| 197 | 296 | 
                 | 
            
                @@ -199,7 +298,7 @@ def group_pass_api(request):  | 
            ||
| 199 | 298 | 
                group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)  | 
            
| 200 | 299 | 
                except GroupUserInfo.DoesNotExist:  | 
            
| 201 | 300 | 
                         return JsonResponse({
               | 
            
| 202 | 
                - 'status': 4027,  | 
            |
| 301 | 
                + 'status': 4028,  | 
            |
| 203 | 302 | 
                'message': u'加群申请不存在',  | 
            
| 204 | 303 | 
                })  | 
            
| 205 | 304 | 
                group_user.user_status = GroupUserInfo.PASSED  | 
            
                @@ -211,7 +310,7 @@ def group_pass_api(request):  | 
            ||
| 211 | 310 | 
                'message': u'申请通过成功',  | 
            
| 212 | 311 | 
                         'data': {
               | 
            
| 213 | 312 | 
                'group_id': group_id,  | 
            
| 214 | 
                - 'users': group.users(user_id)  | 
            |
| 313 | 
                + 'users': group.users(admin_id)  | 
            |
| 215 | 314 | 
                },  | 
            
| 216 | 315 | 
                })  | 
            
| 217 | 316 | 
                 | 
            
                @@ -245,7 +344,7 @@ def group_refuse_api(request):  | 
            ||
| 245 | 344 | 
                })  | 
            
| 246 | 345 | 
                if group.admin_id != admin_id:  | 
            
| 247 | 346 | 
                         return JsonResponse({
               | 
            
| 248 | 
                - 'status': 4025,  | 
            |
| 347 | 
                + 'status': 40224,  | 
            |
| 249 | 348 | 
                'message': u'没有拒绝权限',  | 
            
| 250 | 349 | 
                })  | 
            
| 251 | 350 | 
                 | 
            
                @@ -253,7 +352,7 @@ def group_refuse_api(request):  | 
            ||
| 253 | 352 | 
                group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)  | 
            
| 254 | 353 | 
                except GroupUserInfo.DoesNotExist:  | 
            
| 255 | 354 | 
                         return JsonResponse({
               | 
            
| 256 | 
                - 'status': 4027,  | 
            |
| 355 | 
                + 'status': 4028,  | 
            |
| 257 | 356 | 
                'message': u'加群申请不存在',  | 
            
| 258 | 357 | 
                })  | 
            
| 259 | 358 | 
                group_user.user_status = GroupUserInfo.REFUSED  | 
            
                @@ -265,7 +364,7 @@ def group_refuse_api(request):  | 
            ||
| 265 | 364 | 
                'message': u'申请拒绝成功',  | 
            
| 266 | 365 | 
                         'data': {
               | 
            
| 267 | 366 | 
                'group_id': group_id,  | 
            
| 268 | 
                - 'users': group.users(user_id)  | 
            |
| 367 | 
                + 'users': group.users(admin_id)  | 
            |
| 269 | 368 | 
                },  | 
            
| 270 | 369 | 
                })  | 
            
| 271 | 370 | 
                 | 
            
                @@ -1,7 +1,7 @@  | 
            ||
| 1 | 1 | 
                CodeConvert==2.0.3  | 
            
| 2 | 2 | 
                Django==1.8.4  | 
            
| 3 | 3 | 
                MySQL-python==1.2.5  | 
            
| 4 | 
                -TimeConvert==1.1.3  | 
            |
| 4 | 
                +TimeConvert==1.1.6  | 
            |
| 5 | 5 | 
                django-curtail-uuid==1.0.0  | 
            
| 6 | 6 | 
                django-multidomain==1.1.4  | 
            
| 7 | 7 | 
                django-shortuuidfield==0.1.3  |