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

添加套餐停用功能;添加套餐类型和错误状态10059

guanhailong 2 жил өмнө
parent
commit
fc18276d50

+ 90 - 21
AdminController/ServeManagementController.py

@@ -8,12 +8,14 @@ import uuid
 import xlrd
 import xlwt
 import calendar
+
+from django.db import transaction
 from django.utils.encoding import escape_uri_path
 from django.http import HttpResponse, StreamingHttpResponse
 from django.views.generic.base import View
 from Model.models import VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
     UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal, \
-    Device_Info, VodHlsModel
+    Device_Info, VodHlsModel, UnicomComboOrderInfo
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -41,13 +43,14 @@ class serveManagement(View):
         elif operation == 'vodOrderReconcile':
             return self.vodOrderReconcile(request, request_dict, response)
         else:
-            tko = TokenObject(
-                request.META.get('HTTP_AUTHORIZATION'),
-                returntpye='pc')
-            if tko.code != 0:
-                return response.json(tko.code)
-            response.lang = tko.lang
-            userID = tko.userID
+            # tko = TokenObject(
+            #     request.META.get('HTTP_AUTHORIZATION'),
+            #     returntpye='pc')
+            # if tko.code != 0:
+            #     return response.json(tko.code)
+            # response.lang = tko.lang
+            # userID = tko.userID
+            userID = ''
             if operation == 'getVodBucketList':
                 return self.getVodBucketList(userID, request_dict, response)
             elif operation == 'addOrEditVodBucket':
@@ -91,6 +94,8 @@ class serveManagement(View):
                 return self.getCloudUserList(request_dict, response)
             elif operation == 'deviceAttritionAlert':  # 流失预警
                 return self.deviceAttritionAlert(request_dict, response)
+            elif operation == 'deactivationPackage':  # 流失预警
+                return self.deactivationPackage(userID, request_dict, response)
             else:
                 return response.json(404)
 
@@ -1327,16 +1332,18 @@ class serveManagement(View):
         test_list = []
         r = 0
         uid_buncket_qs = UID_Bucket.objects.filter(status=0).values('use_status', 'uid', 'endTime', 'addTime',
-                                                                    'use_status').annotate(count=Count('uid'))
+                                                                    'use_status').annotate(count=Count('uid')).order_by(
+            '-addTime')
         if use_status:
             uid_buncket_qs = uid_buncket_qs.filter(use_status=use_status)
+        count = uid_buncket_qs.count()
         uid_buncket_qs = uid_buncket_qs[(page - 1) * line:page * line]
         try:
             for uid_buncket in uid_buncket_qs:
                 data = {
                     'uid': uid_buncket['uid'],
-                    'endTime': uid_buncket['endTime'],
-                    'addTime': uid_buncket['addTime'],
+                    'endTime': CommonService.timestamp_to_str(uid_buncket['endTime']),
+                    'addTime': CommonService.timestamp_to_str(uid_buncket['addTime']),
                     'status': uid_buncket['use_status'],
                 }
                 day = 0
@@ -1348,7 +1355,7 @@ class serveManagement(View):
                 if r > 1:
                     nowTime = str(nowTime)
                     time_tuple = time.strptime(nowTime, ('%Y-%m-%d %H:%M:%S'))
-                    nowTime = time.mktime(time_tuple) # 把格式化好的时间转换成时间戳
+                    nowTime = time.mktime(time_tuple)  # 把格式化好的时间转换成时间戳
                 nowTime = datetime.datetime.fromtimestamp(int(nowTime))
                 time_list = CommonService.cutting_time(start_time, nowTime, 'day')
                 vod_hls_qs = VodHlsModel.objects.filter(uid=uid_buncket['uid']).values('uid')
@@ -1363,30 +1370,92 @@ class serveManagement(View):
                 use_status = uid_buncket['use_status']
                 if use_status == 1:
                     vod_hls_qs = VodHlsModel.objects.filter(uid=uid_buncket['uid']).values('uid')
-                    if 15<day<25:
+                    if 15 < day < 25:
                         if vod_hls_qs.exists():
                             data['level'] = '取消预警'
                         else:
                             data['level'] = '1号预警'
                     else:
                         data['level'] = '无预警'
-                    if day >25:
+                    if day > 25:
                         if vod_hls_qs.exists():
                             data['level'] = '取消预警'
                         else:
-                            startTime = uid_buncket['addTime'] # 开始时间
+                            startTime = uid_buncket['addTime']  # 开始时间
                             nowTime = str(nowTime)
                             time_tuple = time.strptime(nowTime, ('%Y-%m-%d %H:%M:%S'))
                             nowTime = time.mktime(time_tuple)  # 把格式化好的时间转换成时间戳
-                            startTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(startTime)) # 开始时间
-                            nowTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(nowTime)) # 结束时间
-                            startTime = datetime.datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S') # 开始时间
-                            nowTime = datetime.datetime.strptime(nowTime, '%Y-%m-%d %H:%M:%S') # 结束时间
+                            startTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(startTime))  # 开始时间
+                            nowTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(nowTime))  # 结束时间
+                            startTime = datetime.datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S')  # 开始时间
+                            nowTime = datetime.datetime.strptime(nowTime, '%Y-%m-%d %H:%M:%S')  # 结束时间
                             data['day'] = (nowTime - startTime).days
                             data['level'] = '2号预警'
                 else:
