EvaluationActivityController.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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, Device_User
  15. from Object.AWS.AmazonS3Util import AmazonS3Util
  16. from Object.ResponseObject import ResponseObject
  17. from Object.TokenObject import TokenObject
  18. from Ansjer.config import SERVER_DOMAIN, LOGGER
  19. from Ansjer.cn_config.config_formal import SECRET_ACCESS_KEY, ACCESS_KEY_ID, REGION_NAME
  20. from django.db import transaction
  21. class EvaluationActivityView(View):
  22. def get(self, request, *args, **kwargs):
  23. request.encoding = 'utf-8'
  24. operation = kwargs.get('operation')
  25. return self.validation(request.GET, request, operation)
  26. def post(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation')
  29. return self.validation(request.POST, request, operation)
  30. def validation(self, request_dict, request, operation):
  31. language = request_dict.get('language', 'en')
  32. response = ResponseObject(language, 'pc')
  33. tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
  34. if tko.code != 0:
  35. return response.json(tko.code)
  36. response.lang = tko.lang
  37. user_id = tko.userID
  38. if operation == 'getActivity':
  39. return self.get_activity(user_id, request_dict, response)
  40. elif operation == 'getActivityList':
  41. return self.get_activity_list(request_dict, response)
  42. elif operation == 'addOrEditActivity':
  43. return self.add_or_edit_activity(request, request_dict, response)
  44. elif operation == 'getActivityUser':
  45. return self.get_user_list(request_dict, response)
  46. elif operation == 'addActivityUser':
  47. return self.add_activity_user(user_id, request_dict, response)
  48. elif operation == 'editActivityUser':
  49. return self.edit_activity_user(request_dict, response)
  50. else:
  51. return response.json(404)
  52. @staticmethod
  53. def get_activity(user_id, request_dict, response):
  54. try:
  55. now_time = int(time.time())
  56. activity_qs = FreeEvaluationActivity.objects.filter(is_show=1).values('activity_name', 'carousel_image_url',
  57. 'details_image_url', 'issue', 'id',
  58. 'product_number', 'original_price',
  59. 'product_name')
  60. if activity_qs.exists():
  61. activity = activity_qs[0]
  62. time_qs = ActivityTime.objects.filter(activity_id=activity['id']).values('node_content', 'start_time',
  63. 'end_time').order_by('sort')
  64. activity['activity_start_time'] = time_qs.first()['start_time']
  65. activity['activity_end_time'] = time_qs.last()['end_time']
  66. activity['activity_process'] = list(time_qs)
  67. user_qs = ActivityUser.objects.filter(activity_id=activity['id'])
  68. activity['user_count'] = user_qs.count()
  69. if user_qs.exists():
  70. user = user_qs.filter(user_id=user_id)
  71. if user.exists():
  72. activity['activity_status'] = 2 # 1:可报名;2:已报名;3:报名截止;4:活动结束
  73. else:
  74. activity['activity_status'] = 1
  75. user_qs = user_qs.filter(is_selected=1).values('user_name', 'phone', 'user_id')
  76. for item in user_qs:
  77. users = Device_User.objects.filter(userID=item['user_id']).values('userIconPath')
  78. if users.exists():
  79. user_icon_path = str(users[0]['userIconPath'])
  80. if user_icon_path and user_icon_path.find('static/') != -1:
  81. user_icon_path = user_icon_path.replace('static/', '').replace('\\', '/')
  82. item['user_icon'] = SERVER_DOMAIN + 'account/getAvatar/' + user_icon_path
  83. else:
  84. item['user_icon'] = ''
  85. else:
  86. item['user_icon'] = ''
  87. item['phone'] = item['phone'][:3] + "****" + item['phone'][7:]
  88. activity['activity_user'] = list(user_qs)
  89. else:
  90. activity['activity_status'] = 1
  91. activity['activity_user'] = []
  92. if now_time > time_qs.first()['end_time']:
  93. activity['activity_status'] = 3
  94. if now_time > time_qs.last()['end_time']:
  95. activity['activity_status'] = 4
  96. return response.json(0, activity)
  97. else:
  98. return response.json(0, {})
  99. except Exception as e:
  100. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  101. @staticmethod
  102. def add_activity_user(user_id, request_dict, response):
  103. activity_id = request_dict.get('activity_id', None)
  104. user_name = request_dict.get('user_name', None)
  105. phone = request_dict.get('phone', None)
  106. address = request_dict.get('address', None)
  107. sex = request_dict.get('sex', None)
  108. age = request_dict.get('age', None)
  109. usage_environment = request_dict.get('usage_environment', None)
  110. is_reports = request_dict.get('is_reports', None)
  111. if not all([activity_id, user_name, phone, address, sex, age, usage_environment, is_reports]):
  112. return response.json(404)
  113. now_time = int(time.time())
  114. try:
  115. user = ActivityUser.objects.filter(user_id=user_id, activity_id=activity_id)
  116. if user.exists():
  117. user.update(phone=phone, address=address, sex=sex, user_name=user_name, is_reports=is_reports, age=age,
  118. usage_environment=usage_environment, update_time=now_time)
  119. else:
  120. ActivityUser.objects.create(activity_id=activity_id, user_id=user_id, phone=phone, address=address,
  121. sex=sex, age=age, usage_environment=usage_environment, user_name=user_name,
  122. is_reports=is_reports, created_time=now_time, update_time=now_time)
  123. return response.json(0)
  124. except Exception as e:
  125. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  126. @staticmethod
  127. def add_or_edit_activity(request, request_dict, response):
  128. activity_id = request_dict.get('activity_id', None)
  129. activity_name = request_dict.get('activity_name', None)
  130. carousel_image = request.FILES.get('carousel_image', None)
  131. details_image = request.FILES.get('details_image', None)
  132. issue = request_dict.get('issue', None)
  133. product_number = request_dict.get('product_number', None)
  134. product_name = request_dict.get('product_name', None)
  135. original_price = request_dict.get('original_price', None)
  136. activity_process = request_dict.get('activity_process', None)
  137. is_show = request_dict.get('is_show', None)
  138. if not all([activity_name, issue, product_number, original_price, is_show, activity_process, product_name]):
  139. return response.json(404)
  140. now_time = int(time.time())
  141. activity_process = eval(activity_process)
  142. try:
  143. bucket = "ansjerfilemanager"
  144. s3_obj = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
  145. s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)
  146. with transaction.atomic():
  147. if activity_id: # 编辑活动
  148. activity = FreeEvaluationActivity.objects.get(id=activity_id)
  149. activity.activity_name = activity_name
  150. activity.issue = issue
  151. activity.product_number = product_number
  152. activity.product_name = product_name
  153. activity.original_price = original_price
  154. activity.is_show = is_show
  155. activity.update_time = now_time
  156. # 上传轮播图
  157. if carousel_image:
  158. carousel_image_path = '前端/EvaluationActivity/carousel_image_{}.jpg'.format(activity_id)
  159. s3_obj.upload_file_obj(
  160. bucket,
  161. carousel_image_path,
  162. carousel_image,
  163. {"ContentType": carousel_image.content_type, "ACL": "public-read"},
  164. )
  165. activity.carousel_image_url = s3_url + carousel_image_path
  166. # 上传详情图
  167. if details_image:
  168. details_image_path = '前端/EvaluationActivity/details_image_{}.jpg'.format(activity_id)
  169. s3_obj.upload_file_obj(
  170. bucket,
  171. details_image_path,
  172. details_image,
  173. {"ContentType": details_image.content_type, "ACL": "public-read"},
  174. )
  175. activity.details_image_url = s3_url + details_image_path
  176. activity.save()
  177. # 处理活动时间节点
  178. ActivityTime.objects.filter(activity_id=activity_id).delete()
  179. for index, item in enumerate(activity_process):
  180. ActivityTime.objects.create(
  181. activity_id=activity_id,
  182. node_content=item['node_content'],
  183. start_time=item['start_time'],
  184. end_time=item['end_time'],
  185. sort=index
  186. )
  187. else: # 添加活动
  188. if not all([carousel_image, details_image]):
  189. return response.json(404)
  190. # 创建活动对象(先不保存图片URL)
  191. activity = FreeEvaluationActivity.objects.create(
  192. activity_name=activity_name,
  193. issue=issue,
  194. product_number=product_number,
  195. product_name=product_name,
  196. original_price=original_price,
  197. is_show=is_show,
  198. created_time=now_time,
  199. update_time=now_time,
  200. carousel_image_url='', # 初始化为空
  201. details_image_url=''
  202. )
  203. activity_id = activity.id
  204. # 上传轮播图并更新URL
  205. carousel_image_path = '前端/EvaluationActivity/carousel_image_{}.jpg'.format(activity_id)
  206. s3_obj.upload_file_obj(
  207. bucket,
  208. carousel_image_path,
  209. carousel_image,
  210. {"ContentType": carousel_image.content_type, "ACL": "public-read"},
  211. )
  212. activity.carousel_image_url = s3_url + carousel_image_path
  213. # 上传详情图并更新URL
  214. details_image_path = '前端/EvaluationActivity/details_image_{}.jpg'.format(activity_id)
  215. s3_obj.upload_file_obj(
  216. bucket,
  217. details_image_path,
  218. details_image,
  219. {"ContentType": details_image.content_type, "ACL": "public-read"},
  220. )
  221. activity.details_image_url = s3_url + details_image_path
  222. activity.save() # 保存图片URL
  223. # 创建活动时间节点
  224. for index, item in enumerate(activity_process):
  225. ActivityTime.objects.create(
  226. activity_id=activity_id,
  227. node_content=item['node_content'],
  228. start_time=item['start_time'],
  229. end_time=item['end_time'],
  230. sort=index
  231. )
  232. return response.json(0)
  233. except Exception as e:
  234. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  235. @staticmethod
  236. def get_activity_list(request_dict, response):
  237. page = request_dict.get('page', None)
  238. line = request_dict.get('line', None)
  239. if not all([page, line]):
  240. return response.json(444)
  241. try:
  242. page = int(page)
  243. line = int(line)
  244. activity_qs = FreeEvaluationActivity.objects.all()
  245. count = activity_qs.count()
  246. activity_qs = activity_qs.values('id', 'activity_name', 'carousel_image_url', 'details_image_url', 'issue',
  247. 'is_show', 'product_number', 'original_price', 'product_name')[
  248. (page - 1) * line: page * line]
  249. for item in activity_qs:
  250. time_qs = ActivityTime.objects.filter(activity_id=item['id']).values('node_content', 'start_time',
  251. 'end_time').order_by('sort')
  252. item['activity_process'] = list(time_qs)
  253. return response.json(0, {'list': list(activity_qs), 'count': count})
  254. except Exception as e:
  255. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  256. @staticmethod
  257. def get_user_list(request_dict, response):
  258. activity_id = request_dict.get('activity_id', None)
  259. user_name = request_dict.get('user_name', None)
  260. phone = request_dict.get('phone', None)
  261. page = request_dict.get('page', None)
  262. line = request_dict.get('line', None)
  263. if not all([activity_id, page, line]):
  264. return response.json(444)
  265. try:
  266. page = int(page)
  267. line = int(line)
  268. user_qs = ActivityUser.objects.filter(activity_id=activity_id)
  269. if user_name:
  270. user_qs = user_qs.filter(user_name=user_name)
  271. if phone:
  272. user_qs = user_qs.filter(phone=phone)
  273. count = user_qs.count()
  274. user_qs = user_qs.values('id', 'user_name', 'phone', 'age', 'address', 'sex', 'is_selected', 'activity_id',
  275. 'usage_environment', 'is_reports')[(page - 1) * line:page * line]
  276. return response.json(0, {'list': list(user_qs), 'count': count})
  277. except Exception as e:
  278. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  279. @staticmethod
  280. def edit_activity_user(request_dict, response):
  281. activity_id = request_dict.get('activity_id', None)
  282. user_id = request_dict.get('user_id', None)
  283. is_selected = request_dict.get('is_selected', None)
  284. try:
  285. ActivityUser.objects.filter(activity_id=activity_id, id=user_id).update(is_selected=is_selected)
  286. return response.json(0)
  287. except Exception as e:
  288. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))