EvaluationActivityController.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2024年7月29日15:51:04
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. """
  12. import time
  13. from django.views.generic.base import View
  14. from Model.models import FreeEvaluationActivity, ActivityTime, ActivityUser
  15. from Object.AWS.AmazonS3Util import AmazonS3Util
  16. from Object.ResponseObject import ResponseObject
  17. from Object.TokenObject import TokenObject
  18. from Ansjer.config import SECRET_ACCESS_KEY, ACCESS_KEY_ID, REGION_NAME
  19. from django.db import transaction
  20. class EvaluationActivityView(View):
  21. def get(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. return self.validation(request.GET, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. operation = kwargs.get('operation')
  28. return self.validation(request.POST, request, operation)
  29. def validation(self, request_dict, request, operation):
  30. language = request_dict.get('language', 'en')
  31. response = ResponseObject(language, 'pc')
  32. tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
  33. if tko.code != 0:
  34. return response.json(tko.code)
  35. response.lang = tko.lang
  36. user_id = tko.userID
  37. if operation == 'getActivity':
  38. return self.get_activity(user_id, request_dict, response)
  39. elif operation == 'getActivityList':
  40. return self.get_activity_list(user_id, request_dict, response)
  41. elif operation == 'addOrEditActivity':
  42. return self.add_or_edit_activity(request, request_dict, response)
  43. elif operation == 'getActivityUser':
  44. return self.get_user_list(request_dict, response)
  45. elif operation == 'addActivityUser':
  46. return self.add_activity_user(user_id, request_dict, response)
  47. elif operation == 'editActivityUser':
  48. return self.edit_activity_user(request_dict, response)
  49. else:
  50. return response.json(404)
  51. @staticmethod
  52. def get_activity(user_id, request_dict, response):
  53. try:
  54. now_time = int(time.time())
  55. activity_qs = FreeEvaluationActivity.objects.filter(is_show=1).values('activity_name', 'carousel_image_url',
  56. 'details_image_url', 'issue', 'id',
  57. 'product_number', 'original_price')
  58. if activity_qs.exists():
  59. activity = activity_qs[0]
  60. time_qs = ActivityTime.objects.filter(activity_id=activity['id']).values('node_content', 'start_time',
  61. 'end_time').order_by('sort')
  62. activity['activity_start_time'] = time_qs.first()['start_time']
  63. activity['activity_end_time'] = time_qs.last()['end_time']
  64. activity['activity_process'] = list(time_qs)
  65. user_qs = ActivityUser.objects.filter(activity_id=activity['id'])
  66. activity['user_count'] = user_qs.count()
  67. if user_qs.exists():
  68. user = user_qs.filter(user_id=user_id)
  69. if user.exists():
  70. activity['activity_status'] = 2 # 1:可报名;2:已报名;3:报名截止;4:活动结束
  71. else:
  72. activity['activity_status'] = 1
  73. user_qs = user_qs.filter(is_selected=1).values('user_name', 'phone')
  74. activity['activity_user'] = list(user_qs)
  75. else:
  76. activity['activity_status'] = 1
  77. activity['activity_user'] = []
  78. if now_time > time_qs.first()['end_time']:
  79. activity['activity_status'] = 3
  80. if now_time > time_qs.last()['end_time']:
  81. activity['activity_status'] = 4
  82. return response.json(0, activity)
  83. else:
  84. return response.json(0, {})
  85. except Exception as e:
  86. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  87. @staticmethod
  88. def add_activity_user(user_id, request_dict, response):
  89. activity_id = request_dict.get('activity_id', None)
  90. user_name = request_dict.get('user_name', None)
  91. phone = request_dict.get('phone', None)
  92. address = request_dict.get('address', None)
  93. sex = request_dict.get('sex', None)
  94. age = request_dict.get('age', None)
  95. usage_environment = request_dict.get('usage_environment', None)
  96. is_reports = request_dict.get('is_reports', None)
  97. if not all([activity_id, user_name, phone, address, sex, age, usage_environment, is_reports]):
  98. return response.json(404)
  99. now_time = int(time.time())
  100. try:
  101. user = ActivityUser.objects.filter(user_id=user_id, activity_id=activity_id)
  102. if user.exists():
  103. user.update(phone=phone, address=address, sex=sex, user_name=user_name, is_reports=is_reports, age=age,
  104. usage_environment=usage_environment, update_time=now_time)
  105. else:
  106. ActivityUser.objects.create(activity_id=activity_id, user_id=user_id, phone=phone, address=address,
  107. sex=sex, age=age, usage_environment=usage_environment, user_name=user_name,
  108. is_reports=is_reports, created_time=now_time, update_time=now_time)
  109. return response.json(0)
  110. except Exception as e:
  111. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  112. @staticmethod
  113. def add_or_edit_activity(request, request_dict, response):
  114. activity_id = request_dict.get('activity_id', None)
  115. activity_name = request_dict.get('activity_name', None)
  116. carousel_image = request.FILES.get('carousel_image', None)
  117. details_image = request.FILES.get('details_image', None)
  118. issue = request_dict.get('issue', None)
  119. product_number = request_dict.get('product_number', None)
  120. original_price = request_dict.get('original_price', None)
  121. activity_process = request_dict.get('activity_process', None)
  122. is_show = request_dict.get('is_show', None)
  123. if not all([activity_name, issue, product_number, original_price, is_show, activity_process]):
  124. return response.json(404)
  125. now_time = int(time.time())
  126. activity_process = eval(activity_process)
  127. try:
  128. bucket = "ansjerfilemanager"
  129. s3_obj = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
  130. s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)
  131. if carousel_image:
  132. carousel_image_path = '前端/EvaluationActivity/carousel_image_{}.jpg'.format(issue)
  133. s3_obj.upload_file_obj(
  134. bucket,
  135. carousel_image_path,
  136. carousel_image,
  137. {"ContentType": carousel_image.content_type, "ACL": "public-read"},
  138. )
  139. carousel_image_url = s3_url + carousel_image_path
  140. if activity_id:
  141. FreeEvaluationActivity.objects.filter(id=activity_id).update(carousel_image_url=carousel_image_url)
  142. if details_image:
  143. details_image_path = '前端/EvaluationActivity/details_image_{}.jpg'.format(issue)
  144. s3_obj.upload_file_obj(
  145. bucket,
  146. details_image_path,
  147. details_image,
  148. {"ContentType": details_image.content_type, "ACL": "public-read"},
  149. )
  150. details_image_url = s3_url + details_image_path
  151. if activity_id:
  152. FreeEvaluationActivity.objects.filter(id=activity_id).update(details_image_url=details_image_url)
  153. with transaction.atomic():
  154. if activity_id: # 编辑活动
  155. FreeEvaluationActivity.objects.filter(id=activity_id).update(issue=issue,
  156. product_number=product_number,
  157. original_price=original_price,
  158. is_show=is_show, update_time=now_time)
  159. for index, item in enumerate(activity_process):
  160. time_qs = ActivityTime.objects.filter(activity_id=activity_id,
  161. node_content=item['node_content'])
  162. if time_qs.exists():
  163. time_qs.update(start_time=item['start_time'], end_time=item['end_time'], sort=index)
  164. else:
  165. ActivityTime.objects.create(activity_id=activity_id, node_content=item['node_content'],
  166. start_time=item['start_time'], end_time=item['end_time'],
  167. sort=index)
  168. else: # 增加活动
  169. if not all([carousel_image, details_image]):
  170. return response.json(404)
  171. FreeEvaluationActivity.objects.create(activity_name=activity_name, product_number=product_number,
  172. carousel_image_url=carousel_image_url, is_show=is_show,
  173. original_price=original_price,
  174. details_image_url=details_image_url, issue=issue)
  175. for index, item in enumerate(activity_process):
  176. ActivityTime.objects.create(activity_id=activity_id, node_content=item['node_content'],
  177. start_time=item['start_time'], end_time=item['end_time'],
  178. sort=index)
  179. return response.json(0)
  180. except Exception as e:
  181. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  182. @staticmethod
  183. def get_activity_list(user_id, request_dict, response):
  184. try:
  185. activity_qs = FreeEvaluationActivity.objects.all().values('id', 'activity_name', 'carousel_image_url',
  186. 'details_image_url', 'issue', 'is_show',
  187. 'product_number', 'original_price')
  188. for item in activity_qs:
  189. time_qs = ActivityTime.objects.filter(activity_id=item['id']).values('node_content', 'start_time',
  190. 'end_time').order_by('sort')
  191. item['activity_process'] = list(time_qs)
  192. return response.json(0, list(activity_qs))
  193. except Exception as e:
  194. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  195. @staticmethod
  196. def get_user_list(request_dict, response):
  197. activity_id = request_dict.get('activity_id', None)
  198. try:
  199. user_qs = ActivityUser.objects.all()
  200. if activity_id:
  201. user_qs = user_qs.filter(activity_id=activity_id)
  202. user_qs = user_qs.values('id', 'user_name', 'phone', 'age', 'address', 'sex', 'is_selected', 'activity_id',
  203. 'usage_environment', 'is_reports')
  204. return response.json(0, list(user_qs))
  205. except Exception as e:
  206. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  207. @staticmethod
  208. def edit_activity_user(request_dict, response):
  209. activity_id = request_dict.get('activity_id', None)
  210. user_id = request_dict.get('user_id', None)
  211. is_selected = request_dict.get('is_selected', None)
  212. try:
  213. ActivityUser.objects.filter(activity_id=activity_id, id=user_id).update(is_selected=is_selected)
  214. return response.json(0)
  215. except Exception as e:
  216. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))