@@ -49,10 +49,9 @@ urlpatterns += [  | 
            ||
| 49 | 49 | 
                # 消息相关  | 
            
| 50 | 50 | 
                urlpatterns += [  | 
            
| 51 | 51 | 
                url(r'^msg/list$', message_views.message_list_api, name='message_list_api'), # 消息列表  | 
            
| 52 | 
                - url(r'^msg/list/(?P<msg_type>\w+)$', message_views.message_type_list_api, name='message_type_list_api'), # 分类消息列表  | 
            |
| 53 | 
                - url(r'^msg/read$', message_views.message_read_api, name='message_read_api'), # 消息读取  | 
            |
| 54 | 
                - url(r'^msg/delete$', message_views.message_delete_api, name='message_delete_api'), # 消息删除  | 
            |
| 55 | 
                - url(r'^msg/delete/(?P<msg_type>\w+)$', message_views.message_delete_api, name='message_type_delete_api'), # 消息删除  | 
            |
| 52 | 
                + url(r'^msg/(?P<msg_type>\w+)/list$', message_views.message_type_list_api, name='message_type_list_api'), # 分类消息列表  | 
            |
| 53 | 
                + url(r'^msg/(?P<msg_type>\w+)/read$', message_views.message_type_read_api, name='message_type_read_api'), # 消息读取  | 
            |
| 54 | 
                + url(r'^msg/(?P<msg_type>\w+)/delete$', message_views.message_type_delete_api, name='message_type_delete_api'), # 消息删除  | 
            |
| 56 | 55 | 
                ]  | 
            
| 57 | 56 | 
                 | 
            
| 58 | 57 | 
                # 控制器相关  | 
            
                @@ -2,7 +2,7 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from django.contrib import admin  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                -from message.models import UserMessageInfo  | 
            |
| 5 | 
                +from message.models import UserMessageInfo, SystemMessageInfo, SystemMessageReadInfo, SystemMessageDeleteInfo  | 
            |
| 6 | 6 | 
                 | 
            
| 7 | 7 | 
                 | 
            
| 8 | 8 | 
                class UserMessageInfoAdmin(admin.ModelAdmin):  | 
            
                @@ -10,4 +10,22 @@ class UserMessageInfoAdmin(admin.ModelAdmin):  | 
            ||
| 10 | 10 | 
                     list_filter = ('msg_type', 'read', 'status')
               | 
            
| 11 | 11 | 
                 | 
            
| 12 | 12 | 
                 | 
            
| 13 | 
                +class SystemMessageInfoAdmin(admin.ModelAdmin):  | 
            |
| 14 | 
                +    list_display = ('title', 'content', 'url', 'status', 'created_at', 'updated_at')
               | 
            |
| 15 | 
                +    list_filter = ('status', )
               | 
            |
| 16 | 
                +  | 
            |
| 17 | 
                +  | 
            |
| 18 | 
                +class SystemMessageReadInfoAdmin(admin.ModelAdmin):  | 
            |
| 19 | 
                +    list_display = ('user_id', 'msg_id', 'status', 'created_at', 'updated_at')
               | 
            |
| 20 | 
                +    list_filter = ('status', )
               | 
            |
| 21 | 
                +  | 
            |
| 22 | 
                +  | 
            |
| 23 | 
                +class SystemMessageDeleteInfoAdmin(admin.ModelAdmin):  | 
            |
| 24 | 
                +    list_display = ('user_id', 'msg_id', 'status', 'created_at', 'updated_at')
               | 
            |
| 25 | 
                +    list_filter = ('status', )
               | 
            |
| 26 | 
                +  | 
            |
| 27 | 
                +  | 
            |
| 13 | 28 | 
                admin.site.register(UserMessageInfo, UserMessageInfoAdmin)  | 
            
| 29 | 
                +admin.site.register(SystemMessageInfo, SystemMessageInfoAdmin)  | 
            |
| 30 | 
                +admin.site.register(SystemMessageReadInfo, SystemMessageReadInfoAdmin)  | 
            |
| 31 | 
                +admin.site.register(SystemMessageDeleteInfo, SystemMessageDeleteInfoAdmin)  | 
            
                @@ -0,0 +1,45 @@  | 
            ||
| 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 | 
                +        ('message', '0002_auto_20160120_1830'),
               | 
            |
| 11 | 
                + ]  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                + operations = [  | 
            |
| 14 | 
                + migrations.CreateModel(  | 
            |
| 15 | 
                + name='SystemMessageInfo',  | 
            |
| 16 | 
                + fields=[  | 
            |
| 17 | 
                +                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
               | 
            |
| 18 | 
                +                ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')),
               | 
            |
| 19 | 
                +                ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)),
               | 
            |
| 20 | 
                +                ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)),
               | 
            |
