123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- # -*- encoding: utf-8 -*-
- """
- @File : CloudPhotoController.py
- @Time : 2022/10/24 15:48
- @Author : stephen
- @Email : zhangdongming@asj6.wecom.work
- @Software: PyCharm
- """
- import datetime
- import logging
- import time
- import traceback
- from django.views import View
- from Ansjer.cn_config.config_formal import PUSH_CLOUD_PHOTO
- from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, PUSH_BUCKET
- from Model.models import UidSetModel, DeviceCloudPhotoInfo, DevicePicturePushInfo
- from Object.AWS.AmazonS3Util import AmazonS3Util
- from Object.RedisObject import RedisObject
- from Object.ResponseObject import ResponseObject
- from Service.EquipmentInfoService import EquipmentInfoService
- LOGGER = logging.getLogger('info')
- UID_KEY = 'ANSJER:UID:SET:INFO'
- class CloudPhotoView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.GET, request, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.POST, request, operation)
- def validation(self, request_dict, request, operation):
- response = ResponseObject()
- if operation == 'get-photo':
- return self.get_photo(response)
- elif operation == 'cache-uid-set':
- return self.cache_photo_uid_set(response)
- else:
- return response.json(404)
- @classmethod
- def get_photo(cls, response):
- """
- 定时获取云存消息推送图
- """
- try:
- redis = RedisObject().CONN
- uid_set_cache = redis.lrange(UID_KEY, 0, -1)
- if not uid_set_cache:
- return response.json(0)
- uid_set_cache = list(uid_set_cache)
- today = datetime.date.today()
- start_time = "{} 00:00:00".format(str(today))
- # 先转换为时间数组
- timeArray = time.strptime(start_time, "%Y-%m-%d %H:%M:%S")
- # 转换为时间戳
- timeStamp = int(time.mktime(timeArray))
- now_time = int(time.time())
- for item in uid_set_cache:
- try:
- eq_qs = EquipmentInfoService.get_equipment_info_model(str(today))
- item = str(item, encoding="utf-8")
- eq_qs = eq_qs.filter(event_time__gt=timeStamp, is_st=1, device_uid=item) \
- .values('device_uid', 'channel', 'event_time')
- count = eq_qs.count()
- page = int(count / 2) if count > 1 else count
- redis.lrem(UID_KEY, item, 0)
- if page == 0:
- continue
- eq_qs = eq_qs[(page - 1) * 1:page * 1]
- eq_vo = eq_qs[0]
- s3 = AmazonS3Util(
- aws_access_key_id=ACCESS_KEY_ID,
- secret_access_key=SECRET_ACCESS_KEY,
- region_name=REGION_NAME
- )
- file_path = '{uid}/{channel}/{event_time}.jpeg'.format(uid=eq_vo['device_uid'],
- channel=eq_vo['channel'],
- event_time=eq_vo['event_time'])
- s3.copy_obj(PUSH_BUCKET, PUSH_CLOUD_PHOTO, file_path)
- push_data = {'type': 1, 'uid': eq_vo['device_uid'], 'channel': eq_vo['channel'],
- 'event_time': eq_vo['event_time'], 'updated_time': now_time, 'created_time': now_time}
- DevicePicturePushInfo.objects.create(**push_data)
- except Exception as e:
- LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
- continue
- return response.json(0)
- except Exception as e:
- print(e)
- LOGGER.info('--->抽取推送图片异常:{}'.format(traceback.format_exc()))
- return response.json(177, repr(e))
- @classmethod
- def cache_photo_uid_set(cls, response):
- """
- 缓存uid_set
- @return:
- """
- try:
- photo_qs = DeviceCloudPhotoInfo.objects.filter(status=1).values('uid')
- if not photo_qs.exists():
- return response.json(0)
- redis = RedisObject()
- for item in photo_qs:
- uid_set_qs = UidSetModel.objects.filter(uid=item['uid'], detect_status=1)
- if not uid_set_qs:
- continue
- redis.CONN.rpush(UID_KEY, item['uid'])
- return response.json(0)
- except Exception as e:
- print(e)
- LOGGER.info('--->获取uid_set信息异常:{}'.format(traceback.format_exc()))
- return response.json(177, repr(e))
|