Forráskód Böngészése

重写消息推送查询、选择删除推送消息、定时删除推送消息

zhangdongming 3 éve
szülő
commit
9c57fc7406

+ 36 - 14
Controller/Cron/CronTaskController.py

@@ -7,6 +7,7 @@
 # @Email   : zhangdongming@asj6.wecom.work
 # @Email   : zhangdongming@asj6.wecom.work
 # @File    : CronTaskController.py
 # @File    : CronTaskController.py
 # @Software: PyCharm
 # @Software: PyCharm
+import datetime
 import time
 import time
 
 
 from django.db import connection, connections, transaction
 from django.db import connection, connections, transaction
@@ -32,7 +33,7 @@ class CronDelDataView(View):
 
 
     def validation(self, request_dict, request, operation):
     def validation(self, request_dict, request, operation):
         response = ResponseObject()
         response = ResponseObject()
-        if operation == 'delAccessLog':   # 定时删除访问接口数据
+        if operation == 'delAccessLog':  # 定时删除访问接口数据
             return self.delAccessLog(response)
             return self.delAccessLog(response)
         elif operation == 'delPushInfo':  # 定时删除推送数据
         elif operation == 'delPushInfo':  # 定时删除推送数据
             return self.delPushInfo(response)
             return self.delPushInfo(response)
@@ -62,14 +63,35 @@ class CronDelDataView(View):
 
 
     @staticmethod
     @staticmethod
     def delPushInfo(response):
     def delPushInfo(response):
-        nowTime = int(time.time())
+        now_time = int(time.time())
         cursor = connections['mysql02'].cursor()
         cursor = connections['mysql02'].cursor()
         try:
         try:
+            # 当前时间转日期
+            local_date_now = str(datetime.datetime.fromtimestamp(int(now_time)).date())
+            # 根据日期获取周几
+            week_val = LocalDateTimeUtil.date_to_week(local_date_now)
+            # 根据当前时间获取7天前时间戳
+            expiration_time = LocalDateTimeUtil.get_before_days_timestamp(now_time, 7)
+            # 每次删除条数
+            size = 10000
+            # 删除7天前的数据
+            sql = "DELETE FROM equipment_info WHERE eventTime<= %s LIMIT %s "
+            if week_val == 1:
+                sql = "DELETE FROM equipment_info_sunday WHERE event_time<= %s LIMIT %s "
+            if week_val == 2:
+                sql = "DELETE FROM equipment_info_monday WHERE event_time<= %s LIMIT %s "
+            if week_val == 3:
+                sql = "DELETE FROM equipment_info_tuesday WHERE event_time<= %s LIMIT %s "
+            if week_val == 4:
+                sql = "DELETE FROM equipment_info_wednesday WHERE event_time<= %s LIMIT %s "
+            if week_val == 5:
+                sql = "DELETE FROM equipment_info_thursday WHERE event_time<= %s LIMIT %s "
+            if week_val == 6:
+                sql = "DELETE FROM equipment_info_friday WHERE event_time<= %s LIMIT %s "
+            if week_val == 7:
+                sql = "DELETE FROM equipment_info_saturday WHERE event_time<= %s LIMIT %s "
             for i in range(5):
             for i in range(5):
-                # 删除7天前的数据
-                sql = "DELETE FROM `equipment_info` WHERE addTime<={} LIMIT 10000".format(
-                    nowTime - 3600 * 24 * 7)
-                cursor.execute(sql)
+                cursor.execute(sql, [expiration_time, size])
             # 关闭游标
             # 关闭游标
             cursor.close()
             cursor.close()
             return response.json(0)
             return response.json(0)
@@ -160,11 +182,11 @@ class CronUpdateDataView(View):
 
 
     def validation(self, request_dict, request, operation):
     def validation(self, request_dict, request, operation):
         response = ResponseObject()
         response = ResponseObject()
-        if operation == 'expiredUidBucket':   # 定时更新过期云存套餐状态
+        if operation == 'expiredUidBucket':  # 定时更新过期云存套餐状态
             return self.expiredUidBucket(response)
             return self.expiredUidBucket(response)
-        elif operation == 'updateUnusedUidBucket':   # 定时更新过期云存关联的未使用套餐状态
+        elif operation == 'updateUnusedUidBucket':  # 定时更新过期云存关联的未使用套餐状态
             return self.updateUnusedUidBucket(response)
             return self.updateUnusedUidBucket(response)
-        elif operation == 'updateUnusedAiService':   # 定时更新过期ai关联的未使用套餐状态
+        elif operation == 'updateUnusedAiService':  # 定时更新过期ai关联的未使用套餐状态
             return self.updateUnusedAiService(response)
             return self.updateUnusedAiService(response)
         else:
         else:
             return response.json(404)
             return response.json(404)
@@ -185,7 +207,7 @@ class CronUpdateDataView(View):
             has_unused=1).values(
             has_unused=1).values(
             "id",
             "id",
             "uid")[
             "uid")[
-            0:1000]
+                              0:1000]
         for expired_uid_bucket in expired_uid_buckets:
         for expired_uid_bucket in expired_uid_buckets:
             unuseds = Unused_Uid_Meal.objects.filter(
             unuseds = Unused_Uid_Meal.objects.filter(
                 uid=expired_uid_bucket['uid']).values(
                 uid=expired_uid_bucket['uid']).values(
@@ -196,7 +218,7 @@ class CronUpdateDataView(View):
                 "expire",
                 "expire",
                 "num",
                 "num",
                 "bucket_id").order_by('addTime')[
                 "bucket_id").order_by('addTime')[
-                0:1]
+                      0:1]
             if not unuseds.exists():
             if not unuseds.exists():
                 continue
                 continue
             unused = unuseds[0]
             unused = unuseds[0]