| 21 | 
                +                ('title', models.CharField(help_text='\u7cfb\u7edf\u6d88\u606f\u6807\u9898', max_length=255, verbose_name='title')),
               | 
            |
| 22 | 
                +                ('content', models.TextField(help_text='\u7cfb\u7edf\u6d88\u606f\u5185\u5bb9', null=True, verbose_name='content', blank=True)),
               | 
            |
| 23 | 
                +                ('url', models.CharField(help_text='\u7cfb\u7edf\u6d88\u606f\u94fe\u63a5', max_length=255, null=True, verbose_name='url', blank=True)),
               | 
            |
| 24 | 
                + ],  | 
            |
| 25 | 
                +            options={
               | 
            |
| 26 | 
                + 'verbose_name': 'systemmessageinfo',  | 
            |
| 27 | 
                + 'verbose_name_plural': 'systemmessageinfo',  | 
            |
| 28 | 
                + },  | 
            |
| 29 | 
                + ),  | 
            |
| 30 | 
                + migrations.CreateModel(  | 
            |
| 31 | 
                + name='SystemMessageReadInfo',  | 
            |
| 32 | 
                + fields=[  | 
            |
| 33 | 
                +                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
               | 
            |
| 34 | 
                +                ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')),
               | 
            |
| 35 | 
                +                ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)),
               | 
            |
| 36 | 
                +                ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)),
               | 
            |
| 37 | 
                +                ('user_id', models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True)),
               | 
            |
| 38 | 
                +                ('msg_id', models.CharField(max_length=255, blank=True, help_text='\u7cfb\u7edf\u6d88\u606f\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='msg_id', db_index=True)),
               | 
            |
| 39 | 
                + ],  | 
            |
| 40 | 
                +            options={
               | 
            |
| 41 | 
                + 'verbose_name': 'systemmessagereadinfo',  | 
            |
| 42 | 
                + 'verbose_name_plural': 'systemmessagereadinfo',  | 
            |
| 43 | 
                + },  | 
            |
| 44 | 
                + ),  | 
            |
| 45 | 
                + ]  | 
            
                @@ -0,0 +1,29 @@  | 
            ||
| 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 | 
                +        ('message', '0003_systemmessageinfo_systemmessagereadinfo'),
               | 
            |
| 11 | 
                + ]  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                + operations = [  | 
            |
| 14 | 
                + migrations.CreateModel(  | 
            |
| 15 | 
                + name='SystemMessageDeleteInfo',  | 
            |
| 16 | 
                + fields=[  | 
            |
| 17 | 
                +                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
               | 
            |
| 18 | 
                +                ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')),
               | 
            |
| 19 | 
                +                ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)),
               | 
            |
| 20 | 
                +                ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)),
               | 
            |
