SearchToolController.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  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: 2020/8/21 15:44
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. """
  12. from var_dump import var_dump
  13. import json
  14. from django.http import HttpResponse
  15. from django.views.generic import TemplateView
  16. from django.views.decorators.csrf import csrf_exempt
  17. from django.utils.decorators import method_decorator
  18. from object.ResponseObject import ResponseObject
  19. from django.contrib.auth.hashers import make_password, check_password
  20. from model.models import UserModel, LangSetModel, LangAreaModel, LangKeyModel, LangValModel, LangPermModel, \
  21. SearchToolBlock, SearchToolMessage, SearchToolKeyModel, LangLocationModel
  22. import time
  23. from object.TokenObject import TokenObject
  24. from django.db.models import Q
  25. class SearchToolView(TemplateView):
  26. def post(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation', None)
  29. request_dict = json.loads(request.body.decode('utf-8'))
  30. return self.validate(request_dict, operation)
  31. def get(self, request, *args, **kwargs):
  32. request.encoding = 'utf-8'
  33. request_dict = request.GET
  34. operation = kwargs.get('operation', None)
  35. return self.validate(request_dict, operation)
  36. def validate(self, request_dict, operation):
  37. response = ResponseObject()
  38. token = request_dict.get('token', None)
  39. tko = TokenObject(token)
  40. if tko.code == 0:
  41. userID = tko.userID
  42. if operation == 'add':
  43. return self.do_add(request_dict, response)
  44. elif operation == 'update':
  45. return self.do_update(request_dict, response, userID)
  46. elif operation == 'delete':
  47. return self.do_delete(request_dict, response)
  48. # search index table
  49. elif operation == 'query_context':
  50. return self.do_query(request_dict, response, userID)
  51. elif operation == 'query_key':
  52. return self.do_query_key(request_dict, response, userID)
  53. elif operation == 'query_location':
  54. return self.do_query_location(request_dict, response, userID)
  55. elif operation == 'query_translation':
  56. return self.do_query_translation(request_dict, response, userID)
  57. elif operation == 'query_saveOrEditKeyFrom':
  58. return self.do_query_saveOrEditKeyFrom(request_dict, response)
  59. elif operation == 'query_saveOrEditLocationFrom':
  60. return self.do_query_saveOrEditLocationFrom(request_dict, response)
  61. elif operation == 'query_saveOrEditTranslationFrom':
  62. return self.do_query_saveOrEditTranslationFrom(request_dict, response, userID)
  63. elif operation == 'saveOrExitKey':
  64. return self.do_saveOrExitKey(request_dict, response)
  65. elif operation == 'saveOrExitLocation':
  66. return self.do_saveOrExitLocation(request_dict, response)
  67. elif operation == 'saveOrExitTranslation':
  68. return self.do_saveOrExitTranslation(request_dict, response)
  69. elif operation == 'deleteKey':
  70. return self.do_deleteKey(request_dict, response)
  71. elif operation == 'reset':
  72. return self.do_reset(request_dict, response, userID)
  73. else:
  74. return response.json(414)
  75. else:
  76. return response.json(tko.code)
  77. def do_add(self, request_dict, response):
  78. mokuainame = request_dict.get('name', None)
  79. type = request_dict.get('type', None)
  80. if not type:
  81. return response.json(444, 'type')
  82. lk = SearchToolBlock.objects.filter(name=mokuainame)
  83. if lk.exists():
  84. return response.json(404, repr("已存在模块名"))
  85. nowTime = int(time.time())
  86. try:
  87. SearchToolBlock.objects.create(name=mokuainame,type=type, addTime=nowTime, updTime=nowTime)
  88. except Exception as e:
  89. print(repr(e))
  90. return response.json(404, repr(e))
  91. else:
  92. return response.json(0)
  93. '''
  94. post_data = {
  95. word_key_id:1,
  96. word_key:xxx,
  97. word_arr:[
  98. {'lang':'','val':''},
  99. {'lang':'','val':''},
  100. {'lang':'','val':''}
  101. ]
  102. }
  103. '''
  104. def do_update(self, request_dict, response, userID):
  105. mokuainame = request_dict.get('name', None)
  106. mokuaitype = request_dict.get('type', None)
  107. mokuaiid = request_dict.get('id', None)
  108. mk = SearchToolBlock.objects.filter(name=mokuainame)
  109. if mk.exists():
  110. return response.json(404, repr("已存在模块名"))
  111. lk = SearchToolBlock.objects.filter(id=mokuaiid)
  112. nowTime = int(time.time())
  113. if lk.exists():
  114. lk.update(updTime=nowTime,name=mokuainame)
  115. return response.json(0)
  116. else:
  117. return response.json(404)
  118. def do_delete(self, request_dict, response):
  119. print('delete')
  120. mokuaiid = request_dict.get('id', None)
  121. try:
  122. SearchToolBlock.objects.get(id=mokuaiid).delete()
  123. except Exception as e:
  124. return response.json(404, repr(e))
  125. else:
  126. return response.json(0)
  127. def do_query(self, request_dict, response, userID):
  128. page = int(request_dict.get('page', None))
  129. line = int(request_dict.get('line', None))
  130. searchKey = request_dict.get('searchKey', None)
  131. searchVal = request_dict.get('searchVal', None)
  132. type = request_dict.get('type', None)
  133. if searchKey:
  134. searchKey = searchKey.strip()
  135. if searchVal:
  136. searchKey = searchKey.strip()
  137. orderByupdate = request_dict.get('orderByupdate', 0)
  138. if page and line:
  139. search_qs = SearchToolBlock.objects.filter(type__contains=type).values('name', 'type', 'id','updTime')
  140. if type == 0:
  141. search_qs = SearchToolBlock.objects.filter(type__in=(0))
  142. elif type == 1:
  143. search_qs = SearchToolBlock.objects.filter(type__in=(1))
  144. if searchKey and searchVal:
  145. search_qs = search_qs.filter(name__contains=searchVal)
  146. count = search_qs.count()
  147. if orderByupdate == 1:
  148. search_qs = search_qs.order_by('updTime')
  149. else:
  150. search_qs = search_qs.order_by('-updTime')
  151. search_qs = search_qs[(page - 1) * line:page * line]
  152. k_list = []
  153. lw_dict = {}
  154. for lk in search_qs:
  155. k_list.append(lk['name'])
  156. lw_dict[lk['name']] = {'updTime': lk['updTime']}
  157. res = {
  158. 'la_list': list(search_qs),
  159. 'lw_dict': lw_dict,
  160. # 'lk_list': list(lk_qs),
  161. # 'lv_list': list(lv_qs)
  162. 'count': count
  163. }
  164. return response.json(0, res)
  165. else:
  166. return response.json(444, 'page,line')
  167. def do_query_key(self, request_dict, response, userID):
  168. page = int(request_dict.get('page', None))
  169. line = int(request_dict.get('line', None))
  170. searchKey = request_dict.get('searchKey', None)
  171. searchVal = request_dict.get('searchVal', None)
  172. type = request_dict.get('type', None)
  173. if searchKey:
  174. searchKey = searchKey.strip()
  175. if searchVal:
  176. searchKey = searchKey.strip()
  177. orderByupdate = request_dict.get('orderByupdate', 0)
  178. if page and line:
  179. block_qs = SearchToolBlock.objects.filter(type__contains=type).values('id', 'name')
  180. k_list = []
  181. for bk in block_qs:
  182. k_list.append(bk['id'])
  183. search_qs = SearchToolKeyModel.objects.filter(bk__id__in=k_list).values('lk__id','lk__word_key','lk__updTime','bk__id','bk__name')
  184. #search_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime', 'project__id')
  185. if searchKey and searchVal:
  186. if searchKey == 'bk_name':
  187. search_qs = search_qs.filter(bk__name__contains=searchVal)
  188. else :
  189. search_qs = search_qs.filter(lk__word_key__contains=searchVal)
  190. count = search_qs.count()
  191. if orderByupdate == 1:
  192. search_qs = search_qs.order_by('updTime')
  193. else:
  194. search_qs = search_qs.order_by('-lk__updTime')
  195. search_qs = search_qs[(page - 1) * line:page * line]
  196. lw_dict = {}
  197. for lk in search_qs:
  198. lw_dict[lk['lk__id']] = {'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key'], 'updTime': lk['lk__updTime'],
  199. 'bk_id': lk['bk__id'], 'name': lk['bk__name']}
  200. res = {
  201. 'la_list': lw_dict,
  202. 'count': count
  203. }
  204. return response.json(0, res)
  205. else:
  206. return response.json(444, 'page,line')
  207. def do_query_location(self, request_dict, response, userID):
  208. page = int(request_dict.get('page', None))
  209. line = int(request_dict.get('line', None))
  210. searchKey = request_dict.get('searchKey', None)
  211. searchVal = request_dict.get('searchVal', None)
  212. type = request_dict.get('type', None)
  213. if searchKey:
  214. searchKey = searchKey.strip()
  215. if searchVal:
  216. searchKey = searchKey.strip()
  217. orderByupdate = request_dict.get('orderByupdate', 0)
  218. if page and line:
  219. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', "searchtoolkeymodel__lk__id")
  220. k_list = []
  221. for bk in block_qs:
  222. k_list.append(bk['searchtoolkeymodel__lk__id'])
  223. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key')
  224. k_list = []
  225. for lk in lk_qs:
  226. k_list.append(lk['id'])
  227. search_qs = LangLocationModel.objects.filter(lk__id__in=k_list).values('id','filename','line','lk__id','lk__word_key','lk__updTime')
  228. if searchKey and searchVal:
  229. if searchKey == "word_key":
  230. search_qs = search_qs.filter(lk__word_key__contains=searchVal)
  231. elif searchKey == "filename":
  232. search_qs = search_qs.filter(filename__contains=searchVal)
  233. elif searchKey == "line":
  234. search_qs = search_qs.filter(line__contains=searchVal)
  235. count = search_qs.count()
  236. if orderByupdate == 1:
  237. search_qs = search_qs.order_by('updTime')
  238. else:
  239. search_qs = search_qs.order_by('-lk__updTime')
  240. search_qs = search_qs[(page - 1) * line:page * line]
  241. lw_dict = {}
  242. for lk in search_qs:
  243. lw_dict[lk['id']] = {'id': lk['id'], 'filename': lk['filename'], 'line': lk['line'], 'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key']}
  244. res = {
  245. 'la_list': lw_dict,
  246. 'count': count
  247. }
  248. return response.json(0, res)
  249. else:
  250. return response.json(444, 'page,line')
  251. def do_query_translation(self, request_dict, response, userID):
  252. page = int(request_dict.get('page', None))
  253. line = int(request_dict.get('line', None))
  254. searchKey = request_dict.get('searchKey', None)
  255. searchVal = request_dict.get('searchVal', None)
  256. type = request_dict.get('type', None)
  257. if searchKey:
  258. searchKey = searchKey.strip()
  259. if searchVal:
  260. searchKey = searchKey.strip()
  261. orderByupdate = request_dict.get('orderByupdate', 0)
  262. if page and line:
  263. lang_set_list = LangSetModel.objects.filter(user__id=userID).values_list('lang__id', flat=True)
  264. lang_set_list = list(lang_set_list)
  265. la_qs = LangAreaModel.objects.filter(id__in=lang_set_list).values('lang', 'id')
  266. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', "searchtoolkeymodel__lk__id")
  267. k_list = []
  268. for bk in block_qs:
  269. k_list.append(bk['searchtoolkeymodel__lk__id'])
  270. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key')
  271. if searchKey and searchVal:
  272. if searchKey == 'key':
  273. lk_qs = lk_qs.filter(word_key__contains=searchVal)
  274. # lk_qs = lk_qs.filter(word_key=searchVal)
  275. else:
  276. lk_qs = lk_qs.filter(langvalmodel__word_val__contains=searchVal, langvalmodel__la__lang=searchKey)
  277. count = lk_qs.count()
  278. # lk_qs = lk_qs[(page - 1) * line:page * line].values_list('word_key', flat=True)
  279. if orderByupdate == 1:
  280. lk_qs = lk_qs.order_by('updTime')
  281. else:
  282. lk_qs = lk_qs.order_by('-updTime')
  283. lk_qs = lk_qs[(page - 1) * line:page * line].values('id', 'word_key', 'updTime')
  284. k_list = []
  285. lw_dict = {}
  286. for lk in lk_qs:
  287. k_list.append(lk['id'])
  288. lw_dict[lk['id']] = {'word_key': lk['word_key'], 'updTime': lk['updTime']}
  289. lv_qs = LangValModel.objects.filter(lk__id__in=k_list, la__id__in=lang_set_list). \
  290. values('word_val', 'la__id', 'la__lang', 'lk__word_key', 'lk__id', 'status')
  291. user = UserModel.objects.get(id=userID)
  292. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  293. lang_perm_ls = list(lang_perm_ql)
  294. for lv in lv_qs:
  295. lang = lv['la__lang']
  296. # print('lang=%s' % lang)
  297. lw_dict[lv['lk__id']][lang] = lv['word_val']
  298. if user.role_type == 1:
  299. lw_dict[lv['lk__id']]['status'] = 0
  300. elif lang in lang_perm_ls:
  301. lw_dict[lv['lk__id']]['status'] = lv['status']
  302. res = {
  303. 'la_list': list(la_qs),
  304. 'lw_dict': lw_dict,
  305. # 'lk_list': list(lk_qs),
  306. # 'lv_list': list(lv_qs)
  307. 'count': count
  308. }
  309. return response.json(0, res)
  310. else:
  311. return response.json(444, 'page,line')
  312. def do_query_saveOrEditKeyFrom(self, request_dict, response):
  313. keyid = request_dict.get('keyid', None)
  314. type = request_dict.get('type', None)
  315. block_qs = SearchToolBlock.objects.filter(type=type).values('id', 'name')
  316. if keyid:
  317. search_qs = SearchToolKeyModel.objects.filter(lk__id=keyid).values('lk__id','lk__word_key','lk__updTime','bk__id','bk__name')
  318. lw_dict = {}
  319. for lk in search_qs:
  320. lw_dict[lk['lk__id']] = {'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key'],
  321. 'updTime': lk['lk__updTime'],
  322. 'bk_id': lk['bk__id'], 'name': lk['bk__name']}
  323. res = {
  324. 'la_list': lw_dict,
  325. 'lw_dict': list(block_qs)
  326. }
  327. return response.json(0, res)
  328. else:
  329. res = {
  330. 'lw_dict': list(block_qs)
  331. }
  332. return response.json(0, res)
  333. def do_query_saveOrEditLocationFrom(self, request_dict, response):
  334. locationid = request_dict.get('locationid', None)
  335. type = request_dict.get('type', None)
  336. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', 'searchtoolkeymodel__lk__id')
  337. k_list = []
  338. for bk in block_qs:
  339. k_list.append(bk['searchtoolkeymodel__lk__id'])
  340. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime')
  341. #lk_qs = LangKeyModel.objects.filter(project_id=project_id).values('id', 'word_key')
  342. if locationid:
  343. search_qs = LangLocationModel.objects.filter(id=locationid).values('id','filename','line','lk__id','lk__word_key','lk__updTime')
  344. lw_dict = {}
  345. for lk in search_qs:
  346. lw_dict[lk['id']] = {'id': lk['id'], 'filename': lk['filename'], 'line': lk['line'], 'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key']}
  347. res = {
  348. 'la_list': lw_dict,
  349. 'lw_dict': list(lk_qs)
  350. }
  351. return response.json(0, res)
  352. else:
  353. res = {
  354. 'lw_dict': list(lk_qs)
  355. }
  356. return response.json(0, res)
  357. def do_query_saveOrEditTranslationFrom(self, request_dict, response, userID):
  358. valueid = request_dict.get('valueid', None)
  359. type = request_dict.get('type', None)
  360. # lk_qs = LangKeyModel.objects.filter(project_id=project_id).values('id', 'word_key')
  361. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', 'searchtoolkeymodel__lk__id')
  362. k_list = []
  363. for bk in block_qs:
  364. k_list.append(bk['searchtoolkeymodel__lk__id'])
  365. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime')
  366. if valueid:
  367. lang_set_list = LangSetModel.objects.filter(user__id=userID).values_list('lang__id', flat=True)
  368. lang_set_list = list(lang_set_list)
  369. la_qs = LangAreaModel.objects.filter(id__in=lang_set_list).values('lang', 'id')
  370. # lk_qs = LangKeyModel.objects.filter(project_id=project_id).values('id', 'word_key', 'updTime')
  371. k_list = []
  372. lw_dict = {}
  373. for lk in lk_qs:
  374. k_list.append(lk['id'])
  375. lw_dict[lk['id']] = {'word_key': lk['word_key'], 'updTime': lk['updTime']}
  376. lv_qs = LangValModel.objects.filter(lk__id__in=k_list, la__id__in=lang_set_list). \
  377. values('word_val', 'la__id', 'la__lang', 'lk__word_key', 'lk__id', 'status')
  378. user = UserModel.objects.get(id=userID)
  379. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  380. lang_perm_ls = list(lang_perm_ql)
  381. for lv in lv_qs:
  382. lang = lv['la__lang']
  383. # print('lang=%s' % lang)
  384. lw_dict[lv['lk__id']][lang] = lv['word_val']
  385. if user.role_type == 1:
  386. lw_dict[lv['lk__id']]['status'] = 0
  387. elif lang in lang_perm_ls:
  388. lw_dict[lv['lk__id']]['status'] = lv['status']
  389. res = {
  390. 'la_list': list(la_qs),
  391. 'lw_dict': lw_dict,
  392. 'lk_dict': list(lk_qs)
  393. }
  394. return response.json(0, res)
  395. else:
  396. res = {
  397. 'lk_dict': list(lk_qs)
  398. }
  399. return response.json(0, res)
  400. def do_saveOrExitKey(self, request_dict, response):
  401. id = request_dict.get('id', None)
  402. bk_id = request_dict.get('bk_id', None)
  403. word_key = request_dict.get('word_key', None)
  404. type = request_dict.get('type', None)
  405. project_id = request_dict.get('project_id', None)
  406. if not type:
  407. return response.json(444, 'type')
  408. nowTime = int(time.time())
  409. try:
  410. if id:
  411. update_dict = {
  412. 'word_key': word_key,
  413. 'updTime': nowTime
  414. }
  415. LangKeyModel.objects.filter(id=id).update(**update_dict)
  416. SearchToolKeyModel.objects.filter(lk__id=id).update(bk_id = bk_id )
  417. else:
  418. lkModel = LangKeyModel.objects.create(word_key=word_key, type=0, project_id=project_id, addTime=nowTime, updTime=nowTime)
  419. SearchToolKeyModel.objects.create(lk = lkModel, bk_id = bk_id)
  420. except Exception as e:
  421. print(repr(e))
  422. return response.json(404, repr(e))
  423. else:
  424. return response.json(0)
  425. def do_saveOrExitLocation(self, request_dict, response):
  426. id = request_dict.get('id', None)
  427. filename = request_dict.get('filename', None)
  428. line = request_dict.get('line', None)
  429. lk_id = request_dict.get('lk_id', None)
  430. try:
  431. if id:
  432. update_dict = {
  433. 'filename': filename,
  434. 'line': line,
  435. 'lk_id' : lk_id
  436. }
  437. LangLocationModel.objects.filter(id=id).update(**update_dict )
  438. else:
  439. LangLocationModel.objects.create(filename=filename, line=line, lk_id=lk_id)
  440. except Exception as e:
  441. print(repr(e))
  442. return response.json(404, repr(e))
  443. else:
  444. return response.json(0)
  445. def do_saveOrExitTranslation(self, request_dict, response):
  446. id = request_dict.get('id', None)
  447. lk_id = request_dict.get('lk_id', None)
  448. word_arr = request_dict.get('word_arr', None)
  449. nowTime = int(time.time())
  450. try:
  451. if id:
  452. for w in word_arr:
  453. lm =LangValModel.objects.filter(lk__id=lk_id, la_id=w['la_id'])
  454. if lm :
  455. lm.delete()
  456. LangValModel.objects.create(la_id=w['la_id'], lk_id=lk_id, addTime=nowTime, updTime=nowTime,
  457. word_val=w['val'], status=1)
  458. else:
  459. for w in word_arr:
  460. LangValModel.objects.create(la_id=w['la_id'], lk_id=lk_id, addTime=nowTime, updTime=nowTime,
  461. word_val=w['val'], status=1)
  462. except Exception as e:
  463. print(repr(e))
  464. return response.json(404, repr(e))
  465. else:
  466. return response.json(0)
  467. def do_deleteKey(self, request_dict, response):
  468. print('delete')
  469. id = request_dict.get('id', None)
  470. try:
  471. LangKeyModel.objects.get(id=id).delete()
  472. except Exception as e:
  473. return response.json(404, repr(e))
  474. else:
  475. return response.json(0)
  476. def do_deletemessage(self, request_dict, response):
  477. print('delete')
  478. messageid = request_dict.get('id', None)
  479. try:
  480. SearchToolMessage.objects.get(id=messageid).delete()
  481. except Exception as e:
  482. return response.json(404, repr(e))
  483. else:
  484. return response.json(0)
  485. def do_reset(self, request_dict, response, userID):
  486. return response.json(10,"数据已重置")