@@ -230,18 +252,18 @@ class CronUpdateDataView(View):
             use_status=1).values(
             use_status=1).values(
             'id',
             'id',
             'uid')[
             'uid')[
-            0:200]
+                        0:200]
         for ai_service in ai_service_qs:
         for ai_service in ai_service_qs:
             try:
             try:
                 with transaction.atomic():
                 with transaction.atomic():
                     AiService.objects.filter(
                     AiService.objects.filter(
                         id=ai_service['id']).update(
                         id=ai_service['id']).update(
-                        use_status=2)      # 更新过期ai订单状态
+                        use_status=2)  # 更新过期ai订单状态
                     # 如果存在未使用套餐,更新为使用
                     # 如果存在未使用套餐,更新为使用
                     unused_ai_service = AiService.objects.filter(
                     unused_ai_service = AiService.objects.filter(
                         uid=ai_service['uid'],
                         uid=ai_service['uid'],
                         use_status=0).order_by('addTime')[
                         use_status=0).order_by('addTime')[
-                        :1].values(
+                                        :1].values(
                         'id',
                         'id',
                         'endTime')
                         'endTime')
                     if unused_ai_service.exists():
                     if unused_ai_service.exists():

+ 75 - 59
Controller/DetectControllerV2.py

@@ -11,34 +11,33 @@
 @file: DetectController.py
 @file: DetectController.py
 @Contact: chanjunkai@163.com
 @Contact: chanjunkai@163.com
 """
 """
+import json
 import os
 import os
 import time
 import time
-import json
+
 import apns2
 import apns2
+import boto3
+import botocore
 import jpush as jpush
 import jpush as jpush
 import oss2
 import oss2
+from botocore import client
 from django.http import JsonResponse
 from django.http import JsonResponse
 from django.views.generic.base import View
 from django.views.generic.base import View
 from pyfcm import FCMNotification
 from pyfcm import FCMNotification
-from Object.RedisObject import RedisObject
-from Ansjer.config import DETECT_PUSH_DOMAIN, DETECT_PUSH_DOMAINS, DETECT_PUSH_DOMAIN_JIUAN, DETECT_PUSH_DOMAINS_JIUAN,\
-                            SERVER_DOMAIN, SERVER_DOMAIN_SSL, \
-                            OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
-                            JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, BASE_DIR, APNS_MODE,  SERVER_TYPE
+
+from Ansjer.config import DETECT_PUSH_DOMAIN, DETECT_PUSH_DOMAINS, DETECT_PUSH_DOMAIN_JIUAN, DETECT_PUSH_DOMAINS_JIUAN, \
+    OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
+    JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, BASE_DIR, APNS_MODE, SERVER_TYPE
+from Ansjer.config import PUSH_REDIS_ADDRESS
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, CompanyModel, SysMsgModel, \
     AiService
     AiService
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
-from django.db.models import Q
 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 Service.CommonService import CommonService
 from Service.CommonService import CommonService
-from Service.ModelService import ModelService
-import boto3
-import botocore
-from botocore import client
-from Ansjer.config import PUSH_REDIS_ADDRESS
+from Service.EquipmentInfoService import EquipmentInfoService
 
 
 
 
 class DetectControllerViewV2(View):
 class DetectControllerViewV2(View):
@@ -288,24 +287,34 @@ class DetectControllerViewV2(View):
         if not region:
         if not region:
             return response.json(444, 'region')
             return response.json(444, 'region')
         region = int(region)
         region = int(region)
-        now_time = int(time.time())
-
-        qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
-        qs = qs.filter(eventTime__gt=now_time - 3600 * 168)
+        # now_time = int(time.time())
 
 
+        # qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
+        # qs = qs.filter(eventTime__gt=now_time - 3600 * 168)
+        # 根据时间筛选消息推送
         if startTime and endTime:
         if startTime and endTime:
-            qs = qs.filter(eventTime__range=(startTime, endTime))
-        if eventType:
-            if ',' in eventType:   #兼容AI查询
-                eventTypeList = eventType.split(',')
-                eventTypeList = [int(i.strip()) for i in eventTypeList]
-                qs = qs.filter(eventType__in=eventTypeList)
-            else:
-                qs = qs.filter(eventType=eventType)
+            qs, count = EquipmentInfoService.find_by_start_time_equipment_info(page, line, userID, startTime,
+                                                                               endTime, eventType,
+                                                                               request_dict.get('uids', None))
+
+        else:
+            # 默认查询近七天消息推送
+            qs, count = EquipmentInfoService.get_equipment_info_week_all(page, line, userID, startTime, endTime,
+                                                                         eventType,
+                                                                         request_dict.get('uids', None))
+        # if startTime and endTime:
+        #     qs = qs.filter(eventTime__range=(startTime, endTime))
+        # if eventType:
+        #     if ',' in eventType:  # 兼容AI查询
+        #         eventTypeList = eventType.split(',')
+        #         eventTypeList = [int(i.strip()) for i in eventTypeList]
+        #         qs = qs.filter(eventType__in=eventTypeList)
+        #     else:
+        #         qs = qs.filter(eventType=eventType)
         uids = request_dict.get('uids', None)
         uids = request_dict.get('uids', None)
         if uids:
         if uids:
             uid_list = uids.split(',')
             uid_list = uids.split(',')