| 21 | 
                +                ('user_id', models.CharField(max_length=255, blank=True, help_text='\u7528\u6237\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='user_id', db_index=True)),
               | 
            |
| 22 | 
                +                ('msg_id', models.CharField(max_length=255, blank=True, help_text='\u7cfb\u7edf\u6d88\u606f\u552f\u4e00\u6807\u8bc6', null=True, verbose_name='msg_id', db_index=True)),
               | 
            |
| 23 | 
                + ],  | 
            |
| 24 | 
                +            options={
               | 
            |
| 25 | 
                + 'verbose_name': 'systemmessagedeleteinfo',  | 
            |
| 26 | 
                + 'verbose_name_plural': 'systemmessagedeleteinfo',  | 
            |
| 27 | 
                + },  | 
            |
| 28 | 
                + ),  | 
            |
| 29 | 
                + ]  | 
            
                @@ -57,8 +57,7 @@ class UserMessageInfo(CreateUpdateMixin):  | 
            ||
| 57 | 57 | 
                def __unicode__(self):  | 
            
| 58 | 58 | 
                return unicode(self.pk)  | 
            
| 59 | 59 | 
                 | 
            
| 60 | 
                - @property  | 
            |
| 61 | 
                - def msg_info(self):  | 
            |
| 60 | 
                + def msg_info(self, user_id=None):  | 
            |
| 62 | 61 | 
                try:  | 
            
| 63 | 62 | 
                group_photo = GroupPhotoInfo.objects.get(pk=self.photo_id)  | 
            
| 64 | 63 | 
                except GroupPhotoInfo.DoesNotExist:  | 
            
                @@ -79,3 +78,49 @@ class UserMessageInfo(CreateUpdateMixin):  | 
            ||
| 79 | 78 | 
                'read': self.read,  | 
            
| 80 | 79 | 
                'created_at': self.created_at.replace(microsecond=0),  | 
            
| 81 | 80 | 
                }  | 
            
| 81 | 
                +  | 
            |
| 82 | 
                +  | 
            |
| 83 | 
                +class SystemMessageInfo(CreateUpdateMixin):  | 
            |
| 84 | 
                + title = models.CharField(_(u'title'), max_length=255, help_text=u'系统消息标题')  | 
            |
| 85 | 
                + content = models.TextField(_(u'content'), blank=True, null=True, help_text=u'系统消息内容')  | 
            |
| 86 | 
                + url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'系统消息链接')  | 
            |
| 87 | 
                +  | 
            |
| 88 | 
                + class Meta:  | 
            |
| 89 | 
                +        verbose_name = _('systemmessageinfo')
               | 
            |
| 90 | 
                +        verbose_name_plural = _('systemmessageinfo')
               | 
            |
| 91 | 
                +  | 
            |
| 92 | 
                + def __unicode__(self):  | 
            |
| 93 | 
                + return unicode(self.pk)  | 
            |
| 94 | 
                +  | 
            |
| 95 | 
                + def msg_info(self, user_id=None):  | 
            |
| 96 | 
                +        return {
               | 
            |
| 97 | 
                + 'pk': self.pk,  | 
            |
| 98 | 
                + 'title': self.title,  | 
            |
| 99 | 
                + 'content': self.content,  | 
            |
| 100 | 
                + 'url': self.url,  | 
            |
| 101 | 
                + 'read': SystemMessageReadInfo.objects.filter(user_id=user_id, msg_id=self.pk).exists(),  | 
            |
| 102 | 
                + }  | 
            |
| 103 | 
                +  | 
            |
| 104 | 
                +  | 
            |
| 105 | 
                +class SystemMessageReadInfo(CreateUpdateMixin):  | 
            |
| 106 | 
                + user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            |
| 107 | 
                + msg_id = models.CharField(_(u'msg_id'), max_length=255, blank=True, null=True, help_text=u'系统消息唯一标识', db_index=True)  | 
            |
| 108 | 
                +  | 
            |
| 109 | 
                + class Meta:  | 
            |
| 110 | 
                +        verbose_name = _('systemmessagereadinfo')
               | 
            |
| 111 | 
                +        verbose_name_plural = _('systemmessagereadinfo')
               | 
            |
