|
@@ -13,12 +13,13 @@
|
|
"""
|
|
"""
|
|
import json
|
|
import json
|
|
import time
|
|
import time
|
|
|
|
+import math
|
|
|
|
|
|
from django.utils.decorators import method_decorator
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.views.generic.base import View
|
|
from django.views.generic.base import View
|
|
|
|
|
|
-from Model.models import VodBucketModel
|
|
|
|
|
|
+from Model.models import VodBucketModel, UID_Bucket, Store_Meal
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.TokenObject import TokenObject
|
|
from Object.TokenObject import TokenObject
|
|
from Service.ModelService import ModelService
|
|
from Service.ModelService import ModelService
|
|
@@ -100,3 +101,130 @@ class VodBucketView(View):
|
|
return response.json(10, repr(e))
|
|
return response.json(10, repr(e))
|
|
res = list(VodBucketModel.objects.values())
|
|
res = list(VodBucketModel.objects.values())
|
|
return response.json(0, res)
|
|
return response.json(0, res)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class UidBucketView(View):
|
|
|
|
+ @method_decorator(csrf_exempt)
|
|
|
|
+ def dispatch(self, *args, **kwargs):
|
|
|
|
+ return super(UidBucketView, self).dispatch(*args, **kwargs)
|
|
|
|
+
|
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
|
+ request.encoding = 'utf-8'
|
|
|
|
+ operation = kwargs.get('operation')
|
|
|
|
+ return self.validation(request.GET, operation)
|
|
|
|
+
|
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
|
+ request.encoding = 'utf-8'
|
|
|
|
+ operation = kwargs.get('operation')
|
|
|
|
+ request_dict = json.loads(request.body.decode('utf-8'))
|
|
|
|
+ return self.validation(request_dict, operation)
|
|
|
|
+
|
|
|
|
+ def validation(self, request_dict, operation):
|
|
|
|
+ response = ResponseObject()
|
|
|
|
+ if operation is None:
|
|
|
|
+ return response.json(444, 'error path')
|
|
|
|
+ token = request_dict.get('token', None)
|
|
|
|
+ # 设备主键uid
|
|
|
|
+ tko = TokenObject(token)
|
|
|
|
+ tko.valid()
|
|
|
|
+ response.lang = tko.lang
|
|
|
|
+ if tko.code != 0:
|
|
|
|
+ return response.json(tko.code)
|
|
|
|
+ userID = tko.userID
|
|
|
|
+ own_perm = ModelService.check_permission(userID, 50)
|
|
|
|
+ if not own_perm:
|
|
|
|
+ return response.json(404)
|
|
|
|
+ if operation == 'add':
|
|
|
|
+ return self.do_add(request_dict, response)
|
|
|
|
+ elif operation == 'delete':
|
|
|
|
+ return self.do_delete(request_dict, response)
|
|
|
|
+ elif operation == 'update':
|
|
|
|
+ return self.do_update(request_dict, response)
|
|
|
|
+ elif operation == 'query':
|
|
|
|
+ return self.do_query(request_dict, response)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(414)
|
|
|
|
+
|
|
|
|
+ def do_add(self, request_dict, response):
|
|
|
|
+ rank = request_dict.get('rank', None)
|
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
|
+ channel = request_dict.get('channel', None)
|
|
|
|
+ if not rank:
|
|
|
|
+ return response.json(444, 'rank')
|
|
|
|
+ try:
|
|
|
|
+ smqs = Store_Meal.objects.filter(id=rank).values("bucket__storeDay", "day", "bucket_id")
|
|
|
|
+ if not smqs.exists():
|
|
|
|
+ return response.json(10, '套餐信息不存在')
|
|
|
|
+ bucketId = smqs[0]['bucket_id']
|
|
|
|
+ addDay = smqs[0]['day']
|
|
|
|
+ addTime = addDay * 3600 * 24
|
|
|
|
+ nowTime = int(time.time())
|
|
|
|
+ endTime = nowTime + addTime
|
|
|
|
+ ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values("bucket_id", "endTime",
|
|
|
|
+ "bucket__storeDay")
|
|
|
|
+ if ubqs.exists():
|
|
|
|
+ if nowTime > ubqs[0]['endTime']:
|
|
|
|
+ ubqs.update(endTime=nowTime + addTime)
|
|
|
|
+ else:
|
|
|
|
+ # 同一个bucket续费
|
|
|
|
+ if bucketId == ubqs[0]['bucket_id']:
|
|
|
|
+ ubqs.update(endTime=ubqs[0]['endTime'] + addTime)
|
|
|
|
+ else:
|
|
|
|
+ if ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
|
|
|
|
+ return response.json(10, '不可降级')
|
|
|
|
+ else:
|
|
|
|
+ origin_storeDay = int(ubqs[0]['bucket__storeDay'])
|
|
|
|
+ upgrade_storeDay = int(smqs[0]['bucket__storeDay'])
|
|
|
|
+ ctcTime = ubqs[0]['endTime'] - nowTime
|
|
|
|
+ multiple = math.ceil(upgrade_storeDay / origin_storeDay)
|
|
|
|
+ ubqs.update(endTime=ctcTime / multiple + addTime + ubqs[0]['endTime'])
|
|
|
|
+ else:
|
|
|
|
+ UID_Bucket.objects.create(uid=uid, channel=channel, bucket_id=bucketId, endTime=endTime)
|
|
|
|
+
|
|
|
|
+ except Exception as e:
|
|
|
|
+ return response.json(10, repr(e))
|
|
|
|
+ return response.json(0, {'endTime': endTime})
|
|
|
|
+
|
|
|
|
+ def do_query(self, request_dict, response):
|
|
|
|
+ page = request_dict.get('page', None)
|
|
|
|
+ line = request_dict.get('line', None)
|
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
|
+ ubqs = UID_Bucket.objects
|
|
|
|
+ if uid:
|
|
|
|
+ ubqs = ubqs.filter(uid=uid)
|
|
|
|
+ ubqs = ubqs[(page - 1) * line:page * line].values('id', 'uid', 'channel', 'status', 'endTime', 'bucket__bucket',
|
|
|
|
+ 'bucket__storeDay', 'bucket__area')
|
|
|
|
+ res = list(ubqs)
|
|
|
|
+ return response.json(0, res)
|
|
|
|
+
|
|
|
|
+ def do_update(self, request_dict, response):
|
|
|
|
+ status = request_dict.get('status', None)
|
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
|
+ channel = request_dict.get('channel', None)
|
|
|
|
+ ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values('endTime')
|
|
|
|
+ nowTime = int(time.time())
|
|
|
|
+ endTime = ubqs[0]['endTime']
|
|
|
|
+ if not ubqs.exists():
|
|
|
|
+ return response.json(10, '未购买')
|
|
|
|
+ if endTime > nowTime:
|
|
|
|
+ ubqs.update(status=status)
|
|
|
|
+ return response.json(0)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(10, '过期了')
|
|
|
|
+
|
|
|
|
+ def do_delete(self, request_dict, response):
|
|
|
|
+ id = request_dict.get('id', None)
|
|
|
|
+ try:
|
|
|
|
+ UID_Bucket.objects.filter(id=id).delete()
|
|
|
|
+ except Exception as e:
|
|
|
|
+ return response.json(10, repr(e))
|
|
|
|
+ page = request_dict.get('page', None)
|
|
|
|
+ line = request_dict.get('line', None)
|
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
|
+ ubqs = UID_Bucket.objects
|
|
|
|
+ if uid:
|
|
|
|
+ ubqs = ubqs.filter(uid=uid)
|
|
|
|
+ ubqs = ubqs[(page - 1) * line:page * line].values('id', 'uid', 'channel', 'status', 'endTime', 'bucket__bucket',
|
|
|
|
+ 'bucket__storeDay', 'bucket__area')
|
|
|
|
+ res = list(ubqs)
|
|
|
|
+ return response.json(0, res)
|