| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | #!/usr/bin/python3.6# -*- coding: utf-8 -*-## Copyright (C) 2022 ## @Time    : 2022/3/24 20:09# @Author  : ming# @Email   : zhangdongming@asj6.wecom.work# @File    : CloudStorageController.py# @Software: PyCharmimport loggingimport timefrom django.db import transactionfrom django.utils.decorators import method_decoratorfrom django.views.decorators.csrf import csrf_exemptfrom django.views.generic.base import Viewfrom Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, SurveysUserLog, \    CloudVodSurveysOperateLogfrom Object.utils import LocalDateTimeUtilfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.CommonService import CommonServiceclass CloudStorageView(View):    @method_decorator(csrf_exempt)    def dispatch(self, *args, **kwargs):        return super(CloudStorageView, 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(token.lang) if token.lang else 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, response)        if operation == 'cloud/answer/save':            ip = CommonService.get_ip_address(request)            return self.answer_save(userID, ip, request_dict, response)        if operation == "cloud/storage/icon/close":            self.cloud_vob_operate_log_save(status=2, userId=userID)        return response.json(0)    def check_stock_user(self, user_id, response):        order = Order_Model.objects.filter(userID=user_id, status=1, order_type=0)        if not order.exists() and order.count() == 0:            return response.json(10030)        try:            no = '01'            surveys = Surveys.objects.filter(no=no, user_type=1)            if not surveys.exists():                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            close = self.check_user_is_icon_close(userId=user_id)            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': 0 if close else result.is_show,                'isSubmit': submit,                'page': '/surveys?token=' if result.is_show == 1 else ''            }            localTime = int(time.time())            if result.start_time <= localTime <= result.end_time:                status = True if submit == 1 else False                self.surveys_user_log_save(status, user_id)                if not submit == 1:                    self.cloud_vob_operate_log_save(2 if close else submit, userId=user_id)            return response.json(0, data)        except Exception as e:            print(e)            return response.json(500, repr(e))    @classmethod    def surveys_user_log_save(cls, 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()    @classmethod    def check_user_is_icon_close(cls, userId):        if userId:            start_time, end_time = LocalDateTimeUtil.get_today_date(True)            user_operate_log_list = CloudVodSurveysOperateLog.objects.filter(user_id=userId, status=2,                                                                             created_time__gte=start_time,                                                                             created_time__lte=end_time)            if user_operate_log_list.exists():                return True        return False    @classmethod    def cloud_vob_operate_log_save(cls, status=0, userId=''):        """ 保存用户操作记录 """        try:            with transaction.atomic():                if userId:                    start_time, end_time = LocalDateTimeUtil.get_today_date(True)                    user_operate_qs = CloudVodSurveysOperateLog.objects.filter(user_id=userId,                                                                               created_time__gte=start_time,                                                                               created_time__lte=end_time)                    local_time = int(time.time())                    if user_operate_qs.exists():                        operate_log = user_operate_qs.first()                        if not operate_log.status == status:                            operate_log.status = status                            operate_log.updated_time = local_time                            operate_log.save()                    else:                        operate_log = CloudVodSurveysOperateLog(user_id=userId, status=status, updated_time=local_time,                                                                created_time=local_time)                        operate_log.save()        except Exception as e:            print(e)    @classmethod    def answer_save(cls, 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)                    cls.cloud_vob_operate_log_save(status=1, userId=userId)            return response.json(0)        except Exception as e:            print(e)            return response.json(500, repr(e))
 |