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