Explorar el Código

重组4G流量卡订单,优化订单功能按钮显示功能

guanhailong hace 2 años
padre
commit
0cff83e7eb

+ 23 - 9
AdminController/ServeManagementController.py

@@ -19,7 +19,7 @@ from Ansjer.config import PAYPAL_CRD
 from Controller.Cron.CronTaskController import CronUpdateDataView
 from Model.models import VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
     UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal, \
-    Device_Info, DeviceTypeModel
+    Device_Info, DeviceTypeModel, UnicomComboOrderInfo, AiService
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -710,14 +710,28 @@ class serveManagement(View):
                     'status': order['status'],
                     'order_type': order['order_type'],
                 }
-                #  添加设备套餐使用状态
-                uid_bucket = UID_Bucket.objects.filter(uid=order['UID']).values('use_status')
-                user_status = uid_bucket[0]['use_status'] if uid_bucket.exists() else ''
-                #  判断订单是否已过期
-                if user_status != '':
-                    data['user_status'] = user_status
-                else:
-                    data['user_status'] = 2
+                #  订单显示(或不显示)停用/退款功能
+                if order['order_type'] == 0: # 云存
+                    uid_bucket = UID_Bucket.objects.filter(uid=order['UID']).values('use_status')
+                    user_status = uid_bucket[0]['use_status'] if uid_bucket.exists() else ''
+                    if user_status != '':
+                        data['user_status'] = user_status
+                    else:
+                        data['user_status'] = 2
+                elif order['order_type'] == 1: # ai
+                    ai_service_qs = AiService.objects.filter(
+                        Q(orders_id=order['orderID']) & ~Q(use_status=2))
+                    if ai_service_qs.exists():
+                        data['user_status'] = 1
+                    else:
+                        data['user_status'] = 2
+                elif order['order_type'] == 2: # 联通4G
+                    unicom_combor_order_qs = UnicomComboOrderInfo.objects.filter(
+                        Q(order_id=order['orderID']) & ~Q(status=2))
+                    if unicom_combor_order_qs.exists():
+                        data['user_status'] = 1
+                    else:
+                        data['user_status'] = 2
                 #  添加PayPal交易号字段
                 data['trade_no'] = 'N/A'
                 if data['payType'] == 1:

+ 87 - 89
AdminController/UnicomManageController.py

@@ -6,14 +6,14 @@
 # @Software: PyCharm
 import time
 
-from django.db import transaction
+from django.db import transaction, connection
 from django.views.generic.base import View
 
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrderInfo, Device_User, Device_Info, \
     Order_Model
-from Object.UnicomObject import UnicomObjeect
 from Object.ResponseObject import ResponseObject
+from Object.UnicomObject import UnicomObjeect
 from Service.CommonService import CommonService
 
 
@@ -41,9 +41,6 @@ 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套餐
         elif operation == 'getComboDataList':
             return self.static_info(request_dict, response)
@@ -56,6 +53,11 @@ class UnicomManageControllerView(View):
         # 充值流量
         elif operation == 'getFlowPackages':
             return self.get_flow_packages(request_dict, response)
+        #  获取 / 筛选4G流量卡订单信息
+        elif operation == 'query-order':
+            return self.query_4G_user_order(request_dict, response)
+        else:
+            return response.json(0)
 
     def get_user_info(self, request_dict, response):
         """
@@ -128,93 +130,87 @@ class UnicomManageControllerView(View):
             return response.json(500, repr(e))
 
     @staticmethod
-    def get_order_info(request_dict, response):
+    def query_sql_4g():
         """
