Эх сурвалжийг харах

Merge branch 'dev' into lang

lang 4 жил өмнө
parent
commit
72fcc7777f

+ 44 - 26
Controller/CloudTest.py

@@ -10,9 +10,11 @@ from django.db import transaction
 from django.views.generic.base import View
 
 from Object.TokenObject import TokenObject
+from Service import CommonService
 from Service.ModelService import ModelService
 from Object.ResponseObject import ResponseObject
-from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel, Unused_Uid_Meal
+from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel, Unused_Uid_Meal, \
+    VodBucketModel
 
 
 class cloudTestView(View):
@@ -47,10 +49,11 @@ class cloudTestView(View):
                 return self.expireMeal(request_dict, response)
 
     def deviceTransfer(self, request_dict, response):
-        # 设备转移
+        # 设备转移,一个用户下的设备转移到另一个用户
         oldUserID = request_dict.get("oldUserID", None)
         username = request_dict.get("username", None)
         uid = request_dict.get('uid', None)
+        nowTime = int(time.time())
 
         try:
             # 查询该userID下是否存在此设备
@@ -69,7 +72,7 @@ class cloudTestView(View):
             vodPrimaryUserID = old_deviceInfo_qs[0]['vodPrimaryUserID']
             if vodPrimaryUserID != '' and vodPrimaryUserID != oldUserID:
                 return response.json(10037)
-            # 判断新用户是否已有此设备UID
+            # 判断新用户是否已有此设备
             new_deviceInfo_qs = Device_Info.objects.filter(userID_id=newUserID, UID=uid, isExist=1)
             if new_deviceInfo_qs:
                 return response.json(10009)
@@ -80,9 +83,9 @@ class cloudTestView(View):
             vodPrimaryMaster = newUserName
 
             with transaction.atomic():
-                # 更新旧设备userID
-                old_deviceInfo_qs.update(userID=newUserID)
-                # 更新所有设备主用户信息
+                # 更新旧设备userID,设备添加时间
+                old_deviceInfo_qs.update(userID=newUserID, data_joined=nowTime)
+                # 更新设备主用户信息
                 Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
                 VodHlsModel.objects.filter(uid=uid).delete()
         except Exception as e:
@@ -92,7 +95,7 @@ class cloudTestView(View):
             return response.json(0)
 
     def mealTransfer(self, request_dict, response, userID):
-        # 云存套餐转移
+        # 云存套餐转移,同一用户下不同设备间的云存套餐转移
         old_uid = request_dict.get("old_uid", None)
         new_uid = request_dict.get("new_uid", None)
         nowTime = int(time.time())
@@ -116,36 +119,51 @@ class cloudTestView(View):
                 return response.json(10011)
 
             # 查询转出设备正在使用的套餐
-            old_using_uid_bucket = UID_Bucket.objects.filter(uid=old_uid, endTime__gte=nowTime).values('id').order_by('addTime')
+            old_using_uid_bucket = UID_Bucket.objects.filter(uid=old_uid, endTime__gte=nowTime).values('id', 'bucket_id', 'has_unused').order_by('addTime')
             if not old_using_uid_bucket.exists():
                 return response.json(10013)
 
-            # 首次转移,根据订单判断是否为购买的套餐
-            old_orderModel_qs = Order_Model.objects.filter(userID_id=userID, UID=old_uid)
-            if old_orderModel_qs.exists():
-                old_UIDbucket_id = old_using_uid_bucket[0]['id']
-                # 只能转移购买的的套餐(支付类型为体验套餐和激活码不能转移,即pay_type不能为10,11)
-                old_orderModel_qs = Order_Model.objects.filter(uid_bucket_id=old_UIDbucket_id).values('payType')
-                payType = old_orderModel_qs[0]['payType']
-                if payType == 10 or payType == 11:
-                    return response.json(10012)
-
-            # 查询转入设备正在使用的套餐
+            # 免费存储桶不可转移
+            old_vod_bucket_id = old_using_uid_bucket[0]['bucket_id']
+            is_free = VodBucketModel.objects.get(id=old_vod_bucket_id).is_free
+            if is_free == 1:
+                return response.json(10012)
+
+            # 查询转入设备是否存在正在使用的套餐和未使用的套餐
             new_using_uid_bucket = UID_Bucket.objects.filter(uid=new_uid, endTime__gte=nowTime)
             new_unused_uid_bucket = Unused_Uid_Meal.objects.filter(uid=new_uid)
-            new_unused_id_list = new_unused_uid_bucket.values_list("id", flat=True)
             if new_using_uid_bucket.exists() or new_unused_uid_bucket.exists():
                 return response.json(10014)
 
+            # 如果转出设备有未使用套餐,更改第一个未使用套餐为正在使用
+            if old_using_uid_bucket[0]['has_unused'] == 1:
+                old_unused_uid_bucket = Unused_Uid_Meal.objects.filter(uid=old_uid).values('id', 'channel', 'bucket_id', 'addTime', 'expire', 'num')
+                count = old_unused_uid_bucket.count()
+                unused = old_unused_uid_bucket[0]
+                has_unused = 1 if count>1 else 0    # 如果存在不止一个未使用套餐,has_unused=1
+                endTime = CommonService.calcMonthLater(unused['expire'] * unused['num'])
+                data_dict = {
+                    'uid': old_uid,
+                    'channel': unused['channel'],
+                    'bucket_id': unused['bucket_id'],
+                    'addTime': unused['addTime'],
+                    'endTime': endTime,
+                    'updateTime': unused['nowTime'],
+                    'status': 1,
+                    'use_status': 1,
+                    'has_unused': has_unused
+                }
+                UID_Bucket.objects.create(**data_dict)  # 正在使用套餐表添加数据
+                Unused_Uid_Meal.objects.filter(uid=old_uid).first().delete()   # 删除未使用套餐表中的数据
+
             with transaction.atomic():
