通知消息完善

pull/1/head
李强 2021-03-08 00:14:07 +08:00
parent fcdfa6aa7b
commit 50f5b88146
8 changed files with 112 additions and 20 deletions

View File

@ -211,6 +211,8 @@ class UserProfileSerializer(CustomModelSerializer):
"""
admin = serializers.SerializerMethodField(read_only=True)
deptId = serializers.IntegerField(source='dept.id', read_only=True)
# 未读通知数量
# unread_msg_count = serializers.SerializerMethodField(read_only=True)
def get_admin(self, obj: UserProfile):
role_list = obj.role.all().values_list('admin', flat=True)
@ -218,6 +220,13 @@ class UserProfileSerializer(CustomModelSerializer):
return True
return False
# def get_unread_msg_count(self, obj: UserProfile):
# UserProfile.objects.all()
# role_list = obj.role.all().values_list('admin', flat=True)
# if True in list(set(role_list)):
# return True
# return False
class Meta:
model = UserProfile
depth = 1

View File

@ -1,6 +1,9 @@
from django.db import models
from django.db.models import *
from apps.op_drf.fields import UpdateDateTimeField, CreateDateTimeField
from apps.op_drf.models import CoreModel
from apps.permission.models import UserProfile
"""
消息通知模型
@ -8,14 +11,14 @@ from apps.op_drf.models import CoreModel
class MessagePush(CoreModel):
content = TextField(verbose_name="通知内容")
title = CharField(max_length=128, verbose_name="通知标题")
is_read = BooleanField(default=False, verbose_name="是否已读")
message_type = CharField(max_length=64, verbose_name="消息类型")
is_reviewed = BooleanField(default=False, verbose_name="是否审核")
is_send = BooleanField(default=False, verbose_name="是否已发送")
recipient_id = ManyToManyField(to="permission.UserProfile", db_constraint=False, null=True, blank=True,
related_name="recipient", related_query_name="recipient_query")
content = TextField(verbose_name="通知内容")
message_type = CharField(max_length=8, verbose_name="消息类型")
is_reviewed = BooleanField(default=True, verbose_name="是否审核")
status = CharField(max_length=8, verbose_name="消息状态")
user = ManyToManyField(to="permission.UserProfile",
related_name="user", related_query_name="user_query", through='MessagePushUser',
through_fields=('message_push', 'user'))
class Meta:
verbose_name = '消息通知'
@ -23,3 +26,20 @@ class MessagePush(CoreModel):
def __str__(self):
return f"{self.title}"
class MessagePushUser(models.Model):
message_push = ForeignKey(MessagePush, on_delete=CASCADE, db_constraint=False,
related_name="messagepushuser_message_push",
verbose_name='消息通知', help_text='消息通知')
user = ForeignKey(UserProfile, on_delete=CASCADE, db_constraint=False,
related_name="messagepushuser_user",
verbose_name='用户', help_text='用户')
is_read = BooleanField(default=False, verbose_name="是否已读")
update_datetime = UpdateDateTimeField() # 修改时间
create_datetime = CreateDateTimeField() # 创建时间
class Meta:
verbose_name = "消息通知与用户关系"
verbose_name_plural = verbose_name

View File