-        获取/筛选4G流量卡订单信息
-        @param request_dict:
-        @param response:
-        @return:
-        serial_no 设备序列号
+        4G关联查询SQL
+        @return: str
         """
-        UID = request_dict.get('uid', None)
-        serial_no = request_dict.get('serialNo', None)
-        status = request_dict.get('status', None)
-        pageNo = request_dict.get('pageNo', None)
-        pageSize = request_dict.get('pageSize', None)
-
-        if not all({pageNo, pageSize}):
-            return response.json(444)
-        page = int(pageNo)
-        line = int(pageSize)
+        sql = 'SELECT '
+        sql += 'du.username,du.phone,o.UID as uid,o.`status`,udi.serial_no as serialNo,o.orderID,o.`desc`, '
+        sql += 'o.price,uo.next_month_activate as nextActivate,uo.iccid,uo.`status` as useStatus, ' \
+               'uo.`flow_total_usage` as flowTotal, '
+        sql += 'uo.updated_time as upTime, uo.activation_time as acTime,uo.expire_time as epTime '
+        sql += 'FROM orders o '
+        sql += 'LEFT JOIN unicom_combo_order_info uo ON o.orderID = uo.order_id '
+        sql += 'INNER JOIN device_user du ON du.userID = o.userID_id '
+        sql += 'INNER JOIN unicom_device_info udi ON udi.iccid = uo.iccid '
+        return sql
 
+    @staticmethod
+    def query_4G_user_order(request_dict, response):
+        """
+        查询4G用户订单
+        """
         try:
-            combo_order_info_qs = UnicomComboOrderInfo.objects.all()
-            # 序列号查询
+            page = int(request_dict.get('pageNo', 1))
+            size = int(request_dict.get('pageSize', 10))
+            user_name = request_dict.get('userName', None)
+            uid = request_dict.get('uid', None)
+            serial_no = request_dict.get('serialNo', None)
+            combo_use_type = request_dict.get('comboUseType', None)
+            cursor = connection.cursor()
+            sql = UnicomManageControllerView.query_sql_4g()
+            sql += 'WHERE o.order_type = %s '
+            param_list = [2]
+            if user_name:
+                sql += "and du.username LIKE %s "
+                param_list.append(user_name)
+            if uid:
+                sql += "and o.UID LIKE %s "
+                param_list.append(uid)
             if serial_no:
-                unicom_device_qs = UnicomDeviceInfo.objects.filter(serial_no__icontains=serial_no).values('serial_no',
-                                                                                                          'user_id',
-                                                                                                          'iccid')
-                if not unicom_device_qs.exists():
-                    return response.json(0, [])
-                combo_order_info_qs = combo_order_info_qs.filter(iccid__icontains=unicom_device_qs[0]['iccid'])
-            # UID查询
-            if UID:
-                device_qs = Device_Info.objects.filter(UID=UID).values('serial_number').distinct()
-                if not device_qs.exists():
-                    return response.json(0, [])
-                unicom_device_qs = UnicomDeviceInfo.objects.filter(
-                    serial_no__icontains=device_qs[0]['serial_number']).values('serial_no', 'user_id', 'iccid')
-                if not unicom_device_qs.exists():
-                    return response.json(0, [])
-                combo_order_info_qs = combo_order_info_qs.filter(iccid__icontains=unicom_device_qs[0]['iccid'])
-            # 状态查询
-            if status:
-                status = int(status)
-                combo_order_info_qs = combo_order_info_qs.filter(status=status)
-            if not combo_order_info_qs.exists():
-                return response.json(0, [])
-            total = combo_order_info_qs.count()
-            combo_order_info_qs = combo_order_info_qs.order_by('-created_time')[(page - 1) * line:page * line]
-            data_list = []
-            for combo_order in combo_order_info_qs:
-                data = {'userName': '',
-                        'UID': '',
-                        'iccid': combo_order.iccid,
-                        'status': combo_order.status,
-                        'order_id': combo_order.order_id,
-                        'flow_total_usage': combo_order.flow_total_usage,
-                        'next_month_activate': combo_order.next_month_activate,
-                        'activationTime': combo_order.activation_time,
-                        'expireTime': combo_order.expire_time,
-                        'createdTime': combo_order.created_time,
-                        'updated_time': combo_order.updated_time}
-                unicom_combo_qs = UnicomCombo.objects.filter(id=combo_order.combo_id).values('combo_name', 'price')
-                data['price'] = unicom_combo_qs[0]['price'] if unicom_combo_qs.exists() else ''
-                data['comboName'] = unicom_combo_qs[0]['combo_name'] if unicom_combo_qs.exists() else ''
-                unicom_device_qs = UnicomDeviceInfo.objects.filter(iccid__icontains=combo_order.iccid).values('user_id',
-                                                                                                              'serial_no')
-                userID = unicom_device_qs[0]['user_id'] if unicom_device_qs.exists() else ''
-                data['serialNo'] = unicom_device_qs[0]['serial_no'] if unicom_device_qs.exists() else ''
-                serial_no = data['serialNo']
-                device_info_qs = Device_Info.objects.filter(userID__userID=userID, serial_number=serial_no).values(
-                    'userID__username', 'UID')
-                if device_info_qs.exists():
-                    nick_name = device_info_qs[0]['userID__username']
-                    data['userName'] = nick_name
-                if data['serialNo'] != '':
-                    data['UID'] = CommonService.query_serial_with_uid(data['serialNo'])
-                if combo_order.status == 1:
-                    total_flow = UnicomObjeect.current_sim_traffic_usage_details(combo_order.iccid)  # 4G总值
-                    flow_total_usage = combo_order.flow_total_usage  # 激活时当月已用流量
+                sql += "and udi.serial_no LIKE %s "
+                param_list.append(serial_no)
+            if combo_use_type:
+                sql += 'and uo.status = %s '
+                param_list.append(int(combo_use_type))
+            cursor.execute(sql, param_list)
+            total = len(cursor.fetchall())
+            param_list.append((page - 1) * size)
+            param_list.append(size, )
+            sql += 'order by o.addTime DESC LIMIT %s,%s '
+            cursor.execute(sql, param_list)
+            data_obj = cursor.fetchall()
+            cursor.close()  # 执行完,关闭
+            connection.close()
+            result_list = []
+            col_names = [desc[0] for desc in cursor.description]
+            for item in data_obj:
+                order_dict = dict(zip(col_names, item))
+                if order_dict['status'] == 1:
+                    total_flow = UnicomObjeect.current_sim_traffic_usage_details(order_dict['iccid'])  # 4G总值
+                    flow_total_usage = order_dict['flowTotal']  # 激活时当月已用流量
                     flow_total_usage = float(flow_total_usage)
-                    data['using_total'] = total_flow - flow_total_usage
+                    order_dict['using_total'] = total_flow - flow_total_usage
                 else:
-                    data['using_total'] = 0
-                data_list.append(data)
-            return response.json(0, {'list': data_list, 'total': total})
+                    order_dict['using_total'] = 0
+                result_list.append(order_dict)
+            return response.json(0, {'orderList': result_list, 'total': total})
         except Exception as e:
-            print(e)
-            return response.json(500, repr(e))
+            meg = '异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e))
+            return response.json(500, meg)
+
+    @staticmethod
+    def check_sim_user(iccid):
+        """
+        检查SIM卡用户
+        @param iccid:物联卡
+        @return:
+        """
+        u_device_qs = UnicomDeviceInfo.objects.filter(iccid=iccid).values('user_id')
+        if not u_device_qs.exists() or not u_device_qs[0]['user_id']:
+            return False
+        return True
 
     @classmethod
     def edit_combo(cls, request_dict, response):
@@ -454,10 +450,10 @@ class UnicomManageControllerView(View):
         @param response: 响应对象
         @param return:
         """
-        userId = request_dict.get('userId', None)
+        userName = request_dict.get('userName', None)
         serialNo = request_dict.get('serialNo', None)
         comboId = request_dict.get('comboId', None)
-        if not all([userId, serialNo, comboId]):
+        if not all([userName, serialNo, comboId]):
             return response.json(444)
         try:
             while transaction.atomic():
@@ -465,8 +461,10 @@ class UnicomManageControllerView(View):
                     .values('id', 'combo_name', 'price', 'virtual_price', 'remark', 'combo_type').order_by('sort')
                 if not combo_info_qs.exists():
                     return response.json(173)
-
-                unicom_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serialNo, user_id=userId).values \
+                device_user_qs = Device_User.objects.filter(username=userName).values('userID')
+                userID = device_user_qs[0]['userID'] if device_user_qs.exists() else ''
+                unicom_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serialNo,
+                                                                        user_id=userID).values \
                     ('user_id', 'iccid', 'serial_no')
                 if not unicom_device_info_qs.exists():
                     return response.json(173)
@@ -485,7 +483,7 @@ class UnicomManageControllerView(View):
                 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': userId, 'desc': combo_info_vo['combo_name'], 'payType': 10,
+                              'userID_id': userID, '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,