-            qs = qs.filter(devUid__in=uid_list)
+            # qs = qs.filter(devUid__in=uid_list)
             dvqs = Device_Info.objects.filter(UID__in=uid_list, userID_id=userID).values('UID', 'Type', 'NickName')
             dvqs = Device_Info.objects.filter(UID__in=uid_list, userID_id=userID).values('UID', 'Type', 'NickName')
             uid_type_dict = {}
             uid_type_dict = {}
             for dv in dvqs:
             for dv in dvqs:
@@ -316,13 +325,14 @@ class DetectControllerViewV2(View):
             for dv in dvqs:
             for dv in dvqs:
                 uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
                 uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
         # print(uid_type_dict)
         # print(uid_type_dict)
-        if not qs.exists():
+        if count == 0 and not qs.exists():
             return response.json(0, {'datas': [], 'count': 0})
             return response.json(0, {'datas': [], 'count': 0})
-        qs = qs.values('id', 'devUid', 'devNickName', 'Channel', 'eventType', 'status', 'alarm', 'eventTime',
-                       'receiveTime', 'is_st', 'addTime', 'storage_location', 'borderCoords')
+        # qs = qs.values('id', 'devUid', 'devNickName', 'Channel', 'eventType', 'status', 'alarm', 'eventTime',
+        #                'receiveTime', 'is_st', 'addTime', 'storage_location', 'borderCoords')
 
 
-        count = qs.count()
-        qr = qs[(page - 1) * line:page * line]
+        # count = qs.count()
+        # qr = qs[(page - 1) * line:page * line]
+        qr = qs
         res = []
         res = []
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         oss_img_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
         oss_img_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
@@ -346,10 +356,10 @@ class DetectControllerViewV2(View):
             eventTime = p['eventTime']
             eventTime = p['eventTime']
             channel = p['Channel']
             channel = p['Channel']
             storage_location = p['storage_location']
             storage_location = p['storage_location']
-            p['borderCoords'] = '' if p['borderCoords'] =='' else json.loads(p['borderCoords'])
+            p['borderCoords'] = '' if p['borderCoords'] == '' else json.loads(p['borderCoords'])
             if p['is_st'] == 1:
             if p['is_st'] == 1:
                 thumbspng = '{uid}/{channel}/{time}.jpeg'.format(uid=devUid, channel=p['Channel'], time=eventTime)
                 thumbspng = '{uid}/{channel}/{time}.jpeg'.format(uid=devUid, channel=p['Channel'], time=eventTime)
-                if storage_location == 1:   # oss
+                if storage_location == 1:  # oss
                     response_url = oss_img_bucket.sign_url('GET', thumbspng, 300)
                     response_url = oss_img_bucket.sign_url('GET', thumbspng, 300)
                     p['img'] = response_url
                     p['img'] = response_url
                     p['img_list'] = [response_url]
                     p['img_list'] = [response_url]
@@ -359,9 +369,10 @@ class DetectControllerViewV2(View):
                                                                         ExpiresIn=300)
                                                                         ExpiresIn=300)
                     p['img'] = response_url
                     p['img'] = response_url
                     p['img_list'] = [response_url]
                     p['img_list'] = [response_url]
-                elif region == 1 and storage_location == 2:   # 1:国外,aws
+                elif region == 1 and storage_location == 2:  # 1:国外,aws
                     response_url = aws_s3_guowai.generate_presigned_url('get_object',
                     response_url = aws_s3_guowai.generate_presigned_url('get_object',
-                                                                        Params={'Bucket': 'foreignpush', 'Key': thumbspng},
+                                                                        Params={'Bucket': 'foreignpush',
+                                                                                'Key': thumbspng},
                                                                         ExpiresIn=300)
                                                                         ExpiresIn=300)
                     p['img'] = response_url
                     p['img'] = response_url
                     p['img_list'] = [response_url]
                     p['img_list'] = [response_url]
@@ -376,18 +387,21 @@ class DetectControllerViewV2(View):
                     endpoint = vodqs[0]['bucket__endpoint']
                     endpoint = vodqs[0]['bucket__endpoint']
                     bucket = oss2.Bucket(auth, endpoint, bucket_name)
                     bucket = oss2.Bucket(auth, endpoint, bucket_name)
                     ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'], etime=eventTime)
                     ts = '{uid}/vod{channel}/{etime}/ts0.ts'.format(uid=devUid, channel=p['Channel'], etime=eventTime)
-                    if storage_location == 1:   # oss
-                        thumb0 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
-                        thumb1 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_1000,w_700'})
-                        thumb2 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_2000,w_700'})
+                    if storage_location == 1:  # oss
+                        thumb0 = bucket.sign_url('GET', ts, 3600,
+                                                 params={'x-oss-process': 'video/snapshot,t_0000,w_700'})
+                        thumb1 = bucket.sign_url('GET', ts, 3600,
+                                                 params={'x-oss-process': 'video/snapshot,t_1000,w_700'})
+                        thumb2 = bucket.sign_url('GET', ts, 3600,
+                                                 params={'x-oss-process': 'video/snapshot,t_2000,w_700'})
                         # thumb3 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_3000,w_700'})
                         # thumb3 = bucket.sign_url('GET', ts, 3600, params={'x-oss-process': 'video/snapshot,t_3000,w_700'})
                         p['img_list'] = [thumb0, thumb1, thumb2]
                         p['img_list'] = [thumb0, thumb1, thumb2]