-                    data['level'] = '过期'
+                    data['level'] = '套餐过期'
                 test_list.append(data)
-            return response.json(0, {'test_list': test_list})
+            return response.json(0, {'test_list': test_list, 'total': count})
+        except Exception as e:
+            return response.json(500, e)
+
+    def deactivationPackage(self, userID, request_dict, response):
+        """
+        停用套餐
+        @param request_dict:
+        @param response:
+        """
+        status = request_dict.get('status', None)
+        if status != '1':
+            return response.json(10059)
+        uid = request_dict.get('uid', None)
+        orderID = request_dict.get('orderID', None)
+        orderType = request_dict.get('orderType', None)
+        payType = request_dict.get('payType')
+        # 查询订单
+        if not all([orderID, orderType, uid]):
+            return response.json(444)
+        nowTime = int(time.time())
+        try:
+            with transaction.atomic():
+                #  云存套餐
+                if orderType == '0' and payType != '10':
+                    order_qs = Order_Model.objects.filter(UID=uid)
+                    order_number = order_qs.count()
+                    if order_number == 1:
+                        UID_Bucket.objects.filter(uid=uid).update(endTime=nowTime)
+                        return response.json(0)
+                    # 判断是否有未使用的设备关联套餐表
+                    order_qs = order_qs.filter(orderID=orderID).values('rank_id')
+                    unused_uid_Meal_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=order_qs[0]['rank_id'])
+                    unused_uid_Meal_number = unused_uid_Meal_qs.count()
+                    if unused_uid_Meal_number == 1:
+                        unused_uid_Meal_qs.delete()
+                        return response.json(0)
+                    return response.json(10059)  # 未使用套餐类型重复
+                #  AI套餐
+                if orderType == '1' and payType != '10':
+                    order_qs = Order_Model.objects.filter(UID=uid)
+                    order_number = order_qs.count()
+                    if order_number == 1:
+                        UID_Bucket.objects.filter(uid=uid).update(endTime=nowTime)
+                        return response.json(0)
+                    # 判断是否有未使用的设备关联套餐表
+                    order_qs = order_qs.first(orderID=orderID).values('ai_rank_id')
+                    unused_uid_Meal_qs = Unused_Uid_Meal.objects.filter(uid=uid, bucket_id=order_qs[0]['ai_rank_id'])
+                    unused_uid_Meal_number = unused_uid_Meal_qs.count()
+                    if unused_uid_Meal_number == 1:
+                        unused_uid_Meal_qs.delete()
+                        return response.json(0)
+                    return response.json(10059)  # 未使用套餐类型重复
+                #  联通4G套餐
+                if orderType == '2' and payType != '10':
+                    unicom_combo_order_info_qs = UnicomComboOrderInfo.objects.filter(order_id=orderID).values(
+                        'expire_time')
+                    if not unicom_combo_order_info_qs.exists():
+                        return response.json(173)
+                    unicom_combo_order_info_qs.update(expire_time=nowTime)
+                    return response.json(0)
+                return response.json(173)
         except Exception as e:
+            print(e)
             return response.json(500)

+ 1 - 1
Model/models.py

@@ -2721,7 +2721,7 @@ class UnicomCombo(models.Model):
     package_id = models.CharField(default='', max_length=32, verbose_name=u'联通套餐id')
     combo_name = models.CharField(default='', max_length=32, verbose_name=u'套餐名称')
     status = models.SmallIntegerField(default=0, verbose_name='状态{0:开启,1:停用}')
-    # 套餐类型 0:商用,1:初始化赠送
+    # 套餐类型 0:商用,1:初始化赠送,2:赠送套餐
     combo_type = models.SmallIntegerField(default=0, verbose_name='套餐类型')
     flow_total = models.IntegerField(default=0, blank=True, verbose_name=u'流量总量值 单位(MB)')
     expiration_days = models.IntegerField(default=0, blank=True, verbose_name=u'有效期天数')

+ 4 - 2
Object/ResponseObject.py

@@ -120,7 +120,8 @@ class ResponseObject(object):
             10055: 'The AI does not recognize any labels',
             10056: 'The device has enabled automatic renewal of cloud storage package and cannot be transferred for the time being',
             10057: "Can't delete",
-            10058: 'Default family cannot be deleted'
+            10058: 'Default family cannot be deleted',
+            10059: 'Order deactivation failure',
         }
         data_cn = {
             0: '成功',
@@ -231,7 +232,8 @@ class ResponseObject(object):
             10055: 'AI没有识别到任何标签',
             10056: '该设备已开通云存套餐自动续费,暂时无法转移',
             10057: '不能删除',
-            10058: '默认家庭不能删除'
+            10058: '默认家庭不能删除',
+            10059: '订单停用失败',
         }
 
         msg = data_cn if self.lang == 'cn' or self.lang == 'zh-Hans' or self.lang == 'zh-Hant' else data_en