浏览代码

流失预警新增字段;流量充值功能

guanhailong 2 年之前
父节点
当前提交
02cbe59364
共有 2 个文件被更改,包括 125 次插入26 次删除
  1. 52 24
      AdminController/ServeManagementController.py
  2. 73 2
      AdminController/UnicomManageController.py

+ 52 - 24
AdminController/ServeManagementController.py

@@ -15,7 +15,7 @@ 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, UnicomComboOrderInfo
+    Device_Info, VodHlsModel, UnicomComboOrderInfo, Device_User
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -1329,7 +1329,7 @@ class serveManagement(View):
         page = int(pageNo)
         line = int(pageSize)
         nowTime = int(time.time())
-        test_list = []
+        attrition_list = []
         r = 0
         uid_buncket_qs = UID_Bucket.objects.filter(status=0).values('use_status', 'uid', 'endTime', 'addTime',
                                                                     'use_status').annotate(count=Count('uid')).order_by(
@@ -1340,16 +1340,10 @@ class serveManagement(View):
         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': CommonService.timestamp_to_str(uid_buncket['endTime']),
-                    'addTime': CommonService.timestamp_to_str(uid_buncket['addTime']),
-                    'status': uid_buncket['use_status'],
-                }
                 day = 0
-                device_info = Device_Info.objects.filter(UID=uid_buncket['uid']).values('userID__username')
-                data['username'] = device_info[0]['userID__username'] if device_info.exists() else ''
-                start_time = uid_buncket['addTime']
+                endTime = uid_buncket['endTime']
+                addTime = uid_buncket['addTime']
+                start_time = addTime
                 start_time = datetime.datetime.fromtimestamp(int(start_time))
                 r += 1
                 if r > 1:
@@ -1366,20 +1360,21 @@ class serveManagement(View):
                         day += 1
                         if day > 25:
                             break
-                data['day'] = day
+                day = day
                 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'] = '取消预警'
+                            level = '取消预警'
                         else:
-                            data['level'] = '1号预警'
+                            level = '1号预警'
                     else:
-                        data['level'] = '无预警'
-                    if day > 25:
+                        level = '无预警'
+                    if day >= 25:
                         if vod_hls_qs.exists():
-                            data['level'] = '取消预警'
+                            level = '取消预警'
                         else:
                             startTime = uid_buncket['addTime']  # 开始时间
                             nowTime = str(nowTime)
@@ -1389,14 +1384,47 @@ class serveManagement(View):
                             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号预警'
+                            day = (nowTime - startTime).days
+                            level = '2号预警'
+                else:
+                    level = '套餐过期'
+                device_user = Device_User.objects.filter(device_info__UID=uid_buncket['uid']).values('username', 'userID')
+                username = device_user[0]['username'] if device_user.exists() else ''
+                userID = device_user[0]['userID'] if device_user.exists() else ''
+                order_qs = Order_Model.objects.filter(order_type=0, userID=userID).values('UID').annotate(count=Count('UID'))
+                #  用户设备购买云存数量
+                if not order_qs.exists():
+                    count = ''
+                else:
+                    uid_count = order_qs.count()
+                    if uid_count == 1:
+                        count = 'N/A'
+                    else:
+                        count = uid_count
+                order_uid_list = [order[uid] for order in order_qs for uid in order]
+                vod_hls_qs = VodHlsModel.objects.filter(uid__in=order_uid_list).values('uid')
+                #  套餐使用期间是否上传过数据
+                if vod_hls_qs.exists():
+                    other = '有'
                 else:
-                    data['level'] = '套餐过期'
-                test_list.append(data)
+                    other = '无'
+
+                data = {
+                    'userID': userID,
+                    'uid': uid_buncket['uid'],
+                    'endTime': CommonService.timestamp_to_str(endTime),
+                    'addTime': CommonService.timestamp_to_str(addTime),
+                    'status': uid_buncket['use_status'],
+                    'level': level,
+                    'day': day,
+                    'other': other,
+                    'username': username,
+                }
+                attrition_list.append(data)
+            test_list = [list for list in attrition_list if list['day'] > 14]  # 输出15天及以上的数据
             return response.json(0, {'test_list': test_list, 'total': count})
         except Exception as e:
