AgentCustomerController.py 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : AgentCustomerController.py
  4. @Time : 2024/3/7 16:56
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. from django.http import QueryDict
  10. from django.views import View
  11. from django.core.paginator import Paginator
  12. from datetime import datetime
  13. from AgentModel.models import AgentCustomerInfo, AgentCustomerCard, AgentCustomerPackage, AgentCloudServicePackage, \
  14. AgentDeviceOrder
  15. from Model.models import UnicomCombo, Store_Meal, Device_User
  16. from Object.ResponseObject import ResponseObject
  17. from Object.TokenObject import TokenObject
  18. class AgentCustomerView(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 delete(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation')
  30. delete = QueryDict(request.body)
  31. if not delete:
  32. delete = request.GET
  33. return self.validation(delete, request, operation)
  34. def put(self, request, *args, **kwargs):
  35. request.encoding = 'utf-8'
  36. operation = kwargs.get('operation')
  37. put = QueryDict(request.body)
  38. return self.validation(put, request, operation)
  39. def validation(self, request_dict, request, operation):
  40. AgentCustomerInfo.objects.filter()
  41. language = request_dict.get('language', 'en')
  42. response = ResponseObject(language, 'pc')
  43. if operation == 'getUnicomAndIcloud':
  44. return self.get_unicom_and_icloud(response)
  45. else:
  46. tko = TokenObject(
  47. request.META.get('HTTP_AUTHORIZATION'),
  48. returntpye='pc')
  49. if tko.code != 0:
  50. return response.json(tko.code)
  51. response.lang = tko.lang
  52. userID = tko.userID
  53. if operation == 'getAgentServicePackage':
  54. return self.get_agent_service_package(request_dict, response)
  55. elif operation == 'addAgentServicePackage':
  56. return self.add_agent_service_package(request_dict, response)
  57. else:
  58. return response.json(444, 'operation')
  59. def get_unicom_and_icloud(self, response):
  60. """
  61. 查询云存储套餐和物联网卡套餐列表
  62. @param response: 响应对象
  63. @return:
  64. """
  65. try:
  66. # 云存储套餐名称查询,只包括is_show=1的记录
  67. store_meal_names = Store_Meal.objects.filter(is_show=1).values_list('bucket__bucket', flat=True).distinct()
  68. # 联通套餐名称查询,只包括is_show=1且未被删除的记录
  69. unicom_combo_names = UnicomCombo.objects.filter(is_show=1, is_del=False).values_list('combo_name',
  70. flat=True).distinct()
  71. # 将查询结果转换为列表
  72. store_meal_name_list = list(store_meal_names)
  73. unicom_combo_name_list = list(unicom_combo_names)
  74. # 合并结果并返回
  75. return response.json(0, {
  76. 'storeMealNames': store_meal_name_list,
  77. 'unicomComboNames': unicom_combo_name_list,
  78. })
  79. except Exception as e:
  80. print(e)
  81. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  82. def get_agent_service_package(self, request_dict, response):
  83. """
  84. 查询所有代理云服务套餐
  85. @param request_dict: 请求参数
  86. @request_dict page: 页码
  87. @request_dict page_size: 查询分页数
  88. @param userID: userID
  89. @param response: 响应对象
  90. @return:
  91. """
  92. page = int(request_dict.get('page', 1))
  93. page_size = int(request_dict.get('page_size', 10))
  94. try:
  95. # 查询所有有效的代理云服务套餐
  96. all_packages = AgentCloudServicePackage.objects.filter(status=1).order_by('-created_time')
  97. # 创建分页对象
  98. paginator = Paginator(all_packages, page_size)
  99. # 获取请求页的数据
  100. packages_page = paginator.page(page)
  101. # 准备响应数据,转换查询集为列表形式
  102. packages_list = list(packages_page.object_list.values(
  103. 'id', 'service_name', 'package_id', 'type',
  104. 'profit_type', 'cost', 'profit', 'status',
  105. 'created_time', 'updated_time'
  106. ))
  107. # 返回分页数据
  108. return response.json(0, {
  109. 'page': page,
  110. 'page_size': page_size,
  111. 'total': paginator.count,
  112. 'num_pages': paginator.num_pages,
  113. 'packages': packages_list
  114. })
  115. except Exception as e:
  116. # 出错时返回错误信息
  117. return response.json({'error': str(e)}, status=500)
  118. def add_agent_service_package(self, request_dict, response):
  119. """
  120. 添加代理云服务套餐
  121. @param request_dict: 请求参数
  122. @request_dict service_name: 代理服务名称
  123. @request_dict package_type: 套餐类型 1:云存,2:4G
  124. @response_dict profit_type: 利润分配类型 1:固定值,2:百分比
  125. @response_dict cost: 成本
  126. @response_dict profit: 利润值
  127. @param userID: userID
  128. @param response: 响应对象
  129. @return:
  130. """
  131. service_name = request_dict.get('service_name')
  132. package_type = int(request_dict.get('package_type', 0)) # 默认为0,确保类型安全
  133. profit_type = int(request_dict.get('profit_type', 1)) # 默认值为1
  134. profit = request_dict.get('profit', 0)
  135. try:
  136. # 1:云存, 2:4G
  137. print(package_type)
  138. if package_type == 1:
  139. # 从Store_Meal查询
  140. package = Store_Meal.objects.filter(bucket__bucket=service_name, is_show=1).first()
  141. elif package_type == 2:
  142. # 从UnicomCombo查询
  143. package = UnicomCombo.objects.filter(combo_name=service_name, is_show=1, is_del=False).first()
  144. else:
  145. return response.json(444)
  146. if not package:
  147. return response.json(173)
  148. # 创建AgentCloudServicePackage实例并保存
  149. agent_service_package = AgentCloudServicePackage(
  150. service_name=service_name,
  151. package_id=package.id if package else None,
  152. type=package_type,
  153. profit_type=profit_type,
  154. cost=package.price,
  155. profit=profit,
  156. status=1
  157. )
  158. agent_service_package.save()
  159. return response.json(0)
  160. except Exception as e:
  161. return response.json({'error': str(e)}, status=500)