123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
- @AUTHOR: ASJRD018
- @NAME: Ansjer
- @software: PyCharm
- @DATE: 2018/6/8 9:10
- @Version: python3.6
- @MODIFY DECORD:ansjer dev
- @file: SysManage.py
- @Contact: chanjunkai@163.com
- """
- import os
- import threading
- import time
- from django.http import HttpResponse
- from django.views.decorators.csrf import csrf_exempt
- from django.views.generic.base import View
- from Ansjer.config import BASE_DIR
- from Controller.CouponController import CouponView
- from Model.models import SysMsgModel, Device_Info, Ai_Push_Info, UidSetModel, ExperienceContextModel, Order_Model, \
- UID_Bucket
- from Object.Enums.ConstantEnum import ConstantEnum
- from Object.Enums.RedisKeyConstant import RedisKeyConstant
- from Object.RedisObject import RedisObject
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Service.CommonService import CommonService
- from Service.ModelService import ModelService
- @csrf_exempt
- def updateLog(request):
- response = ResponseObject()
- request.encoding = 'utf-8'
- if request.method == 'GET':
- request_dict = request.GET
- if request.method == 'POST':
- request_dict = request.POST
- else:
- response.json(404)
- token = request_dict.get('token', None)
- content = request_dict.get('content', None)
- if not content:
- return response.json(444, 'content')
- tko = TokenObject(token)
- response.lang = tko.lang
- if tko.code != 0:
- return response.json(tko.code)
- userID = tko.userID
- own_permission = ModelService.check_perm(userID=userID, permID=50)
- if own_permission is not True:
- return response.json(404)
- file_path = os.path.join(BASE_DIR, 'static/Help/version.txt')
- try:
- with open(file_path, "w", encoding="utf-8") as f:
- f.write(content)
- except Exception as e:
- pass
- return response.json(0)
- class getStatView(View):
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- filePath = kwargs.get('filePath', None)
- filePath.encode(encoding='utf-8', errors='strict')
- response = ResponseObject()
- return self.getFile(filePath, response)
- def get(self, request, *args, **kwargs):
- request.encoding = 'gb2312'
- filePath = kwargs.get('filePath', None)
- response = ResponseObject()
- filePath.encode(encoding='gb2312', errors='strict')
- return self.getFile(filePath, response)
- def getFile(self, filePath, response):
- if filePath:
- pass
- else:
- return response.json(800)
- fullPath = os.path.join(BASE_DIR, filePath).replace('\\', '/')
- from var_dump import var_dump
- var_dump(fullPath)
- if os.path.isfile(fullPath):
- try:
- Imagedata = open(fullPath, 'rb').read()
- except Exception as e:
- return response.json(906, repr(e))
- else:
- return HttpResponse(Imagedata, content_type="image/jpeg")
- else:
- return response.json(907)
- from Service.EquipmentInfoService import EquipmentInfoService
- def initMsgFunc(request):
- response = ResponseObject()
- request.encoding = 'utf-8'
- if request.method == 'GET':
- request_dict = request.GET
- if request.method == 'POST':
- request_dict = request.POST
- else:
- response.json(404)
- token = request_dict.get('token', None)
- tko = TokenObject(token)
- response.lang = tko.lang
- if tko.code != 0:
- return response.json(tko.code)
- userID = tko.userID
- seven_days_ago = int(time.time()) - 3600 * 24 * 7 # 过滤七天前数据
- sm_count = SysMsgModel.objects.filter(userID_id=userID, status=0).count()
- kwargs = {
- 'device_user_id': userID,
- 'event_time__gt': seven_days_ago,
- 'status': 0
- }
- eq_count = EquipmentInfoService.count_equipment_info(**kwargs)
- # kwargs['event_type'] = 57
- # rq_count = EquipmentInfoService.count_equipment_info(**kwargs)
- rq_count = 0 # 影响查询性能APP未调用该属性,统一返回0
- ai_count = Ai_Push_Info.objects.filter(userID_id=userID, eventTime__gt=seven_days_ago, status=False).count()
- uid_reset_count = Device_Info.objects.filter(userID_id=userID, isExist=2).count()
- res = {
- 'sm_count': sm_count, # 系统消息未读数量
- 'eq_count': eq_count, # 未读消息总数
- 'rq_count': rq_count, # 人形检测总数
- 'ai_count': ai_count, # AI消息总数
- 'uid_reset_count': uid_reset_count, # 复位的设备数量
- }
- # 如果没有发放过云存优惠券,异步发放
- now_time = int(time.time())
- start_time, end_time = ConstantEnum.PROMOTION_START_TIME.value, ConstantEnum.PROMOTION_END_TIME.value
- # 缓存过期时间
- expire = end_time - now_time
- if (now_time > start_time and expire > 0) or userID in ConstantEnum.TEST_ACCOUNT_LIST.value:
- redis_obj = RedisObject()
- # 加锁
- grant_key = RedisKeyConstant.GRANT_COUPONS_LOCK.value + userID
- lock_success = redis_obj.CONN.setnx(grant_key, 1)
- if lock_success:
- redis_obj.CONN.expire(grant_key, 600)
- distribute_key = RedisKeyConstant.CLOUD_STORAGE_COUPONS.value + userID
- is_distributed = redis_obj.get_data(distribute_key)
- if not is_distributed:
- thread_kwargs = {
- 'user_id': userID,
- 'redis_obj': redis_obj,
- 'distribute_key': distribute_key,
- 'expire': expire,
- 'end_time': end_time,
- 'grant_key': grant_key
- }
- del_push_info_thread = threading.Thread(
- target=distribute_cloud_storage_coupons,
- kwargs=thread_kwargs)
- del_push_info_thread.start()
- return response.json(0, res)
- def distribute_cloud_storage_coupons(user_id, redis_obj, distribute_key, expire, end_time, grant_key):
- """
- 发放云存优惠券
- 满足条件,用户存在以下三种类型的设备:
- 1. 未体验云存设备
- 2. 体验过未购买过
- 3. 购买过且已过期
- @param user_id: 用户id
- @param redis_obj: redis对象
- @param distribute_key: 发放优惠券缓存key
- @param expire: distribute_key过期时间
- @param end_time: 活动结束时间
- @param grant_key: 发放锁
- @return:
- """
- try:
- generate_success = False
- uid_list = Device_Info.objects.filter(userID_id=user_id).values_list('UID', flat=True)
- if uid_list:
- uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'ucode', 'device_type')
- if uid_set_qs.exists():
- for uid_set in uid_set_qs:
- uid = uid_set['uid']
- # 判断设备是否支持云存
- is_cloud_vod = CommonService.is_cloud_device(uid_set['ucode'], uid_set['device_type'])
- if is_cloud_vod:
- # 未体验云存
- experience_qs = ExperienceContextModel.objects.filter(uid=uid, experience_type=0)
- if not experience_qs.exists():
- # 发放
- generate_success = CouponView.generate_coupon_by_user(user_id)
- break
- else:
- # 体验过未购买过
- orders_qs = Order_Model.objects.filter(UID=uid, status=1, payType__in=[1, 4, 5])
- if not orders_qs.exists():
- # 发放
- generate_success = CouponView.generate_coupon_by_user(user_id)
- break
- else:
- # 购买过且已过期
- # 没有未使用套餐,且过期时间在2024-12-29前
- vod_uid_bucket_qs = UID_Bucket.objects.filter(uid=uid, has_unused=0, endTime__lte=end_time)
- if vod_uid_bucket_qs.exists():
- # 发放
- generate_success = CouponView.generate_coupon_by_user(user_id)
- break
- if generate_success:
- redis_obj.set_data(distribute_key, '1', expire)
- else:
- redis_obj.set_data(distribute_key, '0', expire)
- redis_obj.del_data(grant_key)
- except Exception as e:
- redis_obj.del_data(grant_key)
- return
|