OperatingCostsDataController.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDataController.py
  4. @Time : 2024年6月7日09:27:28
  5. @Author : peng
  6. @Email : peng
  7. @Software: PyCharm
  8. """
  9. from django.db.models import Q, Sum
  10. from django.views.generic.base import View
  11. import datetime
  12. import requests
  13. from Model.models import OperatingCosts, Order_Model, CountryModel, UID_Bucket
  14. from Service.CommonService import CommonService
  15. from Ansjer.config import CONFIG_EUR, CONFIG_INFO, CONFIG_CN, CONFIG_US
  16. from dateutil.relativedelta import relativedelta
  17. # 运营成本数据
  18. class OperatingCostsDataView(View):
  19. def get(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.GET, request, operation)
  23. def post(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.POST, request, operation)
  27. def validation(self, request_dict, request, operation):
  28. token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
  29. if token_code != 0:
  30. return response.json(token_code)
  31. if operation == 'getOperatingCosts': # 查询订单成本利润
  32. return self.get_operating_costs(request, request_dict, response)
  33. else:
  34. return response.json(414)
  35. @classmethod
  36. def get_operating_costs(cls, request, request_dict, response):
  37. """
  38. 查询订单成本利润
  39. @param request:请求参数
  40. @param request_dict:请求参数
  41. @request_dict startTime:开始时间
  42. @request_dict endTime:结束时间
  43. @param response:响应对象
  44. @return:
  45. """
  46. start_time = request_dict.get('startTime', None)
  47. end_time = request_dict.get('endTime', None)
  48. page = request_dict.get('page', 1)
  49. line = request_dict.get('line', 10)
  50. if not all([page, line]):
  51. return response.json(444, {'error param': 'page or line'})
  52. page = int(page)
  53. line = int(line)
  54. try:
  55. if start_time and end_time:
  56. operating_costs_qs = OperatingCosts.objects.filter(time__gte=start_time, time__lt=end_time)
  57. else:
  58. operating_costs_qs = OperatingCosts.objects.all()
  59. count = operating_costs_qs.count()
  60. operating_qs = operating_costs_qs.values('order_id', 'uid', 'day_average_price', 'month_average_price',
  61. 'purchase_quantity', 'actual_storage', 'actual_api',
  62. 'monthly_income', 'settlement_days', 'remaining_usage_time',
  63. 'end_time', 'created_time', 'start_time', 'time', 'storage_cost',
  64. 'api_cost', 'profit', 'profit_margin', 'fee', 'flow_cost',
  65. 'real_income', 'price', 'region', 'country_name', 'actual_flow',
  66. 'order_type', 'expire')[(page - 1) * line:page * line]
  67. return response.json(0, {'count': count, 'res': list(operating_qs)})
  68. except Exception as e:
  69. print('error')
  70. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))