-                    elif region == 2 and storage_location == 2:     # 2:国内,aws
+                    elif region == 2 and storage_location == 2:  # 2:国内,aws
                         thumb = aws_s3_guonei.generate_presigned_url('get_object',
                         thumb = aws_s3_guonei.generate_presigned_url('get_object',
                                                                      Params={'Bucket': 'push', 'Key': ts},
                                                                      Params={'Bucket': 'push', 'Key': ts},
                                                                      ExpiresIn=3600)
                                                                      ExpiresIn=3600)
                         p['img_list'] = [thumb]
                         p['img_list'] = [thumb]
-                    elif region == 1 and storage_location == 2:   # 1:国外,aws
+                    elif region == 1 and storage_location == 2:  # 1:国外,aws
                         thumb = aws_s3_guowai.generate_presigned_url('get_object',
                         thumb = aws_s3_guowai.generate_presigned_url('get_object',
                                                                      Params={'Bucket': 'foreignpush', 'Key': ts},
                                                                      Params={'Bucket': 'foreignpush', 'Key': ts},
                                                                      ExpiresIn=3600)
                                                                      ExpiresIn=3600)
@@ -396,8 +410,9 @@ class DetectControllerViewV2(View):
                 # 列表装载回放时间戳标记
                 # 列表装载回放时间戳标记
                 p['img_list'] = []
                 p['img_list'] = []
                 for i in range(p['is_st']):
                 for i in range(p['is_st']):
-                    thumbspng = '{uid}/{channel}/{time}_{st}.jpeg'.format(uid=devUid, channel=p['Channel'], time=eventTime, st=i)
-                    if storage_location == 1:   # oss
+                    thumbspng = '{uid}/{channel}/{time}_{st}.jpeg'.format(uid=devUid, channel=p['Channel'],
+                                                                          time=eventTime, st=i)
+                    if storage_location == 1:  # oss
                         img = oss_img_bucket.sign_url('GET', thumbspng, 300)
                         img = oss_img_bucket.sign_url('GET', thumbspng, 300)
                         p['img_list'].append(img)
                         p['img_list'].append(img)
                     elif region == 2 and storage_location == 2:  # 2:国内,aws
                     elif region == 2 and storage_location == 2:  # 2:国内,aws
@@ -406,9 +421,10 @@ class DetectControllerViewV2(View):
                                                                             ExpiresIn=300)
                                                                             ExpiresIn=300)
                         img = response_url
                         img = response_url
                         p['img_list'].append(img)
                         p['img_list'].append(img)
-                    elif region == 1 and storage_location == 2:   # 1:国外,aws
+                    elif region == 1 and storage_location == 2:  # 1:国外,aws
                         response_url = aws_s3_guowai.generate_presigned_url('get_object',
                         response_url = aws_s3_guowai.generate_presigned_url('get_object',
-                                                                            Params={'Bucket': 'foreignpush', 'Key': thumbspng},
+                                                                            Params={'Bucket': 'foreignpush',
+                                                                                    'Key': thumbspng},
                                                                             ExpiresIn=300)
                                                                             ExpiresIn=300)
                         img = response_url
                         img = response_url
                         p['img_list'].append(img)
                         p['img_list'].append(img)
@@ -513,7 +529,8 @@ class NotificationView(View):
                 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
                 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
                     values('token_val', 'app_type', 'appBundleId', 'm_code',
                     values('token_val', 'app_type', 'appBundleId', 'm_code',
                            'push_type', 'userID_id', 'userID__NickName',
                            'push_type', 'userID_id', 'userID__NickName',
-                           'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
+                           'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval',
+                           'uid_set__detect_group',
                            'uid_set__channel')
                            'uid_set__channel')
                 print(uid_push_qs)
                 print(uid_push_qs)
                 # 新建一个list接收数据
                 # 新建一个list接收数据
@@ -528,8 +545,8 @@ class NotificationView(View):
                     return JsonResponse(status=200, data=res_data)
                     return JsonResponse(status=200, data=res_data)
         else:
         else:
             # 从数据库查询出来
             # 从数据库查询出来
-            uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid,uid_set__detect_status=1). \
-                values('token_val', 'app_type', 'appBundleId','m_code',
+            uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
+                values('token_val', 'app_type', 'appBundleId', 'm_code',
                        'push_type', 'userID_id', 'userID__NickName',
                        'push_type', 'userID_id', 'userID__NickName',
                        'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
                        'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
                        'uid_set__channel')
                        'uid_set__channel')
@@ -569,7 +586,7 @@ class NotificationView(View):
             else:
             else:
                 detect_med_type = 2  # 为2的话,既推送,又存库
                 detect_med_type = 2  # 为2的话,既推送,又存库
                 # detect_group=0允许全部推送的时候
                 # detect_group=0允许全部推送的时候
-                if detect_group == '0'or detect_group == '':
+                if detect_group == '0' or detect_group == '':
                     redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                     redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                 else:
                 else:
                     detect_group_list = detect_group.split(',')
                     detect_group_list = detect_group.split(',')
@@ -579,7 +596,7 @@ class NotificationView(View):
                         redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                         redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                 # 改为1秒
                 # 改为1秒
                 # 如果不是正式
                 # 如果不是正式
-                if SERVER_TYPE!="Ansjer.formal_settings":
+                if SERVER_TYPE != "Ansjer.formal_settings":
                     redisObj.set_data(key=pkey, val=1, expire=10)
                     redisObj.set_data(key=pkey, val=1, expire=10)
                 else:
                 else:
                     redisObj.set_data(key=pkey, val=1, expire=60)
                     redisObj.set_data(key=pkey, val=1, expire=60)
