Browse Source

查询结算明细

linhaohong 1 year ago
parent
commit
0aa77a07e1
1 changed files with 87 additions and 0 deletions
  1. 87 0
      AdminController/CloudServiceManage/AgentCustomerController.py

+ 87 - 0
AdminController/CloudServiceManage/AgentCustomerController.py

@@ -86,6 +86,8 @@ class AgentCustomerView(View):
                 return self.batch_rebind_customer_packages(userID, request_dict, response)
             elif operation == 'getAgentServicePackageList':
                 return self.get_agent_service_package_list(response)
+            elif operation == 'getAgentSettleOrders':
+                return self.get_agent_settle_order(userID, request_dict, response)
             elif operation == 'getDataStatistics':
                 return self.get_data_statistics(userID, response)
             else:
@@ -444,6 +446,91 @@ class AgentCustomerView(View):
             # 出错时返回错误信息
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
+    def get_agent_settle_order(self, userID, request_dict, response):
+        """
+        查询结算明细
+        @param userID: userID
+        @param request_dict: 请求参数
+        @param request_dict status: 结算状态
+        @param request_dict time: 年-季度 2023-1
+        @param response: 响应对象
+        @return:
+        """
+        agent_customer_info = AgentCustomerInfo.objects.filter(user_id=userID).first()
+        if not agent_customer_info:
+            return response.json(104, 'Agent customer not found')
+
+        ac_id = agent_customer_info.id
+
+        status = request_dict.get('status', None)
+        time_str = request_dict.get('time', None)
+        startTime = int(request_dict.get('start_time', 1))
+        endTime = int(request_dict.get('end_time', 0))
+
+
+        page = int(request_dict.get('page', 1))  # 默认为第一页
+        page_size = int(request_dict.get('page_size', 10))  # 默认每页10条记录
+        try:
+            agent_device_orders_qs = AgentDeviceOrder.objects.filter(ac_id=ac_id, is_del=0)
+
+            if time_str:
+                year, quarter = map(int, time_str.split('-'))
+                start_month = 3 * (quarter - 1) + 1
+                end_month = start_month + 2
+
+                start_date = datetime(year, start_month, 1)
+                end_date = datetime(year + 1, 1, 1) if end_month == 12 else datetime(year, end_month + 1, 1)
+
+                start_time = int(start_date.timestamp())
+                end_time = int(end_date.timestamp()) - 1
+                agent_device_orders_qs = agent_device_orders_qs.filter(created_time__gte=start_time,
+                                                                       created_time__lte=end_time)
+            if status:
+                agent_device_orders_qs = agent_device_orders_qs.filter(status=status)
+
+            if startTime < endTime:
+                agent_device_orders_qs = agent_device_orders_qs.filter(created_time__gte=startTime,
+                                                                       created_time__lte=endTime)
+
+            # 计算利润总额和订单总数
+            total_profit = agent_device_orders_qs.aggregate(Sum('profit'))['profit__sum'] or 0
+
+            # 应用分页
+            agent_device_orders_qs = agent_device_orders_qs.order_by('-created_time')
+            paginator = Paginator(agent_device_orders_qs, page_size)
+            current_page = paginator.get_page(page)
+
+            orders = []
+            for order in current_page:
+                csp = AgentCloudServicePackage.objects.filter(id=order.csp_id).first()
+                service_name = csp.service_name if csp else order.csp_id
+
+                orders.append({
+                    'id': order.id,
+                    'serial_number': order.serial_number,
+                    'status': order.status,
+                    'service_name': service_name,
+                    'profit_amount': order.profit_amount,
+                    'profit': order.profit,
+                    'settlement_time': order.settlement_time,
+                    'remark': order.remark,
+                    'created_time':order.created_time
+                })
+
+            response_data = {
+                'list': orders,
+                'total_profit': total_profit,
+                'total': paginator.count,
+                'page': current_page.number,
+                'page_size': page_size,
+                'num_pages': paginator.num_pages,
+            }
+
+            return response.json(0, response_data)
+
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
     def get_data_statistics(self, userID, response):
         """
         首页总览