SurveysManageController.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. #!/usr/bin/python3.6
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Copyright (C) 2022 #
  5. # @Time : 2022/3/9 9:20
  6. # @Author : ming
  7. # @Email : zhangdongming@asj6.wecom.work
  8. # @File : SurveysManageController.py
  9. # @Software: PyCharm
  10. import json
  11. import time
  12. from django.db import connection
  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, CloudVodSurveysAnswer, Device_User, SurveysUserLog
  17. from Object.ResponseObject import ResponseObject
  18. from Object.TokenObject import TokenObject
  19. class SurveysView(View):
  20. @method_decorator(csrf_exempt)
  21. def dispatch(self, *args, **kwargs):
  22. return super(SurveysView, self).dispatch(*args, **kwargs)
  23. def get(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.GET, request, operation)
  27. def post(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation')
  30. return self.validation(request.POST, request, operation)
  31. def validation(self, request_dict, request, operation):
  32. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  33. response = ResponseObject()
  34. if token.code != 0:
  35. return response.json(token.code)
  36. ''' 后台管理'''
  37. response = ResponseObject(returntype='pc')
  38. if operation == 'save':
  39. return self.save(request_dict, response)
  40. if operation == 'edit':
  41. return self.edit(request_dict, response)
  42. if operation == 'list':
  43. return self.get_page(request_dict, response)
  44. if operation == 'title/list':
  45. return self.get_title_list(request_dict, response)
  46. if operation == 'title/save':
  47. return self.title_save(request_dict, response)
  48. if operation == 'title/edit':
  49. return self.title_edit(request_dict, response)
  50. if operation == 'title/del':
  51. return self.title_del(request_dict, response)
  52. if operation == 'cloud/vod/answer/page':
  53. return self.cloud_surveys_answer_page(request_dict, response)
  54. if operation == 'cloud/storage/log/page':
  55. return self.cloud_storage_user_log_page(request_dict, response)
  56. return response.json(0)
  57. @classmethod
  58. def get_page(cls, request_dict, response):
  59. pageNo = request_dict.get('pageNo', None)
  60. pageSize = request_dict.get('pageSize', None)
  61. if not all([pageNo, pageSize]):
  62. return response.json(444)
  63. page = int(pageNo)
  64. line = int(pageSize)
  65. try:
  66. request_qs = Surveys.objects.all()
  67. total = request_qs.count()
  68. surveys_page = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line]
  69. result_list = []
  70. for surveys in surveys_page:
  71. start_time = time.localtime(surveys.start_time)
  72. endT_time = time.localtime(surveys.end_time)
  73. created_time = time.localtime(surveys.created_time)
  74. result_list.append({
  75. 'id': surveys.id,
  76. 'no': surveys.no,
  77. 'userType': surveys.user_type,
  78. 'startTime': time.strftime("%Y-%m-%d %H:%M:%S", start_time),
  79. 'endTime': time.strftime("%Y-%m-%d %H:%M:%S", endT_time),
  80. 'isShow': surveys.is_show,
  81. 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  82. })
  83. return response.json(0, {'list': result_list, 'total': total})
  84. except Exception as e:
  85. print(e)
  86. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  87. @classmethod
  88. def save(cls, request_dict, response):
  89. no = request_dict.get('no', None)
  90. if not no:
  91. return response.json(0)
  92. if Surveys.objects.filter(no=no).exists():
  93. return response.json(10, '已存在')
  94. no = request_dict.get('no', None)
  95. user_type = request_dict.get('userType', None)
  96. start_time = request_dict.get('dateTime[0]', None)
  97. end_time = request_dict.get('dateTime[1]', None)
  98. is_show = request_dict.get('isShow', None)
  99. is_show = 1 if is_show == 'true' else 0
  100. createdTime = int(time.time())
  101. try:
  102. surveys = Surveys(no=no, user_type=user_type, start_time=int(start_time),
  103. end_time=end_time, is_show=is_show, created_time=int(createdTime))
  104. surveys.save()
  105. return response.json(0)
  106. except Exception as e:
  107. print(e)
  108. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  109. @classmethod
  110. def edit(cls, request_dict, response):
  111. sur_id = request_dict.get('id', None)
  112. if not sur_id:
  113. return response.json(10, 'id不存在')
  114. user_type = request_dict.get('userType', None)
  115. start_time = request_dict.get('dateTime[0]', None)
  116. end_time = request_dict.get('dateTime[1]', None)
  117. is_show = request_dict.get('isShow', None)
  118. is_show = 1 if is_show == 'true' else 0
  119. Surveys.objects.filter(id=int(sur_id)).update(user_type=int(user_type), start_time=int(start_time),
  120. end_time=int(end_time),
  121. is_show=int(is_show))
  122. return response.json(0)
  123. @classmethod
  124. def delete(cls, request_dict, response):
  125. sId = request_dict.get('id', None)
  126. if not sId:
  127. return response.json(10, 'id不存在')
  128. Surveys.objects.filter(id=sId).delete()
  129. response.json(0)
  130. @classmethod
  131. def title_save(cls, request_dict, response):
  132. survey_id = request_dict.get('surveyId', None)
  133. if not survey_id:
  134. return response(10, 'surveyId is null')
  135. t_id = request_dict.get('id', None)
  136. content = request_dict.get('content', None)
  137. created_time = int(time.time())
  138. try:
  139. title = SurveysTitle.objects.filter(id=t_id)
  140. if title.exists():
  141. title.update(title_content=content)
  142. else:
  143. surveys_title = SurveysTitle(surveys_id=survey_id, title_content=content, created_time=created_time)
  144. surveys_title.save()
  145. return response.json(0)
  146. except Exception as e:
  147. print(e)
  148. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  149. @classmethod
  150. def get_title_list(cls, request_dict, response):
  151. survey_id = request_dict.get('surveyId', None)
  152. info = request_dict.get('info', None)
  153. if not survey_id:
  154. return response.json(10, '问卷id不存在')
  155. title_list = SurveysTitle.objects.filter(surveys_id=survey_id).order_by('-created_time')
  156. if not title_list.exists():
  157. if info:
  158. return response.json(0, {'id': None, 'content': None})
  159. return response.json(173)
  160. content = title_list[0]
  161. if info:
  162. return response.json(0, {'id': content.id, 'content': content.title_content})
  163. data = json.loads(content.title_content)
  164. return response.json(0, {'answers': data})
  165. @classmethod
  166. def title_edit(cls, request_dict, response):
  167. title_id = request_dict.get('id', None)
  168. if not title_id:
  169. return response.json(10, 'id不存在')
  170. content = request_dict.get('content', None)
  171. surveys_title = SurveysTitle.objects.filter(surveys_id=title_id)
  172. surveys_title.update(title_content=content)
  173. return response.json(0)
  174. @classmethod
  175. def title_del(cls, request_dict, response):
  176. title_id = request_dict.get('id', None)
  177. if not title_id:
  178. return response.json(10, 'id不存在')
  179. SurveysTitle.objects.filter(id=title_id).delete()
  180. return response.json(0)
  181. @classmethod
  182. def cloud_surveys_answer_page(cls, request_dict, response):
  183. pageNo = request_dict.get('pageNo', None)
  184. pageSize = request_dict.get('pageSize', None)
  185. user_name = request_dict.get('userName', None)
  186. country_name = request_dict.get('countryName', None)
  187. time_range = request_dict.getlist('timeRange[]', None)
  188. num = request_dict.get('num', 0)
  189. num = int(num)
  190. opt_val = request_dict.getlist('optVal', None)
  191. if not all([pageNo, pageSize]):
  192. return response.json(444)
  193. page = int(pageNo)
  194. line = int(pageSize)
  195. try:
  196. request_qs = CloudVodSurveysAnswer.objects.all()
  197. if user_name:
  198. request_qs = request_qs.filter(user__username__contains=user_name)
  199. if country_name:
  200. request_qs = request_qs.filter(country_name=country_name)
  201. if num >= 0 and len(opt_val) > 0:
  202. condition = int(opt_val[0])
  203. if condition == 1:
  204. request_qs = request_qs.filter(answer1__gt=num)
  205. elif condition == 2:
  206. request_qs = request_qs.filter(answer1__lt=num)
  207. elif condition == 3:
  208. request_qs = request_qs.filter(answer1=num)
  209. elif condition == 4:
  210. request_qs = request_qs.filter(answer1__gte=num)
  211. elif condition == 5:
  212. request_qs = request_qs.filter(answer1__lte=num)
  213. if time_range:
  214. startTime, endTime = int(time_range[0][:-3]), int(time_range[1][:-3])
  215. request_qs = request_qs.filter(created_time__gte=startTime, created_time__lte=endTime)
  216. if not request_qs.exists():
  217. return response.json(0)
  218. total = request_qs.count()
  219. answer_page = request_qs.order_by('-created_time')[(page - 1) * line:page * line]
  220. result_list = []
  221. for answer in answer_page:
  222. d_user_qs = Device_User.objects.filter(userID=answer.user_id)
  223. if not all(d_user_qs):
  224. return response.json(173)
  225. d_user_qs = d_user_qs[0]
  226. created_time = time.localtime(answer.created_time)
  227. result_list.append({
  228. 'id': answer.id,
  229. 'uId': d_user_qs.userID,
  230. 'uName': d_user_qs.username,
  231. 'nickName': d_user_qs.NickName,
  232. 'answer1': answer.answer1,
  233. 'answer2': answer.answer2,
  234. 'answer3': answer.answer3,
  235. 'answer4': answer.answer4,
  236. 'answer5': answer.answer5,
  237. 'answer6': answer.answer6,
  238. 'country': answer.country_name,
  239. 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  240. })
  241. return response.json(0, {'list': result_list, 'total': total})
  242. except Exception as e:
  243. print(e)
  244. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  245. ''' 云存用户问卷调查统计 '''
  246. @classmethod
  247. def cloud_storage_user_log_page(cls, request_dict, response):
  248. pageNo = request_dict.get('pageNo', None)
  249. pageSize = request_dict.get('pageSize', None)
  250. if not all([pageNo, pageSize]):
  251. return response.json(444)
  252. try:
  253. page = int(pageNo)
  254. size = int(pageSize)
  255. cursor = connection.cursor()
  256. sql = 'SELECT o.orderID,o.userID_id,ca.id,ca.country_name as countryName '
  257. sql += 'FROM orders o LEFT JOIN cloud_vod_surveys_answer ca ON o.userID_id = ca.user_id '
  258. sql += ' WHERE o.status = %s AND o.order_type = %s GROUP BY o.userID_id '
  259. cursor.execute(sql, [1, 0, ])
  260. cloud_count = cursor.fetchall()
  261. total = len(cloud_count)
  262. readCount = SurveysUserLog.objects.count()
  263. unreadCount = total - readCount
  264. sql += 'order by ca.created_time DESC,orderID DESC LIMIT %s,%s '
  265. cursor.execute(sql, [1, 0, ((page - 1) * size), size, ])
  266. data_obj = cursor.fetchall()
  267. cursor.close() # 执行完,关闭
  268. connection.close()
  269. result_list = []
  270. col_names = [desc[0] for desc in cursor.description]
  271. for item in data_obj:
  272. tMap = dict(zip(col_names, item))
  273. user_id = tMap['userID_id']
  274. d_user = Device_User.objects.filter(userID=user_id)
  275. tMap['uName'] = d_user[0].username
  276. tMap['nickName'] = d_user[0].NickName
  277. tMap.update({"type": 1})
  278. survey_log_qs = SurveysUserLog.objects.filter(user_id=user_id)
  279. if survey_log_qs.exists():
  280. survey_log = survey_log_qs[0]
  281. created_time = time.localtime(survey_log.created_time)
  282. tMap.update({"type": survey_log.type})
  283. tMap.update({"isFilled": survey_log.is_filled})
  284. tMap['createdTime'] = time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  285. tMap.update({"isUpgrade": 1})
  286. else:
  287. tMap.update({"isFilled": 0})
  288. tMap.update({"createdTime": ''})
  289. tMap.update({"isUpgrade": 0})
  290. result_list.append(tMap)
  291. return response.json(0, {'list': result_list, 'total': total, 'readCount': readCount,
  292. 'unreadCount': unreadCount})
  293. except Exception as e:
  294. print(e)
  295. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))