Forráskód Böngészése

异步每日统计4G订单流量用量

zhangdongming 1 éve
szülő
commit
30fca4ced6
1 módosított fájl, 67 hozzáadás és 1 törlés
  1. 67 1
      Controller/UnicomCombo/UnicomComboTaskController.py

+ 67 - 1
Controller/UnicomCombo/UnicomComboTaskController.py

@@ -19,11 +19,12 @@ from django.db.models import Q
 from django.views import View
 from django.views import View
 
 
 from Model.models import UnicomComboOrderInfo, UnicomCombo, Order_Model, UnicomDeviceInfo, UnicomFlowPush, \
 from Model.models import UnicomComboOrderInfo, UnicomCombo, Order_Model, UnicomDeviceInfo, UnicomFlowPush, \
-    IotCardUsageHistory, AccessNumberTaskQueue
+    IotCardUsageHistory, AccessNumberTaskQueue, IotCardOrderUsageHistory
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TelecomObject import TelecomObject
 from Object.TelecomObject import TelecomObject
 from Object.UnicomObject import UnicomObjeect
 from Object.UnicomObject import UnicomObjeect
+from Object.utils import LocalDateTimeUtil
 from Service.TelecomService import TelecomService
 from Service.TelecomService import TelecomService
 
 
 logger = logging.getLogger('info')
 logger = logging.getLogger('info')
@@ -69,6 +70,8 @@ class UnicomComboTaskView(View):
             return self.update_device_cycle_flow(response)
             return self.update_device_cycle_flow(response)
         elif operation == 'executeAccessTask':
         elif operation == 'executeAccessTask':
             return self.get_access_number_change_task(response)
             return self.get_access_number_change_task(response)
+        elif operation == 'queryTotalTrafficToday':
+            return self.query_total_traffic_today(response)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -613,3 +616,66 @@ class UnicomComboTaskView(View):
                     continue
                     continue
         except Exception as e:
         except Exception as e:
             logger.info('异步变更卡网络状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             logger.info('异步变更卡网络状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def query_total_traffic_today(response):
+        """
+        4G订单查询今日总流量消耗
+        @return:
+        """
+        asy = threading.Thread(target=UnicomComboTaskView.async_save_today_use_float)
+        asy.start()
+        logger.info('查询4G订单总消耗流量记录')
+        return response.json(0)
+
+    @staticmethod
+    def async_save_today_use_float():
+        # 查询正在使用套餐并且大于等于2024年激活 不等于免费测试流量的订单数据
+        today = datetime.datetime.today()
+        yesterday = today - datetime.timedelta(days=1)
+        yesterday = yesterday.strftime('%Y%m%d')
+
+        start_time, end_time = LocalDateTimeUtil.get_start_and_end_time(today.strftime('%Y-%m-%d'), '%Y-%m-%d')
+        o_combo_qs = UnicomComboOrderInfo.objects \
+            .filter(status=1, year__gte=2024, created_time__gte=1714492800, created_time__lt=start_time) \
+            .exclude(combo__combo_type=4) \
+            .values('order_id', 'iccid', 'flow_total_usage')
+        try:
+            unicom_api = UnicomObjeect()
+            if not o_combo_qs.exists():
+                return
+
+            n_time = int(time.time())
+            day = yesterday[-2:]
+            iccid_list = []
+            for item in o_combo_qs:
+                iccid = item['iccid']
+                try:
+                    flow = float(unicom_api.get_flow_usage_total(iccid))
+                    if flow == 0:
+                        continue
+                    old_flow = float(item['flow_total_usage'])
+                    if flow == old_flow:
+                        continue
+                    total_usage = Decimal(flow - old_flow).quantize(Decimal('0.00'))
+                    iccid_list.append(IotCardOrderUsageHistory(
+                        iccid=iccid,
+                        order_id=item['order_id'],
+                        card_type=1,
+                        cycle=int(yesterday),  # 将日期转换为整数形式,如202201
+                        cycle_date=int(day),
+                        total_traffic=total_usage,
+                        created_time=n_time,
+                        updated_time=n_time
+                    ))
+                    if len(iccid_list) >= 300:
+                        IotCardOrderUsageHistory.objects.bulk_create(iccid_list)
+                        iccid_list = []
+                except Exception as e:
+                    logger.error(
+                        '查询日用量异常iccid{},errLine:{}, errMsg:{}'.format(iccid, e.__traceback__.tb_lineno, repr(e)))
+
+            if iccid_list:
+                IotCardOrderUsageHistory.objects.bulk_create(iccid_list)
+        except Exception as e:
+            logger.error('统计4G卡日用量异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))