新增消息通知部分功能

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() # 描述 description = DescriptionField() # 描述
creator = models.ForeignKey(to='permission.UserProfile', related_query_name='creator_query', null=True, 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() # 修改者 modifier = ModifierCharField() # 修改者
update_datetime = UpdateDateTimeField() # 修改时间 update_datetime = UpdateDateTimeField() # 修改时间
create_datetime = CreateDateTimeField() # 创建时间 create_datetime = CreateDateTimeField() # 创建时间

View File

@ -3,3 +3,5 @@ from ..models.dict_data import DictData
from ..models.dict_details import DictDetails from ..models.dict_details import DictDetails
from ..models.web_set import WebSet from ..models.web_set import WebSet
from ..models.save_file import SaveFile 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 rest_framework import serializers
from apps.op_drf.serializers import CustomModelSerializer 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): class DictDataSerializer(CustomModelSerializer):
""" """
@ -105,7 +106,7 @@ class ExportConfigSettingsSerializer(CustomModelSerializer):
class Meta: class Meta:
model = ConfigSettings model = ConfigSettings
fields = ( fields = (
'id', 'configName', 'configKey', 'configValue', 'configType', 'status', 'creator', 'modifier', 'remark') 'id', 'configName', 'configKey', 'configValue', 'configType', 'status', 'creator', 'modifier', 'remark')
class ConfigSettingsCreateUpdateSerializer(CustomModelSerializer): class ConfigSettingsCreateUpdateSerializer(CustomModelSerializer):
@ -152,3 +153,22 @@ class SaveFileCreateUpdateSerializer(CustomModelSerializer):
class Meta: class Meta:
model = SaveFile model = SaveFile
fields = '__all__' 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 rest_framework.routers import DefaultRouter
from apps.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \ from apps.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \
ConfigSettingsModelViewSet, SaveFileModelViewSet ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet
router = DefaultRouter() router = DefaultRouter()
router.register(r'dict/type', DictDataModelViewSet) router.register(r'dict/type', DictDataModelViewSet)
router.register(r'dict/data', DictDetailsModelViewSet) router.register(r'dict/data', DictDetailsModelViewSet)
router.register(r'config', ConfigSettingsModelViewSet) router.register(r'config', ConfigSettingsModelViewSet)
router.register(r'savefile', SaveFileModelViewSet) router.register(r'savefile', SaveFileModelViewSet)
router.register(r'message', MessagePushModelViewSet)
urlpatterns = [ urlpatterns = [
re_path('dict/get/type/(?P<pk>.*)/', DictDetailsModelViewSet.as_view({'get': 'dict_details_list'})), 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'})), 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/type/export/', DictDataModelViewSet.as_view({'get': 'export'})),
# 导出字典详情数据 # 导出字典详情数据
re_path('dict/data/export/', DictDetailsModelViewSet.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 urlpatterns += router.urls

View File

@ -2,11 +2,12 @@ from rest_framework.request import Request
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 from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \ from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \ DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
MessagePushSerializer, MessagePushCreateUpdateSerializer
from apps.op_drf.filters import DataLevelPermissionsFilter 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
@ -123,7 +124,7 @@ class ConfigSettingsModelViewSet(CustomModelViewSet):
:param kwargs: :param kwargs:
:return: :return:
""" """
field_data = ['参数主键', '参数名称', '参数键名', '参数键值', '系统内置', '参数状态', '创建者', '修改者', '备注'] field_data = ['参数主键', '参数名称', '参数键名', '参数键值', '系统内置', '参数状态', '创建者', '修改者', '备注']
data = ExportConfigSettingsSerializer(ConfigSettings.objects.all(), many=True).data data = ExportConfigSettingsSerializer(ConfigSettings.objects.all(), many=True).data
return SuccessResponse(export_excel_save_model(request, field_data, data, '导出参数管理数据.xls')) return SuccessResponse(export_excel_save_model(request, field_data, data, '导出参数管理数据.xls'))
@ -140,3 +141,51 @@ class SaveFileModelViewSet(CustomModelViewSet):
extra_filter_backends = [DataLevelPermissionsFilter] extra_filter_backends = [DataLevelPermissionsFilter]
search_fields = ('configName',) search_fields = ('configName',)
ordering = 'id' # 默认排序 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