소스 검색

uid vod bucket

chenjunkai 6 년 전
부모
커밋
cbf6a12b88
2개의 변경된 파일130개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 0
      Ansjer/urls.py
  2. 129 1
      Controller/VodBucket.py

+ 1 - 0
Ansjer/urls.py

@@ -114,6 +114,7 @@ urlpatterns = [
     url(r'^order/(?P<operation>.*)$', OrderContrller.OrderView.as_view()),
 
     url(r'^vodBucket/(?P<operation>.*)$', VodBucket.VodBucketView.as_view()),
+    url(r'^UIDBucket/(?P<operation>.*)$', VodBucket.UidBucketView.as_view()),
 
     # 新的设备接口
     path('Test', Test.Test.as_view()),

+ 129 - 1
Controller/VodBucket.py

@@ -13,12 +13,13 @@
 """
 import json
 import time
+import math
 
 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 VodBucketModel
+from Model.models import VodBucketModel, UID_Bucket, Store_Meal
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.ModelService import ModelService
@@ -100,3 +101,130 @@ class VodBucketView(View):
             return response.json(10, repr(e))
         res = list(VodBucketModel.objects.values())
         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)