chenjunkai 6 years ago
parent
commit
7326868557
3 changed files with 176 additions and 59 deletions
  1. 134 51
      Controller/DetectController.py
  2. 5 7
      Controller/SysMsg.py
  3. 37 1
      Model/models.py

+ 134 - 51
Controller/DetectController.py

@@ -26,13 +26,13 @@ from django.views.generic.base import View
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Ansjer.config import BASE_DIR
 from Ansjer.config import BASE_DIR
 from Ansjer.config import SERVER_DOMAIN
 from Ansjer.config import SERVER_DOMAIN
-from Model.models import Device_Info, VodHlsModel, UID_App
-from Model.models import Equipment_Info
+from Model.models import Device_Info, VodHlsModel, UID_App, Equipment_Info, UidSetModel, UidPushModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
 from Object.UidTokenObject import UidTokenObject
 from django.http import JsonResponse
 from django.http import JsonResponse
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
+from django.db import transaction
 
 
 
 
 # http://192.168.136.40:8077/detect/changeStatus?uid=JW3684H8BSHG9TTM111A&token_val=18071adc03536302f34&appBundleId=com.ansjer.zccloud_ab&push_type=2&token=local&status=1&app_type=1
 # http://192.168.136.40:8077/detect/changeStatus?uid=JW3684H8BSHG9TTM111A&token_val=18071adc03536302f34&appBundleId=com.ansjer.zccloud_ab&push_type=2&token=local&status=1&app_type=1
@@ -130,7 +130,7 @@ class DetectControllerView(View):
             res.append(p)
             res.append(p)
         return response.json(0, {'datas': res, 'count': count})
         return response.json(0, {'datas': res, 'count': count})
 
 
