123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- #!/usr/bin/python3.6
- # -*- coding: utf-8 -*-
- #
- # Copyright (C) 2022 #
- # @Time : 2022/3/9 9:20
- # @Author : ming
- # @Email : zhangdongming@asj6.wecom.work
- # @File : SurveysManageController.py
- # @Software: PyCharm
- import json
- import time
- from django.db import connection
- from django.utils.decorators import method_decorator
- from django.views.decorators.csrf import csrf_exempt
- from django.views.generic.base import View
- from Model.models import Surveys, SurveysTitle, CloudVodSurveysAnswer, Device_User, SurveysUserLog
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- 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):
- token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
- response = ResponseObject()
- if token.code != 0:
- return response.json(token.code)
- ''' 后台管理'''
- 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)
- @classmethod
- def get_page(cls, 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_page = request_qs.filter().order_by('-created_time')[(page - 1) * line:page * line]
- result_list = []
- for surveys in surveys_page:
- 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))
- @classmethod
- def save(cls, request_dict, response):
- no = request_dict.get('no', None)
- if not no:
- return response.json(0)
- if Surveys.objects.filter(no=no).exists():
- return response.json(10, '已存在')
- no = request_dict.get('no', None)
- user_type = request_dict.get('userType', None)
- start_time = request_dict.get('dateTime[0]', None)
- end_time = request_dict.get('dateTime[1]', None)
- is_show = request_dict.get('isShow', None)
- is_show = 1 if is_show == 'true' else 0
- createdTime = int(time.time())
- try:
- surveys = Surveys(no=no, user_type=user_type, start_time=int(start_time),
- end_time=end_time, is_show=is_show, created_time=int(createdTime))
- surveys.save()
- return response.json(0)
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
- @classmethod
- def edit(cls, request_dict, response):
- sur_id = request_dict.get('id', None)
- if not sur_id:
- return response.json(10, 'id不存在')
- user_type = request_dict.get('userType', None)
- start_time = request_dict.get('dateTime[0]', None)
- end_time = request_dict.get('dateTime[1]', None)
- is_show = request_dict.get('isShow', None)
- is_show = 1 if is_show == 'true' else 0
- Surveys.objects.filter(id=int(sur_id)).update(user_type=int(user_type), start_time=int(start_time),
- end_time=int(end_time),
- is_show=int(is_show))
- return response.json(0)
- @classmethod
- def delete(cls, 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)
- @classmethod
- def title_save(cls, request_dict, response):
- survey_id = request_dict.get('surveyId', None)
- if not survey_id:
- return response(10, 'surveyId is null')
- t_id = request_dict.get('id', None)
- content = request_dict.get('content', None)
- created_time = 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=survey_id, title_content=content, created_time=created_time)
- surveys_title.save()
- return response.json(0)
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
- @classmethod
- def get_title_list(cls, request_dict, response):
- survey_id = request_dict.get('surveyId', None)
- info = request_dict.get('info', None)
- if not survey_id:
- return response.json(10, '问卷id不存在')
- title_list = SurveysTitle.objects.filter(surveys_id=survey_id).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})
- @classmethod
- def title_edit(cls, 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)
- @classmethod
- def title_del(cls, 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)
- @classmethod
- def cloud_surveys_answer_page(cls, request_dict, response):
- pageNo = request_dict.get('pageNo', None)
- pageSize = request_dict.get('pageSize', None)
- user_name = request_dict.get('userName', None)
- country_name = request_dict.get('countryName', None)
- time_range = request_dict.getlist('timeRange[]', None)
- num = request_dict.get('num', 0)
- num = int(num)
- opt_val = 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 user_name:
- request_qs = request_qs.filter(user__username__contains=user_name)
- if country_name:
- request_qs = request_qs.filter(country_name=country_name)
- if num >= 0 and len(opt_val) > 0:
- condition = int(opt_val[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 time_range:
- startTime, endTime = int(time_range[0][:-3]), int(time_range[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_qs = Device_User.objects.filter(userID=answer.user_id)
- if not all(d_user_qs):
- return response.json(173)
- d_user_qs = d_user_qs[0]
- created_time = time.localtime(answer.created_time)
- result_list.append({
- 'id': answer.id,
- 'uId': d_user_qs.userID,
- 'uName': d_user_qs.username,
- 'nickName': d_user_qs.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))
- ''' 云存用户问卷调查统计 '''
- @classmethod
- def cloud_storage_user_log_page(cls, 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)
- readCount = SurveysUserLog.objects.count()
- unreadCount = total - readCount
- 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, 'readCount': readCount,
- 'unreadCount': unreadCount})
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
|