SurveysController.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  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.db.models import Count
  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 Object.TokenObject import TokenObject
  17. from Object.ResponseObject import ResponseObject
  18. from Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, Device_User, SurveysUserLog
  19. from Service.CommonService import CommonService
  20. import logging
  21. from django.db import connection
  22. class SurveysView(View):
  23. @method_decorator(csrf_exempt)
  24. def dispatch(self, *args, **kwargs):
  25. return super(SurveysView, 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()
  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, request_dict, 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. ''' 后台管理'''
  49. response = ResponseObject(returntype='pc')
  50. if operation == 'save':
  51. return self.save(request_dict, response)
  52. if operation == 'edit':
  53. return self.edit(request_dict, response)
  54. if operation == 'list':
  55. return self.get_page(request_dict, response)
  56. if operation == 'title/list':
  57. return self.get_title_list(request_dict, response)
  58. if operation == 'title/save':
  59. return self.title_save(request_dict, response)
  60. if operation == 'title/edit':
  61. return self.title_edit(request_dict, response)
  62. if operation == 'title/del':
  63. return self.title_del(request_dict, response)
  64. if operation == 'cloud/vod/answer/page':
  65. return self.cloud_surveys_answer_page(request_dict, response)
  66. if operation == 'cloud/storage/log/page':
  67. return self.cloud_storage_user_log_page(request_dict, response)
  68. return response.json(0)
  69. def check_stock_user(self, user_id, request_dict, response):
  70. order = Order_Model.objects.filter(userID=user_id, status=1, order_type=0)
  71. if order.count() == 0:
  72. return response.json(10030)
  73. try:
  74. no = '01'
  75. surveys = Surveys.objects.filter(no=no, user_type=1)
  76. if not all(surveys):
  77. return response.json(173)
  78. result = surveys[0]
  79. surveys_title = SurveysTitle.objects.filter(surveys_id=result.id).order_by('-created_time')
  80. submit = 0
  81. if surveys_title.exists():
  82. surveys_title = surveys_title[0]
  83. cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=surveys_title.id, user_id=user_id)
  84. if cloud_vod.exists():
  85. submit = 1
  86. data = {
  87. 'no': result.no,
  88. 'title': 'Zosi Cloud Storage',
  89. 'imageUrl': 'https://d2cjxvw3tr9apc.cloudfront.net/app/images/ansjer-cloud-surveys.png',
  90. 'userType': result.user_type,
  91. 'startTime': result.start_time,
  92. 'endTime': result.end_time,
  93. 'isShow': result.is_show,
  94. 'isSubmit': submit,
  95. 'page': '/surveys?token=' if result.is_show == 1 else ''
  96. }
  97. status = True if submit == 1 else False
  98. self.surveys_user_log_save(status, user_id)
  99. return response.json(0, data)
  100. except Exception as e:
  101. print(e)
  102. return response.json(500, repr(e))
  103. def surveys_user_log_save(self, status=False, userId='', survey_type=1):
  104. if userId:
  105. user_log = SurveysUserLog.objects.filter(user_id=userId, type=survey_type)
  106. if user_log.exists():
  107. if status and user_log[0].is_filled == 0:
  108. user_log.update(is_filled=1)
  109. else:
  110. createdTime = int(time.time())
  111. user_log = SurveysUserLog(user_id=userId, type=1, created_time=createdTime)
  112. user_log.save()
  113. def answer_save(self, userId, ip, request_dict, response):
  114. try:
  115. ipInfo = CommonService.getIpIpInfo(ip, "CN")
  116. country_name = ipInfo['country_name']
  117. no = request_dict.get('no', None)
  118. if not no:
  119. return response.json(10, 'no is null')
  120. survey = Surveys.objects.filter(no=no)
  121. if survey.exists():
  122. survey = survey[0]
  123. survey_title = SurveysTitle.objects.filter(surveys=survey.id)
  124. if survey_title.exists():
  125. survey_title = survey_title[0]
  126. cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=survey_title.id, user_id=userId)
  127. if cloud_vod.exists():
  128. return response.json(10, "Do not submit twice")
  129. score = request_dict.get('score', None)
  130. topicA = request_dict.get('topicA', None)
  131. topicB = request_dict.get('topicB', None)
  132. topicC = request_dict.get('topicC', None)
  133. topicD = request_dict.get('topicD', None)
  134. topicF = request_dict.get('topicF', None)
  135. createdTime = int(time.time())
  136. answer = CloudVodSurveysAnswer(title_id=survey_title.id, user_id=userId, ip=ip, answer1=int(score),
  137. answer2=topicA,
  138. answer3=topicB, answer4=topicC, answer5=topicD, answer6=topicF,
  139. created_time=createdTime, country_name=country_name)
  140. answer.save()
  141. SurveysUserLog.objects.filter(user_id=userId, type=1).update(is_filled=1)
  142. return response.json(0)
  143. except Exception as e:
  144. print(e)
  145. return response.json(500, repr(e))
  146. def get_page(self, request_dict, response):
  147. pageNo = request_dict.get('pageNo', None)
  148. pageSize = request_dict.get('pageSize', None)
  149. if not all([pageNo, pageSize]):
  150. return response.json(444)
  151. page = int(pageNo)
  152. line = int(pageSize)
  153. try:
  154. request_qs = Surveys.objects.all()
  155. total = request_qs.count()
  156. surveys_list = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line]
  157. result_list = []
  158. for surveys in surveys_list:
  159. start_time = time.localtime(surveys.start_time)
  160. endT_time = time.localtime(surveys.end_time)
  161. created_time = time.localtime(surveys.created_time)
  162. result_list.append({
  163. 'id': surveys.id,
  164. 'no': surveys.no,
  165. 'userType': surveys.user_type,
  166. 'startTime': time.strftime("%Y-%m-%d %H:%M:%S", start_time),
  167. 'endTime': time.strftime("%Y-%m-%d %H:%M:%S", endT_time),
  168. 'isShow': surveys.is_show,
  169. 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  170. })
  171. return response.json(0, {'list': result_list, 'total': total})
  172. except Exception as e:
  173. print(e)
  174. return response.json(500, repr(e))
  175. def save(self, request_dict, response):
  176. no = request_dict.get('no', None)
  177. if no:
  178. if Surveys.objects.filter(no=no).exists():
  179. return response.json(10, '已存在')
  180. no = request_dict.get('no', None)
  181. userType = request_dict.get('userType', None)
  182. startTime = request_dict.get('dateTime[0]', None)
  183. endTime = request_dict.get('dateTime[1]', None)
  184. isShow = request_dict.get('isShow', None)
  185. isShow = 1 if isShow == 'true' else 0
  186. createdTime = int(time.time())
  187. try:
  188. surveys = Surveys(no=no, user_type=userType, start_time=int(startTime),
  189. end_time=endTime, is_show=isShow, created_time=int(createdTime))
  190. surveys.save()
  191. return response.json(0)
  192. except Exception as e:
  193. print(e)
  194. return response.json(500, repr(e))
  195. return response.json(0)
  196. def edit(self, request_dict, response):
  197. sur_id = request_dict.get('id', None)
  198. if not sur_id:
  199. return response.json(10, 'id不存在')
  200. userType = request_dict.get('userType', None)
  201. startTime = request_dict.get('dateTime[0]', None)
  202. endTime = request_dict.get('dateTime[1]', None)
  203. isShow = request_dict.get('isShow', None)
  204. isShow = 1 if isShow == 'true' else 0
  205. print(endTime)
  206. Surveys.objects.filter(id=int(sur_id)).update(user_type=int(userType), start_time=int(startTime),
  207. end_time=int(endTime),
  208. is_show=int(isShow))
  209. return response.json(0)
  210. def delete(self, request_dict, response):
  211. sId = request_dict.get('id', None)
  212. if not sId:
  213. return response.json(10, 'id不存在')
  214. Surveys.objects.filter(id=sId).delete()
  215. response.json(0)
  216. def title_save(self, request_dict, response):
  217. surveyId = request_dict.get('surveyId', None)
  218. if not surveyId:
  219. return response(10, 'surveyId is null')
  220. t_id = request_dict.get('id', None)
  221. content = request_dict.get('content', None)
  222. createdTime = int(time.time())
  223. try:
  224. title = SurveysTitle.objects.filter(id=t_id)
  225. if title.exists():
  226. title.update(title_content=content)
  227. else:
  228. surveys_title = SurveysTitle(surveys_id=surveyId, title_content=content
  229. , created_time=createdTime)
  230. surveys_title.save()
  231. return response.json(0)
  232. except Exception as e:
  233. print(e)
  234. return response.json(500, repr(e))
  235. def get_title_list(self, request_dict, response):
  236. surveyId = request_dict.get('surveyId', None)
  237. info = request_dict.get('info', None)
  238. if not surveyId:
  239. return response.json(10, '问卷id不存在')
  240. title_list = SurveysTitle.objects.filter(surveys_id=surveyId).order_by('-created_time')
  241. if not title_list.exists():
  242. if info:
  243. return response.json(0, {'id': None, 'content': None})
  244. return response.json(173)
  245. content = title_list[0]
  246. if info:
  247. return response.json(0, {'id': content.id, 'content': content.title_content})
  248. data = json.loads(content.title_content)
  249. return response.json(0, {'answers': data})
  250. def title_edit(self, request_dict, response):
  251. title_id = request_dict.get('id', None)
  252. if not title_id:
  253. return response.json(10, 'id不存在')
  254. content = request_dict.get('content', None)
  255. surveys_title = SurveysTitle.objects.filter(surveys_id=title_id)
  256. surveys_title.update(title_content=content)
  257. return response.json(0)
  258. def title_del(self, request_dict, response):
  259. title_id = request_dict.get('id', None)
  260. if not title_id:
  261. return response.json(10, 'id不存在')
  262. SurveysTitle.objects.filter(id=title_id).delete()
  263. return response.json(0)
  264. def cloud_surveys_answer_page(self, request_dict, response):
  265. pageNo = request_dict.get('pageNo', None)
  266. pageSize = request_dict.get('pageSize', None)
  267. userName = request_dict.get('userName', None)
  268. countryName = request_dict.get('countryName', None)
  269. timeRange = request_dict.getlist('timeRange[]', None)
  270. num = request_dict.get('num', 0)
  271. num = int(num)
  272. optVal = request_dict.getlist('optVal', None)
  273. if not all([pageNo, pageSize]):
  274. return response.json(444)
  275. page = int(pageNo)
  276. line = int(pageSize)
  277. try:
  278. request_qs = CloudVodSurveysAnswer.objects.all()
  279. if userName:
  280. request_qs = request_qs.filter(user__username__contains=userName)
  281. if countryName:
  282. request_qs = request_qs.filter(country_name=countryName)
  283. if num >= 0 and len(optVal) > 0:
  284. condition = int(optVal[0])
  285. if condition == 1:
  286. request_qs = request_qs.filter(answer1__gt=num)
  287. elif condition == 2:
  288. request_qs = request_qs.filter(answer1__lt=num)
  289. elif condition == 3:
  290. request_qs = request_qs.filter(answer1=num)
  291. elif condition == 4:
  292. request_qs = request_qs.filter(answer1__gte=num)
  293. elif condition == 5:
  294. request_qs = request_qs.filter(answer1__lte=num)
  295. if timeRange:
  296. startTime, endTime = int(
  297. timeRange[0][:-3]), int(timeRange[1][:-3])
  298. request_qs = request_qs.filter(
  299. created_time__gte=startTime,
  300. created_time__lte=endTime)
  301. if not request_qs.exists():
  302. return response.json(0, [])
  303. total = request_qs.count()
  304. answer_page = request_qs.order_by('-created_time')[(page - 1) * line:page * line]
  305. result_list = []
  306. for answer in answer_page:
  307. d_user = Device_User.objects.filter(userID=answer.user_id)
  308. if not all(d_user):
  309. return response.json(173)
  310. d_user = d_user[0]
  311. created_time = time.localtime(answer.created_time)
  312. result_list.append({
  313. 'id': answer.id,
  314. 'uId': d_user.userID,
  315. 'uName': d_user.username,
  316. 'nickName': d_user.NickName,
  317. 'answer1': answer.answer1,
  318. 'answer2': answer.answer2,
  319. 'answer3': answer.answer3,
  320. 'answer4': answer.answer4,
  321. 'answer5': answer.answer5,
  322. 'answer6': answer.answer6,
  323. 'country': answer.country_name,
  324. 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  325. })
  326. return response.json(0, {'list': result_list, 'total': total})
  327. except Exception as e:
  328. print(e)
  329. return response.json(500, repr(e))
  330. ''' 云存用户问卷调查统计 '''
  331. def cloud_storage_user_log_page(self, request_dict, response):
  332. pageNo = request_dict.get('pageNo', None)
  333. pageSize = request_dict.get('pageSize', None)
  334. if not all([pageNo, pageSize]):
  335. return response.json(444)
  336. try:
  337. page = int(pageNo)
  338. size = int(pageSize)
  339. cursor = connection.cursor()
  340. sql = 'SELECT o.orderID,o.userID_id,ca.id,ca.country_name as countryName '
  341. sql += 'FROM orders o LEFT JOIN cloud_vod_surveys_answer ca ON o.userID_id = ca.user_id '
  342. sql += ' WHERE o.status = %s AND o.order_type = %s GROUP BY o.userID_id '
  343. cursor.execute(sql, [1, 0, ])
  344. cloud_count = cursor.fetchall()
  345. total = len(cloud_count)
  346. sql += 'order by ca.created_time DESC,orderID DESC LIMIT %s,%s '
  347. cursor.execute(sql, [1, 0, ((page - 1) * size), size, ])
  348. data_obj = cursor.fetchall()
  349. cursor.close() # 执行完,关闭
  350. connection.close()
  351. result_list = []
  352. col_names = [desc[0] for desc in cursor.description]
  353. for item in data_obj:
  354. tMap = dict(zip(col_names, item))
  355. user_id = tMap['userID_id']
  356. d_user = Device_User.objects.filter(userID=user_id)
  357. tMap['uName'] = d_user[0].username
  358. tMap['nickName'] = d_user[0].NickName
  359. tMap.update({"type": 1})
  360. survey_log_qs = SurveysUserLog.objects.filter(user_id=user_id)
  361. if survey_log_qs.exists():
  362. survey_log = survey_log_qs[0]
  363. created_time = time.localtime(survey_log.created_time)
  364. tMap.update({"type": survey_log.type})
  365. tMap.update({"isFilled": survey_log.is_filled})
  366. tMap['createdTime'] = time.strftime("%Y-%m-%d %H:%M:%S", created_time),
  367. tMap.update({"isUpgrade": 1})
  368. else:
  369. tMap.update({"isFilled": 0})
  370. tMap.update({"createdTime": ''})
  371. tMap.update({"isUpgrade": 0})
  372. result_list.append(tMap)
  373. return response.json(0, {'list': result_list, 'total': total})
  374. except Exception as e:
  375. print(e)
  376. return response.json(500, repr(e))