CloudStorageController.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #!/usr/bin/python3.6
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Copyright (C) 2022 #
  5. # @Time : 2022/3/24 20:09
  6. # @Author : ming
  7. # @Email : zhangdongming@asj6.wecom.work
  8. # @File : CloudStorageController.py
  9. # @Software: PyCharm
  10. import logging
  11. import time
  12. from django.db import transaction
  13. from django.utils.decorators import method_decorator
  14. from django.views.decorators.csrf import csrf_exempt
  15. from django.views.generic.base import View
  16. from Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, SurveysUserLog, \
  17. CloudVodSurveysOperateLog
  18. from Object.utils import LocalDateTimeUtil
  19. from Object.ResponseObject import ResponseObject
  20. from Object.TokenObject import TokenObject
  21. from Service.CommonService import CommonService
  22. class CloudStorageView(View):
  23. @method_decorator(csrf_exempt)
  24. def dispatch(self, *args, **kwargs):
  25. return super(CloudStorageView, self).dispatch(*args, **kwargs)
  26. def get(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation')
  29. return self.validation(request.GET, request, operation)
  30. def post(self, request, *args, **kwargs):
  31. request.encoding = 'utf-8'
  32. operation = kwargs.get('operation')
  33. return self.validation(request.POST, request, operation)
  34. def validation(self, request_dict, request, operation):
  35. logger = logging.getLogger('info')
  36. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  37. response = ResponseObject(token.lang) if token.lang else ResponseObject()
  38. if token.code != 0:
  39. return response.json(token.code)
  40. userID = token.userID
  41. ''' API '''
  42. logger.info('---- this user id:{},dict{}'.format(userID, request_dict))
  43. if operation == 'get/info':
  44. return self.check_stock_user(userID, response)
  45. if operation == 'cloud/answer/save':
  46. ip = CommonService.get_ip_address(request)
  47. return self.answer_save(userID, ip, request_dict, response)
  48. if operation == "cloud/storage/icon/close":
  49. self.cloud_vob_operate_log_save(status=2, userId=userID)
  50. if operation == "entrance/cloud/storage/icon":
  51. return self.entrance_cloud_storage_icon(userID, request_dict, response)
  52. return response.json(0)
  53. def check_stock_user(self, user_id, response):
  54. order = Order_Model.objects.filter(userID=user_id, status=1, order_type=0)
  55. if not order.exists() and order.count() == 0:
  56. return response.json(10030)
  57. try:
  58. no = '01'
  59. surveys = Surveys.objects.filter(no=no, user_type=1)
  60. if not surveys.exists():
  61. return response.json(173)
  62. result = surveys[0]
  63. surveys_title = SurveysTitle.objects.filter(surveys_id=result.id).order_by('-created_time')
  64. submit = 0
  65. if surveys_title.exists():
  66. surveys_title = surveys_title[0]
  67. cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=surveys_title.id, user_id=user_id)
  68. if cloud_vod.exists():
  69. submit = 1
  70. close = self.check_user_is_icon_close(userId=user_id)
  71. data = {
  72. 'no': result.no,
  73. 'title': 'Zosi Cloud Storage',
  74. 'imageUrl': 'https://d2cjxvw3tr9apc.cloudfront.net/app/images/ansjer-cloud-surveys.png',
  75. 'userType': result.user_type,
  76. 'startTime': result.start_time,
  77. 'endTime': result.end_time,
  78. 'isShow': 0 if close else result.is_show,
  79. 'isSubmit': submit,
  80. 'page': '/surveys?token=' if result.is_show == 1 else ''
  81. }
  82. localTime = int(time.time())
  83. if result.start_time <= localTime <= result.end_time:
  84. status = True if submit == 1 else False
  85. self.surveys_user_log_save(status, user_id)
  86. if not submit == 1:
  87. self.cloud_vob_operate_log_save(2 if close else submit, userId=user_id)
  88. return response.json(0, data)
  89. except Exception as e:
  90. print(e)
  91. return response.json(500, repr(e))
  92. @classmethod
  93. def surveys_user_log_save(cls, status=False, userId='', survey_type=1):
  94. if userId:
  95. user_log = SurveysUserLog.objects.filter(user_id=userId, type=survey_type)
  96. if user_log.exists():
  97. if status and user_log[0].is_filled == 0:
  98. user_log.update(is_filled=1)
  99. else:
  100. createdTime = int(time.time())
  101. user_log = SurveysUserLog(user_id=userId, type=1, created_time=createdTime)
  102. user_log.save()
  103. @classmethod
  104. def check_user_is_icon_close(cls, userId):
  105. if userId:
  106. start_time, end_time = LocalDateTimeUtil.get_today_date(True)
  107. user_operate_log_list = CloudVodSurveysOperateLog.objects.filter(user_id=userId, status=2,
  108. created_time__gte=start_time,
  109. created_time__lte=end_time)
  110. if user_operate_log_list.exists():
  111. return True
  112. return False
  113. @classmethod
  114. def cloud_vob_operate_log_save(cls, status=0, userId=''):
  115. """ 保存用户操作记录 """
  116. try:
  117. with transaction.atomic():
  118. if userId:
  119. start_time, end_time = LocalDateTimeUtil.get_today_date(True)
  120. user_operate_qs = CloudVodSurveysOperateLog.objects.filter(user_id=userId,
  121. created_time__gte=start_time,
  122. created_time__lte=end_time)
  123. local_time = int(time.time())
  124. if user_operate_qs.exists():
  125. operate_log = user_operate_qs.first()
  126. if not operate_log.status == status:
  127. operate_log.status = status
  128. operate_log.updated_time = local_time
  129. operate_log.save()
  130. else:
  131. operate_log = CloudVodSurveysOperateLog(user_id=userId, status=status, updated_time=local_time,
  132. created_time=local_time)
  133. operate_log.save()
  134. except Exception as e:
  135. print(e)
  136. @classmethod
  137. def answer_save(cls, userId, ip, request_dict, response):
  138. try:
  139. ipInfo = CommonService.getIpIpInfo(ip, "CN")
  140. country_name = ipInfo['country_name']
  141. no = request_dict.get('no', None)
  142. if not no:
  143. return response.json(10, 'no is null')
  144. survey = Surveys.objects.filter(no=no)
  145. if survey.exists():
  146. survey = survey[0]
  147. survey_title = SurveysTitle.objects.filter(surveys=survey.id)
  148. if survey_title.exists():
  149. survey_title = survey_title[0]
  150. cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=survey_title.id, user_id=userId)
  151. if cloud_vod.exists():
  152. return response.json(10, "Do not submit twice")
  153. score = request_dict.get('score', None)
  154. topicA = request_dict.get('topicA', None)
  155. topicB = request_dict.get('topicB', None)
  156. topicC = request_dict.get('topicC', None)
  157. topicD = request_dict.get('topicD', None)
  158. topicF = request_dict.get('topicF', None)
  159. createdTime = int(time.time())
  160. answer = CloudVodSurveysAnswer(title_id=survey_title.id, user_id=userId, ip=ip, answer1=int(score),
  161. answer2=topicA,
  162. answer3=topicB, answer4=topicC, answer5=topicD, answer6=topicF,
  163. created_time=createdTime, country_name=country_name)
  164. answer.save()
  165. SurveysUserLog.objects.filter(user_id=userId, type=1).update(is_filled=1)
  166. cls.cloud_vob_operate_log_save(status=1, userId=userId)
  167. return response.json(0)
  168. except Exception as e:
  169. print(e)
  170. return response.json(500, repr(e))
  171. @classmethod
  172. def entrance_cloud_storage_icon(cls, userID, request_dict, response):
  173. status = request_dict.get('status', None)
  174. if not status:
  175. return response.json(444, 'status')
  176. status = int(status)
  177. start_time, end_time = LocalDateTimeUtil.get_today_date(True)
  178. if status == 3: #
  179. user_operate_qs = CloudVodSurveysOperateLog.objects.filter(user_id=userID, status=status,
  180. created_time__gte=start_time,
  181. created_time__lte=end_time)
  182. if not user_operate_qs.exists(): # 判断用户是否已点开问卷
  183. cls.cloud_vob_operate_log_save(status=status, userId=userID)
  184. return response.json(0)