Jelajahi Sumber

系统消息推送

chenjunkai 6 tahun lalu
induk
melakukan
0993d78bfb
5 mengubah file dengan 210 tambahan dan 4 penghapusan
  1. 2 1
      Ansjer/urls.py
  2. 79 1
      Controller/FeedBack.py
  3. 114 0
      Controller/SysMsg.py
  4. 6 1
      Model/models.py
  5. 9 1
      Service/ModelService.py

+ 2 - 1
Ansjer/urls.py

@@ -5,7 +5,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, EquipmentSensor, S
     AccessLog, Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, AppColophon,\
     EquipmentManager, LogManager, PermissionManager, OTAEquipment, UidappController, shareUserPermission, \
     UserManger, CheckUserData, \
-    UserController, CloudVod, OrderContrller, VodBucket, DetectController,DeviceShare,UserBrandController,StsOssController,UIDPreview
+    UserController, CloudVod, OrderContrller, VodBucket, DetectController,DeviceShare,UserBrandController,StsOssController,UIDPreview,SysMsg
 
 urlpatterns = [
     url(r'^account/authcode$', UserController.authCodeView.as_view()),
@@ -135,6 +135,7 @@ urlpatterns = [
     # 用户反馈信息
     url(r'^feedback/(?P<operation>.*)$', FeedBack.FeedBackView.as_view()),
     url(r'^uidpreview/(?P<operation>.*)$', UIDPreview.UIDPreview.as_view()),
+    url(r'^sysmsg/(?P<operation>.*)$', SysMsg.SysMsgView.as_view()),
 
     # 新的设备接口
     path('Test', Test.Test.as_view()),

+ 79 - 1
Controller/FeedBack.py

@@ -1,3 +1,17 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: AnsjerFormal
+@software: PyCharm
+@DATE: 2019/1/18 10:45
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: SysMsg.py
+@Contact: chanjunkai@163.com
+"""
+
 import time
 import json
 import oss2
@@ -8,6 +22,7 @@ from Model.models import FeedBackModel, StatResModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
+from Service.ModelService import ModelService
 
 
 class FeedBackView(View):
@@ -35,6 +50,10 @@ class FeedBackView(View):
                 return self.do_query(userID, request_dict, response)
             elif operation == 'delete':
                 return self.do_delete(userID, request_dict, response)
+            elif operation == 'queryByAdmin':
+                return self.do_query_by_admin(userID, request_dict, response)
+            elif operation == 'deleteByAdmin':
+                return self.do_delete_by_admin(userID, request_dict, response)
             else:
                 return response.json(414)
         else:
@@ -123,7 +142,7 @@ class FeedBackView(View):
         id = request_dict.get('id', None)
         try:
             fb_qs = FeedBackModel.objects.get(userID_id=userID, id=id)
-            sr_id_list = fb_qs.FS.values_list('id',flat=True)
+            sr_id_list = fb_qs.FS.values_list('id', flat=True)
             StatResModel.objects.filter(id__in=sr_id_list).delete()
             fb_qs.delete()
             # is_delete = StatResModel.objects.filter(id__in=sr_id_list).delete()
@@ -135,3 +154,62 @@ class FeedBackView(View):
             return response.json(500, repr(e))
         else:
             return response.json(0)
+
+    def do_query_by_admin(self, userID, request_dict, response):
+        own_perm = ModelService.check_perm(userID, 40)
+        if own_perm:
+            page = request_dict.get('page', None)
+            line = request_dict.get('line', None)
+            status = request_dict.get('status', None)
+            username = request_dict.get('username', None)
+            if page and line:
+                page = int(page)
+                line = int(line)
+                filter_data = {}
+                if status:
+                    filter_data = {'status': status}
+                if username:
+                    filter_data = {'userID_id': ModelService.get_userID_byname(username)}
+                fb_qs = FeedBackModel.objects.filter()
+                if filter_data:
+                    fb_qs = fb_qs.filter(**filter_data)
+                fb_qs = fb_qs[(page - 1) * line:page * line]. \
+                    values('id', 'status', 'content', 'addTime', 'updTime', 'FS__name')
+                res = {}
+                auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+                bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
+                for fb in fb_qs:
+                    if fb['id'] in res:
+                        if fb['FS__name']:
+                            img_url = bucket.sign_url('GET', fb['FS__name'], 600)
+                            res[fb['id']]['img_url'].append(img_url)
+                    else:
+                        print(fb['FS__name'])
+                        if fb['FS__name']:
+                            img_url = bucket.sign_url('GET', fb['FS__name'], 600)
+                            fb['img_url'] = []
+                            fb['img_url'].append(img_url)
+                        res[fb['id']] = fb
+                return response.json(0, res)
+            else:
+                return response.json(444, 'page,line')
+        else:
+            return response.json(404)
+
+    def do_delete_by_admin(self, userID, request_dict, response):
+        own_perm = ModelService.check_perm(userID, 10)
+        if own_perm:
+
+            id = request_dict.get('id', None)
+            try:
+                fb_qs = FeedBackModel.objects.get(id=id)
+                sr_id_list = fb_qs.FS.values_list('id', flat=True)
+                StatResModel.objects.filter(id__in=sr_id_list).delete()
+                fb_qs.delete()
+                print('----------')
+            except Exception as e:
+                return response.json(500, repr(e))
+            else:
+                return response.json(0)
+        else:
+            return response.json(404)

+ 114 - 0
Controller/SysMsg.py

@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: AnsjerFormal
+@software: PyCharm
+@DATE: 2019/5/18 10:45
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: SysMsg.py
+@Contact: chanjunkai@163.com
+"""
+import time
+
+from django.views.generic.base import View
+
+from Model.models import SysMsgModel, FeedBackModel
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Service.ModelService import ModelService
+
+
+class SysMsgView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        return self.validation(request.GET, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        return self.validation(request.POST, operation)
+
+    def validation(self, request_dict, operation):
+        response = ResponseObject()
+        token = request_dict.get('token', None)
+        tko = TokenObject(token)
+        if tko.code == 0:
+            userID = tko.userID
+            if operation == 'pushFeedBack':
+                return self.do_push_msg_feed_back(userID, request_dict, response)
+            elif operation == 'query':
+                return self.do_query(userID, request_dict, response)
+            elif operation == 'queryByAdmin':
+                return self.do_query_by_admin(userID, request_dict, response)
+            else:
+                return response.json(414)
+        else:
+            return response.json(tko.code)
+
+    def do_push_msg_feed_back(self, userID, request_dict, response):
+        own_perm = ModelService.check_perm(userID, 10)
+        if own_perm:
+            fid = request_dict.get('fid', None)
+            msg = request_dict.get('msg', None)
+            if all([fid, msg]):
+                nowTime = int(time.time())
+                fb_qs = FeedBackModel.objects.filter(id=fid)
+                fb_list = fb_qs.values('userID_id')
+                if fb_qs.exists():
+                    create_data = {'userID_id': fb_list[0]['userID_id'], 'msg': msg, 'addTime': nowTime,
+                                   'updTime': nowTime}
+                    try:
+                        SysMsgModel.objects.create(**create_data)
+                        fb_qs.update(status=1)
+                    except Exception as e:
+                        return response.json(500, repr(e))
+                    else:
+                        return response.json(0)
+                else:
+                    return response.json(173)
+            else:
+                return response.json(444, 'cid,msg')
+        else:
+            return response.json(404)
+
+    def do_query(self, userID, request_dict, response):
+        page = request_dict.get('page', None)
+        line = request_dict.get('line', None)
+        if page and line:
+            page = int(page)
+            line = int(line)
+            sm_qs = SysMsgModel.objects.filter(userID_id=userID)[(page - 1) * line:page * line]. \
+                values('status', 'id', 'msg', 'addTime', 'updTime')
+            # sm_qs = SysMsgModel.objects.filter(userID_id=userID)[(page - 1) * line:page * line].values('sta')
+            if sm_qs.exists():
+                return response.json(0, list(sm_qs))
+            else:
+                return response.json(0, [])
+        else:
+            return response.json(444, 'page,line')
+
+    def do_query_by_admin(self, userID, request_dict, response):
+        own_perm = ModelService.check_perm(userID, 40)
+        if own_perm:
+            page = request_dict.get('page', None)
+            line = request_dict.get('line', None)
+            username = request_dict.get('username', None)
+            if page and line:
+                page = int(page)
+                line = int(line)
+                sm_qs = SysMsgModel.objects.filter()
+                if username:
+                    userID_list = ModelService.get_user_list_by_username(username)
+                    sm_qs = sm_qs.filter(userID_id__in=userID_list)
+                sm_qs = sm_qs[(page - 1) * line:page * line]. \
+                    values('status', 'id', 'msg', 'addTime', 'updTime', 'userID__NickName')
+                return response.json(0, list(sm_qs))
+            else:
+                return response.json(444, 'page,line')
+        else:
+            return response.json(404)

+ 6 - 1
Model/models.py

@@ -649,9 +649,14 @@ class UID_Preview(models.Model):
         ordering = ('id',)
 
 
+# 系统发送信息新到用户
 class SysMsgModel(models.Model):
-    id =models.AutoField(primary_key=True,verbose_name='自增id')
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
     msg = models.TextField(blank=True, default='', verbose_name=u'更新内容')
+    status = models.SmallIntegerField(verbose_name='是否已读', default=0)  # 0:否,1:是
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    updTime = models.IntegerField(verbose_name='更新时间', default=0)
 
     class Meta:
         db_table = 'sys_msg'

+ 9 - 1
Service/ModelService.py

@@ -1,6 +1,7 @@
 from Model.models import *
 from Service.CommonService import CommonService
 import json
+from django.db.models import Q
 
 
 # 针对模型封装的复用性代码
@@ -77,7 +78,7 @@ class ModelService:
     @staticmethod
     def get_userID_byname(username):
         try:
-            device_user = Device_User.objects.get(username=username)
+            device_user = Device_User.objects.get(Q(username=username) | Q(userEmail=username) | Q(phone=username))
         except Exception as e:
             return None
         else:
@@ -111,3 +112,10 @@ class ModelService:
             return False
         else:
             return True
+
+    # 通过用户名获取userIDLIST
+    @staticmethod
+    def get_user_list_by_username(username):
+        userID_list = Device_User.objects.filter(Q(username=username) | Q(userEmail=username) | Q(phone=username)). \
+            values_list('userID', flat=True)
+        return userID_list