@ -1,13 +1,13 @@
from rest_framework import serializers
from apps.op_drf.serializers import CustomModelSerializer
from apps.permission.serializers import UserProfileSerializer
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
# ================================================= #
# ************** 字典管理 序列化器 ************** #
# ================================================= #
from permission.serializers import UserProfileSerializer
class DictDataSerializer(CustomModelSerializer):
"""
@ -155,20 +155,48 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer):
fields = '__all__'
# ================================================= #
# ************** 消息通知 序列化器 ************** #
# ================================================= #
class MessagePushSerializer(CustomModelSerializer):
"""消息通知 序列化器"""
"""
消息通知 简单序列化器
"""
# users = UserProfileSerializer(read_only=True)
users = serializers.SerializerMethodField(read_only=True)
def get_users(self, obj):
return UserProfileSerializer(obj.user.all(), many=True).data
# recipient_id = UserProfileSerializer()
class Meta:
model = MessagePush
fields = "__all__"
depth = 1
def save(self, **kwargs):
return super().save(**kwargs)
class MessagePushCreateUpdateSerializer(CustomModelSerializer):
"""
消息通知 创建/更新时的列化器
"""
class Meta:
model = MessagePush
fields = "__all__"
class ExportMessagePushSerializer(CustomModelSerializer):
"""
导出 消息通知 简单序列化器
"""
users = serializers.CharField(read_only=True)
def get_users(self, obj):
return ','.join(MessagePush.objects.filter(id=obj.id).values_list('user__username', flat=True))
class Meta:
model = MessagePush
fields = (
'id', 'title', 'content', 'message_type', 'is_reviewed', 'status', 'users', 'creator', 'modifier',
'update_datetime', 'create_datetime')

View File

@ -22,6 +22,8 @@ urlpatterns = [
# 用户获取个人消息通知列表页
re_path('message/list/(?P<pk>.*)/', MessagePushModelViewSet.as_view({"get": "get_message_list"})),
# 用户获取个人通知列表
re_path('message/receive/', MessagePushModelViewSet.as_view({"get": "get_received_messages"}))
re_path('message/receive/', MessagePushModelViewSet.as_view({"get": "get_received_messages"})),
# 消息通知导出
re_path('message/export/', MessagePushModelViewSet.as_view({'get': 'export',})),
]
urlpatterns += router.urls

View File

@ -1,5 +1,6 @@
from rest_framework.request import Request
from apps.op_drf.filters import DataLevelPermissionsFilter
from apps.op_drf.viewsets import CustomModelViewSet
from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
@ -7,8 +8,7 @@ from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSeri
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
MessagePushSerializer, MessagePushCreateUpdateSerializer
from apps.op_drf.filters import DataLevelPermissionsFilter
MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer
from utils.export_excel import export_excel_save_model
from utils.response import SuccessResponse
@ -151,9 +151,8 @@ class MessagePushModelViewSet(CustomModelViewSet):
serializer_class = MessagePushSerializer
create_serializer_class = MessagePushCreateUpdateSerializer
update_serializer_class = MessagePushCreateUpdateSerializer
extra_filter_backends = []
ordering = "id" # 默认排序
extra_filter_backends = [DataLevelPermissionsFilter]
ordering = "-update_datetime" # 默认排序
def get_message_list(self, request: Request, *args, **kwargs):
"""
@ -189,3 +188,15 @@ class MessagePushModelViewSet(CustomModelViewSet):
"""
pass
def export(self, request: Request, *args, **kwargs):
"""
导出岗位
:param request:
:param args:
:param kwargs:
:return:
"""
field_data = ['消息序号', '标题', '内容', '消息类型', '是否审核', '消息状态','通知接收消息用户', '创建者', '修改者', '修改时间', '创建时间']
data = ExportMessagePushSerializer(MessagePush.objects.all(), many=True).data
return SuccessResponse(export_excel_save_model(request, field_data, data, '导出岗位数据.xls'))

View File

@ -28,7 +28,7 @@ MONGO_PORT = 27017
REDIS_DB = 1
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_PASSWORD = 'q1w2e3r4T%Y^U&'
# ================================================= #
# ************** 默认配置 ************** #

View File

@ -132,7 +132,7 @@ def export_excel_save_model(request,field_data,data,FilName):
savefile.type = 'application/vnd.ms-excel'
savefile.size = os.path.getsize(os.path.join(settings.MEDIA_ROOT, file_rul))
savefile.address = '本地存储'
savefile.creator = request.user.username
savefile.creator = request.user.id
savefile.modifier = request.user.username
savefile.save()
return SaveFileSerializer(savefile).data

View File

@ -0,0 +1,22 @@
<template>
</template>
<script>
export default {
name: "message",
data() {
return {}
},
created() {
},
mounted() {
},
methods: {}
}
</script>
<style scoped>
</style>