| 112 | 
                +  | 
            |
| 113 | 
                + def __unicode__(self):  | 
            |
| 114 | 
                + return unicode(self.pk)  | 
            |
| 115 | 
                +  | 
            |
| 116 | 
                +  | 
            |
| 117 | 
                +class SystemMessageDeleteInfo(CreateUpdateMixin):  | 
            |
| 118 | 
                + user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            |
| 119 | 
                + msg_id = models.CharField(_(u'msg_id'), max_length=255, blank=True, null=True, help_text=u'系统消息唯一标识', db_index=True)  | 
            |
| 120 | 
                +  | 
            |
| 121 | 
                + class Meta:  | 
            |
| 122 | 
                +        verbose_name = _('systemmessagedeleteinfo')
               | 
            |
| 123 | 
                +        verbose_name_plural = _('systemmessagedeleteinfo')
               | 
            |
| 124 | 
                +  | 
            |
| 125 | 
                + def __unicode__(self):  | 
            |
| 126 | 
                + return unicode(self.pk)  | 
            
                @@ -3,13 +3,16 @@  | 
            ||
| 3 | 3 | 
                from django.conf import settings  | 
            
| 4 | 4 | 
                from django.http import JsonResponse  | 
            
| 5 | 5 | 
                 | 
            
| 6 | 
                -from message.models import UserMessageInfo  | 
            |
| 6 | 
                +from account.models import UserInfo  | 
            |
| 7 | 
                +from message.models import UserMessageInfo, SystemMessageInfo, SystemMessageReadInfo, SystemMessageDeleteInfo  | 
            |
| 7 | 8 | 
                 | 
            
| 8 | 9 | 
                from utils.page_utils import pagination  | 
            
| 9 | 10 | 
                 | 
            
| 10 | 
                -from utils.error.errno_utils import MessageStatusCode  | 
            |
| 11 | 
                +from utils.error.errno_utils import UserStatusCode, MessageStatusCode  | 
            |
| 11 | 12 | 
                from utils.error.response_utils import response  | 
            
| 12 | 13 | 
                 | 
            
| 14 | 
                +from utils.redis.rmessage import set_system_message_delete_info, get_system_message_delete_info  | 
            |
| 15 | 
                +  | 
            |
| 13 | 16 | 
                 | 
            
| 14 | 17 | 
                def message_list_api(request):  | 
            
