ServeManagementController.py 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import hashlib
  4. import time
  5. import uuid
  6. import xlrd
  7. import xlwt
  8. import openpyxl
  9. from django.utils.encoding import escape_uri_path
  10. from django.http import HttpResponse, StreamingHttpResponse
  11. from django.views.generic.base import View
  12. from Model.models import VodBucketModel, CDKcontextModel, Store_Meal, Order_Model, \
  13. UID_Bucket, ExperienceContextModel, Lang, CloudLogModel, UidSetModel, Unused_Uid_Meal
  14. from Object.ResponseObject import ResponseObject
  15. from Object.TokenObject import TokenObject
  16. from Service.CommonService import CommonService
  17. from django.db.models import F
  18. class serveManagement(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. language = request_dict.get('language', 'en')
  29. response = ResponseObject(language, 'pc')
  30. if operation == 'exportCloudUserList': # 导出云存用户信息
  31. return self.exportCloudUserList(request_dict, response)
  32. elif operation == 'getCloudDataList':
  33. return self.getCloudDataList(request_dict, response)
  34. elif operation == 'vodOrderReconcile':
  35. return self.vodOrderReconcile(request, request_dict, response)
  36. else:
  37. tko = TokenObject(
  38. request.META.get('HTTP_AUTHORIZATION'),
  39. returntpye='pc')
  40. if tko.code != 0:
  41. return response.json(tko.code)
  42. response.lang = tko.lang
  43. userID = tko.userID
  44. if operation == 'getVodBucketList':
  45. return self.getVodBucketList(userID, request_dict, response)
  46. elif operation == 'addOrEditVodBucket':
  47. return self.addOrEditVodBucket(userID, request_dict, response)
  48. elif operation == 'deleteVodBucket':
  49. return self.deleteVodBucket(userID, request_dict, response)
  50. elif operation == 'getStoreMealList':
  51. return self.getStoreMealList(userID, request_dict, response)
  52. elif operation == 'addOrEditStoreMeal':
  53. return self.addOrEditStoreMeal(userID, request_dict, response)
  54. elif operation == 'deleteStoreMeal':
  55. return self.deleteStoreMeal(userID, request_dict, response)
  56. elif operation == 'getStoreMealLanguage':
  57. return self.getStoreMealLanguage(
  58. userID, request_dict, response)
  59. elif operation == 'addOrEditStoreMealLanguage':
  60. return self.addOrEditStoreMealLanguage(
  61. userID, request_dict, response)
  62. elif operation == 'deleteStoreMealLanguage':
  63. return self.deleteStoreMealLanguage(
  64. userID, request_dict, response)
  65. elif operation == 'getCdkList':
  66. return self.getCdkList(userID, request_dict, response)
  67. elif operation == 'createCdk':
  68. return self.createCdk(request_dict, response)
  69. elif operation == 'deleteCdk':
  70. return self.deleteCdk(request_dict, response)
  71. elif operation == 'downloadCDK':
  72. return self.downloadCDK(request_dict, response)
  73. elif operation == 'getDeviceOrderList':
  74. return self.getDeviceOrderList(request_dict, response)
  75. elif operation == 'deleteDeviceOrder':
  76. return self.deleteDeviceOrder(userID, request_dict, response)
  77. elif operation == 'getDevicePackageList':
  78. return self.getDevicePackageList(request_dict, response)
  79. elif operation == 'deleteDevicePackage':
  80. return self.deleteDevicePackage(userID, request_dict, response)
  81. elif operation == 'experiencereset': # 重置设备云存体验
  82. return self.do_experience_reset(request_dict, userID, response)
  83. elif operation == 'getCloudUserList': # 获取云存用户信息
  84. return self.getCloudUserList(request_dict, response)
  85. else:
  86. return response.json(404)
  87. def getVodBucketList(self, userID, request_dict, response):
  88. # 查询存储桶数据
  89. print('request_dict: ', request_dict)
  90. isSelect = request_dict.get('isSelect', None)
  91. if isSelect:
  92. # 获取全部数据作为存储桶选项
  93. vod_bucket_qs = VodBucketModel.objects.all().values('id', 'bucket')
  94. return response.json(
  95. 0, {'list': CommonService.qs_to_list(vod_bucket_qs)})
  96. bucket = request_dict.get('bucket', None)
  97. mold = request_dict.get('mold', None)
  98. is_free = request_dict.get('is_free', None)
  99. pageNo = request_dict.get('pageNo', None)
  100. pageSize = request_dict.get('pageSize', None)
  101. if not all([pageNo, pageSize]):
  102. return response.json(444)
  103. page = int(pageNo)
  104. line = int(pageSize)
  105. try:
  106. if bucket or mold or is_free: # 条件查询
  107. if bucket:
  108. vod_bucket_qs = VodBucketModel.objects.filter(
  109. bucket=bucket)
  110. elif mold:
  111. vod_bucket_qs = VodBucketModel.objects.filter(
  112. mold=int(mold))
  113. elif is_free:
  114. vod_bucket_qs = VodBucketModel.objects.filter(
  115. is_free=int(is_free))
  116. else: # 查询全部
  117. vod_bucket_qs = VodBucketModel.objects.filter().all()
  118. total = len(vod_bucket_qs)
  119. vod_buckets = vod_bucket_qs[(page - 1) * line:page * line]
  120. vod_bucket_list = []
  121. for vod_bucket in vod_buckets:
  122. vod_bucket_list.append({
  123. 'bucketID': vod_bucket.id,
  124. 'bucket': vod_bucket.bucket,
  125. 'content': vod_bucket.content,
  126. 'mold': vod_bucket.mold,
  127. 'area': vod_bucket.area,
  128. 'region': vod_bucket.region,
  129. 'endpoint': vod_bucket.endpoint,
  130. 'is_free': vod_bucket.is_free,
  131. 'storeDay': vod_bucket.storeDay,
  132. 'region_id': vod_bucket.region_id,
  133. 'addTime': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(vod_bucket.addTime)),
  134. 'updTime': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(vod_bucket.updTime)),
  135. })
  136. print('vod_bucket_list: ', vod_bucket_list)
  137. return response.json(
  138. 0, {'list': vod_bucket_list, 'total': total})
  139. except Exception as e:
  140. print(e)
  141. return response.json(500, repr(e))
  142. def addOrEditVodBucket(self, userID, request_dict, response):
  143. # 添加/编辑存储桶
  144. print('request_dict: ', request_dict)
  145. bucketID = request_dict.get('bucketID', None)
  146. bucket = request_dict.get('bucket', '').strip() # 移除字符串头尾的空格
  147. content = request_dict.get('content', '').strip()
  148. mold = int(request_dict.get('mold', 1))
  149. area = request_dict.get('area', '').strip()
  150. region = request_dict.get('region', '').strip()
  151. endpoint = request_dict.get('endpoint', '').strip()
  152. is_free = int(request_dict.get('is_free', 0))
  153. storeDay = int(request_dict.get('storeDay', 0))
  154. region_id = int(request_dict.get('region_id', 1))
  155. isEdit = request_dict.get('isEdit', None)
  156. if not all([bucket, content, area, region, endpoint]):
  157. return response.json(444)
  158. try:
  159. now_time = int(time.time())
  160. vod_bucket_data = {
  161. 'bucket': bucket,
  162. 'content': content,
  163. 'mold': mold,
  164. 'area': area,
  165. 'region': region,
  166. 'endpoint': endpoint,
  167. 'is_free': is_free,
  168. 'storeDay': storeDay,
  169. 'region_id': region_id,
  170. }
  171. if isEdit:
  172. if not bucketID:
  173. return response.json(444)
  174. vod_bucket_data['updTime'] = now_time
  175. VodBucketModel.objects.filter(
  176. id=bucketID).update(
  177. **vod_bucket_data)
  178. else:
  179. vod_bucket_data['addTime'] = now_time
  180. VodBucketModel.objects.create(**vod_bucket_data)
  181. return response.json(0)
  182. except Exception as e:
  183. print(e)
  184. return response.json(500, repr(e))
  185. def deleteVodBucket(self, userID, request_dict, response):
  186. # 删除存储桶
  187. print('request_dict: ', request_dict)
  188. bucketID = request_dict.get('bucketID', None)
  189. if not bucketID:
  190. return response.json(444)
  191. try:
  192. VodBucketModel.objects.filter(id=bucketID).delete()
  193. return response.json(0)
  194. except Exception as e:
  195. print(e)
  196. return response.json(500, repr(e))
  197. def getStoreMealList(self, userID, request_dict, response):
  198. # 获取云存套餐信息数据
  199. print('request_dict: ', request_dict)
  200. isSelect = request_dict.get('isSelect', None)
  201. if isSelect:
  202. # 获取套餐ID作为选项
  203. store_meal_qs = Store_Meal.objects.all().values('id', 'bucket__bucket')
  204. return response.json(
  205. 0, {'list': CommonService.qs_to_list(store_meal_qs)})
  206. bucket = request_dict.get('bucket', None)
  207. pageNo = request_dict.get('pageNo', None)
  208. pageSize = request_dict.get('pageSize', None)
  209. if not all([pageNo, pageSize]):
  210. return response.json(444)
  211. page = int(pageNo)
  212. line = int(pageSize)
  213. try:
  214. if bucket: # 条件查询
  215. bucket_id = VodBucketModel.objects.filter(
  216. bucket=bucket).values('id')[0]['id']
  217. store_meal_qs = Store_Meal.objects.filter(
  218. bucket_id=bucket_id)
  219. else: # 查询全部
  220. store_meal_qs = Store_Meal.objects.filter()
  221. store_meal_val = store_meal_qs.values(
  222. 'id',
  223. 'bucket__bucket',
  224. 'day',
  225. 'expire',
  226. 'commodity_type',
  227. 'commodity_code',
  228. 'is_discounts',
  229. 'discount_price',
  230. 'virtual_price',
  231. 'price',
  232. 'currency',
  233. 'symbol',
  234. 'is_show',
  235. 'add_time',
  236. 'update_time')
  237. total = len(store_meal_val)
  238. store_meals = store_meal_val[(page - 1) * line:page * line]
  239. store_meal_list = []
  240. for store_meal in store_meals:
  241. # 获取支付方式列表
  242. pay_type_list = [
  243. pay_type['id'] for pay_type in Store_Meal.objects.get(
  244. id=store_meal['id']).pay_type.values('id')]
  245. # 组织响应数据
  246. store_meal_list.append({
  247. 'storeMealID': store_meal['id'],
  248. 'bucket': store_meal['bucket__bucket'],
  249. 'day': store_meal['day'],
  250. 'expire': store_meal['expire'],
  251. 'commodity_type': store_meal['commodity_type'],
  252. 'pay_type': pay_type_list,
  253. 'commodity_code': store_meal['commodity_code'],
  254. 'is_discounts': store_meal['is_discounts'],
  255. 'discount_price': store_meal['discount_price'],
  256. 'virtual_price': store_meal['virtual_price'],
  257. 'price': store_meal['price'],
  258. 'currency': store_meal['currency'],
  259. 'symbol': store_meal['symbol'],
  260. 'is_show': store_meal['is_show'],
  261. 'addTime': store_meal['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
  262. 'updTime': store_meal['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
  263. })
  264. print('store_meal_list: ', store_meal_list)
  265. return response.json(
  266. 0, {'list': store_meal_list, 'total': total})
  267. except Exception as e:
  268. print(e)
  269. return response.json(500, repr(e))
  270. def addOrEditStoreMeal(self, userID, request_dict, response):
  271. # 添加/编辑套餐
  272. print('request_dict: ', request_dict)
  273. storeMealID = request_dict.get('storeMealID', None)
  274. bucket = request_dict.get('bucket', '')
  275. day = int(request_dict.get('day', 0))
  276. expire = int(request_dict.get('expire', 0))
  277. commodity_type = int(request_dict.get('commodity_type', 0))
  278. pay_type = request_dict.get(
  279. 'pay_type', '')[
  280. 1:-1].split(',') # '[1,2]' -> ['1','2']
  281. commodity_code = request_dict.get('commodity_code', '')
  282. is_discounts = int(request_dict.get('is_discounts', 0))
  283. discount_price = request_dict.get('discount_price', '')
  284. virtual_price = request_dict.get('virtual_price', '')
  285. price = request_dict.get('price', '')
  286. currency = request_dict.get('currency', '')
  287. symbol = request_dict.get('symbol', '')
  288. is_show = int(request_dict.get('is_show', 0))
  289. isEdit = request_dict.get('isEdit', None)
  290. if not all([bucket, pay_type, price, currency, symbol]):
  291. return response.json(444)
  292. try:
  293. bucket_id = VodBucketModel.objects.filter(
  294. bucket=bucket).values('id')[0]['id']
  295. store_meal_data = {
  296. 'bucket_id': bucket_id,
  297. 'day': day,
  298. 'expire': expire,
  299. 'commodity_type': commodity_type,
  300. 'commodity_code': commodity_code,
  301. 'is_discounts': is_discounts,
  302. 'discount_price': discount_price,
  303. 'virtual_price': virtual_price,
  304. 'price': price,
  305. 'currency': currency,
  306. 'symbol': symbol,
  307. 'is_show': is_show,
  308. }
  309. if isEdit:
  310. if not storeMealID:
  311. return response.json(444)
  312. Store_Meal.objects.filter(
  313. id=storeMealID).update(
  314. **store_meal_data)
  315. Store_Meal.objects.get(id=storeMealID).pay_type.set(pay_type)
  316. else:
  317. Store_Meal.objects.create(
  318. **store_meal_data).pay_type.set(pay_type)
  319. return response.json(0)
  320. except Exception as e:
  321. print(e)
  322. return response.json(500, repr(e))
  323. def deleteStoreMeal(self, userID, request_dict, response):
  324. # 删除套餐信息
  325. print('request_dict: ', request_dict)
  326. storeMealID = request_dict.get('storeMealID', None)
  327. if not storeMealID:
  328. return response.json(444)
  329. try:
  330. Store_Meal.objects.filter(id=storeMealID).delete()
  331. return response.json(0)
  332. except Exception as e:
  333. print(e)
  334. return response.json(500, repr(e))
  335. def getStoreMealLanguage(self, userID, request_dict, response):
  336. # 获取套餐语言
  337. print('request_dict: ', request_dict)
  338. storeMealID = request_dict.get('storeMealID', None)
  339. pageNo = request_dict.get('pageNo', None)
  340. pageSize = request_dict.get('pageSize', None)
  341. if not all([pageNo, pageSize]):
  342. return response.json(444)
  343. page = int(pageNo)
  344. line = int(pageSize)
  345. try:
  346. if storeMealID: # 条件查询
  347. store_meal_lang_qs = Store_Meal.objects.filter(id=storeMealID)
  348. else: # 查询全部
  349. store_meal_lang_qs = Store_Meal.objects.filter(
  350. lang__isnull=False)
  351. store_meal_lang_val = store_meal_lang_qs.values(
  352. 'id',
  353. 'lang__id',
  354. 'lang__lang',
  355. 'lang__title',
  356. 'lang__content',
  357. 'lang__discount_content',
  358. )
  359. total = len(store_meal_lang_val)
  360. store_meal_langs = store_meal_lang_val[(
  361. page - 1) * line:page * line]
  362. store_meal_lang_list = []
  363. for store_meal_lang in store_meal_langs:
  364. store_meal_lang_list.append({
  365. 'storeMealID': store_meal_lang['id'],
  366. 'langID': store_meal_lang['lang__id'],
  367. 'lang': store_meal_lang['lang__lang'],
  368. 'title': store_meal_lang['lang__title'],
  369. 'content': store_meal_lang['lang__content'],
  370. 'discountContent': store_meal_lang['lang__discount_content'],
  371. })
  372. print('store_meal_lang_list: ', store_meal_lang_list)
  373. return response.json(
  374. 0, {'list': store_meal_lang_list, 'total': total})
  375. except Exception as e:
  376. print(e)
  377. return response.json(500, repr(e))
  378. def addOrEditStoreMealLanguage(self, userID, request_dict, response):
  379. # 添加/编辑套餐语言
  380. print('request_dict: ', request_dict)
  381. storeMealID = request_dict.get('storeMealID', None)
  382. lang = request_dict.get('lang', None)
  383. title = request_dict.get('title', None)
  384. content = request_dict.get('content', None)
  385. discount_content = request_dict.get('discount_content', '')
  386. isEdit = request_dict.get('isEdit', None)
  387. if not all([storeMealID, lang, title, content]):
  388. return response.json(444)
  389. try:
  390. # 查询套餐是否存在
  391. store_meal_qs = Store_Meal.objects.get(id=storeMealID)
  392. if not store_meal_qs:
  393. return response.json(173)
  394. if isEdit: # 编辑
  395. langID = request_dict.get('langID', None)
  396. if not langID:
  397. return response.json(444)
  398. Lang.objects.filter(
  399. id=langID).update(
  400. lang=lang,
  401. title=title,
  402. content=content,
  403. discount_content=discount_content)
  404. else: # 添加
  405. lang_obj = Lang.objects.filter(
  406. lang=lang,
  407. title=title,
  408. content=content,
  409. discount_content=discount_content)
  410. if not lang_obj.exists():
  411. # 数据不存在,lang表创建数据
  412. Lang.objects.create(
  413. lang=lang,
  414. title=title,
  415. content=content,
  416. discount_content=discount_content)
  417. lang_obj = Lang.objects.filter(
  418. lang=lang,
  419. title=title,
  420. content=content,
  421. discount_content=discount_content)
  422. store_meal_qs.lang.add(*lang_obj) # store_meal表添加语言数据
  423. return response.json(0)
  424. except Exception as e:
  425. print(e)
  426. return response.json(500, repr(e))
  427. def deleteStoreMealLanguage(self, userID, request_dict, response):
  428. # 删除套餐语言
  429. storeMealID = request_dict.get('storeMealID', None)
  430. langID = request_dict.get('langID', None)
  431. if not all([storeMealID, langID]):
  432. return response.json(444)
  433. try:
  434. storeMeal_qs = Store_Meal.objects.get(id=storeMealID)
  435. if not storeMeal_qs:
  436. return response.json(173)
  437. lang_qs = Lang.objects.filter(id=langID)
  438. storeMeal_qs.lang.remove(*lang_qs)
  439. return response.json(0)
  440. except Exception as e:
  441. print(e)
  442. return response.json(500, repr(e))
  443. def getCdkList(self, userID, request_dict, response):
  444. # 获取激活码列表
  445. pageNo = request_dict.get('pageNo', None)
  446. pageSize = request_dict.get('pageSize', None)
  447. cdk = request_dict.get('cdk', None)
  448. order = request_dict.get('order', None)
  449. is_activate = request_dict.get('is_activate', None)
  450. mold = request_dict.get('mold', None)
  451. lang = request_dict.get('lang', 'cn')
  452. if not all([pageNo, pageSize]):
  453. return response.json(444)
  454. page = int(pageNo)
  455. line = int(pageSize)
  456. try:
  457. if cdk:
  458. searchVal = cdk.strip()
  459. if order:
  460. searchVal = order.strip()
  461. if is_activate:
  462. searchVal = is_activate.strip()
  463. cdk_qs = CDKcontextModel.objects.filter().all()
  464. if cdk:
  465. cdk_qs = cdk_qs.filter(cdk__contains=searchVal)
  466. if order:
  467. cdk_qs = cdk_qs.filter(order__contains=searchVal)
  468. if is_activate:
  469. cdk_qs = cdk_qs.filter(is_activate=searchVal)
  470. if mold:
  471. cdk_qs = cdk_qs.filter(rank__bucket__mold=mold)
  472. cdk_qs = cdk_qs.filter(rank__lang__lang=lang)
  473. cdk_qs = cdk_qs.annotate(rank__title=F('rank__lang__title'))
  474. cdk_qs = cdk_qs.values(
  475. 'id',
  476. 'cdk',
  477. 'create_time',
  478. 'valid_time',
  479. 'is_activate',
  480. 'is_down',
  481. 'rank__id',
  482. 'rank__title',
  483. 'order',
  484. 'create_time',
  485. 'rank__bucket__mold')
  486. cdk_qs = cdk_qs.order_by('-create_time') # 根据CDK创建时间降序排序
  487. count = cdk_qs.count()
  488. cdk_qs = cdk_qs[(page - 1) * line:page * line]
  489. return response.json(
  490. 0, {'list': list(cdk_qs), 'total': count})
  491. except Exception as e:
  492. print(e)
  493. return response.json(500, repr(e))
  494. def createCdk(self, request_dict, response):
  495. cdk_num = request_dict.get("cdknum", None)
  496. mold = request_dict.get('mold', None)
  497. order = request_dict.get('order', None)
  498. cdk_list = []
  499. sm_qs = Store_Meal.objects.filter(
  500. pay_type__payment='cdk_pay', bucket__mold=mold, is_show=0)
  501. if not sm_qs.exists():
  502. return response.json(173)
  503. rank = sm_qs[0].id
  504. for i in range(int(cdk_num)):
  505. nowTime = int(time.time())
  506. cdk = hashlib.md5((str(uuid.uuid1()) +
  507. str(nowTime)).encode('utf-8')).hexdigest()
  508. cdk_model = CDKcontextModel(
  509. cdk=cdk,
  510. create_time=nowTime,
  511. valid_time=0,
  512. is_activate=0,
  513. is_down=0,
  514. rank_id=rank,
  515. order=order,
  516. )
  517. cdk_list.append(cdk_model)
  518. try:
  519. CDKcontextModel.objects.bulk_create(cdk_list)
  520. except Exception as e:
  521. return response.json(404, repr(e))
  522. else:
  523. return response.json(0)
  524. def deleteCdk(self, request_dict, response):
  525. cdk_id = request_dict.get("id", None)
  526. try:
  527. CDKcontextModel.objects.get(id=cdk_id).delete()
  528. return response.json(0)
  529. except Exception as e:
  530. return response.json(500, repr(e))
  531. def downloadCDK(self, request_dict, response):
  532. region = request_dict.get('region', None)
  533. content = ''
  534. if region == 'cn':
  535. # 下载国内未使用激活码
  536. content += '激活码(国内)\n'
  537. cdk_inactivate_qs = CDKcontextModel.objects.filter(is_down=0, is_activate=0, rank__bucket__mold=0,
  538. rank__is_show=0).values('cdk')
  539. else:
  540. # 下载国外未使用激活码
  541. content += '激活码(国外)\n'
  542. cdk_inactivate_qs = CDKcontextModel.objects.filter(is_down=0, is_activate=0, rank__bucket__mold=1,
  543. rank__is_show=0).values('cdk')
  544. for cdk_inactivate in cdk_inactivate_qs:
  545. content += cdk_inactivate['cdk'] + '\n'
  546. # print(content)
  547. cdk_inactivate_qs.update(is_down=1)
  548. response = StreamingHttpResponse(content)
  549. response['Content-Type'] = 'application/octet-stream'
  550. response['Content-Disposition'] = 'attachment;filename="CDK.txt"'
  551. return response
  552. def getDeviceOrderList(self, request_dict, response):
  553. print('request_dict: ', request_dict)
  554. pageNo = request_dict.get('pageNo', None)
  555. pageSize = request_dict.get('pageSize', None)
  556. uid = request_dict.get('uid', None)
  557. channel = request_dict.get('channel', None)
  558. orderID = request_dict.get('orderID', None)
  559. userID__username = request_dict.get('userID__username', None)
  560. currency = request_dict.get('currency', None)
  561. payType = request_dict.get('payType', None)
  562. status = request_dict.get('status', None)
  563. timeRange = request_dict.getlist('timeRange[]', None)
  564. if not all([pageNo, pageSize]):
  565. return response.json(444)
  566. page = int(pageNo)
  567. line = int(pageSize)
  568. try:
  569. omqs = Order_Model.objects.all()
  570. # 筛选指定设备id的订单
  571. if uid:
  572. omqs = omqs.filter(UID=uid)
  573. if channel:
  574. omqs = omqs.filter(channel=channel)
  575. if orderID:
  576. omqs = omqs.filter(orderID=orderID)
  577. if userID__username:
  578. omqs = omqs.filter(userID__username=userID__username)
  579. if currency:
  580. omqs = omqs.filter(currency=currency)
  581. if payType:
  582. omqs = omqs.filter(payType=payType)
  583. if status:
  584. omqs = omqs.filter(status=status)
  585. if timeRange:
  586. startTime, endTime = int(
  587. timeRange[0][:-3]), int(timeRange[1][:-3])
  588. omqs = omqs.filter(
  589. addTime__gte=startTime,
  590. addTime__lte=endTime)
  591. if not omqs.exists():
  592. return response.json(0, [])
  593. count = omqs.count()
  594. order_ql = omqs.values(
  595. "orderID",
  596. "UID",
  597. "userID__username",
  598. "userID__NickName",
  599. "channel",
  600. "desc",
  601. "price",
  602. "refunded_amount",
  603. "currency",
  604. "addTime",
  605. "updTime",
  606. "paypal",
  607. "payType",
  608. "rank__day",
  609. "rank__price",
  610. "status")
  611. order_ql = order_ql.order_by('-addTime') # 根据CDK创建时间降序排序
  612. order_ql = order_ql[(page - 1) * line:page * line]
  613. return response.json(
  614. 0, {'list': list(order_ql), 'total': count})
  615. except Exception as e:
  616. print(e)
  617. return response.json(500, repr(e))
  618. def vodOrderReconcile(self, request, request_dict, response):
  619. file = request.FILES.get('file', None)
  620. if not file:
  621. return response.json(444)
  622. try:
  623. rd_book = xlrd.open_workbook(filename=None, file_contents=file.read())
  624. rd_sheet = rd_book.sheet_by_index(0)
  625. # wt_book = copy(rd_book)
  626. # wt_sheet = wt_book.get_sheet(0)
  627. wt_book = openpyxl.Workbook()
  628. wt_sheet = wt_book.create_sheet('对账结果', 0)
  629. for row in range(rd_sheet.nrows):
  630. if row == 0:
  631. wt_sheet.cell(8, 1, '是否匹配账单')
  632. for col in range(rd_sheet.ncols):
  633. value = rd_sheet.cell_value(row, col)
  634. temp_col = col + 2
  635. wt_sheet.cell(8, temp_col, value)
  636. continue
  637. transaction_id = rd_sheet.cell_value(row, 9)
  638. order_qs = Order_Model.objects.filter(trade_no=transaction_id)
  639. if not order_qs.exists():
  640. col_value_list = rd_sheet.row_values(row)
  641. col_value_list.insert(0, '否')
  642. wt_sheet.append(col_value_list)
  643. res = HttpResponse(content_type='application/octet-stream')
  644. res['Content-Disposition'] = 'attachment; filename={}'.format(escape_uri_path(file.name))
  645. wt_book.save(res)
  646. return res
  647. except Exception as e:
  648. print(e)
  649. return response.json(500, repr(e))
  650. def deleteDeviceOrder(self, userID, request_dict, response):
  651. orderID = request_dict.get('orderID', None)
  652. if orderID:
  653. Order_Model.objects.filter(orderID=orderID).delete()
  654. return response.json(0)
  655. else:
  656. return response.json(444)
  657. def getDevicePackageList(self, request_dict, response):
  658. pageNo = request_dict.get('pageNo', None)
  659. pageSize = request_dict.get('pageSize', None)
  660. uid = request_dict.get('uid', None)
  661. if not all([pageNo, pageSize]):
  662. return response.json(444)
  663. page = int(pageNo)
  664. line = int(pageSize)
  665. try:
  666. ubqs = UID_Bucket.objects.all()
  667. if uid:
  668. ubqs = ubqs.filter(uid__contains=uid)
  669. if not ubqs.exists():
  670. return response.json(0, [])
  671. count = ubqs.count()
  672. ubqs = ubqs.values(
  673. 'id',
  674. 'uid',
  675. 'channel',
  676. 'status',
  677. 'endTime',
  678. 'bucket__bucket',
  679. 'bucket__storeDay',
  680. 'bucket__area')
  681. ubqs = ubqs.order_by('-addTime') # 根据CDK创建时间降序排序
  682. ubqs = ubqs[(page - 1) * line:page * line]
  683. return response.json(
  684. 0, {'list': list(ubqs), 'total': count})
  685. except Exception as e:
  686. print(e)
  687. return response.json(500, repr(e))
  688. def deleteDevicePackage(self, userID, request_dict, response):
  689. orderID = request_dict.get('orderID', None)
  690. if orderID:
  691. Order_Model.objects.filter(orderID=orderID).delete()
  692. return response.json(0)
  693. else:
  694. return response.json(444)
  695. # 重置设备云存体验
  696. def do_experience_reset(self, request_dict, userID, response):
  697. bid = request_dict.get("id", None)
  698. ubq = UID_Bucket.objects.filter(id=bid)
  699. if ubq:
  700. eq = ExperienceContextModel.objects.filter(uid=ubq[0].uid)
  701. if eq:
  702. eq.delete()
  703. Order_Model.objects.filter(uid_bucket_id=bid).delete()
  704. ubq.delete()
  705. return response.json(0)
  706. else:
  707. return response.json(10007)
  708. else:
  709. return response.json(0, '重置云存体验失败')
  710. def getCloudUserList(self, request_dict, response):
  711. print('request_dict: ', request_dict)
  712. # UID_Bucket表查询数据
  713. uid = request_dict.get('uid', None)
  714. status = request_dict.get('status', None)
  715. use_status = request_dict.get('use_status', None)
  716. has_unused = request_dict.get('has_unused', None)
  717. addTimeRange = request_dict.getlist('addTimeRange[]', None)
  718. endTimeRange = request_dict.getlist('endTimeRange[]', None)
  719. # Order_Model表查询数据
  720. username = request_dict.get('username', None)
  721. phone = request_dict.get('phone', None)
  722. userEmail = request_dict.get('userEmail', None)
  723. payType = request_dict.get('payType', None)
  724. # uid_set 表查询
  725. ucode = request_dict.getlist('ucode', None)
  726. version = request_dict.getlist('version', None)
  727. # 日志表查询
  728. logTimeRange = request_dict.getlist('logTimeRange[]', None)
  729. pageNo = request_dict.get('pageNo', None)
  730. pageSize = request_dict.get('pageSize', None)
  731. if not all([pageNo, pageSize]):
  732. return response.json(444)
  733. page = int(pageNo)
  734. line = int(pageSize)
  735. try:
  736. uid_bucket_qs = UID_Bucket.objects.all()
  737. if uid:
  738. uid_bucket_qs = uid_bucket_qs.filter(uid__icontains=uid)
  739. if status:
  740. uid_bucket_qs = uid_bucket_qs.filter(status=status)
  741. if use_status:
  742. uid_bucket_qs = uid_bucket_qs.filter(use_status=use_status)
  743. if has_unused:
  744. uid_bucket_qs = uid_bucket_qs.filter(has_unused=has_unused)
  745. if addTimeRange:
  746. addStartTime, addEndTime = int(
  747. addTimeRange[0][:-3]), int(addTimeRange[1][:-3])
  748. uid_bucket_qs = uid_bucket_qs.filter(
  749. addTime__gte=addStartTime,
  750. addTime__lte=addEndTime)
  751. if endTimeRange:
  752. endStartTime, endEndTime = int(
  753. endTimeRange[0][:-3]), int(endTimeRange[1][:-3])
  754. uid_bucket_qs = uid_bucket_qs.filter(
  755. addTime__gte=endStartTime,
  756. addTime__lte=endEndTime)
  757. uid_list = []
  758. uid_set_dict = {}
  759. if ucode and ucode != ['']:
  760. uid_set_qs = UidSetModel.objects.filter(ucode__in=ucode).values('uid', 'ucode', 'version').distinct()
  761. for uid_set in uid_set_qs:
  762. uid_list.append(uid_set['uid'])
  763. uid_set_dict[uid_set['uid']] = {
  764. 'ucode': uid_set['ucode'],
  765. 'version': uid_set['version']
  766. }
  767. uid_bucket_qs = uid_bucket_qs.filter(uid__in=uid_list)
  768. else:
  769. uid_set_qs = UidSetModel.objects.filter().values('uid', 'ucode', 'version').distinct()
  770. for uid_set in uid_set_qs:
  771. uid_list.append(uid_set['uid'])
  772. uid_set_dict[uid_set['uid']] = {
  773. 'ucode': uid_set['ucode'],
  774. 'version': uid_set['version']
  775. }
  776. if not uid_bucket_qs.exists():
  777. return response.json(0, [])
  778. order_qs = Order_Model.objects.filter(uid_bucket_id__in=uid_bucket_qs.values('id'))
  779. if username or phone or userEmail or payType:
  780. if username:
  781. order_qs = order_qs.filter(userID__username=username)
  782. if phone:
  783. order_qs = order_qs.filter(userID__phone__contains=phone)
  784. if userEmail:
  785. order_qs = order_qs.filter(
  786. userID__userEmail__contains=userEmail)
  787. if payType:
  788. order_qs = order_qs.filter(payType=int(payType))
  789. # 过滤套餐关联的UID_Bucket数据
  790. uid_bucket_qs = uid_bucket_qs.filter(
  791. id__in=order_qs.values_list(
  792. 'uid_bucket_id', flat=True))
  793. cg_qs = CloudLogModel.objects.filter(
  794. operation='cloudstorage/queryvodlist')
  795. if logTimeRange:
  796. logStartTime, logEndTime = int(
  797. logTimeRange[0][:-3]), int(logTimeRange[1][:-3])
  798. cg_qs = cg_qs.filter(
  799. time__gte=logStartTime,
  800. time__lte=logEndTime)
  801. # 过滤套餐关联的UID_Bucket数据
  802. uid_bucket_qs = uid_bucket_qs.filter(
  803. uid__in=cg_qs.values('uid'))
  804. list_data = []
  805. count = uid_bucket_qs.count()
  806. uid_bucket_qs = uid_bucket_qs.order_by('-addTime')[(page - 1) * line:page * line]
  807. for uid_bucket in uid_bucket_qs:
  808. for order in order_qs.filter(
  809. uid_bucket_id=uid_bucket.id).values(
  810. 'uid_bucket_id',
  811. 'desc',
  812. 'userID__userID',
  813. 'UID',
  814. 'price',
  815. 'payType',
  816. 'userID__username',
  817. 'userID__phone',
  818. 'userID__userEmail',
  819. 'userID__data_joined'):
  820. # 套餐到期时间累加未使用套餐
  821. unused_qs = Unused_Uid_Meal.objects.filter(uid=uid_bucket.uid).values('num', 'expire')
  822. if unused_qs.exists():
  823. addMonth = 0
  824. for unused in unused_qs:
  825. addMonth += unused['num'] * unused['expire']
  826. endTime = CommonService.calcMonthLater(addMonth, uid_bucket.endTime)
  827. endTime = time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(endTime))
  828. else:
  829. endTime = time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(uid_bucket.endTime))
  830. uid = uid_bucket.uid.upper()
  831. data = {
  832. 'id': uid_bucket.id,
  833. 'uid': uid,
  834. 'channel': uid_bucket.channel,
  835. 'status': uid_bucket.status,
  836. 'endTime': endTime,
  837. 'addTime': time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(uid_bucket.addTime)),
  838. 'use_status': uid_bucket.use_status,
  839. 'has_unused': uid_bucket.has_unused,
  840. 'desc': order['desc'],
  841. 'payType': order['payType'],
  842. 'price': order['price'],
  843. 'username': order['userID__username'],
  844. 'phone': order['userID__phone'],
  845. 'userEmail': order['userID__userEmail'],
  846. 'data_joined': order['userID__data_joined'].strftime("%Y-%m-%d %H:%M:%S"),
  847. 'playcount': cg_qs.filter(operation='cloudstorage/queryvodlist', uid=order['UID']).count()
  848. }
  849. if uid in uid_set_dict:
  850. data['ucode'] = uid_set_dict[uid]['ucode']
  851. data['version'] = uid_set_dict[uid]['version']
  852. list_data.append(data)
  853. return response.json(
  854. 0, {'list': list_data, 'total': count})
  855. except Exception as e:
  856. print(e)
  857. return response.json(500, repr(e))
  858. def exportCloudUserList(self, request_dict, response):
  859. # UID_Bucket表查询数据
  860. uid = request_dict.get('uid', None)
  861. status = request_dict.get('status', None)
  862. use_status = request_dict.get('use_status', None)
  863. has_unused = request_dict.get('has_unused', None)
  864. addTimeRange = request_dict.getlist('addTimeRange[]', None)
  865. endTimeRange = request_dict.getlist('endTimeRange[]', None)
  866. # Order_Model表查询数据
  867. username = request_dict.get('username', None)
  868. phone = request_dict.get('phone', None)
  869. userEmail = request_dict.get('userEmail', None)
  870. payType = request_dict.get('payType', None)
  871. # uid_set 表查询
  872. ucode = request_dict.getlist('ucode', None)
  873. version = request_dict.getlist('version', None)
  874. # 日志表查询
  875. logTimeRange = request_dict.getlist('logTimeRange[]', None)
  876. pageNo = request_dict.get('pageNo', None)
  877. pageSize = request_dict.get('pageSize', None)
  878. if not all([pageNo, pageSize]):
  879. return response.json(444)
  880. page = int(pageNo)
  881. line = int(pageSize)
  882. try:
  883. uid_bucket_qs = UID_Bucket.objects.all()
  884. if uid:
  885. uid_bucket_qs = uid_bucket_qs.filter(uid__contains=uid)
  886. if status:
  887. uid_bucket_qs = uid_bucket_qs.filter(status=status)
  888. if use_status:
  889. uid_bucket_qs = uid_bucket_qs.filter(use_status=use_status)
  890. if has_unused:
  891. uid_bucket_qs = uid_bucket_qs.filter(has_unused=has_unused)
  892. if addTimeRange:
  893. addStartTime, addEndTime = int(
  894. addTimeRange[0][:-3]), int(addTimeRange[1][:-3])
  895. uid_bucket_qs = uid_bucket_qs.filter(
  896. addTime__gte=addStartTime,
  897. addTime__lte=addEndTime)
  898. if endTimeRange:
  899. endStartTime, endEndTime = int(
  900. endTimeRange[0][:-3]), int(endTimeRange[1][:-3])
  901. uid_bucket_qs = uid_bucket_qs.filter(
  902. addTime__gte=endStartTime,
  903. addTime__lte=endEndTime)
  904. if not uid_bucket_qs.exists():
  905. return response.json(0, [])
  906. order_qs = Order_Model.objects.filter(
  907. uid_bucket_id__in=uid_bucket_qs.values('id'))
  908. if username or phone or userEmail or payType:
  909. if username:
  910. order_qs = order_qs.filter(userID__username=username)
  911. if phone:
  912. order_qs = order_qs.filter(userID__phone__contains=phone)
  913. if userEmail:
  914. order_qs = order_qs.filter(
  915. userID__userEmail__contains=userEmail)
  916. if payType:
  917. order_qs = order_qs.filter(payType=int(payType))
  918. # 过滤套餐关联的UID_Bucket数据
  919. uid_bucket_qs = uid_bucket_qs.filter(
  920. id__in=order_qs.values_list(
  921. 'uid_bucket_id', flat=True))
  922. uidset_qs = UidSetModel.objects.filter(
  923. uid__in=uid_bucket_qs.values('uid'))
  924. if ucode or version:
  925. if ucode:
  926. uidset_qs = uidset_qs.filter(ucode=ucode)
  927. if version:
  928. uidset_qs = uidset_qs.filter(version=version)
  929. cg_qs = CloudLogModel.objects.filter(
  930. operation='cloudstorage/queryvodlist')
  931. if logTimeRange:
  932. logStartTime, logEndTime = int(
  933. logTimeRange[0][:-3]), int(logTimeRange[1][:-3])
  934. cg_qs = cg_qs.filter(
  935. time__gte=logStartTime,
  936. time__lte=logEndTime)
  937. list_data = []
  938. count = uid_bucket_qs.count()
  939. uid_bucket_qs = uid_bucket_qs.order_by('-addTime')[(page - 1) * line:page * line]
  940. for uid_bucket in uid_bucket_qs:
  941. data = {
  942. 'id': uid_bucket.id,
  943. 'uid': uid_bucket.uid,
  944. 'channel': uid_bucket.channel,
  945. 'status': uid_bucket.status,
  946. 'endTime': time.strftime(
  947. "%Y--%m--%d %H:%M:%S",
  948. time.localtime(
  949. uid_bucket.endTime)),
  950. 'addTime': time.strftime(
  951. "%Y--%m--%d %H:%M:%S",
  952. time.localtime(
  953. uid_bucket.addTime)),
  954. 'use_status': uid_bucket.use_status,
  955. 'has_unused': uid_bucket.has_unused}
  956. for order in order_qs.filter(
  957. uid_bucket_id=uid_bucket.id).values(
  958. 'uid_bucket_id',
  959. 'desc',
  960. 'userID__userID',
  961. 'UID',
  962. 'price',
  963. 'payType',
  964. 'userID__username',
  965. 'userID__phone',
  966. 'userID__userEmail',
  967. 'userID__data_joined'):
  968. data['desc'] = order['desc']
  969. data['payType'] = order['payType']
  970. data['price'] = order['price']
  971. data['username'] = order['userID__username']
  972. data['phone'] = order['userID__phone']
  973. data['userEmail'] = order['userID__userEmail']
  974. data['data_joined'] = order['userID__data_joined'].strftime(
  975. "%Y-%m-%d %H:%M:%S")
  976. data['playcount'] = cg_qs.filter(
  977. operation='cloudstorage/queryvodlist', uid=order['UID']).count()
  978. for uidset in uidset_qs.filter(
  979. uid=uid_bucket.uid).values(
  980. 'ucode',
  981. 'version'):
  982. data['ucode'] = uidset['ucode']
  983. data['version'] = uidset['version']
  984. list_data.append(data)
  985. response = HttpResponse(content_type='application/vnd.ms-excel')
  986. response['Content-Disposition'] = 'attachment; filename=userinfo.xls'
  987. workbook = xlwt.Workbook(encoding='utf-8')
  988. sheet1 = workbook.add_sheet('UID')
  989. headtitle = [
  990. 'id',
  991. '用户账号',
  992. '用户手机号',
  993. '用户邮箱',
  994. '注册时间',
  995. '设备UID',
  996. '设备通道',
  997. '云存状态',
  998. '添加时间',
  999. '到期时间',
  1000. '使用状态',
  1001. '是否有未使用套餐',
  1002. '套餐描述',
  1003. '支付方式',
  1004. '价格',
  1005. '播放次数',
  1006. '产品编码',
  1007. '版本'
  1008. ]
  1009. headnum = 0
  1010. for title in headtitle:
  1011. sheet1.write(0, headnum, title)
  1012. headnum = headnum + 1
  1013. fields = [
  1014. 'id',
  1015. 'username',
  1016. 'phone',
  1017. 'userEmail',
  1018. 'data_joined',
  1019. 'uid',
  1020. 'channel',
  1021. 'status',
  1022. 'addTime',
  1023. 'endTime',
  1024. 'use_status',
  1025. 'has_unused',
  1026. 'desc',
  1027. 'payType',
  1028. 'price',
  1029. 'playcount',
  1030. 'ucode',
  1031. 'version'
  1032. ]
  1033. num = 1
  1034. for item in list_data:
  1035. fieldnum = 0
  1036. for key in fields:
  1037. val = item[key]
  1038. if key == 'payType':
  1039. if val == 1:
  1040. val = 'PayPal'
  1041. if val == 2:
  1042. val = '支付宝'
  1043. if val == 3:
  1044. val = '微信支付'
  1045. if val == 10:
  1046. val = '免费体验'
  1047. if val == 11:
  1048. val = '激活码'
  1049. sheet1.write(num, fieldnum, val)
  1050. fieldnum = fieldnum + 1
  1051. num = num + 1
  1052. workbook.save(response)
  1053. return response
  1054. except Exception as e:
  1055. print(e)
  1056. return response.json(500, repr(e))
  1057. def getCloudDataList(self, request_dict, response):
  1058. year = request_dict.get('year', None)
  1059. Jan = int(time.mktime(time.strptime(year + '-1-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1060. Feb = int(time.mktime(time.strptime(year + '-2-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1061. Mar = int(time.mktime(time.strptime(year + '-3-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1062. Apr = int(time.mktime(time.strptime(year + '-4-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1063. May = int(time.mktime(time.strptime(year + '-5-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1064. Jun = int(time.mktime(time.strptime(year + '-6-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1065. Jul = int(time.mktime(time.strptime(year + '-7-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1066. Aug = int(time.mktime(time.strptime(year + '-8-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1067. Sep = int(time.mktime(time.strptime(year + '-9-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1068. Oct = int(time.mktime(time.strptime(year + '-10-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1069. Nov = int(time.mktime(time.strptime(year + '-11-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1070. Dec = int(time.mktime(time.strptime(year + '-12-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1071. Jan_next = int(time.mktime(time.strptime(str(int(year) + 1) + '-1-1 00:00:00', "%Y-%m-%d %H:%M:%S")))
  1072. list_data = []
  1073. vod_bucket_qs = VodBucketModel.objects.filter()
  1074. if not vod_bucket_qs.exists():
  1075. return response.json(173)
  1076. try:
  1077. for vod_bucket in vod_bucket_qs:
  1078. vod_bucket_id = vod_bucket.id
  1079. store_meal = Store_Meal.objects.filter(bucket_id=vod_bucket_id, lang__lang='cn').values('lang__title',
  1080. 'lang__content')
  1081. if not store_meal.exists():
  1082. continue
  1083. name = store_meal[0]['lang__title'] + '-' + store_meal[0]['lang__content']
  1084. order = Order_Model.objects.filter(rank__bucket_id=vod_bucket_id)
  1085. Jan_count = order.filter(status=1, addTime__range=[Jan, Feb]).count()
  1086. Feb_count = order.filter(status=1, addTime__range=[Feb, Mar]).count()
  1087. Mar_count = order.filter(status=1, addTime__range=[Mar, Apr]).count()
  1088. Apr_count = order.filter(status=1, addTime__range=[Apr, May]).count()
  1089. May_count = order.filter(status=1, addTime__range=[May, Jun]).count()
  1090. Jun_count = order.filter(status=1, addTime__range=[Jun, Jul]).count()
  1091. Jul_count = order.filter(status=1, addTime__range=[Jul, Aug]).count()
  1092. Aug_count = order.filter(status=1, addTime__range=[Aug, Sep]).count()
  1093. Sep_count = order.filter(status=1, addTime__range=[Sep, Oct]).count()
  1094. Oct_count = order.filter(status=1, addTime__range=[Oct, Nov]).count()
  1095. Nov_count = order.filter(status=1, addTime__range=[Nov, Dec]).count()
  1096. Dec_count = order.filter(status=1, addTime__range=[Dec, Jan_next]).count()
  1097. data = [Jan_count, Feb_count, Mar_count, Apr_count, May_count, Jun_count, Jul_count, Aug_count,
  1098. Sep_count,
  1099. Oct_count, Nov_count, Dec_count]
  1100. cloud_data = {
  1101. 'name': name,
  1102. 'type': 'line',
  1103. 'data': data,
  1104. }
  1105. list_data.append(cloud_data)
  1106. return response.json(0, {'list': list_data})
  1107. except Exception as e:
  1108. print(e)
  1109. return response.json(500, repr(e))