LangWord.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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: langer
  7. @software: PyCharm
  8. @DATE: 2019/6/4 11:44
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: LangArea.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. from var_dump import var_dump
  15. import json
  16. from django.http import HttpResponse
  17. from django.views.generic import TemplateView
  18. from django.views.decorators.csrf import csrf_exempt
  19. from django.utils.decorators import method_decorator
  20. from object.ResponseObject import ResponseObject
  21. from django.contrib.auth.hashers import make_password, check_password
  22. from model.models import UserModel, LangSetModel, LangAreaModel, LangKeyModel, LangValModel, LangPermModel
  23. import time
  24. from object.TokenObject import TokenObject
  25. from django.db.models import Q
  26. class LangWordView(TemplateView):
  27. def post(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation', None)
  30. request_dict = json.loads(request.body.decode('utf-8'))
  31. return self.validate(request_dict, operation)
  32. def get(self, request, *args, **kwargs):
  33. request.encoding = 'utf-8'
  34. request_dict = request.GET
  35. operation = kwargs.get('operation', None)
  36. return self.validate(request_dict, operation)
  37. def validate(self, request_dict, operation):
  38. response = ResponseObject()
  39. token = request_dict.get('token', None)
  40. tko = TokenObject(token)
  41. if tko.code == 0:
  42. userID = tko.userID
  43. if operation == 'add':
  44. user_qs = UserModel.objects.filter(id=userID, username='admin')
  45. if not user_qs.exists():
  46. return response.json(403)
  47. return self.do_add(request_dict, response)
  48. elif operation == 'update':
  49. return self.do_update(request_dict, response, userID)
  50. elif operation == 'delete':
  51. user_qs = UserModel.objects.filter(id=userID, username='admin')
  52. if not user_qs.exists():
  53. return response.json(403)
  54. return self.do_delete(request_dict, userID, response)
  55. # search index table
  56. elif operation == 'query':
  57. return self.do_query(request_dict, response, userID)
  58. elif operation == 'reset':
  59. return self.do_reset(request_dict, response, userID)
  60. else:
  61. return response.json(414)
  62. else:
  63. return response.json(tko.code)
  64. def do_add(self, request_dict, response):
  65. word_key = request_dict.get('word_key', None)
  66. word_arr = request_dict.get('word_arr', None)
  67. word_key_type = request_dict.get('word_key_type', 0)
  68. nowTime = int(time.time())
  69. lang_key_dict = {
  70. 'word_key': word_key,
  71. 'addTime': nowTime,
  72. 'updTime': nowTime,
  73. 'type': word_key_type
  74. }
  75. try:
  76. # var_dump(lang_key_dict)
  77. lk = LangKeyModel.objects.filter(word_key=word_key)
  78. if lk.exists():
  79. var_dump(list(lk))
  80. return response.json(473,'key已存在')
  81. lk = LangKeyModel.objects.create(**lang_key_dict)
  82. for w in word_arr:
  83. LangValModel.objects.create(la_id=w['la_id'], lk_id=lk.id, addTime=nowTime, updTime=nowTime,
  84. word_val=w['val'], status=1)
  85. except Exception as e:
  86. print(repr(e))
  87. return response.json(404, repr(e))
  88. else:
  89. return response.json(0)
  90. '''
  91. post_data = {
  92. word_key_id:1,
  93. word_key:xxx,
  94. word_arr:[
  95. {'lang':'','val':''},
  96. {'lang':'','val':''},
  97. {'lang':'','val':''}
  98. ]
  99. }
  100. '''
  101. def do_update(self, request_dict, response, userID):
  102. old_word_key = request_dict.get('old_word_key', None)
  103. word_key = request_dict.get('word_key', None)
  104. word_arr = request_dict.get('word_arr', None)
  105. status = request_dict.get('status', 0)
  106. # from var_dump import var_dump
  107. # var_dump(request_dict)
  108. lk = LangKeyModel.objects.filter(word_key=old_word_key)
  109. nowTime = int(time.time())
  110. if lk.exists():
  111. lk_id = lk[0].id
  112. if old_word_key != word_key:
  113. user_qs = UserModel.objects.filter(id=userID, username='admin')
  114. if user_qs.exists():
  115. lk.update(word_key=word_key, updTime=nowTime)
  116. else:
  117. lk.update(updTime=nowTime)
  118. # 如果是管理员,是status的值为1,表示记录为新增
  119. user = UserModel.objects.get(id=userID)
  120. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  121. lang_perm_ls = list(lang_perm_ql)
  122. print(lang_perm_ls)
  123. if user.role_type == 1:
  124. status = 1
  125. for w in word_arr:
  126. lv_qs = LangValModel.objects.filter(lk__id=lk_id, la__lang=w)
  127. if lv_qs.exists() and w in lang_perm_ql:
  128. lv_qs.update(updTime=nowTime, word_val=word_arr[w], status=status)
  129. else:
  130. la_qs = LangAreaModel.objects.filter(lang=w)
  131. if la_qs.exists():
  132. la_id = la_qs[0].id
  133. LangValModel.objects.create(la_id=la_id, lk_id=lk_id, addTime=nowTime, updTime=nowTime,
  134. word_val=word_arr[w], status=status)
  135. return response.json(0)
  136. else:
  137. return response.json(404)
  138. def do_delete(self, request_dict, userID, response):
  139. user_qs = UserModel.objects.filter(id=userID, username='admin')
  140. if not user_qs.exists():
  141. return response.json(403)
  142. word_key = request_dict.get('word_key', None)
  143. try:
  144. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  145. if lk_qs.exists():
  146. lk = lk_qs[0]
  147. if lk.type == 2:
  148. lk.type = 1
  149. lk.save()
  150. else:
  151. lk_qs.delete()
  152. LangValModel.objects.filter(lk__word_key=word_key).delete()
  153. except Exception as e:
  154. return response.json(404, repr(e))
  155. else:
  156. return response.json(0)
  157. def do_query(self, request_dict, response, userID):
  158. print(request_dict)
  159. page = int(request_dict.get('page', None))
  160. line = int(request_dict.get('line', None))
  161. searchKey = request_dict.get('searchKey', None)
  162. searchVal = request_dict.get('searchVal', None)
  163. langType = request_dict.get('langType', 0)
  164. if searchKey:
  165. searchKey = searchKey.strip()
  166. if searchVal:
  167. searchKey = searchKey.strip()
  168. orderByupdate = request_dict.get('orderByupdate', 0)
  169. if page and line:
  170. lang_set_list = LangSetModel.objects.filter(user__id=userID).values_list('lang__id', flat=True)
  171. lang_set_list = list(lang_set_list)
  172. la_qs = LangAreaModel.objects.filter(id__in=lang_set_list).values('lang', 'id')
  173. print(langType)
  174. tmpType = int(langType)
  175. print(tmpType)
  176. if tmpType == 0:
  177. lk_qs = LangKeyModel.objects.filter(type__in=(0, 2))
  178. print(lk_qs)
  179. elif tmpType == 1:
  180. lk_qs = LangKeyModel.objects.filter(type__in=(1, 2))
  181. elif tmpType == 2:
  182. lk_qs = LangKeyModel.objects.filter(type=3)
  183. if searchKey and searchVal:
  184. if searchKey == 'key':
  185. lk_qs = lk_qs.filter(word_key__contains=searchVal)
  186. # lk_qs = lk_qs.filter(word_key=searchVal)
  187. else:
  188. lk_qs = lk_qs.filter(langvalmodel__word_val__contains=searchVal, langvalmodel__la__lang=searchKey)
  189. count = lk_qs.count()
  190. # lk_qs = lk_qs[(page - 1) * line:page * line].values_list('word_key', flat=True)
  191. if orderByupdate == 1:
  192. lk_qs = lk_qs.order_by('updTime')
  193. else:
  194. lk_qs = lk_qs.order_by('-updTime')
  195. lk_qs = lk_qs[(page - 1) * line:page * line].values('word_key', 'updTime')
  196. k_list = []
  197. lw_dict = {}
  198. for lk in lk_qs:
  199. k_list.append(lk['word_key'])
  200. lw_dict[lk['word_key']] = {'updTime': lk['updTime']}
  201. lv_qs = LangValModel.objects.filter(lk__word_key__in=k_list, la__id__in=lang_set_list). \
  202. values('word_val', 'la__id', 'la__lang', 'lk__word_key', 'lk__id', 'status')
  203. user = UserModel.objects.get(id=userID)
  204. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  205. lang_perm_ls = list(lang_perm_ql)
  206. for lv in lv_qs:
  207. lang = lv['la__lang']
  208. # print('lang=%s' % lang)
  209. lw_dict[lv['lk__word_key']][lang] = lv['word_val']
  210. if user.role_type == 1:
  211. lw_dict[lv['lk__word_key']]['status'] = 0
  212. elif lang in lang_perm_ls:
  213. lw_dict[lv['lk__word_key']]['status'] = lv['status']
  214. res = {
  215. 'la_list': list(la_qs),
  216. 'lw_dict': lw_dict,
  217. # 'lk_list': list(lk_qs),
  218. # 'lv_list': list(lv_qs)
  219. 'count': count
  220. }
  221. return response.json(0, res)
  222. else:
  223. return response.json(444, 'page,line')
  224. def do_reset(self, request_dict, response, userID):
  225. word_key = request_dict.get('word_key', None)
  226. if word_key:
  227. word_key_list = word_key.split(',')
  228. # 获取该用户可以修改的语种
  229. lp_qs = LangPermModel.objects.filter(user_id=userID).values_list('lang__id')
  230. lq_list = list(lp_qs)
  231. # ls_qs = LangSetModel.objects.filter(user_id=userID, lang_id__in=lq_list).values_list('lang__id')
  232. # ls_list = list(ls_qs)
  233. lk = LangKeyModel.objects.filter(word_key__in=word_key_list).values_list('id')
  234. lv_qs = LangValModel.objects.filter(Q(lk_id__in=lk) & ~Q(status=0) & Q(la_id__in=lq_list))
  235. print(lv_qs.values())
  236. if lv_qs.exists():
  237. lv_qs.update(status=0)
  238. return response.json(0)
  239. else:
  240. return response.json(10,"数据已重置")
  241. else:
  242. return response.json(404)