新增消息通知部分功能
parent
132e02d856
commit
de20a18121
|
@ -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() # 创建时间
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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}"
|
|
@ -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__"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue