LangWord.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  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. import xlrd
  18. from django.views.generic import TemplateView
  19. from django.views.decorators.csrf import csrf_exempt
  20. from django.utils.decorators import method_decorator
  21. from object.ResponseObject import ResponseObject
  22. from django.contrib.auth.hashers import make_password, check_password
  23. from model.models import UserModel, LangSetModel, LangAreaModel, LangKeyModel, LangValModel, LangPermModel
  24. import time
  25. from object.TokenObject import TokenObject
  26. from django.db.models import Q
  27. class LangWordView(TemplateView):
  28. def post(self, request, *args, **kwargs):
  29. request.encoding = 'utf-8'
  30. operation = kwargs.get('operation', None)
  31. # request_dict = json.loads(request.body.decode('utf-8'))
  32. request_dict = request.POST
  33. return self.validate(request, request_dict, operation)
  34. def get(self, request, *args, **kwargs):
  35. request.encoding = 'utf-8'
  36. request_dict = request.GET
  37. operation = kwargs.get('operation', None)
  38. return self.validate(request, request_dict, operation)
  39. def validate(self, request, request_dict, operation):
  40. response = ResponseObject()
  41. print('request_dict:', request_dict)
  42. print('operation:', operation)
  43. token = request_dict.get('token', None)
  44. tko = TokenObject(token)
  45. # print('tko:',tko.userID)
  46. if tko.code == 0:
  47. userID = tko.userID
  48. if operation == 'add':
  49. user_qs = UserModel.objects.filter(id=userID, username='admin')
  50. if not user_qs.exists():
  51. return response.json(403)
  52. return self.do_add(request_dict, response)
  53. elif operation == 'update':
  54. return self.do_update(request_dict, response, userID)
  55. elif operation == 'delete':
  56. user_qs = UserModel.objects.filter(id=userID, username='admin')
  57. if not user_qs.exists():
  58. return response.json(403)
  59. return self.do_delete(request_dict, userID, response)
  60. # search index table
  61. elif operation == 'query':
  62. return self.do_query(request_dict, response, userID)
  63. elif operation == 'reset':
  64. return self.do_reset(request_dict, response, userID)
  65. elif operation == 'add_new_lang':
  66. return self.do_add_new_lang(request, request_dict, response, userID)
  67. else:
  68. return response.json(414)
  69. else:
  70. return response.json(tko.code)
  71. def do_add(self, request_dict, response):
  72. word_key = request_dict.get('word_key', None)
  73. word_arr = request_dict.get('word_arr', None)
  74. word_key_type = request_dict.get('word_key_type', None)
  75. if not word_key_type:
  76. return response.json(444, 'word_key_type')
  77. nowTime = int(time.time())
  78. lang_key_dict = {
  79. 'word_key': word_key,
  80. 'addTime': nowTime,
  81. 'updTime': nowTime,
  82. 'type': word_key_type
  83. }
  84. try:
  85. # var_dump(lang_key_dict)
  86. lk = LangKeyModel.objects.filter(word_key=word_key)
  87. if lk.exists():
  88. print(lk[0].type)
  89. print(word_key_type)
  90. type = lk[0].type & word_key_type
  91. print(type)
  92. if lk[0].type & word_key_type != 0:
  93. var_dump(list(lk))
  94. return response.json(473, 'key已存在')
  95. else:
  96. type = word_key_type | lk[0].type
  97. data = {
  98. 'type': type,
  99. 'updTime': nowTime
  100. }
  101. lk.update(**data)
  102. return response.json(0)
  103. lk = LangKeyModel.objects.create(**lang_key_dict)
  104. for w in word_arr:
  105. LangValModel.objects.create(la_id=w['la_id'], lk_id=lk.id, addTime=nowTime, updTime=nowTime,
  106. word_val=w['val'], status=1)
  107. except Exception as e:
  108. print(repr(e))
  109. return response.json(404, repr(e))
  110. else:
  111. return response.json(0)
  112. '''
  113. post_data = {
  114. word_key_id:1,
  115. word_key:xxx,
  116. word_arr:[
  117. {'lang':'','val':''},
  118. {'lang':'','val':''},
  119. {'lang':'','val':''}
  120. ]
  121. }
  122. '''
  123. def do_update(self, request_dict, response, userID):
  124. old_word_key = request_dict.get('old_word_key', None)
  125. word_key = request_dict.get('word_key', None)
  126. word_arr = request_dict.get('word_arr', None)
  127. status = request_dict.get('status', 0)
  128. # from var_dump import var_dump
  129. # var_dump(request_dict)
  130. if not word_key:
  131. return response.json(444)
  132. lk = LangKeyModel.objects.filter(word_key=old_word_key)
  133. nowTime = int(time.time())
  134. if lk.exists():
  135. lk_id = lk[0].id
  136. if old_word_key != word_key:
  137. user_qs = UserModel.objects.filter(id=userID, username='admin')
  138. if user_qs.exists():
  139. lk.update(word_key=word_key, updTime=nowTime)
  140. else:
  141. lk.update(updTime=nowTime)
  142. # 如果是管理员,是status的值为1,表示记录为新增
  143. user = UserModel.objects.get(id=userID)
  144. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  145. lang_perm_ls = list(lang_perm_ql)
  146. print(lang_perm_ls)
  147. if user.role_type == 1:
  148. status = 1
  149. for w in word_arr:
  150. lv_qs = LangValModel.objects.filter(lk__word_key=word_key, lk__project__isnull=True, la__lang=w)
  151. if lv_qs.exists() and w in lang_perm_ql:
  152. lv_qs.update(updTime=nowTime, word_val=word_arr[w], status=status)
  153. else:
  154. la_qs = LangAreaModel.objects.filter(lang=w)
  155. if la_qs.exists():
  156. la_id = la_qs[0].id
  157. LangValModel.objects.create(la_id=la_id, lk_id=lk_id, addTime=nowTime, updTime=nowTime,
  158. word_val=word_arr[w], status=status)
  159. return response.json(0)
  160. else:
  161. return response.json(404)
  162. def do_delete(self, request_dict, userID, response):
  163. print('delete')
  164. user_qs = UserModel.objects.filter(id=userID, username='admin')
  165. if not user_qs.exists():
  166. return response.json(403)
  167. word_key = request_dict.get('word_key', None)
  168. word_key_type = request_dict.get('work_key_type', None)
  169. print(word_key_type)
  170. if not word_key_type:
  171. return response.json(444, 'work_key_type')
  172. try:
  173. word_key_type = int(word_key_type)
  174. print(word_key_type)
  175. lk_qs = LangKeyModel.objects.filter(word_key=word_key)
  176. if lk_qs.exists():
  177. lk = lk_qs[0]
  178. print(lk.type)
  179. if lk.type < word_key_type:
  180. return response.json(444, 'work_key_type')
  181. else:
  182. lk.type -= word_key_type
  183. if lk.type > 0:
  184. lk.save()
  185. else:
  186. lk_qs.delete()
  187. LangValModel.objects.filter(lk__word_key=word_key).delete()
  188. except Exception as e:
  189. return response.json(404, repr(e))
  190. else:
  191. return response.json(0)
  192. def do_query(self, request_dict, response, userID):
  193. print(request_dict)
  194. page = int(request_dict.get('page', None))
  195. line = int(request_dict.get('line', None))
  196. searchKey = request_dict.get('searchKey', None)
  197. searchVal = request_dict.get('searchVal', None)
  198. langType = request_dict.get('langType', 0)
  199. if searchKey:
  200. searchKey = searchKey.strip()
  201. if searchVal:
  202. searchKey = searchKey.strip()
  203. orderByupdate = request_dict.get('orderByupdate', 0)
  204. if page and line:
  205. lang_set_list = LangSetModel.objects.filter(user__id=userID).values_list('lang__id', flat=True)
  206. print('lang_set_list:', lang_set_list)
  207. lang_set_list = list(lang_set_list)
  208. print('lang_set_list:', lang_set_list)
  209. la_qs = LangAreaModel.objects.filter(id__in=lang_set_list).values('lang', 'id')
  210. print(langType)
  211. tmpType = int(langType)
  212. print(tmpType)
  213. if tmpType == 0:
  214. lk_qs = LangKeyModel.objects.filter(type__in=(1, 3, 5, 7))
  215. print('lk_qs:', lk_qs)
  216. elif tmpType == 1:
  217. lk_qs = LangKeyModel.objects.filter(type__in=(2, 3, 6, 7))
  218. elif tmpType == 2:
  219. lk_qs = LangKeyModel.objects.filter(type__in=(4, 5, 6, 7))
  220. if searchKey and searchVal:
  221. if searchKey == 'key':
  222. lk_qs = lk_qs.filter(word_key__contains=searchVal)
  223. # lk_qs = lk_qs.filter(word_key=searchVal)
  224. else:
  225. if searchVal == ' ':
  226. lk_qs = lk_qs.filter(langvalmodel__word_val='', langvalmodel__la__lang=searchKey)
  227. else:
  228. lk_qs = lk_qs.filter(langvalmodel__word_val__contains=searchVal, langvalmodel__la__lang=searchKey)
  229. if orderByupdate == 1:
  230. lk_qs = lk_qs.order_by('updTime')
  231. else:
  232. lk_qs = lk_qs.order_by('-updTime')
  233. lk_qs = lk_qs.values('word_key', 'updTime').distinct() # 去除重复word_key
  234. count = len(lk_qs)
  235. lk_qs = lk_qs[(page - 1) * line: page * line]
  236. k_list = []
  237. lw_dict = {}
  238. for lk in lk_qs:
  239. k_list.append(lk['word_key'])
  240. lw_dict[lk['word_key']] = {'updTime': lk['updTime']}
  241. print('k_list:', k_list)
  242. lv_qs = LangValModel.objects.filter(lk__word_key__in=k_list, la__id__in=lang_set_list). \
  243. values('word_val', 'la__id', 'la__lang', 'lk__word_key', 'lk__id', 'status')
  244. print('lv_qs:', lv_qs)
  245. user = UserModel.objects.get(id=userID)
  246. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  247. lang_perm_ls = list(lang_perm_ql)
  248. print('lang_perm_ql:', lang_perm_ql)
  249. print('lw_dict:', lw_dict)
  250. for lv in lv_qs:
  251. lang = lv['la__lang']
  252. # print('lang=%s' % lang)
  253. lw_dict[lv['lk__word_key']][lang] = lv['word_val']
  254. # print('lw_dict_word_val:', lw_dict)
  255. if user.role_type == 1:
  256. lw_dict[lv['lk__word_key']]['status'] = 0
  257. elif lang in lang_perm_ls:
  258. lw_dict[lv['lk__word_key']]['status'] = lv['status']
  259. # print('lw_dict_status:', lw_dict)
  260. res = {
  261. 'la_list': list(la_qs),
  262. 'lw_dict': lw_dict,
  263. # 'lk_list': list(lk_qs),
  264. # 'lv_list': list(lv_qs)
  265. 'count': count
  266. }
  267. print('res:', res)
  268. return response.json(0, res)
  269. else:
  270. return response.json(444, 'page,line')
  271. def do_reset(self, request_dict, response, userID):
  272. word_key = request_dict.get('word_key', None)
  273. if word_key:
  274. word_key_list = word_key.split(',')
  275. # 获取该用户可以修改的语种
  276. lp_qs = LangPermModel.objects.filter(user_id=userID).values_list('lang__id')
  277. lq_list = list(lp_qs)
  278. print('lq_list:', lq_list)
  279. # ls_qs = LangSetModel.objects.filter(user_id=userID, lang_id__in=lq_list).values_list('lang__id')
  280. # ls_list = list(ls_qs)
  281. lk = LangKeyModel.objects.filter(word_key__in=word_key_list).values_list('id')
  282. lv_qs = LangValModel.objects.filter(Q(lk_id__in=lk) & ~Q(status=0) & Q(la_id__in=lq_list))
  283. # print(lv_qs.values())
  284. if lv_qs.exists():
  285. lv_qs.update(status=0)
  286. return response.json(0)
  287. else:
  288. return response.json(10, "数据已重置")
  289. else:
  290. return response.json(404)
  291. def do_add_new_lang(self, request, request_dict, response, userID):
  292. file = request.FILES.get('file', None)
  293. try:
  294. data = file.read()
  295. workbook = xlrd.open_workbook(file_contents=data)
  296. worksheet = workbook.sheet_by_index(0)
  297. ar_list = worksheet.col_values(1)
  298. en_list = worksheet.col_values(2, 1)
  299. lang_key_qs = LangKeyModel.objects.filter(type__in=(1, 3, 5, 7)).values('id', 'word_key')
  300. now_time = int(time.time())
  301. ar_result = []
  302. err_key = []
  303. for item in lang_key_qs:
  304. try:
  305. ar = ar_list[en_list.index(item['word_key'])+1]
  306. ar_result.append(ar)
  307. except ValueError:
  308. err_key.append(item['word_key'])
  309. continue
  310. lang_val = LangValModel.objects.filter(la__id=27, lk__id=item['id'])
  311. if lang_val.exists():
  312. lang_val.update(word_val=ar, updTime=now_time)
  313. else:
  314. LangValModel.objects.create(lk_id=item['id'], la_id=27, word_val=ar, addTime=now_time, updTime=now_time)
  315. print(ar_result)
  316. print(err_key)
  317. return response.json(0)
  318. except Exception as e:
  319. return response.json(404)