浏览代码

优化PC删除用户设备接口&后台4G新增套餐转移接口

zhangdongming 1 年之前
父节点
当前提交
5e352d91f9
共有 2 个文件被更改,包括 98 次插入7 次删除
  1. 83 3
      AdminController/UnicomManageController.py
  2. 15 4
      Controller/EquipmentManagerV3.py

+ 83 - 3
AdminController/UnicomManageController.py

@@ -105,10 +105,12 @@ class UnicomManageControllerView(View):
                 return self.iccid_batch_reset(tko.user, request, request_dict, response)
             elif operation == 'orderFlowPackage':  # 订购流量套餐包
                 return self.order_flow_package(request_dict, response, userID)
-            elif operation == 'getSerialNumberPackagePage':  # 订购流量套餐包
+            elif operation == 'getSerialNumberPackagePage':  # 分页获取序列号绑定套餐
                 return self.serial_number_package_page(request_dict, response)
-            elif operation == 'serialNumberPackageUpdate':  # 订购流量套餐包
+            elif operation == 'serialNumberPackageUpdate':  # 序列号绑定套餐修改
                 return self.serial_number_package_update(request_dict, response, tko.user)
+            elif operation == 'transferDevicePackage':  # 转移设备套餐
+                return self.transfer_device_package(request_dict, response, tko.user)
             else:
                 return response.json(404)
 
@@ -1156,15 +1158,18 @@ class UnicomManageControllerView(View):
                                                        createdTime=F('created_time'), createdBy=F('created_by'),
                                                        updatedTime=F('updated_time'), updatedBy=F('updated_by')) \
             .values('id', 'serialNumber', 'status', 'packageId', 'createdTime', 'createdBy', 'updatedTime', 'updatedBy')
+        total = serial_package_qs.count()
+
         serial_package_qs = serial_package_qs.order_by('-created_time')[(page - 1) * line:page * line]
         if not serial_package_qs.exists():
             return response.json(0, [])
         serial_list = []
+
         for item in serial_package_qs:
             data = item
             data['packageName'] = UnicomCombo.objects.filter(id=item['packageId']).values('combo_name')[0]['combo_name']
             serial_list.append(data)
-        return response.json(0, serial_list)
+        return response.json(0, {'list': serial_list, 'total': total})
 
     @classmethod
     def serial_number_package_update(cls, request_dict, response, user):
@@ -1194,3 +1199,78 @@ class UnicomManageControllerView(View):
             LOGGER.info('UnicomManageControllerView.serial_number_package_update,'
                         'errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500)
+
+    @classmethod
+    def transfer_device_package(cls, request_dict, response, user):
+        """
+        联通4G订单套餐转移
+        @param request_dict: orderId(当前订单套餐id)、targetSerialNumber(目标设备序列号)
+        @param response: 响应结果
+        @param user: 操作用户
+        @return: 转移结果
+        """
+        try:
+            order_id = request_dict.get('orderId')
+            target_serial_number = request_dict.get('targetSerialNumber')
+            LOGGER.info('UnicomManageControllerView.transfer_device_package,serialNumber:{},orderId:{}'.format(
+                target_serial_number, order_id))
+
+            if not all([order_id, target_serial_number]):
+                return response.json(444)
+
+            # 查询旧设备订单套餐信息
+            order_query_set = Order_Model.objects.filter(orderID=order_id)
+            if not order_query_set.exists():
+                return response.json(173)
+
+            # 查询目标设备信息是否存在
+            u_device_query_set = UnicomDeviceInfo.objects.filter(serial_no=target_serial_number)
+            if not u_device_query_set.exists():
+                return response.json(173)
+
+            order_data = order_query_set.values().first()
+            old_order_id = order_data['orderID']
+            desc = '{} 转移后,前orderId:{}'.format(order_data['store_meal_name'], old_order_id)
+            order_data['desc'] = desc
+            now_order = CommonService.createOrderID()
+            uid = CommonService.query_uid_with_serial(target_serial_number)
+            order_data['orderID'] = now_order
+            order_data['UID'] = uid
+            order_data['currency'] = 'CNY'
+            package_id = int(order_data['unify_combo_id'])
+            Order_Model.objects.create(**order_data)
+
+            iccid = u_device_query_set.values('iccid').first()['iccid']  # 目标设备4G iccid
+
+            u_package_query_set = UnicomComboOrderInfo.objects.filter(order_id=old_order_id)
+            now_time = int(time.time())
+            unicom_api = UnicomObjeect()
+
+            if u_package_query_set.exists():  # 套餐记录存在则直接copy
+                package_info = u_package_query_set.values().first()
+                package_info.pop('id')
+                package_info['iccid'] = iccid
+                package_info['order_id'] = now_order
+                package_info['activation_time'] = now_time
+                package_info['updated_time'] = now_time
+                package_info['created_time'] = now_time
+
+                now_package_query_set = UnicomComboOrderInfo.objects.filter(iccid=iccid, status=1)
+                if now_package_query_set.exists():
+                    package_info['status'] = 0
+                    package_info['flow_total_usage'] = '0'
+                else:
+                    package_info['status'] = 1
+                    package_info['flow_total_usage'] = unicom_api.get_flow_usage_total(iccid)
+                UnicomComboOrderInfo.objects.create(**package_info)
+            else:
+                UnicomComboView.create_combo_order_info(now_order, 0, iccid, package_id)
+
+            describe = f'{order_id}套餐转移成功,操作人{user}'
+            cls.create_operation_log('unicom/manage/transferDevicePackage', '127.0.0.1', request_dict, describe)
+            return response.json(0)
+        except Exception as e:
+            LOGGER.info('UnicomManageControllerView.transfer_device_package, errLine:{}, errMsg:{}'.format(
+                e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500)
+

+ 15 - 4
Controller/EquipmentManagerV3.py

@@ -1100,10 +1100,11 @@ class EquipmentManagerV3(View):
 
             with transaction.atomic():
                 Device_Info.objects.filter(UID=uid).delete()
-                # 删除推送消息
-                for val in range(1, 8):
-                    EquipmentInfoService.get_equipment_info_model('', val).filter(device_uid=uid).delete()
-            return response.json(0)
+                UidPushModel.objects.filter(uid_set__uid=uid).delete()
+                LOGGER.info(f'PC删除设备&删除APP推送token{uid}成功')
+                asy = threading.Thread(target=EquipmentManagerV3.async_del_message, args=(uid,))
+                asy.start()
+            return response.json(0, {'msg': 'Delete the device and delete the push token successfully'})
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
@@ -1125,3 +1126,13 @@ class EquipmentManagerV3(View):
 
         else:
             return response.json(444)
+
+    @classmethod
+    def async_del_message(cls, uid):
+        try:
+            # 异步删除推送消息
+            for val in range(1, 8):
+                EquipmentInfoService.get_equipment_info_model('', val).filter(device_uid=uid).delete()
+        except Exception as e:
+            LOGGER.info('EquipmentManagerV3.async_del_message,{},error_line:{}, error_msg:{}'
+                        .format(uid, e.__traceback__.tb_lineno, repr(e)))