AiServeController.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from django.views.generic.base import View
  4. from Model.models import Lang, AiStoreMeal, AiService, Order_Model
  5. from Object.ResponseObject import ResponseObject
  6. from Object.TokenObject import TokenObject
  7. from Service.CommonService import CommonService
  8. class AiServeView(View):
  9. def get(self, request, *args, **kwargs):
  10. request.encoding = 'utf-8'
  11. operation = kwargs.get('operation')
  12. return self.validation(request.GET, request, operation)
  13. def post(self, request, *args, **kwargs):
  14. request.encoding = 'utf-8'
  15. operation = kwargs.get('operation')
  16. return self.validation(request.POST, request, operation)
  17. def validation(self, request_dict, request, operation):
  18. language = request_dict.get('language', 'en')
  19. response = ResponseObject(language, 'pc')
  20. if operation == 'xxx': # 不认证token接口
  21. pass
  22. else:
  23. tko = TokenObject(
  24. request.META.get('HTTP_AUTHORIZATION'),
  25. returntpye='pc')
  26. if tko.code != 0:
  27. return response.json(tko.code)
  28. response.lang = tko.lang
  29. userID = tko.userID
  30. # ai套餐信息相关
  31. if operation == 'getAiStoreMealList':
  32. return self.getAiStoreMealList(request_dict, response)
  33. elif operation == 'addOrEditAiStoreMeal':
  34. return self.addOrEditAiStoreMeal(request_dict, response)
  35. elif operation == 'deleteAiStoreMeal':
  36. return self.deleteAiStoreMeal(request_dict, response)
  37. # ai套餐语言相关
  38. elif operation == 'getAiMealLanguage':
  39. return self.getAiMealLanguage(request_dict, response)
  40. elif operation == 'addOrEditAiMealLanguage':
  41. return self.addOrEditAiMealLanguage(request_dict, response)
  42. elif operation == 'deleteAiMealLanguage':
  43. return self.deleteAiMealLanguage(request_dict, response)
  44. # 设备ai套餐相关
  45. elif operation == 'getDeviceAiMealList':
  46. return self.getDeviceAiMealList(request_dict, response)
  47. # ai用户信息相关
  48. elif operation == 'getAiUserList':
  49. return self.getAiUserList(request_dict, response)
  50. else:
  51. return response.json(404)
  52. def getAiStoreMealList(self, request_dict, response):
  53. # 获取ai套餐信息数据
  54. print('request_dict: ', request_dict)
  55. isSelect = request_dict.get('isSelect', None)
  56. if isSelect:
  57. # 获取套餐ID作为选项
  58. ai_meal_qs = AiStoreMeal.objects.filter(
  59. lang__lang='cn').values(
  60. 'id', 'lang__title')
  61. return response.json(
  62. 0, {'list': CommonService.qs_to_list(ai_meal_qs)})
  63. pageNo = request_dict.get('pageNo', None)
  64. pageSize = request_dict.get('pageSize', None)
  65. if not all([pageNo, pageSize]):
  66. return response.json(444)
  67. page = int(pageNo)
  68. line = int(pageSize)
  69. try:
  70. ai_meal_qs = AiStoreMeal.objects.filter()
  71. ai_meal_val = ai_meal_qs.values(
  72. 'id',
  73. 'price',
  74. 'virtual_price',
  75. 'symbol',
  76. 'currency',
  77. 'currency',
  78. 'is_show',
  79. 'is_discounts',
  80. 'discount_price',
  81. 'effective_day',
  82. 'add_time',
  83. 'update_time')
  84. total = len(ai_meal_val)
  85. ai_meals = ai_meal_val[(page - 1) * line:page * line]
  86. ai_meal_list = []
  87. for ai_meal in ai_meals:
  88. # 获取支付方式列表
  89. pay_type_list = [
  90. pay_type['id'] for pay_type in AiStoreMeal.objects.get(
  91. id=ai_meal['id']).pay_type.values('id')]
  92. # 组织响应数据
  93. ai_meal_list.append({
  94. 'aiMealID': ai_meal['id'],
  95. 'price': ai_meal['price'],
  96. 'virtual_price': ai_meal['virtual_price'],
  97. 'symbol': ai_meal['symbol'],
  98. 'currency': ai_meal['currency'],
  99. 'is_show': ai_meal['is_show'],
  100. 'is_discounts': ai_meal['is_discounts'],
  101. 'discount_price': ai_meal['discount_price'],
  102. 'effective_day': ai_meal['effective_day'],
  103. 'pay_type': pay_type_list,
  104. 'addTime': ai_meal['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
  105. 'updTime': ai_meal['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
  106. })
  107. print('store_meal_list: ', ai_meal_list)
  108. return response.json(
  109. 0, {'list': ai_meal_list, 'total': total})
  110. except Exception as e:
  111. print(e)
  112. return response.json(500, repr(e))
  113. def addOrEditAiStoreMeal(self, request_dict, response):
  114. # 添加/编辑套餐
  115. print('request_dict: ', request_dict)
  116. aiMealID = request_dict.get('aiMealID', None)
  117. effective_day = int(request_dict.get('effective_day', 0))
  118. price = request_dict.get('price', '')
  119. virtual_price = request_dict.get('virtual_price', '')
  120. currency = request_dict.get('currency', '')
  121. symbol = request_dict.get('symbol', '')
  122. pay_type = request_dict.get(
  123. 'pay_type', '')[
  124. 1:-1].split(',') # '[1,2]' -> ['1','2']
  125. is_discounts = int(request_dict.get('is_discounts', 0))
  126. discount_price = request_dict.get('discount_price', '')
  127. is_show = int(request_dict.get('is_show', 1))
  128. isEdit = request_dict.get('isEdit', None)
  129. if not all([effective_day, price, currency, symbol, pay_type]):
  130. return response.json(444)
  131. try:
  132. ai_store_meal_data = {
  133. 'effective_day': effective_day,
  134. 'price': price,
  135. 'virtual_price': virtual_price,
  136. 'currency': currency,
  137. 'symbol': symbol,
  138. 'is_discounts': is_discounts,
  139. 'discount_price': discount_price,
  140. 'is_show': is_show,
  141. }
  142. if isEdit:
  143. if not aiMealID:
  144. return response.json(444)
  145. AiStoreMeal.objects.filter(
  146. id=aiMealID).update(
  147. **ai_store_meal_data)
  148. AiStoreMeal.objects.get(id=aiMealID).pay_type.set(pay_type)
  149. else:
  150. AiStoreMeal.objects.create(
  151. **ai_store_meal_data).pay_type.set(pay_type)
  152. return response.json(0)
  153. except Exception as e:
  154. print(e)
  155. return response.json(500, repr(e))
  156. def deleteAiStoreMeal(self, request_dict, response):
  157. # 删除ai套餐
  158. print('request_dict: ', request_dict)
  159. aiMealID = request_dict.get('aiMealID', None)
  160. if not aiMealID:
  161. return response.json(444)
  162. try:
  163. AiStoreMeal.objects.filter(id=aiMealID).delete()
  164. return response.json(0)
  165. except Exception as e:
  166. print(e)
  167. return response.json(500, repr(e))
  168. def getAiMealLanguage(self, request_dict, response):
  169. # 获取ai套餐语言
  170. print('request_dict: ', request_dict)
  171. aiMealID = request_dict.get('aiMealID', None)
  172. pageNo = request_dict.get('pageNo', None)
  173. pageSize = request_dict.get('pageSize', None)
  174. if not all([pageNo, pageSize]):
  175. return response.json(444)
  176. page = int(pageNo)
  177. line = int(pageSize)
  178. try:
  179. if aiMealID: # 条件查询
  180. store_meal_lang_qs = AiStoreMeal.objects.filter(id=aiMealID)
  181. else: # 查询全部
  182. store_meal_lang_qs = AiStoreMeal.objects.filter(
  183. lang__isnull=False)
  184. ai_meal_lang_val = store_meal_lang_qs.values(
  185. 'id',
  186. 'lang__id',
  187. 'lang__lang',
  188. 'lang__title',
  189. 'lang__content',
  190. 'lang__discount_content',
  191. )
  192. total = len(ai_meal_lang_val)
  193. ai_meal_langs = ai_meal_lang_val[(
  194. page - 1) * line:page * line]
  195. ai_meal_lang_list = []
  196. for ai_meal_lang in ai_meal_langs:
  197. ai_meal_lang_list.append({
  198. 'aiMealID': ai_meal_lang['id'],
  199. 'langID': ai_meal_lang['lang__id'],
  200. 'lang': ai_meal_lang['lang__lang'],
  201. 'title': ai_meal_lang['lang__title'],
  202. 'content': ai_meal_lang['lang__content'],
  203. 'discountContent': ai_meal_lang['lang__discount_content'],
  204. })
  205. print('ai_meal_lang_list: ', ai_meal_lang_list)
  206. return response.json(
  207. 0, {'list': ai_meal_lang_list, 'total': total})
  208. except Exception as e:
  209. print(e)
  210. return response.json(500, repr(e))
  211. def addOrEditAiMealLanguage(self, request_dict, response):
  212. # 添加/编辑套餐语言
  213. print('request_dict: ', request_dict)
  214. aiMealID = request_dict.get('aiMealID', None)
  215. lang = request_dict.get('lang', None)
  216. title = request_dict.get('title', None)
  217. content = request_dict.get('content', None)
  218. discount_content = request_dict.get('discountContent', '')
  219. isEdit = request_dict.get('isEdit', None)
  220. if not all([aiMealID, lang, title, content]):
  221. return response.json(444)
  222. try:
  223. # 查询套餐是否存在
  224. ai_meal_qs = AiStoreMeal.objects.get(id=aiMealID)
  225. if not ai_meal_qs:
  226. return response.json(173)
  227. if isEdit: # 编辑
  228. langID = request_dict.get('langID', None)
  229. if not langID:
  230. return response.json(444)
  231. Lang.objects.filter(
  232. id=langID).update(
  233. lang=lang,
  234. title=title,
  235. content=content,
  236. discount_content=discount_content)
  237. else: # 添加
  238. lang_obj = Lang.objects.filter(
  239. lang=lang,
  240. title=title,
  241. content=content,
  242. discount_content=discount_content)
  243. if not lang_obj.exists():
  244. # 数据不存在,lang表创建数据
  245. Lang.objects.create(
  246. lang=lang,
  247. title=title,
  248. content=content,
  249. discount_content=discount_content)
  250. lang_obj = Lang.objects.filter(
  251. lang=lang,
  252. title=title,
  253. content=content,
  254. discount_content=discount_content)
  255. ai_meal_qs.lang.add(*lang_obj) # store_meal表添加语言数据
  256. return response.json(0)
  257. except Exception as e:
  258. print(e)
  259. return response.json(500, repr(e))
  260. def deleteAiMealLanguage(self, request_dict, response):
  261. # 删除套餐语言
  262. aiMealID = request_dict.get('aiMealID', None)
  263. langID = request_dict.get('langID', None)
  264. if not all([aiMealID, langID]):
  265. return response.json(444)
  266. try:
  267. ai_meal_qs = AiStoreMeal.objects.get(id=aiMealID)
  268. if not ai_meal_qs:
  269. return response.json(173)
  270. lang_qs = Lang.objects.filter(id=langID)
  271. ai_meal_qs.lang.remove(*lang_qs)
  272. return response.json(0)
  273. except Exception as e:
  274. print(e)
  275. return response.json(500, repr(e))
  276. def getDeviceAiMealList(self, request_dict, response):
  277. pageNo = request_dict.get('pageNo', None)
  278. pageSize = request_dict.get('pageSize', None)
  279. uid = request_dict.get('uid', None)
  280. if not all([pageNo, pageSize]):
  281. return response.json(444)
  282. page = int(pageNo)
  283. line = int(pageSize)
  284. try:
  285. ai_service_qs = AiService.objects.all()
  286. if uid:
  287. ai_service_qs = ai_service_qs.filter(uid__contains=uid)
  288. if not ai_service_qs.exists():
  289. return response.json(0, [])
  290. count = ai_service_qs.count()
  291. ai_service_qs = ai_service_qs.values(
  292. 'id',
  293. 'uid',
  294. 'channel',
  295. 'use_status',
  296. 'detect_status',
  297. 'detect_group',
  298. 'endTime',
  299. 'addTime',
  300. 'updTime',)
  301. ai_service_qs = ai_service_qs[(page - 1) * line:page * line]
  302. return response.json(
  303. 0, {'list': list(ai_service_qs), 'total': count})
  304. except Exception as e:
  305. print(e)
  306. return response.json(500, repr(e))
  307. def getAiUserList(self, request_dict, response):
  308. username = request_dict.get('username', None)
  309. NickName = request_dict.get('NickName', None)
  310. uid = request_dict.get('uid', None)
  311. payType = request_dict.get('payType', None)
  312. status = request_dict.get('status', None)
  313. use_status = request_dict.get('use_status', None)
  314. addTimeRange = request_dict.getlist('addTimeRange[]', None)
  315. pageNo = request_dict.get('pageNo', None)
  316. pageSize = request_dict.get('pageSize', None)
  317. if not all([pageNo, pageSize]):
  318. return response.json(444)
  319. page = int(pageNo)
  320. line = int(pageSize)
  321. try:
  322. order_qs = Order_Model.objects.filter(
  323. order_type=1).order_by('-addTime')
  324. if username or NickName or uid or payType or status or use_status or addTimeRange:
  325. if username:
  326. order_qs = order_qs.filter(
  327. userID__username__contains=username)
  328. if NickName:
  329. order_qs = order_qs.filter(
  330. userID__NickName__contains=NickName)
  331. if uid:
  332. order_qs = order_qs.filter(UID__contains=uid)
  333. if payType:
  334. order_qs = order_qs.filter(payType=payType)
  335. if status:
  336. order_qs = order_qs.filter(status=status)
  337. if use_status:
  338. order_qs = order_qs.filter(use_status=use_status)
  339. if addTimeRange:
  340. addStartTime, addEndTime = int(
  341. addTimeRange[0][:-3]), int(addTimeRange[1][:-3])
  342. order_qs = order_qs.filter(
  343. addTime__gte=addStartTime,
  344. addTime__lte=addEndTime)
  345. if not order_qs.exists():
  346. return response.json(0, {'list': [], 'total': 0})
  347. count = order_qs.count()
  348. else:
  349. count = Order_Model.objects.filter(order_type=1).count()
  350. order_qs = order_qs.values(
  351. 'userID__username',
  352. 'userID__NickName',
  353. 'UID',
  354. 'channel',
  355. 'orderID',
  356. 'desc',
  357. 'payType',
  358. 'price',
  359. 'status',
  360. 'refunded_amount',
  361. 'addTime',
  362. 'updTime',
  363. )[(page - 1) * line:page * line]
  364. data_list = []
  365. for order in order_qs:
  366. data_dict = {
  367. 'username': order['userID__username'],
  368. 'NickName': order['userID__NickName'],
  369. 'uid': order['UID'],
  370. 'channel': order['channel'],
  371. 'orderID': order['orderID'],
  372. 'desc': order['desc'],
  373. 'payType': order['payType'],
  374. 'price': order['price'],
  375. 'status': order['status'],
  376. 'refunded_amount': order['refunded_amount'],
  377. 'addTime': order['addTime'],
  378. 'updTime': order['updTime'],
  379. }
  380. ai_service_qs = AiService.objects.filter(
  381. orders_id=order['orderID']).values(
  382. 'endTime', 'use_status')
  383. if ai_service_qs.exists():
  384. data_dict['endTime'] = ai_service_qs[0]['endTime']
  385. data_dict['use_status'] = ai_service_qs[0]['use_status']
  386. data_list.append(data_dict)
  387. return response.json(
  388. 0, {'list': data_list, 'total': count})
  389. except Exception as e:
  390. print(e)
  391. return response.json(500, repr(e))