FeedBack.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2019/1/18 10:45
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: SysMsg.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. import time
  15. import json
  16. import oss2
  17. from django.views.generic.base import View
  18. from var_dump import var_dump
  19. from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
  20. from Model.models import FeedBackModel, StatResModel
  21. from Object.ResponseObject import ResponseObject
  22. from Object.TokenObject import TokenObject
  23. from Service.CommonService import CommonService
  24. from Service.ModelService import ModelService
  25. from django.db import transaction
  26. class FeedBackView(View):
  27. def get(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation', None)
  30. return self.validation(request.GET, operation)
  31. def post(self, request, *args, **kwargs):
  32. request.encoding = 'utf-8'
  33. operation = kwargs.get('operation', None)
  34. return self.validation(request.POST, operation)
  35. def validation(self, request_dict, operation):
  36. response = ResponseObject()
  37. token = request_dict.get('token', None)
  38. tko = TokenObject(token)
  39. if tko.code == 0:
  40. userID = tko.userID
  41. if operation == 'add':
  42. return self.do_add(userID, request_dict, response)
  43. elif operation == 'getUploadUrl':
  44. return self.do_get_upload_url(request_dict, response)
  45. elif operation == 'query':
  46. return self.do_query(userID, request_dict, response)
  47. elif operation == 'delete':
  48. return self.do_delete(userID, request_dict, response)
  49. elif operation == 'queryByAdmin':
  50. return self.do_query_by_admin(userID, request_dict, response)
  51. elif operation == 'deleteByAdmin':
  52. return self.do_delete_by_admin(userID, request_dict, response)
  53. else:
  54. return response.json(414)
  55. else:
  56. return response.json(tko.code)
  57. def do_query(self, userID, request_dict, response):
  58. page = request_dict.get('page', None)
  59. line = request_dict.get('line', None)
  60. if page and line:
  61. page = int(page)
  62. line = int(line)
  63. else:
  64. return response.json(444, 'page,line')
  65. fb_qs = FeedBackModel.objects.filter(userID_id=userID)[(page - 1) * line:page * line]. \
  66. values('id', 'status', 'content', 'addTime', 'updTime', 'type')
  67. sid_list = []
  68. for fb in fb_qs:
  69. sid_list.append(fb['id'])
  70. sm_qs = StatResModel.objects.filter(feedbackmodel__id__in=sid_list).values('id', 'name', 'feedbackmodel__id')
  71. # return response.json(0,list(sm_qs))
  72. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  73. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  74. res = []
  75. for fb in fb_qs:
  76. fb['img_url'] = []
  77. for sm in sm_qs:
  78. if sm['feedbackmodel__id'] == fb['id']:
  79. obj = 'feedback/' + sm['name']
  80. img_url = bucket.sign_url('GET', obj, 3600)
  81. fb['img_url'].append(img_url)
  82. # fb['FS__name'] = sm['name']
  83. res.append(fb)
  84. return response.json(0, res)
  85. def do_add(self, userID, request_dict, response):
  86. nowTime = int(time.time())
  87. content = request_dict.get('content', None)
  88. type = request_dict.get('type', None)
  89. res_1 = request_dict.get('res_1', None)
  90. res_2 = request_dict.get('res_2', None)
  91. res_3 = request_dict.get('res_3', None)
  92. app = request_dict.get('app', None)
  93. phone_model = request_dict.get('phone_model', None)
  94. os_version = request_dict.get('os_version', None)
  95. uid = request_dict.get('uid', None)
  96. product_type = request_dict.get('product_type', None)
  97. try:
  98. with transaction.atomic():
  99. fb = FeedBackModel()
  100. fb.addTime = nowTime
  101. fb.updTime = nowTime
  102. fb.content = content
  103. if type:
  104. fb.type = type
  105. if app:
  106. fb.app = app
  107. if phone_model:
  108. fb.phone_model = phone_model
  109. if os_version:
  110. fb.os_version = os_version
  111. if uid:
  112. fb.uid = uid
  113. if product_type:
  114. fb.product_type = product_type
  115. fb.userID_id = userID
  116. fb.save()
  117. if res_1:
  118. fb.FS.add(StatResModel.objects.create(addTime=nowTime, name=res_1))
  119. if res_2:
  120. fb.FS.add(StatResModel.objects.create(addTime=nowTime, name=res_2))
  121. if res_3:
  122. fb.FS.add(StatResModel.objects.create(addTime=nowTime, name=res_3))
  123. except Exception as e:
  124. print(repr(e))
  125. return response.json(500, repr(e))
  126. else:
  127. return response.json(0)
  128. def do_get_upload_url(self, request_dict, response):
  129. uploadType = request_dict.get('uploadType', None)
  130. uploadType = json.loads(uploadType)
  131. if len(uploadType):
  132. res = []
  133. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  134. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  135. for upType in uploadType:
  136. name = CommonService.createOrderID()
  137. obj = 'feedback/' + str(name) + '.' + upType
  138. url = bucket.sign_url('PUT', obj, 7200)
  139. res.append({'put_url': url, 'res_name': obj})
  140. return response.json(0, res)
  141. else:
  142. return response.json(444, 'uploadType')
  143. def do_delete(self, userID, request_dict, response):
  144. id = request_dict.get('id', None)
  145. try:
  146. fb_qs = FeedBackModel.objects.get(userID_id=userID, id=id)
  147. sr_id_list = fb_qs.FS.values_list('id', flat=True)
  148. StatResModel.objects.filter(id__in=sr_id_list).delete()
  149. fb_qs.delete()
  150. # is_delete = StatResModel.objects.filter(id__in=sr_id_list).delete()
  151. # print(is_delete)
  152. print('----------')
  153. except Exception as e:
  154. return response.json(500, repr(e))
  155. else:
  156. return response.json(0)
  157. def do_query_by_admin(self, userID, request_dict, response):
  158. own_perm = ModelService.check_perm(userID, 30)
  159. if own_perm:
  160. page = request_dict.get('page', None)
  161. line = request_dict.get('line', None)
  162. status = request_dict.get('status', None)
  163. username = request_dict.get('username', None)
  164. type = request_dict.get('type', None)
  165. if page and line:
  166. page = int(page)
  167. line = int(line)
  168. filter_data = {}
  169. if status:
  170. filter_data = {'status': status}
  171. if username:
  172. filter_data = {'userID_id': ModelService.get_userID_byname(username)}
  173. if type:
  174. filter_data = {'type': type}
  175. fb_qs = FeedBackModel.objects.filter()
  176. if filter_data:
  177. fb_qs = fb_qs.filter(**filter_data)
  178. count = fb_qs.count()
  179. fb_qs = fb_qs[(page - 1) * line:page * line].values('id', 'type', 'status', 'content', 'addTime', 'app',
  180. 'uid', 'os_version', 'phone_model', 'product_type',
  181. 'updTime', 'userID__username')
  182. sid_list = []
  183. print(fb_qs)
  184. for fb in fb_qs:
  185. sid_list.append(fb['id'])
  186. sm_qs = StatResModel.objects.filter(feedbackmodel__id__in=sid_list).values('id', 'name',
  187. 'feedbackmodel__id')
  188. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  189. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  190. res = []
  191. print(sm_qs)
  192. for fb in fb_qs:
  193. fb['img_url'] = []
  194. for sm in sm_qs:
  195. if sm['feedbackmodel__id'] == fb['id']:
  196. obj = 'feedback/' + sm['name']
  197. img_url = bucket.sign_url('GET', obj, 3600)
  198. # img_url.replace('statres.oss-cn-hongkong.aliyuncs.com','static.zositech.xyz')
  199. fb['img_url'].append(img_url)
  200. # fb['FS__name'] = sm['name']
  201. res.append(fb)
  202. return response.json(0, {'datas': res, 'count': count})
  203. else:
  204. return response.json(444, 'page,line')
  205. else:
  206. return response.json(404)
  207. def do_delete_by_admin(self, userID, request_dict, response):
  208. own_perm = ModelService.check_perm(userID, 10)
  209. if own_perm:
  210. id = request_dict.get('id', None)
  211. try:
  212. fb_qs = FeedBackModel.objects.get(id=id)
  213. sr_id_list = fb_qs.FS.values_list('id', flat=True)
  214. StatResModel.objects.filter(id__in=sr_id_list).delete()
  215. fb_qs.delete()
  216. print('----------')
  217. except Exception as e:
  218. return response.json(500, repr(e))
  219. else:
  220. return response.json(0)
  221. else:
  222. return response.json(404)