-    def do_change_status(self, userID, request_dict, response):
+    def do_change_status11(self, userID, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
         token_val = request_dict.get('token_val', None)
         token_val = request_dict.get('token_val', None)
         appBundleId = request_dict.get('appBundleId', None)
         appBundleId = request_dict.get('appBundleId', None)
@@ -197,14 +197,91 @@ class DetectControllerView(View):
             else:
             else:
                 return response.json(173)
                 return response.json(173)
 
 
+    def do_change_status(self, userID, request_dict, response):
+        uid = request_dict.get('uid', None)
+        token_val = request_dict.get('token_val', None)
+        appBundleId = request_dict.get('appBundleId', None)
+        app_type = request_dict.get('app_type', None)
+        push_type = request_dict.get('push_type', None)
+        status = request_dict.get('status', None)
+        m_code = request_dict.get('m_code', None)
+        # interval = request_dict.get('interval', None)
+        print('status:' + status)
+        if not status:
+            return response.json(444, 'status')
+        # 关闭推送
+        if not all([appBundleId, app_type, token_val, uid, m_code]):
+            return response.json(444, 'appBundleId,app_type,token_val,uid,m_code')
+        dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
+        status = int(status)
+        if dvqs.exists():
+            nowTime = int(time.time())
+            uid_set_qs = UidSetModel.objects. \
+                filter(uid=uid, uidpushmodel__userID_id=userID, uidpushmodel__m_code=m_code)
+            # 判断是否有曾经开启过
+            if uid_set_qs.exists():
+                uid_push_update_dict = {
+                    'appBundleId': appBundleId,
+                    'app_type': app_type,
+                    'push_type': push_type,
+                    'token_val': token_val,
+                    'updTime': nowTime
+                }
+                uid_set_qs.update(detect_status=status, updTime=nowTime)
+                UidPushModel.objects.filter(userID_id=userID, m_code=m_code, uid_set__uid=uid). \
+                    update(**uid_push_update_dict)
+                utko = UidTokenObject()
+                # right
+                utko.generate(data={'uid': uid})
+                detectUrl = "{SERVER_DOMAIN}notify/push?uidToken={uidToken}". \
+                    format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
+                return response.json(0, {'detectUrl': detectUrl})
+            else:
+                uid_set_qs = UidSetModel.objects.filter(uid=uid)
+                # 判断uid push是否绑定
+                if not uid_set_qs.exists():
+                    uid_set_create_dict = {
+                        'uid': uid,
+                        'addTime': nowTime,
+                        'updTime': nowTime,
+                        'detect_status': status
+                    }
+                    # 添加设备配置
+                    uid_set_qs = UidSetModel.objects.create(**uid_set_create_dict)
+                    # from var_dump import var_dump
+                    # var_dump(uid_set_qs)
+                    # print(uid_set_qs)
+                    uid_set_id = uid_set_qs.id
+                else:
+                    uid_set_id = uid_set_qs[0].id
+                uid_push_create_dict = {
+                    'uid_set_id': uid_set_id,
+                    'userID_id': userID,
+                    'appBundleId': appBundleId,
+                    'app_type': app_type,
+                    'push_type': push_type,
+                    'token_val': token_val,
+                    'm_code': m_code,
+                    'addTime': nowTime,
+                    'updTime': nowTime
+                }
+                # 绑定设备推送
+                UidPushModel.objects.create(**uid_push_create_dict)
+                utko = UidTokenObject()
+                utko.generate(data={'uid': uid})
+                detectUrl = "{SERVER_DOMAIN}notify/push?uidToken={uidToken}". \
+                    format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
+                return response.json(0, {'detectUrl': detectUrl})
+        else:
+            return response.json(14)
+
     def do_update_interval(self, userID, request_dict, response):
     def do_update_interval(self, userID, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
         interval = request_dict.get('interval', None)
         interval = request_dict.get('interval', None)
-        # now_time = int(time.time())
-        uid_app_qs = UID_App.objects.filter(userID_id=userID, uid=uid)
-        if uid_app_qs.exists():
-            UID_App.objects.filter(uid=uid).update(interval=int(interval))
-            return response.json(0)
+        uid_set_qs = UidSetModel.objects. \
+            filter(uid=uid, uidpushmodel__userID_id=userID)
+        if uid_set_qs.exists():
+            uid_set_qs.update(interval=int(interval))
         else:
         else:
             return response.json(173)
             return response.json(173)
 
 
@@ -238,51 +315,57 @@ class NotificationView(View):
             # return response.json(444)
             # return response.json(444)
         utko = UidTokenObject(uidToken)
         utko = UidTokenObject(uidToken)
         uid = utko.UID
         uid = utko.UID
-        uaqs = UID_App.objects.filter(uid=uid, status=1). \
-            values('token_val', 'app_type', 'appBundleId', 'push_type', 'uid', 'userID_id', 'userID__NickName',
-                   'interval')
-        if uaqs.exists():
-            redisObj = RedisObject(db=6)
-
-            auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
-            bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
-
-            for ua in uaqs:
-                push_type = ua['push_type']
-                pkey = '{uid}_{channel}_ptl'.format(uid=uid, channel=channel)
-                if redisObj.get_data(key=pkey):
-                    res_data = {'code': 0, 'msg': 'success,!'}
-                    return JsonResponse(status=200, data=res_data)
-                else:
-                    if ua['interval']:
-                        redisObj.set_data(key=pkey, val=1, expire=ua['interval'])
-                # ios apns
-                if push_type == 0:
-                    self.do_apns(request_dict, ua, response)
-                # android gcm
-                elif push_type == 1:
-                    self.do_gmc(request_dict, ua, response)
-                # android jpush
-                elif push_type == 2:
-                    self.do_jpush(request_dict, ua, response)
-
-                # self.do_save_equipment_info(ua, n_time, channel, event_type, is_st)
-            # 需求不一样,所以这么做的
-            self.do_bulk_create_info(uaqs, n_time, channel, event_type, is_st)
-            if is_st == '0' or is_st == '2':
-                return JsonResponse(status=200, data={'code': 0, 'msg': 'success'})
+        uid_set_qs = UidSetModel.objects.filter(uid=uid, detect_status=1)
+        if uid_set_qs.exists():
+            uid_set_id = uid_set_qs[0].id
+            uid_push_qs = UidPushModel.objects.filter(uid_set__id=uid_set_id).values('token_val', 'app_type',
+                                                                                     'appBundleId', 'push_type', 'uid',
+                                                                                     'userID_id', 'userID__NickName',
+                                                                                     'interval')
+            if uid_set_qs.exists():
+                pass
             else:
             else:
-                # Endpoint以杭州为例,其它Region请按实际情况填写。
-                obj = '{uid}/{channel}/{filename}.jpeg'.format(uid=uid, channel=channel, filename=n_time)
-                # 设置此签名URL在60秒内有效。
-                url = bucket.sign_url('PUT', obj, 7200)
-                res_data = {'code': 0, 'img_push': url, 'msg': 'success'}
-                return JsonResponse(status=200, data=res_data)
-            ############
+                return JsonResponse(status=200, data={'code': 404, 'msg': 'data is not exist'})
         else:
         else:
-            return JsonResponse(status=200, data={
-                'code': 404,
-                'msg': 'data is not exist'})
+            return JsonResponse(status=200, data={'code': 404, 'msg': 'data is not exist'})
+
+        # if uaqs.exists():
+        #     redisObj = RedisObject(db=6)
+        #
+        #     auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+        #     bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+        #
+        #     for ua in uaqs:
+        #         push_type = ua['push_type']
+        #         pkey = '{uid}_{channel}_ptl'.format(uid=uid, channel=channel)
+        #         if redisObj.get_data(key=pkey):
+        #             res_data = {'code': 0, 'msg': 'success,!'}
+        #             return JsonResponse(status=200, data=res_data)
+        #         else:
+        #             if ua['interval']:
+        #                 redisObj.set_data(key=pkey, val=1, expire=ua['interval'])
+        #         # ios apns
+        #         if push_type == 0:
+        #             self.do_apns(request_dict, ua, response)
+        #         # android gcm
+        #         elif push_type == 1:
+        #             self.do_gmc(request_dict, ua, response)
+        #         # android jpush
+        #         elif push_type == 2:
+        #             self.do_jpush(request_dict, ua, response)
+        #
+        #         # self.do_save_equipment_info(ua, n_time, channel, event_type, is_st)
+        #     # 需求不一样,所以这么做的
+        #     self.do_bulk_create_info(uaqs, n_time, channel, event_type, is_st)
+        #     if is_st == '0' or is_st == '2':
+        #         return JsonResponse(status=200, data={'code': 0, 'msg': 'success'})
+        #     else:
+        #         # Endpoint以杭州为例,其它Region请按实际情况填写。
+        #         obj = '{uid}/{channel}/{filename}.jpeg'.format(uid=uid, channel=channel, filename=n_time)
+        #         # 设置此签名URL在60秒内有效。
+        #         url = bucket.sign_url('PUT', obj, 7200)
+        #         res_data = {'code': 0, 'img_push': url, 'msg': 'success'}
+        #         return JsonResponse(status=200, data=res_data)
 
 
     def do_jpush(self, request_dict, uaql, response):
     def do_jpush(self, request_dict, uaql, response):
         event_type = request_dict.get('event_type', None)
         event_type = request_dict.get('event_type', None)

+ 5 - 7
Controller/SysMsg.py

@@ -50,7 +50,7 @@ class SysMsgView(View):
             elif operation == 'delete':
             elif operation == 'delete':
                 return self.do_delete(userID, request_dict, response)
                 return self.do_delete(userID, request_dict, response)
             elif operation == 'deleteByAdmin':
             elif operation == 'deleteByAdmin':
-                return self.do_delete_by_admin(userID,request_dict,response)
+                return self.do_delete_by_admin(userID, request_dict, response)
             else:
             else:
                 return response.json(414)
                 return response.json(414)
         else:
         else:
@@ -74,7 +74,7 @@ class SysMsgView(View):
                     except Exception as e:
                     except Exception as e:
                         return response.json(500, repr(e))
                         return response.json(500, repr(e))
                     else:
                     else:
-                        return response.json(0,{'status':1,'updTime':nowTime})
+                        return response.json(0, {'status': 1, 'updTime': nowTime})
                 else:
                 else:
                     return response.json(173)
                     return response.json(173)
             else:
             else:
@@ -117,7 +117,7 @@ class SysMsgView(View):
                 sm_qs = sm_qs[(page - 1) * line:page * line]. \
                 sm_qs = sm_qs[(page - 1) * line:page * line]. \
                     values('status', 'id', 'msg', 'addTime', 'updTime', 'userID__username')
                     values('status', 'id', 'msg', 'addTime', 'updTime', 'userID__username')
 
 
-                return response.json(0, {'datas':list(sm_qs),'count':count})
+                return response.json(0, {'datas': list(sm_qs), 'count': count})
             else:
             else:
                 return response.json(444, 'page,line')
                 return response.json(444, 'page,line')
         else:
         else:
@@ -154,7 +154,7 @@ class SysMsgView(View):
                 return response.json(173)
                 return response.json(173)
 
 
     def do_delete_by_admin(self, userID, request_dict, response):
     def do_delete_by_admin(self, userID, request_dict, response):
-        own_perm = ModelService.check_perm(userID,10)
+        own_perm = ModelService.check_perm(userID, 10)
         if not own_perm:
         if not own_perm:
             return response.json(404)
             return response.json(404)
         sid = request_dict.get('sid', None)
         sid = request_dict.get('sid', None)
@@ -166,6 +166,4 @@ class SysMsgView(View):
             else:
             else:
                 return response.json(173)
                 return response.json(173)
         else:
         else:
-            return response.json(444,'sid')
-
-
+            return response.json(444, 'sid')

+ 37 - 1
Model/models.py

@@ -361,7 +361,6 @@ class StatResModel(models.Model):
         ordering = ('id',)
         ordering = ('id',)
 
 
 
 
-
 class FeedBackModel(models.Model):
 class FeedBackModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
     userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
@@ -664,3 +663,40 @@ class SysMsgModel(models.Model):
         verbose_name = '系统消息'
         verbose_name = '系统消息'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
         ordering = ('-id',)
         ordering = ('-id',)
+
+
+# 设备推送重构
+# 设备配置表,新
+class UidSetModel(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    uid = models.CharField(max_length=20, verbose_name='设备UID')
+    detect_status = models.SmallIntegerField(default=0, verbose_name='推送开关')  # 状态[0:关闭,1:开启,2:用户解绑]
+    detect_interval = models.IntegerField(verbose_name='推送间隔', default=0)  # 秒
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    updTime = models.IntegerField(verbose_name='更新时间', default=0)
+
+    class Meta:
+        db_table = 'uid_set'
+        verbose_name = u'设备配置'
+        verbose_name_plural = verbose_name
+        ordering = ('id',)
+
+
+# 设备关联用户推送
+class UidPushModel(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
+    uid_set = models.ForeignKey(UidSetModel, to_field='id', on_delete=models.CASCADE)
+    appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
+    app_type = models.IntegerField(default=0, verbose_name=u'app类型 1:ios,2:安卓')
+    push_type = models.IntegerField(default=0, verbose_name=u'推送类型')  # 0,apns 1,安卓gcm 2,极光
+    token_val = models.CharField(default='', max_length=160, verbose_name=u'设备验证令牌')
+    m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    updTime = models.IntegerField(verbose_name='更新时间', default=0)
+
+    class Meta:
+        db_table = 'uid_push'
+        verbose_name = '设备绑定'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)