| 15 | 18 | 
                """  | 
            
                @@ -23,14 +26,24 @@ def message_list_api(request):  | 
            ||
| 23 | 26 | 
                 | 
            
| 24 | 27 | 
                final_messages = []  | 
            
| 25 | 28 | 
                for message in messages:  | 
            
| 26 | 
                - type_messages = UserMessageInfo.objects.filter(  | 
            |
| 27 | 
                - to_uid=user_id,  | 
            |
| 28 | 
                - msg_type=message['msg_type'],  | 
            |
| 29 | 
                - status=True,  | 
            |
| 30 | 
                - ).order_by(  | 
            |
| 29 | 
                + msg_type = message['msg_type']  | 
            |
| 30 | 
                + if msg_type == UserMessageInfo.SYSTEM:  | 
            |
| 31 | 
                + deleted_message_ids = get_system_message_delete_info(user_id)  | 
            |
| 32 | 
                + type_messages = SystemMessageInfo.objects.filter(  | 
            |
| 33 | 
                + status=True,  | 
            |
| 34 | 
                + ).exclude(  | 
            |
| 35 | 
                + pk__in=deleted_message_ids,  | 
            |
| 36 | 
                + )  | 
            |
| 37 | 
                + else:  | 
            |
| 38 | 
                + type_messages = UserMessageInfo.objects.filter(  | 
            |
| 39 | 
                + to_uid=user_id,  | 
            |
| 40 | 
                + msg_type=msg_type,  | 
            |
| 41 | 
                + status=True,  | 
            |
| 42 | 
                + )  | 
            |
| 43 | 
                + type_messages = type_messages.order_by(  | 
            |
| 31 | 44 | 
                '-pk'  | 
            
| 32 | 45 | 
                )[:settings.MESSAGE_NUM_PER_PAGE]  | 
            
| 33 | 
                - type_messages = [msg.msg_info for msg in type_messages]  | 
            |
| 46 | 
                + type_messages = [msg.msg_info(user_id) for msg in type_messages]  | 
            |
| 34 | 47 | 
                message['msg_list'] = type_messages  | 
            
| 35 | 48 | 
                final_messages.append(message)  | 
            
| 36 | 49 | 
                 | 
            
                @@ -54,15 +67,24 @@ def message_type_list_api(request, msg_type):  | 
            ||
| 54 | 67 | 
                     page = int(request.POST.get('page', 0) or request.GET.get('page', 0) or 1)
               | 
            
| 55 | 68 | 
                     num = int(request.POST.get('num', 0) or request.GET.get('num', 0) or settings.MESSAGE_NUM_PER_PAGE)
               | 
            
| 56 | 69 | 
                 | 
            
| 57 | 
                - type_messages = UserMessageInfo.objects.filter(  | 
            |
| 58 | 
                - to_uid=user_id,  | 
            |
| 59 | 
                - msg_type=msg_type,  | 
            |
| 60 | 
                - status=True,  | 
            |
| 61 | 
                - ).order_by(  | 
            |
| 70 | 
                + if msg_type == UserMessageInfo.SYSTEM:  | 
            |
| 71 | 
                + deleted_message_ids = get_system_message_delete_info(user_id)  | 
            |
| 72 | 
                + type_messages = SystemMessageInfo.objects.filter(  | 
            |
| 73 | 
                + status=True,  | 
            |
| 74 | 
                + ).exclude(  | 
            |
| 75 | 
                + pk__in=deleted_message_ids,  | 
            |
| 76 | 
                + )  | 
            |
| 77 | 
                + else:  | 
            |
| 78 | 
                + type_messages = UserMessageInfo.objects.filter(  | 
            |
| 79 | 
                + to_uid=user_id,  | 
            |
| 80 | 
                + msg_type=msg_type,  | 
            |
| 81 | 
                + status=True,  | 
            |
| 82 | 
                + )  | 
            |
| 83 | 
                + type_messages = type_messages.order_by(  | 
            |
| 62 | 84 | 
                '-pk'  | 
            
| 63 | 85 | 
                )  | 
            
| 64 | 86 | 
                type_messages, left = pagination(type_messages, page, num)  | 
            
| 65 | 
                - type_messages = [msg.msg_info for msg in type_messages]  | 
            |
| 87 | 
                + type_messages = [msg.msg_info(user_id) for msg in type_messages]  | 
            |
| 66 | 88 | 
                 | 
            
| 67 | 89 | 
                     return JsonResponse({
               | 
            
| 68 | 90 | 
                'status': 200,  | 
            
                @@ -74,16 +96,35 @@ def message_type_list_api(request, msg_type):  | 
            ||
| 74 | 96 | 
                })  | 
            
| 75 | 97 | 
                 | 
            
| 76 | 98 | 
                 | 
            
| 77 | 
                -def message_read_api(request):  | 
            |
| 99 | 
                +def message_type_read_api(request, msg_type=None):  | 
            |
| 78 | 100 | 
                """  | 
            
| 79 | 101 | 
                消息读取  | 
            
| 80 | 102 | 
                :param request:  | 
            
| 81 | 103 | 
                :return:  | 
            
