#!/usr/bin/python3.6 # -*- coding: utf-8 -*- # # Copyright (C) 2022 # # @Time : 2022/3/9 9:20 # @Author : ming # @Email : zhangdongming@asj6.wecom.work # @File : SurveysController.py # @Software: PyCharm import time import json from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.views.generic.base import View from Object.TokenObject import TokenObject from Object.ResponseObject import ResponseObject from Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, Device_User from Service.CommonService import CommonService import logging class SurveysView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(SurveysView, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): logger = logging.getLogger('info') token = TokenObject(request.META.get('HTTP_AUTHORIZATION')) response = ResponseObject() if token.code != 0: return response.json(token.code) userID = token.userID ''' API ''' logger.info('---- this user id:{},dict{}'.format(userID, request_dict)) if operation == 'get/info': return self.check_stock_user(userID, request_dict, response) if operation == 'cloud/answer/save': ip = CommonService.get_ip_address(request) return self.answer_save(userID, ip, request_dict, response) ''' 后台管理''' response = ResponseObject(returntype='pc') if operation == 'save': return self.save(request_dict, response) if operation == 'edit': return self.edit(request_dict, response) if operation == 'list': return self.get_page(request_dict, response) if operation == 'title/list': return self.get_title_list(request_dict, response) if operation == 'title/save': return self.title_save(request_dict, response) if operation == 'title/edit': return self.title_edit(request_dict, response) if operation == 'title/del': return self.title_del(request_dict, response) if operation == 'cloud/vod/answer/page': return self.cloud_surveys_answer_page(request_dict, response) return response.json(0) def check_stock_user(self, user_id, request_dict, response): order = Order_Model.objects.filter(userID=user_id, status=1, order_type=0) if order.count() == 0: return response.json(10030) try: no = '01' surveys = Surveys.objects.filter(no=no, user_type=1) if not all(surveys): return response.json(173) result = surveys[0] surveys_title = SurveysTitle.objects.filter(surveys_id=result.id).order_by('-created_time') submit = 0 if surveys_title.exists(): surveys_title = surveys_title[0] cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=surveys_title.id, user_id=user_id) if cloud_vod.exists(): submit = 1 data = { 'no': result.no, 'title': 'Zosi Cloud Storage', 'imageUrl': 'https://ansjerfilemanager.s3.amazonaws.com/app/images/ansjer-cloud-surveys.png', 'userType': result.user_type, 'startTime': result.start_time, 'endTime': result.end_time, 'isShow': result.is_show, 'isSubmit': submit, 'page': '/surveys?token=' if result.is_show == 1 else '' } return response.json(0, data) except Exception as e: print(e) return response.json(500, repr(e)) def answer_save(self, userId, ip, request_dict, response): try: ipInfo = CommonService.getIpIpInfo(ip, "CN") country_name = ipInfo['country_name'] no = request_dict.get('no', None) if not no: return response.json(10, 'no is null') survey = Surveys.objects.filter(no=no) if survey.exists(): survey = survey[0] survey_title = SurveysTitle.objects.filter(surveys=survey.id) if survey_title.exists(): survey_title = survey_title[0] cloud_vod = CloudVodSurveysAnswer.objects.filter(title_id=survey_title.id, user_id=userId) if cloud_vod.exists(): return response.json(10, "Do not submit twice") score = request_dict.get('score', None) topicA = request_dict.get('topicA', None) topicB = request_dict.get('topicB', None) topicC = request_dict.get('topicC', None) topicD = request_dict.get('topicD', None) topicF = request_dict.get('topicF', None) createdTime = int(time.time()) answer = CloudVodSurveysAnswer(title_id=survey_title.id, user_id=userId, ip=ip, answer1=int(score), answer2=topicA, answer3=topicB, answer4=topicC, answer5=topicD, answer6=topicF, created_time=createdTime, country_name=country_name) answer.save() return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def get_page(self, request_dict, response): pageNo = request_dict.get('pageNo', None) pageSize = request_dict.get('pageSize', None) if not all([pageNo, pageSize]): return response.json(444) page = int(pageNo) line = int(pageSize) try: request_qs = Surveys.objects.all() total = request_qs.count() surveys_list = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line] result_list = [] for surveys in surveys_list: start_time = time.localtime(surveys.start_time) endT_time = time.localtime(surveys.end_time) created_time = time.localtime(surveys.created_time) result_list.append({ 'id': surveys.id, 'no': surveys.no, 'userType': surveys.user_type, 'startTime': time.strftime("%Y-%m-%d %H:%M:%S", start_time), 'endTime': time.strftime("%Y-%m-%d %H:%M:%S", endT_time), 'isShow': surveys.is_show, 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time), }) return response.json(0, {'list': result_list, 'total': total}) except Exception as e: print(e) return response.json(500, repr(e)) def save(self, request_dict, response): no = request_dict.get('no', None) if no: if Surveys.objects.filter(no=no).exists(): return response.json(10, '已存在') no = request_dict.get('no', None) userType = request_dict.get('userType', None) startTime = request_dict.get('dateTime[0]', None) endTime = request_dict.get('dateTime[1]', None) isShow = request_dict.get('isShow', None) isShow = 1 if isShow == 'true' else 0 createdTime = int(time.time()) try: surveys = Surveys(no=no, user_type=userType, start_time=int(startTime), end_time=endTime, is_show=isShow, created_time=int(createdTime)) surveys.save() return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) return response.json(0) def edit(self, request_dict, response): sur_id = request_dict.get('id', None) if not sur_id: return response.json(10, 'id不存在') userType = request_dict.get('userType', None) startTime = request_dict.get('dateTime[0]', None) endTime = request_dict.get('dateTime[1]', None) isShow = request_dict.get('isShow', None) isShow = 1 if isShow == 'true' else 0 print(endTime) Surveys.objects.filter(id=int(sur_id)).update(user_type=int(userType), start_time=int(startTime), end_time=int(endTime), is_show=int(isShow)) return response.json(0) def delete(self, request_dict, response): sId = request_dict.get('id', None) if not sId: return response.json(10, 'id不存在') Surveys.objects.filter(id=sId).delete() response.json(0) def title_save(self, request_dict, response): surveyId = request_dict.get('surveyId', None) if not surveyId: return response(10, 'surveyId is null') t_id = request_dict.get('id', None) content = request_dict.get('content', None) createdTime = int(time.time()) try: title = SurveysTitle.objects.filter(id=t_id) if title.exists(): title.update(title_content=content) else: surveys_title = SurveysTitle(surveys_id=surveyId, title_content=content , created_time=createdTime) surveys_title.save() return response.json(0) except Exception as e: print(e) return response.json(500, repr(e)) def get_title_list(self, request_dict, response): surveyId = request_dict.get('surveyId', None) info = request_dict.get('info', None) if not surveyId: return response.json(10, '问卷id不存在') title_list = SurveysTitle.objects.filter(surveys_id=surveyId).order_by('-created_time') if not title_list.exists(): if info: return response.json(0, {'id': None, 'content': None}) return response.json(173) content = title_list[0] if info: return response.json(0, {'id': content.id, 'content': content.title_content}) data = json.loads(content.title_content) return response.json(0, {'answers': data}) def title_edit(self, request_dict, response): title_id = request_dict.get('id', None) if not title_id: return response.json(10, 'id不存在') content = request_dict.get('content', None) surveys_title = SurveysTitle.objects.filter(surveys_id=title_id) surveys_title.update(title_content=content) return response.json(0) def title_del(self, request_dict, response): title_id = request_dict.get('id', None) if not title_id: return response.json(10, 'id不存在') SurveysTitle.objects.filter(id=title_id).delete() return response.json(0) def cloud_surveys_answer_page(self, request_dict, response): pageNo = request_dict.get('pageNo', None) pageSize = request_dict.get('pageSize', None) if not all([pageNo, pageSize]): return response.json(444) page = int(pageNo) line = int(pageSize) try: request_qs = CloudVodSurveysAnswer.objects.all() total = request_qs.count() answer_page = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line] result_list = [] for answer in answer_page: d_user = Device_User.objects.filter(userID=answer.user_id) if not all(d_user): return response.json(173) d_user = d_user[0] created_time = time.localtime(answer.created_time) result_list.append({ 'id': answer.id, 'uId': d_user.userID, 'uName': d_user.username, 'nickName': d_user.NickName, 'answer1': answer.answer1, 'answer2': answer.answer2, 'answer3': answer.answer3, 'answer4': answer.answer4, 'answer5': answer.answer5, 'answer6': answer.answer6, 'country': answer.country_name, 'createdTime': time.strftime("%Y-%m-%d %H:%M:%S", created_time), }) return response.json(0, {'list': result_list, 'total': total}) except Exception as e: print(e) return response.json(500, repr(e))