AiServeController.py 20 KB

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