通知消息完善

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) admin = serializers.SerializerMethodField(read_only=True)
deptId = serializers.IntegerField(source='dept.id', 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): def get_admin(self, obj: UserProfile):
role_list = obj.role.all().values_list('admin', flat=True) role_list = obj.role.all().values_list('admin', flat=True)
@ -218,6 +220,13 @@ class UserProfileSerializer(CustomModelSerializer):
return True return True
return False 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: class Meta:
model = UserProfile model = UserProfile
depth = 1 depth = 1

View File

@ -1,6 +1,9 @@
from django.db import models
from django.db.models import * from django.db.models import *
from apps.op_drf.fields import UpdateDateTimeField, CreateDateTimeField
from apps.op_drf.models import CoreModel 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): class MessagePush(CoreModel):
content = TextField(verbose_name="通知内容")
title = CharField(max_length=128, verbose_name="通知标题") title = CharField(max_length=128, verbose_name="通知标题")
is_read = BooleanField(default=False, verbose_name="是否已读") content = TextField(verbose_name="通知内容")
message_type = CharField(max_length=64, verbose_name="消息类型") message_type = CharField(max_length=8, verbose_name="消息类型")
is_reviewed = BooleanField(default=False, verbose_name="是否审核") is_reviewed = BooleanField(default=True, verbose_name="是否审核")
is_send = BooleanField(default=False, verbose_name="是否已发送") status = CharField(max_length=8, verbose_name="消息状态")
recipient_id = ManyToManyField(to="permission.UserProfile", db_constraint=False, null=True, blank=True, user = ManyToManyField(to="permission.UserProfile",
related_name="recipient", related_query_name="recipient_query") related_name="user", related_query_name="user_query", through='MessagePushUser',
through_fields=('message_push', 'user'))
class Meta: class Meta:
verbose_name = '消息通知' verbose_name = '消息通知'
@ -23,3 +26,20 @@ class MessagePush(CoreModel):
def __str__(self): def __str__(self):
return f"{self.title}" 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 rest_framework import serializers
from apps.op_drf.serializers import CustomModelSerializer from apps.op_drf.serializers import CustomModelSerializer
from apps.permission.serializers import UserProfileSerializer
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
# ================================================= # # ================================================= #
# ************** 字典管理 序列化器 ************** # # ************** 字典管理 序列化器 ************** #
# ================================================= # # ================================================= #
from permission.serializers import UserProfileSerializer
class DictDataSerializer(CustomModelSerializer): class DictDataSerializer(CustomModelSerializer):
""" """
@ -155,20 +155,48 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer):
fields = '__all__' fields = '__all__'
# ================================================= #
# ************** 消息通知 序列化器 ************** #
# ================================================= #
class MessagePushSerializer(CustomModelSerializer): 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: class Meta:
model = MessagePush model = MessagePush
fields = "__all__" fields = "__all__"
depth = 1
def save(self, **kwargs): def save(self, **kwargs):
return super().save(**kwargs) return super().save(**kwargs)
class MessagePushCreateUpdateSerializer(CustomModelSerializer): class MessagePushCreateUpdateSerializer(CustomModelSerializer):
"""
消息通知 创建/更新时的列化器
"""
class Meta: class Meta:
model = MessagePush model = MessagePush
fields = "__all__" 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/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 urlpatterns += router.urls

View File

@ -1,5 +1,6 @@
from rest_framework.request import Request from rest_framework.request import Request
from apps.op_drf.filters import DataLevelPermissionsFilter
from apps.op_drf.viewsets import CustomModelViewSet from apps.op_drf.viewsets import CustomModelViewSet
from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
@ -7,8 +8,7 @@ from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSeri
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \ DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \ ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
MessagePushSerializer, MessagePushCreateUpdateSerializer MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer
from apps.op_drf.filters import DataLevelPermissionsFilter
from utils.export_excel import export_excel_save_model from utils.export_excel import export_excel_save_model
from utils.response import SuccessResponse from utils.response import SuccessResponse
@ -151,9 +151,8 @@ class MessagePushModelViewSet(CustomModelViewSet):
serializer_class = MessagePushSerializer serializer_class = MessagePushSerializer
create_serializer_class = MessagePushCreateUpdateSerializer create_serializer_class = MessagePushCreateUpdateSerializer
update_serializer_class = MessagePushCreateUpdateSerializer update_serializer_class = MessagePushCreateUpdateSerializer
extra_filter_backends = [DataLevelPermissionsFilter]
extra_filter_backends = [] ordering = "-update_datetime" # 默认排序
ordering = "id" # 默认排序
def get_message_list(self, request: Request, *args, **kwargs): def get_message_list(self, request: Request, *args, **kwargs):
""" """
@ -189,3 +188,15 @@ class MessagePushModelViewSet(CustomModelViewSet):
""" """
pass 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_DB = 1
REDIS_HOST = '127.0.0.1' REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379 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.type = 'application/vnd.ms-excel'
savefile.size = os.path.getsize(os.path.join(settings.MEDIA_ROOT, file_rul)) savefile.size = os.path.getsize(os.path.join(settings.MEDIA_ROOT, file_rul))
savefile.address = '本地存储' savefile.address = '本地存储'
savefile.creator = request.user.username savefile.creator = request.user.id
savefile.modifier = request.user.username savefile.modifier = request.user.username
savefile.save() savefile.save()
return SaveFileSerializer(savefile).data 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>