| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 | #!/usr/bin/env python3# -*- coding: utf-8 -*-import timefrom django.db.models import F, Q, Sumfrom django.views.generic.base import Viewfrom Model.models import Lang, ICloudStoreMeal, AiService, Order_Model, Device_User, CountryModel, UidSetModel, \    Device_Info, VodBucketModel, IcloudUseDetails, IcloudService, IcloudStorageRecordfrom Object.AWS.AmazonS3Util import AmazonS3Utilfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.CommonService import CommonServicefrom Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, SERVER_DOMAIN, AWS_ACCESS_KEY_ID, \    AWS_SECRET_ACCESS_KEY, SERVER_DOMAIN_SSL, OAUTH_ACCESS_TOKEN_SECRETclass IcloudServeView(View):    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):        language = request_dict.get('language', 'en')        response = ResponseObject(language, 'pc')        if operation == 'xxx':  # 不认证token接口            pass        else:            tko = TokenObject(                request.META.get('HTTP_AUTHORIZATION'),                returntpye='pc')            if tko.code != 0:                return response.json(tko.code)            response.lang = tko.lang            user_id = tko.userID            # icloud套餐信息相关            if operation == 'getIcloudStoreMealList':                return self.get_icloud_store_meal_list(request_dict, response)            elif operation == 'addOrEditIcloudStoreMeal':                return self.add_or_edit_icloud_store_meal(request_dict, response)            elif operation == 'getBucket':                return self.get_bucket(request_dict, response)            elif operation == 'deleteMeal':                return self.delete_meal(request_dict, response)            # icloud套餐语言相关            elif operation == 'getMealLang':                return self.get_meal_lang(request_dict, response)            elif operation == 'addOrEditLang':                return self.add_or_edit_lang(request_dict, response)            elif operation == 'deleteLang':                return self.delete_lang(request_dict, response)            # 用户云盘信息            elif operation == 'getUserIcloudInfo':                return self.get_user_icloud_info(request_dict, response)            elif operation == 'resetIcloud':                return self.reset_icloud(request_dict, response)            else:                return response.json(404)    @staticmethod    def get_icloud_store_meal_list(request_dict, response):        is_select = request_dict.get('isSelect', None)        page = request_dict.get('pageNo', None)        line = request_dict.get('pageSize', None)        if is_select:            # 获取套餐ID作为选项            icloud_meal_qs = ICloudStoreMeal.objects.filter().values('id')            return response.json(0, {'list': CommonService.qs_to_list(icloud_meal_qs)})        if not all([page, line]):            return response.json(444)        page = int(page)        line = int(line)        try:            icloud_meal_qs = ICloudStoreMeal.objects.values()            total = icloud_meal_qs.count()            icloud_meals = icloud_meal_qs[(page - 1) * line:page * line]            icloud_meal_list = []            for icloud_meal in icloud_meals:                # 获取支付方式列表                pay_type_list = list(                    ICloudStoreMeal.objects.filter(id=icloud_meal['id']).values('pay_type__id', 'pay_type__payment'))                # 获取存储桶信息                vod_bucket_qs = VodBucketModel.objects.filter(id=icloud_meal['bucket_id']).values('bucket')                if not vod_bucket_qs.exists():                    return response.json(173)                # 组织响应数据                icloud_meal_list.append({                    'IcloudMealID': icloud_meal['id'],                    'price': icloud_meal['price'],                    'symbol': icloud_meal['symbol'],                    'currency': icloud_meal['currency'],                    'is_show': icloud_meal['is_show'],                    'is_delete': icloud_meal['is_delete'],                    'expire': icloud_meal['expire'],                    'pay_type': pay_type_list,                    'size': icloud_meal['size'],                    'bucket': vod_bucket_qs[0]['bucket'],                    'addTime': icloud_meal['add_time'].strftime("%Y-%m-%d %H:%M:%S"),                    'updTime': icloud_meal['update_time'].strftime("%Y-%m-%d %H:%M:%S"),                })            return response.json(0, {'list': icloud_meal_list, 'total': total})        except Exception as e:            return response.json(500, repr(e))    @staticmethod    def add_or_edit_icloud_store_meal(request_dict, response):        # 添加/编辑套餐        meal_id = request_dict.get('IcloudMealID', None)        expire = int(request_dict.get('expire', None))        price = request_dict.get('price', None)        currency = request_dict.get('currency', None)        symbol = request_dict.get('symbol', None)        pay_type = request_dict.get('pay_type', None)        is_show = int(request_dict.get('is_show', 1))        is_delete = int(request_dict.get('is_delete', 0))        size = float(request_dict.get('size', None))        is_edit = request_dict.get('isEdit', None)        bucket_id = request_dict.get('bucket_id', None)        if not all([expire, price, currency, symbol, pay_type, size, bucket_id]):            return response.json(444)        pay_type = pay_type.split(',')        try:            icloud_store_meal_data = {                'expire': expire,                'price': price,                'currency': currency,                'symbol': symbol,                'is_show': is_show,                'size': size,                'is_delete': is_delete,                'bucket_id': bucket_id            }            if is_edit:                if not meal_id:                    return response.json(444)                ICloudStoreMeal.objects.filter(id=meal_id).update(**icloud_store_meal_data)                ICloudStoreMeal.objects.get(id=meal_id).pay_type.set(pay_type)            else:                icloud_meal_qs = ICloudStoreMeal.objects.create(**icloud_store_meal_data)                icloud_meal_qs.pay_type.set(pay_type)            return response.json(0)        except Exception as e:            print(e)            return response.json(500, repr(e))    @staticmethod    def get_bucket(request_dict, response):        try:            bucket_qs = VodBucketModel.objects.all().values('id', 'bucket')            return response.json(0, list(bucket_qs))        except Exception as e:            print(e)            return response.json(500, repr(e))    @staticmethod    def delete_meal(request_dict, response):        meal_id = request_dict.get('meal_id', None)        if not meal_id:            return response.json(444)        icloud_meal_qs = ICloudStoreMeal.objects.filter(id=meal_id).values('lang__id')        lang = Lang.objects.filter(id=icloud_meal_qs[0]['lang__id'])        icloud_meal_qs = ICloudStoreMeal.objects.get(id=meal_id)        icloud_meal_qs.lang.remove(*lang)        icloud_meal_qs.delete()        return response.json(0)    @staticmethod    def get_meal_lang(request_dict, response):        is_select = request_dict.get('isSelect', None)        meal_id = request_dict.get('mealId', None)        page = request_dict.get('pageNo', None)        line = request_dict.get('pageSize', None)        if not all([page, line]):            return response.json(444)        icloud_meal_qs = ICloudStoreMeal.objects.all()        page = int(page)        line = int(line)        if is_select:            icloud_meal_qs = icloud_meal_qs.values('id', 'lang__title')        else:            if meal_id:                icloud_meal_qs = icloud_meal_qs.filter(id=meal_id).values('id', 'lang__id', 'lang__lang', 'lang__title',                                                                          'lang__content')            else:                icloud_meal_qs = icloud_meal_qs.values('id', 'lang__id', 'lang__lang', 'lang__title',                                                       'lang__content')[(page - 1) * line:page * line]        total = icloud_meal_qs.count()        return response.json(0, {'langList': list(icloud_meal_qs), 'total': total})    @staticmethod    def add_or_edit_lang(request_dict, response):        lang_id = request_dict.get('lang_id', None)        meal_id = request_dict.get('meal_id', None)        lang = request_dict.get('lang', 'en')        title = request_dict.get('title', None)        content = request_dict.get('content', None)        try:            icloud_meal_qs = ICloudStoreMeal.objects.get(id=meal_id)            if not icloud_meal_qs:                return response.json(173)            if lang_id:                Lang.objects.filter(id=lang_id).update(lang=lang, title=title, content=content)            else:                lang = Lang.objects.filter(lang=lang, title=title, content=content, type=3)                if not lang.exists():                    Lang.objects.create(lang=lang, title=title, content=content, type=3)                    lang = Lang.objects.filter(lang=lang, title=title, content=content, type=3)                icloud_meal_qs.lang.set(*lang)            return response.json(0)        except Exception as e:            return response.json(500)    @staticmethod    def delete_lang(request_dict, response):        lang_id = request_dict.get('lang_id', None)        meal_id = request_dict.get('meal_id', None)        if not all([lang_id, meal_id]):            return response.json(444)        try:            lang = Lang.objects.filter(id=lang_id)            icloud_meal_qs = ICloudStoreMeal.objects.get(id=meal_id)            icloud_meal_qs.lang.remove(*lang)            lang.delete()            return response.json(0)        except Exception as e:            return response.json(500)    @staticmethod    def get_user_icloud_info(request_dict, response):        user_id = request_dict.get('user_id', None)        page = request_dict.get('pageNo', None)        line = request_dict.get('pageSize', None)        if not all([page, line]):            return response.json(444)        now_time = int(time.time())        page = int(page)        line = int(line)        try:            icloud_user_qs = IcloudUseDetails.objects.all()            if user_id:                icloud_user_qs = icloud_user_qs.filter(user_id=user_id)            icloud_user_qs = icloud_user_qs.values('use_size', 'user_id', 'detect_status', 'bucket_id',                                                   'id')            total = icloud_user_qs.count()            icloud_user_qs = icloud_user_qs[(page - 1) * line:page * line]            for item in icloud_user_qs:                use_details_id = item['id']                user_id = item['user_id']                bucket_id = item['bucket_id']                user_qs = Device_User.objects.filter(userID=user_id).values('NickName')                item['username'] = user_qs[0]['NickName']                bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket')                item['bucket_name'] = bucket_qs[0]['bucket']                all_size = IcloudService.objects.filter(Q(use_details_id=use_details_id), Q(use_status=0),                                                        Q(end_time__gt=now_time) | Q(end_time=0)).values(                    'size').aggregate(total_size=Sum('size'))['total_size']                item['all_size'] = float(all_size * 1024) if all_size else 0  # 转换单位为MB            return response.json(0, {'list': list(icloud_user_qs), 'total': total})        except Exception as e:            return response.json(500)    @staticmethod    def reset_icloud(request_dict, response):        use_details_id = request_dict.get('id', None)        if not all([use_details_id]):            return response.json(444)        try:            icloud_use_qs = IcloudUseDetails.objects.filter(id=use_details_id).values('user_id')            user_id = icloud_use_qs[0]['user_id']            icloud_record = IcloudStorageRecord.objects.filter(user_id=user_id).values('bucket_id', )            bucket_id = icloud_record[0]['bucket_id']            bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')            if not bucket_qs.exists():                return response.json(173)            bucket_name = bucket_qs[0]['bucket']            bucket_region = bucket_qs[0]['region']            mold = bucket_qs[0]['mold']            s3_obj = AmazonS3Util(                AWS_ACCESS_KEY_ID[mold],                AWS_SECRET_ACCESS_KEY[mold],                bucket_region            )            object_list = s3_obj.get_object_list(bucket_name, user_id)            for obj in object_list:                s3_obj.delete_obj(bucket_name, obj['Key'])            icloud_record.delete()            icloud_use_qs.update(use_size=0)            return response.json(0)        except Exception as e:            return response.json(500)
 |