新增消息通知部分功能

pull/1/head
qianzhengkai 2021-03-07 21:58:56 +08:00
parent 132e02d856
commit de20a18121
6 changed files with 109 additions and 8 deletions

View File

@ -25,7 +25,7 @@ class CoreModel(models.Model):
"""
description = DescriptionField() # 描述
creator = models.ForeignKey(to='permission.UserProfile', related_query_name='creator_query', null=True,
verbose_name='创建者', on_delete=SET_NULL,db_constraint=False) # 创建者
verbose_name='创建者', on_delete=SET_NULL, db_constraint=False) # 创建者
modifier = ModifierCharField() # 修改者
update_datetime = UpdateDateTimeField() # 修改时间
create_datetime = CreateDateTimeField() # 创建时间

View File

@ -3,3 +3,5 @@ from ..models.dict_data import DictData
from ..models.dict_details import DictDetails
from ..models.web_set import WebSet
from ..models.save_file import SaveFile
from ..models.message_push import MessagePush

View File

@ -0,0 +1,25 @@
from django.db.models import *
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")
class Meta:
verbose_name = '消息通知'
verbose_name_plural = verbose_name
def __str__(self):
return f"{self.title}"

View File

@ -1,12 +1,13 @@
from rest_framework import serializers
from apps.op_drf.serializers import CustomModelSerializer
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
# ================================================= #
# ************** 字典管理 序列化器 ************** #
# ================================================= #
from permission.serializers import UserProfileSerializer
class DictDataSerializer(CustomModelSerializer):
"""
@ -105,7 +106,7 @@ class ExportConfigSettingsSerializer(CustomModelSerializer):
class Meta:
model = ConfigSettings
fields = (
'id', 'configName', 'configKey', 'configValue', 'configType', 'status', 'creator', 'modifier', 'remark')
'id', 'configName', 'configKey', 'configValue', 'configType', 'status', 'creator', 'modifier', 'remark')
class ConfigSettingsCreateUpdateSerializer(CustomModelSerializer):
@ -152,3 +153,22 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer):
class Meta:
model = SaveFile
fields = '__all__'
class MessagePushSerializer(CustomModelSerializer):
"""消息通知 序列化器"""
# 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__"

View File

@ -2,13 +2,14 @@ from django.urls import re_path
from rest_framework.routers import DefaultRouter
from apps.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \
ConfigSettingsModelViewSet, SaveFileModelViewSet
ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet
router = DefaultRouter()
router.register(r'dict/type', DictDataModelViewSet)
router.register(r'dict/data', DictDetailsModelViewSet)
router.register(r'config', ConfigSettingsModelViewSet)
router.register(r'savefile', SaveFileModelViewSet)
router.register(r'message', MessagePushModelViewSet)
urlpatterns = [
re_path('dict/get/type/(?P<pk>.*)/', DictDetailsModelViewSet.as_view({'get': 'dict_details_list'})),
re_path('config/configKey/(?P<pk>.*)/', ConfigSettingsModelViewSet.as_view({'get': 'get_config_key'})),
@ -18,5 +19,9 @@ urlpatterns = [
re_path('dict/type/export/', DictDataModelViewSet.as_view({'get': 'export'})),
# 导出字典详情数据
re_path('dict/data/export/', DictDetailsModelViewSet.as_view({'get': 'export'})),
# 用户获取个人消息通知列表页
re_path('message/list/(?P<pk>.*)/', MessagePushModelViewSet.as_view({"get": "get_message_list"})),
# 用户获取个人通知列表
re_path('message/receive/', MessagePushModelViewSet.as_view({"get": "get_received_messages"}))
]
urlpatterns += router.urls

View File

@ -2,11 +2,12 @@ from rest_framework.request import Request
from apps.op_drf.viewsets import CustomModelViewSet
from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
MessagePushSerializer, MessagePushCreateUpdateSerializer
from apps.op_drf.filters import DataLevelPermissionsFilter
from utils.export_excel import export_excel_save_model
from utils.response import SuccessResponse
@ -123,7 +124,7 @@ class ConfigSettingsModelViewSet(CustomModelViewSet):
:param kwargs:
:return:
"""
field_data = ['参数主键', '参数名称', '参数键名', '参数键值', '系统内置', '参数状态', '创建者', '修改者', '备注']
field_data = ['参数主键', '参数名称', '参数键名', '参数键值', '系统内置', '参数状态', '创建者', '修改者', '备注']
data = ExportConfigSettingsSerializer(ConfigSettings.objects.all(), many=True).data
return SuccessResponse(export_excel_save_model(request, field_data, data, '导出参数管理数据.xls'))
@ -140,3 +141,51 @@ class SaveFileModelViewSet(CustomModelViewSet):
extra_filter_backends = [DataLevelPermissionsFilter]
search_fields = ('configName',)
ordering = 'id' # 默认排序
class MessagePushModelViewSet(CustomModelViewSet):
"""
消息推送模型的CRUD视图
"""
queryset = MessagePush.objects.all()
serializer_class = MessagePushSerializer
create_serializer_class = MessagePushCreateUpdateSerializer
update_serializer_class = MessagePushCreateUpdateSerializer
extra_filter_backends = []
ordering = "id" # 默认排序
def get_message_list(self, request: Request, *args, **kwargs):
"""
管理员获取自己的消息列表
"""
messages = self.queryset.filter(**kwargs)
data = MessagePushSerializer(messages, many=True)
return SuccessResponse(msg="返回", data=data)
def get_received_messages(self, request: Request, *args, **kwargs):
"""
用户获取未读消息通知列表
"""
queryset = self.filter_queryset(self.get_queryset())
queryset = queryset.filter(recipient_id=request.user.id, is_read=0)
page = self.paginate_queryset(queryset)
if hasattr(self, 'handle_logging'):
self.handle_logging(request, *args, **kwargs)
if page is not None:
if getattr(self, 'values_queryset', None):
return self.get_paginated_response(page)
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
if getattr(self, 'values_queryset', None):
return SuccessResponse(page)
serializer = self.get_serializer(queryset, many=True)
return SuccessResponse(serializer.data)
def get_received_messages_count(self, request: Request, *args, **kwargs):
"""
获取用户未读消息数量
"""
pass