SurveysController.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 : SurveysController.py
  9. # @Software: PyCharm
  10. import time
  11. import json
  12. from django.utils.decorators import method_decorator
  13. from django.views.decorators.csrf import csrf_exempt
  14. from django.views.generic.base import View
  15. from Object.TokenObject import TokenObject
  16. from Object.ResponseObject import ResponseObject
  17. from Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, Device_User, SurveysUserLog
  18. from Service.CommonService import CommonService
  19. import logging
  20. class SurveysView(View):
  21. @method_decorator(csrf_exempt)
  22. def dispatch(self, *args, **kwargs):
  23. return super(SurveysView, self).dispatch(*args, **kwargs)
  24. def get(self, request, *args, **kwargs):
  25. request.encoding = 'utf-8'
  26. operation = kwargs.get('operation')
  27. return self.validation(request.GET, request, operation)
  28. def post(self, request, *args, **kwargs):
  29. request.encoding = 'utf-8'
  30. operation = kwargs.get('operation')
  31. return self.validation(request.POST, request, operation)
  32. def validation(self, request_dict, request, operation):
  33. logger = logging.getLogger('info')
  34. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  35. response = ResponseObject()
  36. if token.code != 0:
  37. return response.json(token.code)
  38. userID = token.userID
  39. ''' API '''
  40. logger.info('---- this user id:{},dict{}'.format(userID, request_dict))
  41. if operation == 'get/info':
  42. return self.check_stock_user(userID, request_dict, response)
  43. if operation == 'cloud/answer/save':
  44. ip = CommonService.get_ip_address(request)
  45. return self.answer_save(userID, ip, request_dict, response)
  46. ''' 后台管理'''
  47. response = ResponseObject(returntype='pc')
  48. if operation == 'save':
  49. return self.save(request_dict, response)
  50. if operation == 'edit':
  51. return self.edit(request_dict, response)
  52. if operation == 'list':
  53. return self.get_page(request_dict, response)
  54. if operation == 'title/list':
  55. return self.get_title_list(request_dict, response)
  56. if operation == 'title/save':
  57. return self.title_save(request_dict, response)
  58. if operation == 'title/edit':
  59. return self.title_edit(request_dict, response)
  60. if operation == 'title/del':
  61. return self.title_del(request_dict, response)
  62. if operation == 'cloud/vod/answer/page':
  63. return self.cloud_surveys_answer_page(request_dict, response)
  64. return response.json(0)
  65. def check_stock_user(self, user_id, request_dict, response):
  66. order = Order_Model.objects.filter(userID=user_id, status=1, order_type=0)
  67. if order.count() == 0:
  68. return response.json(10030)
  69. try:
  70. no = '01'
  71. surveys = Surveys.objects.filter(no=no, user_type=1)
  72. if not all(surveys):
  73. return response.json(173)
  74. result = surveys[0]
  75. surveys_title = SurveysTitle.objects.filter(surveys_id=result.id).order_by('-created_time')
  76. submit = 0
  77. if surveys_title.exists():
  78. surveys_title = surveys_title[0]
  79. cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=surveys_title.id, user_id=user_id)
  80. if cloud_vod.exists():
  81. submit = 1
  82. data = {
  83. 'no': result.no,
  84. 'title': 'Zosi Cloud Storage',
  85. 'imageUrl': 'https://d2cjxvw3tr9apc.cloudfront.net/app/images/ansjer-cloud-surveys.png',
  86. 'userType': result.user_type,
  87. 'startTime': result.start_time,
  88. 'endTime': result.end_time,
  89. 'isShow': result.is_show,
  90. 'isSubmit': submit,
  91. 'page': '/surveys?token=' if result.is_show == 1 else ''
  92. }
  93. status = True if submit == 1 else False
  94. self.surveys_user_log_save(status, user_id)
  95. return response.json(0, data)
  96. except Exception as e:
  97. print(e)
  98. return response.json(500, repr(e))
  99. def surveys_user_log_save(self, status=False, userId='', survey_type=1):
  100. if userId:
  101. user_log = SurveysUserLog.objects.filter(user_id=userId, type=survey_type)
  102. if user_log.exists():
  103. if status and user_log[0].is_filled == 0:
  104. user_log.update(is_filled=1)
  105. else:
  106. createdTime = int(time.time())
  107. user_log = SurveysUserLog(user_id=userId, type=1, created_time=createdTime)
  108. user_log.save()
  109. def answer_save(self, userId, ip, request_dict, response):
  110. try:
  111. ipInfo = CommonService.getIpIpInfo(ip, "CN")
  112. country_name = ipInfo['country_name']
  113. no = request_dict.get('no', None)
  114. if not no:
  115. return response.json(10, 'no is null')
  116. survey = Surveys.objects.filter(no=no)
  117. if survey.exists():
  118. survey = survey[0]
  119. survey_title = SurveysTitle.objects.filter(surveys=survey.id)
  120. if survey_title.exists():
  121. survey_title = survey_title[0]
  122. cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=survey_title.id, user_id=userId)
  123. if cloud_vod.exists():
  124. return response.json(10, "Do not submit twice")
  125. score = request_dict.get('score', None)
  126. topicA = request_dict.get('topicA', None)
  127. topicB = request_dict.get('topicB', None)
  128. topicC = request_dict.get('topicC', None)
  129. topicD = request_dict.get('topicD', None)
  130. topicF = request_dict.get('topicF', None)
  131. createdTime = int(time.time())
  132. answer = CloudVodSurveysAnswer(title_id=survey_title.id, user_id=userId, ip=ip, answer1=int(score),
  133. answer2=topicA,
  134. answer3=topicB, answer4=topicC, answer5=topicD, answer6=topicF,
  135. created_time=createdTime, country_name=country_name)
  136. answer.save()
  137. SurveysUserLog.objects.filter(user_id=userId, type=1).update(is_filled=1)
  138. return response.json(0)
  139. except Exception as e:
  140. print(e)
  141. return response.json(500, repr(e))
  142. def get_page(self, request_dict, response):
  143. pageNo = request_dict.get('pageNo', None)
  144. pageSize = request_dict.get('pageSize', None)
  145. if not all([pageNo, pageSize]):
  146. return response.json(444)
  147. page = int(pageNo)
  148. line = int(pageSize)
  149. try:
  150. request_qs = Surveys.objects.all()
  151. total = request_qs.count()
  152. surveys_list = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line]
  153. result_list = []
  154. for surveys in surveys_list:
  155. start_time = time.localtime(surveys.start_time)
  156. endT_time = time.localtime(surveys.end_time)
  157. created_time = time.localtime(surveys.created_time)
  158. result_list.append({
  159. 'id': surveys.id,
  160. 'no': surveys.no,
  161. 'userType': surveys.user_type,
  162. 'startTime': time.strftime("%Y-%m-%d %H:%M:%S", start_time),
  163. 'endTime': time.strftime("%Y-%m-%d %H:%M:%S", endT_time),
  164. 'isShow': surveys.is_show,
  165. 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  166. })
  167. return response.json(0, {'list': result_list, 'total': total})
  168. except Exception as e:
  169. print(e)
  170. return response.json(500, repr(e))
  171. def save(self, request_dict, response):
  172. no = request_dict.get('no', None)
  173. if no:
  174. if Surveys.objects.filter(no=no).exists():
  175. return response.json(10, '已存在')
  176. no = request_dict.get('no', None)
  177. userType = request_dict.get('userType', None)
  178. startTime = request_dict.get('dateTime[0]', None)
  179. endTime = request_dict.get('dateTime[1]', None)
  180. isShow = request_dict.get('isShow', None)
  181. isShow = 1 if isShow == 'true' else 0
  182. createdTime = int(time.time())
  183. try:
  184. surveys = Surveys(no=no, user_type=userType, start_time=int(startTime),
  185. end_time=endTime, is_show=isShow, created_time=int(createdTime))
  186. surveys.save()
  187. return response.json(0)
  188. except Exception as e:
  189. print(e)
  190. return response.json(500, repr(e))
  191. return response.json(0)
  192. def edit(self, request_dict, response):
  193. sur_id = request_dict.get('id', None)
  194. if not sur_id:
  195. return response.json(10, 'id不存在')
  196. userType = request_dict.get('userType', None)
  197. startTime = request_dict.get('dateTime[0]', None)
  198. endTime = request_dict.get('dateTime[1]', None)
  199. isShow = request_dict.get('isShow', None)
  200. isShow = 1 if isShow == 'true' else 0
  201. print(endTime)
  202. Surveys.objects.filter(id=int(sur_id)).update(user_type=int(userType), start_time=int(startTime),
  203. end_time=int(endTime),
  204. is_show=int(isShow))
  205. return response.json(0)
  206. def delete(self, request_dict, response):
  207. sId = request_dict.get('id', None)
  208. if not sId:
  209. return response.json(10, 'id不存在')
  210. Surveys.objects.filter(id=sId).delete()
  211. response.json(0)
  212. def title_save(self, request_dict, response):
  213. surveyId = request_dict.get('surveyId', None)
  214. if not surveyId:
  215. return response(10, 'surveyId is null')
  216. t_id = request_dict.get('id', None)
  217. content = request_dict.get('content', None)
  218. createdTime = int(time.time())
  219. try:
  220. title = SurveysTitle.objects.filter(id=t_id)
  221. if title.exists():
  222. title.update(title_content=content)
  223. else:
  224. surveys_title = SurveysTitle(surveys_id=surveyId, title_content=content
  225. , created_time=createdTime)
  226. surveys_title.save()
  227. return response.json(0)
  228. except Exception as e:
  229. print(e)
  230. return response.json(500, repr(e))
  231. def get_title_list(self, request_dict, response):
  232. surveyId = request_dict.get('surveyId', None)
  233. info = request_dict.get('info', None)
  234. if not surveyId:
  235. return response.json(10, '问卷id不存在')
  236. title_list = SurveysTitle.objects.filter(surveys_id=surveyId).order_by('-created_time')
  237. if not title_list.exists():
  238. if info:
  239. return response.json(0, {'id': None, 'content': None})
  240. return response.json(173)
  241. content = title_list[0]
  242. if info:
  243. return response.json(0, {'id': content.id, 'content': content.title_content})
  244. data = json.loads(content.title_content)
  245. return response.json(0, {'answers': data})
  246. def title_edit(self, request_dict, response):
  247. title_id = request_dict.get('id', None)
  248. if not title_id:
  249. return response.json(10, 'id不存在')
  250. content = request_dict.get('content', None)
  251. surveys_title = SurveysTitle.objects.filter(surveys_id=title_id)
  252. surveys_title.update(title_content=content)
  253. return response.json(0)
  254. def title_del(self, request_dict, response):
  255. title_id = request_dict.get('id', None)
  256. if not title_id:
  257. return response.json(10, 'id不存在')
  258. SurveysTitle.objects.filter(id=title_id).delete()
  259. return response.json(0)
  260. def cloud_surveys_answer_page(self, request_dict, response):
  261. pageNo = request_dict.get('pageNo', None)
  262. pageSize = request_dict.get('pageSize', None)
  263. if not all([pageNo, pageSize]):
  264. return response.json(444)
  265. page = int(pageNo)
  266. line = int(pageSize)
  267. try:
  268. request_qs = CloudVodSurveysAnswer.objects.all()
  269. total = request_qs.count()
  270. answer_page = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line]
  271. result_list = []
  272. for answer in answer_page:
  273. d_user = Device_User.objects.filter(userID=answer.user_id)
  274. if not all(d_user):
  275. return response.json(173)
  276. d_user = d_user[0]
  277. created_time = time.localtime(answer.created_time)
  278. result_list.append({
  279. 'id': answer.id,
  280. 'uId': d_user.userID,
  281. 'uName': d_user.username,
  282. 'nickName': d_user.NickName,
  283. 'answer1': answer.answer1,
  284. 'answer2': answer.answer2,
  285. 'answer3': answer.answer3,
  286. 'answer4': answer.answer4,
  287. 'answer5': answer.answer5,
  288. 'answer6': answer.answer6,
  289. 'country': answer.country_name,
  290. 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  291. })
  292. return response.json(0, {'list': result_list, 'total': total})
  293. except Exception as e:
  294. print(e)
  295. return response.json(500, repr(e))