-                # 更新所有设备主用户信息
+                # 更新转入设备的主用户信息
                 Device_Info.objects.filter(UID=new_uid).update(vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
-                # vod_uid_bucket表更新uid
+                # 更新正在使用套餐的uid,重置拥有未使用套餐
                 old_using_uid_bucket_id = old_using_uid_bucket[0]['id']
-                UID_Bucket.objects.filter(id=old_using_uid_bucket_id).update(uid=new_uid)
-                Unused_Uid_Meal.objects.filter(id__in=list(new_unused_id_list)).update(uid=new_uid)  # 更新过期云存关联套餐状态
-                # 删除转出设备stscrd表关联数据
-                StsCrdModel.objects.filter(uid=old_uid).delete()
+                UID_Bucket.objects.filter(id=old_using_uid_bucket_id).update(uid=new_uid,has_unused=0)
+                StsCrdModel.objects.filter(uid=old_uid).delete()    # 删除转出设备stscrd表关联数据
+
         except Exception as e:
             # print(e)
             return response.json(500, repr(e))

+ 7 - 2
Controller/EquipmentManager.py

@@ -1075,10 +1075,15 @@ def update_device_shadow(request):
         is_reset = request_dict.get('is_reset', None)
         # 传1则重置设备信息
         if is_reset == '1':
+
             UidSetModel.objects.filter(uid=uid).delete()
             # 重置设备,判断设备为已删除
-            di_qs = Device_Info.objects.filter(UID=uid)
-            di_qs.update(isExist=2)
+            nowTime = int(time.time())
+            uid_bucket = UID_Bucket.objects.filter(uid=uid, endTime__gte=nowTime).values('id', 'has_unused').order_by('addTime')
+            if not uid_bucket.exists():
+                di_qs = Device_Info.objects.filter(UID=uid)
+                di_qs.update(isExist=2)
+
             # 清除redis缓存
             # data = di_qs.values()
             # redisObj = RedisObject(db=8)

+ 19 - 1
Model/models.py

@@ -392,12 +392,13 @@ class User_Brand(models.Model):
 # 存储通表
 class VodBucketModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
-    bucket = models.CharField(max_length=30, verbose_name='设备UID')
+    bucket = models.CharField(max_length=30, verbose_name='存储桶名称')
     storeDay = models.IntegerField(default=0, verbose_name='存储生命周期(天)')
     content = models.TextField(verbose_name='描述', default='')
     endpoint = models.CharField(max_length=125, default='', verbose_name='存储节点')
     area = models.CharField(max_length=16, default='', verbose_name='区域')
     region = models.CharField(max_length=16, default='', verbose_name='regionID')
+    is_free = models.SmallIntegerField(default=0, verbose_name='是否为免费存储桶[0:否,1:是]')
 
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
@@ -437,6 +438,12 @@ class Store_Meal(models.Model):
     # lang = models.CharField(default='', max_length=20, verbose_name='语言/国家')
     lang = models.ManyToManyField(to='Lang', verbose_name='套餐语言', db_table='store_meal_lang')
 
+    # 备用字段
+    spare_1 = models.CharField(default='', blank=True, max_length=64, verbose_name=u'备用字段1')
+    spare_2 = models.CharField(default='', blank=True, max_length=64, verbose_name=u'备用字段2')
+    spare_3 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段3')
+    spare_4 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段4')
+
     def __str__(self):
         return self.id
 
@@ -580,6 +587,11 @@ class Order_Model(models.Model):
     pay_url = models.CharField(max_length=2000, default='', verbose_name='支付url')
     paypal = models.CharField(max_length=500, null=True, blank=True, verbose_name='支付批准url')
 
+    # 备用字段
+    spare_1 = models.CharField(default='', blank=True, max_length=64, verbose_name=u'备用字段1')
+    spare_2 = models.CharField(default='', blank=True, max_length=64, verbose_name=u'备用字段2')
+    spare_3 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段3')
+    spare_4 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段4')
 
     def __str__(self):
         return self.orderID
@@ -1171,6 +1183,12 @@ class CDKcontextModel(models.Model):
     # order = models.ForeignKey(Order_Model, blank=True, max_length=20, to_field='orderID', on_delete=models.CASCADE, verbose_name='订单id', unique=True)
     order = models.CharField(max_length=20, blank=True, unique=True, verbose_name='订单id')
 
+    # 备用字段
+    spare_1 = models.CharField(default='', blank=True, max_length=64, verbose_name=u'备用字段1')
+    spare_2 = models.CharField(default='', blank=True, max_length=64, verbose_name=u'备用字段2')
+    spare_3 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段3')
+    spare_4 = models.CharField(default='', blank=True, max_length=64, db_index=True, verbose_name=u'备用字段4')
+
     class Meta:
         db_table = 'cdk_context'
         verbose_name = '激活码表'