| 82 | 104 | 
                """  | 
            
| 83 | 
                -    pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
               | 
            |
| 84 | 105 | 
                     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
               | 
            
| 85 | 
                -  | 
            |
| 86 | 
                - UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True)  | 
            |
| 106 | 
                +    pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
               | 
            |
| 107 | 
                +    _all = request.POST.get('all', '') or request.GET.get('all', '')
               | 
            |
| 108 | 
                +  | 
            |
| 109 | 
                + # 用户校验  | 
            |
| 110 | 
                + try:  | 
            |
| 111 | 
                + user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 112 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 113 | 
                + return response(UserStatusCode.USER_NOT_FOUND)  | 
            |
| 114 | 
                +  | 
            |
| 115 | 
                + if msg_type == UserMessageInfo.SYSTEM:  | 
            |
| 116 | 
                + if pk > 0: # 系统消息单个读取  | 
            |
| 117 | 
                + if not SystemMessageInfo.objects.filter(pk=pk).exists():  | 
            |
| 118 | 
                + return response(MessageStatusCode.MESSAGE_NOT_FOUND)  | 
            |
| 119 | 
                + SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=pk)  | 
            |
| 120 | 
                + if _all: # 系统消息全部读取  | 
            |
| 121 | 
                + for msg in SystemMessageInfo.objects.filter(status=True):  | 
            |
| 122 | 
                + SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk)  | 
            |
| 123 | 
                + else:  | 
            |
| 124 | 
                + if pk > 0: # 用户(点赞/评论)消息单个读取  | 
            |
| 125 | 
                + UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True)  | 
            |
| 126 | 
                + if _all: # 用户消息(点赞/评论)全部读取  | 
            |
| 127 | 
                + UserMessageInfo.objects.filter(to_uid=user_id, msg_type=msg_type).update(read=True)  | 
            |
| 87 | 128 | 
                 | 
            
| 88 | 129 | 
                     return JsonResponse({
               | 
            
| 89 | 130 | 
                'status': 200,  | 
            
                @@ -91,7 +132,7 @@ def message_read_api(request):  | 
            ||
| 91 | 132 | 
                })  | 
            
| 92 | 133 | 
                 | 
            
| 93 | 134 | 
                 | 
            
| 94 | 
                -def message_delete_api(request, msg_type=None):  | 
            |
| 135 | 
                +def message_type_delete_api(request, msg_type=None):  | 
            |
| 95 | 136 | 
                """  | 
            
| 96 | 137 | 
                消息删除  | 
            
| 97 | 138 | 
                :param request:  | 
            
                @@ -99,12 +140,29 @@ def message_delete_api(request, msg_type=None):  | 
            ||
| 99 | 140 | 
                :return:  | 
            