@@ -645,7 +662,7 @@ class NotificationView(View):
             kwag_args['msg_title'] = msg_title
             kwag_args['msg_title'] = msg_title
             kwag_args['msg_text'] = msg_text
             kwag_args['msg_text'] = msg_text
             push_server_status = 0
             push_server_status = 0
-            #推送
+            # 推送
             if detect_med_type == 2 or detect_med_type == 0:
             if detect_med_type == 2 or detect_med_type == 0:
                 if push_type == 0:  # ios apns
                 if push_type == 0:  # ios apns
                     print('do_apns')
                     print('do_apns')
@@ -717,7 +734,7 @@ class NotificationView(View):
                 del up['uid_set__nickname']
                 del up['uid_set__nickname']
                 del up['uid_set__detect_interval']
                 del up['uid_set__detect_interval']
                 del up['uid_set__detect_group']
                 del up['uid_set__detect_group']
-            return JsonResponse(status=200, data={'code': 0, 'msg': 'success 0 or 2' ,'re_list':redis_list})
+            return JsonResponse(status=200, data={'code': 0, 'msg': 'success 0 or 2', 're_list': redis_list})
 
 
         elif is_st == '1':
         elif is_st == '1':
             print("is_st=1")
             print("is_st=1")
@@ -735,7 +752,7 @@ class NotificationView(View):
                     },
                     },
                     ExpiresIn=3600
                     ExpiresIn=3600
                 )
                 )
-            else:   # 1:国外
+            else:  # 1:国外
                 response_url = aws_s3_guowai.generate_presigned_url(
                 response_url = aws_s3_guowai.generate_presigned_url(
                     ClientMethod='put_object',
                     ClientMethod='put_object',
                     Params={
                     Params={
@@ -790,7 +807,7 @@ class NotificationView(View):
                         },
                         },
                         ExpiresIn=3600
                         ExpiresIn=3600
                     )
                     )