-            return response.json(500, e)
+            return response.json(500, repr(e))
 
     def deactivationPackage(self, userID, request_dict, response):
         """
@@ -1458,4 +1486,4 @@ class serveManagement(View):
                 return response.json(173)
         except Exception as e:
             print(e)
-            return response.json(500)
+            return response.json(500, repr(e))

+ 73 - 2
AdminController/UnicomManageController.py

@@ -9,7 +9,9 @@ import time
 from django.db import transaction
 from django.views.generic.base import View
 
-from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrderInfo, Device_User, Device_Info
+from Controller.UnicomCombo.UnicomComboController import UnicomComboView
+from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrderInfo, Device_User, Device_Info, \
+    Order_Model
 from Object.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
 
@@ -38,7 +40,7 @@ class UnicomManageControllerView(View):
         # 添加和编辑卡套餐
         elif operation == 'edit/combo':
             return self.edit_combo(request_dict, response)
-        # 获取/筛选设备套餐订单信息
+        # 获取/筛选4G流量卡订单信息
         elif operation == 'order/info':
             return self.get_order_info(request_dict, response)
         # 统计4G套餐
@@ -50,6 +52,9 @@ class UnicomManageControllerView(View):
         # 获取/筛选用户信息
         elif operation == 'filter/user':
             return self.get_user_info(request_dict, response)
+        # 充值流量
+        elif operation == 'getFlowPackages':
+            return self.get_flow_packages(request_dict, response)
 
     def get_user_info(self, request_dict, response):
         """
@@ -429,3 +434,69 @@ class UnicomManageControllerView(View):
         except Exception as e:
             print(e)
             return response.json(500, repr(e))
+
+    @classmethod
+    def get_flow_packages(cls, request_dict, response):
+        """
+        赠送套餐流量
+        @param request_dict:请求参数
+        @username request_dict:用户名
+        @comboType request_dict:套餐类型
+        @serialNo request_dict:序列号
+        @param response: 响应对象
+        @param return:
+        """
+        username = request_dict.get('username', None)
+        uid = request_dict.get('uid', None)
+        serialNo = request_dict.get('serialNo', None)
+        comboId = request_dict.get('comboId', None)
+        if not all([username, serialNo or uid, comboId]):
+            return response.json(444)
+        try:
+            while transaction.atomic():
+                unicom_combo_qs = UnicomCombo.objects.filter(id=comboId, combo_type=2).values('combo_type')
+                if not unicom_combo_qs.exists():
+                    return response.json(173)
+                device_info_qs = Device_Info.objects.filter(userID__username=username).values('UID', 'serial_number',
+                                                                                              'userID_id')
+                if uid:
+                    device_info_qs = device_info_qs.filter(UID=uid).values('userID_id')
+                    user_id = device_info_qs[0]['userID_id']
+                    device_info_qs = UnicomDeviceInfo.objects.filter(user_id=user_id).values('iccid', 'user_id',
+                                                                                             'serial_no')
+                elif serialNo:
+                    device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serialNo).values('user_id', 'iccid',
+                                                                                                'serial_no')
+                if not device_info_qs.exists():
+                    return response.json(173)
+                n_time = int(time.time())
+                icc_id = device_info_qs[0]['iccid']
+                user_id = device_info_qs[0]['user_id']
+                serial_no = device_info_qs[0]['serial_no']
+                order_id = CommonService.createOrderID()
+                unicom_combo = UnicomComboView.create_combo_order_info(order_id=order_id, activate_type=1, iccid=icc_id,
+                                                                       combo_id=comboId)
+                if unicom_combo is False:
+                    return '订单生成失败'
+                # 获取套餐信息
+                combo_info_qs = UnicomCombo.objects.filter(combo_type=2, status=0, is_del=False) \
+                    .values('id', 'combo_name', 'price', 'virtual_price', 'remark').order_by('sort')
+                if not combo_info_qs.exists():
+                    return False
+                combo_info_vo = combo_info_qs[0]
+                c_time = n_time
+                # 根据序列号获取UID
+                uid = CommonService.query_uid_with_serial(serial_no)
+                rank_id, ai_rank_id = UnicomComboView.get_cloud_or_ai_combo()  # 生成订单必须添加该字段
+                order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
+                              'userID_id': user_id, 'desc': combo_info_vo['combo_name'], 'payType': 10,
+                              'payTime': c_time, 'price': combo_info_vo['price'], 'addTime': c_time,
+                              'updTime': c_time, 'status': 1,
+                              'unify_combo_id': str(combo_info_vo['id']), 'order_type': 2,
+                              'store_meal_name': combo_info_vo['combo_name']
+                              }
+                Order_Model.objects.create(**order_dict)
+                return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))