| 100 | 141 | 
                """  | 
            
| 101 | 142 | 
                     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
               | 
            
| 102 | 
                -  | 
            |
| 103 | 
                - if msg_type:  | 
            |
| 104 | 
                - UserMessageInfo.objects.filter(to_uid=user_id, msg_type=msg_type).update(status=False)  | 
            |
| 143 | 
                +    pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
               | 
            |
| 144 | 
                +    _all = request.POST.get('all', '') or request.GET.get('all', '')
               | 
            |
| 145 | 
                +  | 
            |
| 146 | 
                + # 用户校验  | 
            |
| 147 | 
                + try:  | 
            |
| 148 | 
                + user = UserInfo.objects.get(user_id=user_id)  | 
            |
| 149 | 
                + except UserInfo.DoesNotExist:  | 
            |
| 150 | 
                + return response(UserStatusCode.USER_NOT_FOUND)  | 
            |
| 151 | 
                +  | 
            |
| 152 | 
                + if msg_type == UserMessageInfo.SYSTEM:  | 
            |
| 153 | 
                + if pk > 0: # 系统消息单个删除  | 
            |
| 154 | 
                + if not SystemMessageInfo.objects.filter(pk=pk).exists():  | 
            |
| 155 | 
                + return response(MessageStatusCode.MESSAGE_NOT_FOUND)  | 
            |
| 156 | 
                + SystemMessageDeleteInfo.objects.get_or_create(user_id=user_id, msg_id=pk)  | 
            |
| 157 | 
                + if _all: # 系统消息全部删除  | 
            |
| 158 | 
                + for msg in SystemMessageInfo.objects.filter(status=True):  | 
            |
| 159 | 
                + SystemMessageDeleteInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk)  | 
            |
| 160 | 
                + set_system_message_delete_info(user_id)  | 
            |
| 105 | 161 | 
                else:  | 
            
| 106 | 
                -        pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
               | 
            |
| 107 | 
                - UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(status=False)  | 
            |
| 162 | 
                + if pk > 0: # 用户(点赞/评论)消息单个删除  | 
            |
| 163 | 
                + UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(status=False)  | 
            |
| 164 | 
                + if _all: # 用户消息(点赞/评论)全部删除  | 
            |
| 165 | 
                + UserMessageInfo.objects.filter(to_uid=user_id, msg_type=msg_type).update(status=False)  | 
            |
| 108 | 166 | 
                 | 
            
| 109 | 167 | 
                     return JsonResponse({
               | 
            
| 110 | 168 | 
                'status': 200,  | 
            
                @@ -1,7 +1,7 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                # 用户相关  | 
            
| 4 | 
                -PROFILE_INFO = 'profile:info:%s' # STRING,用户信息,uid  | 
            |
| 4 | 
                +PROFILE_INFO = 'profile:info:%s' # STRING,用户信息,user_id  | 
            |
| 5 | 5 | 
                 | 
            
| 6 | 6 | 
                # 群组相关  | 
            
| 7 | 7 | 
                GROUP_INFO = 'group:info:%s' # STRING,群组信息,group_id  | 
            
                @@ -16,3 +16,6 @@ GROUP_USERS_QUIT_SET = 'group:users:quit:set:%s' # SET,群组用户退出集  | 
            ||
| 16 | 16 | 
                 | 
            
| 17 | 17 | 
                # 群组照片相关  | 
            
| 18 | 18 | 
                GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s' # STRING,群组最后一张照片PK,group_id  | 
            
| 19 | 
                +  | 
            |
| 20 | 
                +# 系统消息相关  | 
            |
| 21 | 
                +SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s' # STRING,系统消息删除信息,user_id  | 
            
                @@ -0,0 +1,28 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +from django.conf import settings  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from message.models import SystemMessageDeleteInfo  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +from utils.redis.rkeys import SYSTEM_MESSAGE_DELETED_INFO  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +import json  | 
            |
| 10 | 
                +  | 
            |
| 11 | 
                +  | 
            |
| 12 | 
                +r = settings.REDIS_CACHE  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                +  | 
            |
| 15 | 
                +# 系统消息相关  | 
            |
| 16 | 
                +  | 
            |
| 17 | 
                +  | 
            |
| 18 | 
                +def set_system_message_delete_info(user_id):  | 
            |
| 19 | 
                + """ 设置系统消息删除信息 """  | 
            |
| 20 | 
                + deleted_messages = SystemMessageDeleteInfo.objects.filter(user_id=user_id, status=True)  | 
            |
| 21 | 
                + deleted_message_ids = [msg.msg_id for msg in deleted_messages]  | 
            |
| 22 | 
                + r.set(SYSTEM_MESSAGE_DELETED_INFO % user_id, json.dumps(deleted_message_ids))  | 
            |
| 23 | 
                + return deleted_message_ids  | 
            |
| 24 | 
                +  | 
            |
| 25 | 
                +  | 
            |
| 26 | 
                +def get_system_message_delete_info(user_id):  | 
            |
| 27 | 
                + """ 获取系统消息删除信息 """  | 
            |
| 28 | 
                + return json.loads(r.get(SYSTEM_MESSAGE_DELETED_INFO % user_id) or '[]') or set_system_message_delete_info(user_id)  |