ServeManagementController.py 55 KB

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