#!/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.db.models import Count 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, SurveysUserLog from Service.CommonService import CommonService import logging from django.db import connection 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) if operation == 'cloud/storage/log/page': return self.cloud_storage_user_log_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://d2cjxvw3tr9apc.cloudfront.net/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 '' } status = True if submit == 1 else False self.surveys_user_log_save(status, user_id) return response.json(0, data) except Exception as e: print(e) return response.json(500, repr(e)) def surveys_user_log_save(self, status=False, userId='', survey_type=1): if userId: user_log = SurveysUserLog.objects.filter(user_id=userId, type=survey_type) if user_log.exists(): if status and user_log[0].is_filled == 0: user_log.update(is_filled=1) else: createdTime = int(time.time()) user_log = SurveysUserLog(user_id=userId, type=1, created_time=createdTime) user_log.save() 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() SurveysUserLog.objects.filter(user_id=userId, type=1).update(is_filled=1) 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) userName = request_dict.get('userName', None) countryName = request_dict.get('countryName', None) timeRange = request_dict.getlist('timeRange[]', None) num = request_dict.get('num', 0) num = int(num) optVal = request_dict.getlist('optVal', None) if not all([pageNo, pageSize]): return response.json(444) page = int(pageNo) line = int(pageSize) try: request_qs = CloudVodSurveysAnswer.objects.all() if userName: request_qs = request_qs.filter(user__username__contains=userName) if countryName: request_qs = request_qs.filter(country_name=countryName) if num >= 0 and len(optVal) > 0: condition = int(optVal[0]) if condition == 1: request_qs = request_qs.filter(answer1__gt=num) elif condition == 2: request_qs = request_qs.filter(answer1__lt=num) elif condition == 3: request_qs = request_qs.filter(answer1=num) elif condition == 4: request_qs = request_qs.filter(answer1__gte=num) elif condition == 5: request_qs = request_qs.filter(answer1__lte=num) if timeRange: startTime, endTime = int( timeRange[0][:-3]), int(timeRange[1][:-3]) request_qs = request_qs.filter( created_time__gte=startTime, created_time__lte=endTime) if not request_qs.exists(): return response.json(0, []) total = request_qs.count() answer_page = request_qs.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)) ''' 云存用户问卷调查统计 ''' def cloud_storage_user_log_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) try: page = int(pageNo) size = int(pageSize) cursor = connection.cursor() sql = 'SELECT o.orderID,o.userID_id,ca.id,ca.country_name as countryName ' sql += 'FROM orders o LEFT JOIN cloud_vod_surveys_answer ca ON o.userID_id = ca.user_id ' sql += ' WHERE o.status = %s AND o.order_type = %s GROUP BY o.userID_id ' cursor.execute(sql, [1, 0, ]) cloud_count = cursor.fetchall() total = len(cloud_count) sql += 'order by ca.created_time DESC,orderID DESC LIMIT %s,%s ' cursor.execute(sql, [1, 0, ((page - 1) * size), size, ]) data_obj = cursor.fetchall() cursor.close() # 执行完,关闭 connection.close() result_list = [] col_names = [desc[0] for desc in cursor.description] for item in data_obj: tMap = dict(zip(col_names, item)) user_id = tMap['userID_id'] d_user = Device_User.objects.filter(userID=user_id) tMap['uName'] = d_user[0].username tMap['nickName'] = d_user[0].NickName tMap.update({"type": 1}) survey_log_qs = SurveysUserLog.objects.filter(user_id=user_id) if survey_log_qs.exists(): survey_log = survey_log_qs[0] created_time = time.localtime(survey_log.created_time) tMap.update({"type": survey_log.type}) tMap.update({"isFilled": survey_log.is_filled}) tMap['createdTime'] = time.strftime("%Y-%m-%d %H:%M:%S", created_time), tMap.update({"isUpgrade": 1}) else: tMap.update({"isFilled": 0}) tMap.update({"createdTime": ''}) tMap.update({"isUpgrade": 0}) result_list.append(tMap) return response.json(0, {'list': result_list, 'total': total}) except Exception as e: print(e) return response.json(500, repr(e))