-                else:   # 1:国外
+                else:  # 1:国外
                     response_url = aws_s3_guowai.generate_presigned_url(
                     response_url = aws_s3_guowai.generate_presigned_url(
                         ClientMethod='put_object',
                         ClientMethod='put_object',
                         Params={
                         Params={
@@ -826,7 +843,6 @@ class NotificationView(View):
                 res_data = {'code': 0, 'img_url_list': img_url_list, 'msg': 'success 3'}
                 res_data = {'code': 0, 'img_url_list': img_url_list, 'msg': 'success 3'}
             return JsonResponse(status=200, data=res_data)
             return JsonResponse(status=200, data=res_data)
 
 
-
     def get_msg_title(self, appBundleId, nickname):
     def get_msg_title(self, appBundleId, nickname):
         package_title_config = {
         package_title_config = {
             'com.ansjer.customizedd_a': 'DVS',
             'com.ansjer.customizedd_a': 'DVS',
@@ -853,7 +869,7 @@ class NotificationView(View):
         return False
         return False
 
 
     def get_msg_text(self, channel, n_time, lang, tz, event_type, is_sys=0):
     def get_msg_text(self, channel, n_time, lang, tz, event_type, is_sys=0):
-        n_date = CommonService.get_now_time_str(n_time=n_time, tz=tz,lang=lang)
+        n_date = CommonService.get_now_time_str(n_time=n_time, tz=tz, lang=lang)
         etype = int(event_type)
         etype = int(event_type)
         if lang == 'cn':
         if lang == 'cn':
             if etype == 704:
             if etype == 704:
@@ -1036,7 +1052,7 @@ class PushNotificationView(View):
                 # 从数据库查询出来
                 # 从数据库查询出来
                 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
                 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
                     values('token_val', 'app_type', 'appBundleId',
                     values('token_val', 'app_type', 'appBundleId',
-                           'push_type', 'userID_id', 'lang','m_code',
+                           'push_type', 'userID_id', 'lang', 'm_code',
                            'tz', 'uid_set__nickname')
                            'tz', 'uid_set__nickname')
                 # 新建一个list接收数据
                 # 新建一个list接收数据
                 redis_list = []
                 redis_list = []
@@ -1080,7 +1096,7 @@ class PushNotificationView(View):
                             },
                             },
                             ExpiresIn=3600
                             ExpiresIn=3600
                         )
                         )
-                    else:   # 1:国外
+                    else:  # 1:国外
                         response_url = aws_s3_guowai.generate_presigned_url(
                         response_url = aws_s3_guowai.generate_presigned_url(
                             ClientMethod='put_object',
                             ClientMethod='put_object',
                             Params={
                             Params={
@@ -1113,7 +1129,7 @@ class PushNotificationView(View):
                                 },
                                 },
                                 ExpiresIn=3600
                                 ExpiresIn=3600
                             )
                             )
-                        else:   # 1:国外
+                        else:  # 1:国外
                             response_url = aws_s3_guowai.generate_presigned_url(
                             response_url = aws_s3_guowai.generate_presigned_url(
                                 ClientMethod='put_object',
                                 ClientMethod='put_object',
                                 Params={
                                 Params={
@@ -1217,4 +1233,4 @@ class PushNotificationView(View):
             else:
             else:
                 send_text = '{msg_type} channel:{channel} date:{date}'. \
                 send_text = '{msg_type} channel:{channel} date:{date}'. \
                     format(msg_type=msg_type, channel=channel, date=n_date)
                     format(msg_type=msg_type, channel=channel, date=n_date)
-        return send_text
+        return send_text

+ 11 - 13
Controller/EquipmentInfo.py

@@ -1,21 +1,17 @@
 import time
 import time
 import traceback
 import traceback
 
 
-import oss2
-from django.db import connection, connections
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
-from django.views.generic import TemplateView
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
-from Ansjer.config import SERVER_DOMAIN
-from Model.models import Device_Info, VodHlsModel, Equipment_Info
+from Model.models import Device_Info, Equipment_Info
 from Model.models import Device_User
 from Model.models import Device_User
 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.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
+from Service.EquipmentInfoService import EquipmentInfoService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
 
 
 '''
 '''
@@ -149,7 +145,6 @@ class EquipmentInfo(View):
             res.append(p)
             res.append(p)
         return response.json(0, {'datas': res, 'count': count})
         return response.json(0, {'datas': res, 'count': count})
 
 
-
     def update_info(self, request_dict, userID, response):
     def update_info(self, request_dict, userID, response):
         is_update_all = request_dict.get('is_update_all', 0)
         is_update_all = request_dict.get('is_update_all', 0)
         eventType = request_dict.get('eventType', None)
         eventType = request_dict.get('eventType', None)
@@ -191,10 +186,14 @@ class EquipmentInfo(View):
         param_flag = CommonService.get_param_flag(data=[id_list])
         param_flag = CommonService.get_param_flag(data=[id_list])
         if param_flag is True:
         if param_flag is True:
             try:
             try:
-                for id in id_list:
-                    eq = Equipment_Info.objects.filter(id=id)
+                for ei_id in id_list:
+                    event_date = '20{}'.format(ei_id[0:6])
+                    ei_id = ei_id[6:]
+                    val = LocalDateTimeUtil.format_date_to_week(event_date, '%Y%m%d')
+                    eq = EquipmentInfoService.get_equipment_info_model('', val)
+                    eq = eq.filter(id=ei_id)
                     if eq.exists():
                     if eq.exists():
-                        own_dev = ModelService.check_own_device(userID, eq[0].devUid)
+                        own_dev = ModelService.check_own_device(userID, eq[0].device_uid)
                         if own_dev is True:
                         if own_dev is True:
                             eq.delete()
                             eq.delete()
             except Exception as e:
             except Exception as e:
@@ -291,6 +290,7 @@ use information_schema;
 select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='Ansjer81';
 select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='Ansjer81';
 '''
 '''
 
 
+
 # 按季度删除访问日志
 # 按季度删除访问日志
 def deleteExpireEquipmentInfoById(request):
 def deleteExpireEquipmentInfoById(request):
     response = ResponseObject()
     response = ResponseObject()
@@ -301,5 +301,3 @@ def deleteExpireEquipmentInfoById(request):
 
 
     Equipment_Info.objects.filter(id__lte=id).delete()
     Equipment_Info.objects.filter(id__lte=id).delete()
     return response.json(0)
     return response.json(0)
-
-

+ 218 - 0
Model/models.py

@@ -340,6 +340,224 @@ class Equipment_Info(models.Model):
         ordering = ('-id',)
         ordering = ('-id',)
         app_label = "PushModel"
         app_label = "PushModel"
 
 
+
+class EquipmentInfoMonday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_monday'
+        verbose_name = u'星期一设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
+class EquipmentInfoTuesday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_tuesday'
+        verbose_name = u'星期二设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
+class EquipmentInfoWednesday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_wednesday'
+        verbose_name = u'星期三设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
+class EquipmentInfoThursday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_thursday'
+        verbose_name = u'星期四设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
+class EquipmentInfoFriday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_friday'
+        verbose_name = u'星期五设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
+class EquipmentInfoSaturday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_saturday'
+        verbose_name = u'星期六设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
+class EquipmentInfoSunday(models.Model):
+    id = models.BigAutoField(primary_key=True, verbose_name=u'自增标记ID')
+    device_user_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户id')
+    device_uid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备uid')
+    device_nick_name = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
+    channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
+    event_type = models.IntegerField(default=0, blank=True,
+                                     verbose_name=u'事件类型(0:代表空字符,1:ai人,2:ai动物,3:车,123:组合类型(人/车/动物),51:移动侦测,'
+                                                  u'52:传感器报警,53:影像遗失,54:PIR,55:门磁报警, 56:外部发报, 57:人型报警,'
+                                                  u'702:摄像头休眠,703:摄像头唤醒,'
+                                                  u'704:电量过低)')
+    status = models.BooleanField(blank=True, default=False, verbose_name=u'事件状态(0,1)')
+    alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
+    event_time = models.CharField(blank=True, db_index=True, default='', max_length=16, verbose_name=u'设备报警时间')
+    receive_time = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图(0:否,1:图片,2:视频)')  # 0 否,1 是图,2,视频
+    storage_location = models.SmallIntegerField(default=1, verbose_name='数据信息存储位置。1:阿里云oss,2:aws')
+    border_coords = models.TextField(default='', blank=True, verbose_name=u'ai类型图片边框位置信息')
+    add_time = models.IntegerField(verbose_name='添加时间', db_index=True, default=0)
+
+    def __str__(self):
+        return self.id
+
+    class Meta:
+        db_table = 'equipment_info_sunday'
+        verbose_name = u'星期天设备信息推送表'
+        verbose_name_plural = verbose_name
+        ordering = ('-id',)
+        app_label = "PushModel"
+
+
 class Ai_Push_Info(models.Model):
 class Ai_Push_Info(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     devUid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备ID')
     devUid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备ID')

+ 53 - 0
Object/utils/LocalDateTimeUtil.py

@@ -56,6 +56,59 @@ def get_last_month():
     return last_month_date
     return last_month_date
 
 
 
 
+def get_before_days_timestamp(timestamp, days=1):
+    """
+    获取之前日期时间戳-秒级
+    @param timestamp: 时间戳
+    @param days: 天数
+    @return: (timestamp - second * hour * days) 时间戳
+    """
+    if days:
+        second = 3600
+        hour = 24
+        if days > 0:
+            return timestamp - second * hour * days
+    return 0
+
+
+def date_to_week(str_date):
+    """
+    日期获取星期几
+    @param str_date 日期 例:2022-03-03
+    @return: int 1-7
+    """
+    if str_date:
+        return datetime.datetime.strptime(str_date, "%Y-%m-%d").weekday() + 1
+    return datetime.datetime.now().weekday() + 1
+
+
+def format_date_to_week(str_date, str_format):
+    """
+    日期获取星期几
+    @param str_format:  %Y%m%d
+    @param str_date 日期 例:2022-03-03
+    @return: int 1-7
+    """
+    if str_date:
+        return datetime.datetime.strptime(str_date, str_format).weekday() + 1
+    return 0
+
+
 if __name__ == "__main__":
 if __name__ == "__main__":
+    val = format_date_to_week('20220417', '%Y%m%d')
+    pfe = str(22162688)
+    print(pfe[6:])
+    now_time = int(time.time())
+    date_time = datetime.datetime.fromtimestamp(now_time)
+    print(date_to_week(str(date_time.date())))
+    result = get_before_days_timestamp(now_time, 7)
+    print(result)
+    print(now_time - 3600 * 168)
+    dd = datetime.date.today()
+    print(type(dd))
+    dd = str(dd)
+    print(type(dd))
+    week = date_to_week('2022-03-03')
+    print(week)
     start_time, end_time = get_today_date(True)
     start_time, end_time = get_today_date(True)
     print('--- start_time = {} end_time = {}'.format(start_time, end_time))
     print('--- start_time = {} end_time = {}'.format(start_time, end_time))

+ 205 - 0
Service/EquipmentInfoService.py

@@ -0,0 +1,205 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : EquipmentInfoService.py
+@Time    : 2022/4/14 17:28
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+import datetime
+import time
+
+from Model.models import EquipmentInfoMonday, EquipmentInfoTuesday, EquipmentInfoWednesday, EquipmentInfoThursday, \
+    EquipmentInfoFriday, EquipmentInfoSaturday, EquipmentInfoSunday
+from Object.utils import LocalDateTimeUtil
+
+"""
+设备分表查询Service    
+因数据量不断增加,单表保留近七天数据进行分表优化设计
+进行拆分为七张表星期一至星期天进行分表存储。分担单表存储读写压力。
+"""
+
+
+class EquipmentInfoService:
+
+    @staticmethod
+    def get_equipment_info_model(dt, val=0):
+
+        """
+        根据日期判断是星期几,返回相应的Model对象
+        @param val: 1-7代表week
+        @param dt: 日期 例:2022-03-03
+        @return: 星期一至星期天equipment_info对象实例
+        """
+        week = 1
+        if dt:
+            week = LocalDateTimeUtil.date_to_week(dt)
+        if 0 < val < 8:
+            week = val
+        equipment_info = None
+        if week == 1:
+            equipment_info = EquipmentInfoMonday.objects.all()
+        elif week == 2:
+            equipment_info = EquipmentInfoTuesday.objects.all()
+        elif week == 3:
+            equipment_info = EquipmentInfoWednesday.objects.all()
+        elif week == 4:
+            equipment_info = EquipmentInfoThursday.objects.all()
+        elif week == 5:
+            equipment_info = EquipmentInfoFriday.objects.all()
+        elif week == 6:
+            equipment_info = EquipmentInfoSaturday.objects.all()
+        elif week == 7:
+            equipment_info = EquipmentInfoSunday.objects.all()
+        return equipment_info
+
+    @classmethod
+    def find_by_start_time_equipment_info(cls, page, size, user_id, start_time, end_time, event_type,
+                                          uid_list):
+        """
+        通过start_time查找指定日期当天设备消息推送
+        @param page: 页数
+        @param size: 每页条数
+        @param user_id: 设备用户id
+        @param start_time: 开始时间
+        @param end_time: 结束时间
+        @param event_type: 事件类型
+        @param uid_list: 设备uid列表
+        @return: result 查询结果
+        """
+        if start_time and end_time:
+            start_date = datetime.datetime.fromtimestamp(int(start_time))
+            # 根据开始日期,获取设备信息查询对象
+            qs = EquipmentInfoService.get_equipment_info_model(str(start_date.date()), 0)
+            # 调用查询方法
+            qs = cls.query_equipment_info(qs, user_id, start_time, end_time, event_type,
+                                          uid_list)
+            if qs.exists:
+                count = qs.count()
+                qs_page = cls.get_equipment_info_page(qs, page, size)
+                return qs_page, count
+        return None, 0
+
+    @classmethod
+    def get_equipment_info_week_all(cls, page, size, user_id, start_time, end_time, event_type,
+                                    uid_list):
+        """
+        分表查询近七天设备消息推送
+        @param page: 页数
+        @param size: 分页大小
+        @param user_id: 设备用户id
+        @param start_time: 事件开始时间
+        @param end_time: 事件结束时间
+        @param event_type: 事件类型
+        @param uid_list: uid列表
+        @return: qs_page, count 结果集
+        """
+        # 星期一设备信息查询
+        monday_qs = EquipmentInfoService.get_equipment_info_model('', 1)
+        monday_qs = cls.query_equipment_info(monday_qs, user_id, start_time, end_time, event_type,
+                                             uid_list)
+        # 星期二设备信息查询
+        tuesday_qs = EquipmentInfoService.get_equipment_info_model('', 2)
+        tuesday_qs = cls.query_equipment_info(tuesday_qs, user_id, start_time, end_time, event_type,
+                                              uid_list)
+        # 星期三设备信息查询
+        wednesday_qs = EquipmentInfoService.get_equipment_info_model('', 3)
+        wednesday_qs = cls.query_equipment_info(wednesday_qs, user_id, start_time, end_time, event_type,
+                                                uid_list)
+        # 星期四设备信息查询
+        thursday_qs = EquipmentInfoService.get_equipment_info_model('', 4)
+        thursday_qs = cls.query_equipment_info(thursday_qs, user_id, start_time, end_time, event_type,
+                                               uid_list)
+        # 星期五设备信息查询
+        friday_qs = EquipmentInfoService.get_equipment_info_model('', 5)
+        friday_qs = cls.query_equipment_info(friday_qs, user_id, start_time, end_time, event_type,
+                                             uid_list)
+        # 星期六设备信息查询
+        saturday_qs = EquipmentInfoService.get_equipment_info_model('', 6)
+        saturday_qs = cls.query_equipment_info(saturday_qs, user_id, start_time, end_time, event_type,
+                                               uid_list)
+        # 星期天设备信息查询
+        sunday_qs = EquipmentInfoService.get_equipment_info_model('', 7)
+        sunday_qs = cls.query_equipment_info(sunday_qs, user_id, start_time, end_time, event_type,
+                                             uid_list)
+        result = monday_qs.union(tuesday_qs).union(wednesday_qs).union(thursday_qs).union(friday_qs).union(
+            saturday_qs).union(
+            sunday_qs)
+        count = result.count()
+        qs_page = cls.get_equipment_info_page(result, page, size)
+        return qs_page, count
+
+    @classmethod
+    def query_equipment_info(cls, qs, user_id, start_time, end_time, event_type,
+                             uid_list):
+        """
+        设备信息条件查询,根据分表设计,默认条件event_time大于七天前时间
+        @param qs: 设备信息查询对象
+        @param user_id: 设备用户id
+        @param start_time: 开始时间
+        @param end_time: 结束时间
+        @param event_type: 事件类型
+        @param uid_list: 设备uid列表
+        @return: result 设备信息结果集
+        """
+        now_time = int(time.time())
+        # 获取七天前时间戳
+        seven_days_before_time = LocalDateTimeUtil.get_before_days_timestamp(now_time, 7)
+        # 默认查询当前表event_time大于七天前时间
+        qs = qs.filter(event_time__gt=seven_days_before_time)
+        if user_id:
+            qs = qs.filter(device_user_id=user_id)
+        if event_type:
+            # 兼容AI查询
+            if ',' in event_type:
+                eventTypeList = event_type.split(',')
+                eventTypeList = [int(i.strip()) for i in eventTypeList]
+                qs = qs.filter(event_type__in=eventTypeList)
+            else:
+                qs = qs.filter(event_type=event_type)
+        if start_time and end_time:
+            qs = qs.filter(event_time__range=(start_time, end_time))
+        if uid_list:
+            uid_list = uid_list.split(',')
+            qs = qs.filter(device_uid__in=uid_list)
+        return qs
+
+    @classmethod
+    def get_equipment_info_page(cls, equipment_info_qs, page, size):
+        """
+        获取查询结果集进行排序、分页,遍历重命名字典key(主要针对原函数返回结果集)
+        @param equipment_info_qs: 设备信息结果集
+        @param page: 页数
+        @param size: 分页大小
+        @return: qs_page 遍历后的设备信息结果集
+        """
+        equipment_info_qs = equipment_info_qs.values('id', 'device_uid', 'device_nick_name', 'channel', 'event_type',
+                                                     'status', 'alarm',
+                                                     'event_time', 'receive_time', 'is_st', 'add_time',
+                                                     'storage_location', 'border_coords')
+
+        equipment_info_qs = equipment_info_qs.order_by('-event_time')
+        qs_page = equipment_info_qs[(page - 1) * size:page * size]
+        if qs_page and len(qs_page) > 0:
+            for item in qs_page:
+                event_time = item['event_time']
+                date_time = datetime.datetime.fromtimestamp(int(event_time)).strftime("%Y%m%d")
+                dt = date_time[2:8]
+                item['id'] = int(str(dt) + str(item['id']))
+                item['devUid'] = item['device_uid']
+                item['devNickName'] = item['device_nick_name']
+                item['Channel'] = item['channel']
+                item['eventType'] = item['event_type']
+                item['eventTime'] = item['event_time']
+                item['receiveTime'] = item['receive_time']
+                item['addTime'] = item['add_time']
+                item['borderCoords'] = item['border_coords']
+                item.pop('device_uid')
+                item.pop('device_nick_name')
+                item.pop('channel')
+                item.pop('event_type')
+                item.pop('event_time')
+                item.pop('receive_time')
+                item.pop('add_time')
+                item.pop('border_coords')
+        return qs_page