SearchToolController.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  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, 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. if operation == 'add_single':
  39. return self.do_add_single(request_dict, response)
  40. elif operation == 'deleteAll':
  41. return self.do_delete_all(request_dict, response)
  42. else:
  43. token = request_dict.get('token', None)
  44. tko = TokenObject(token)
  45. if tko.code == 0:
  46. userID = tko.userID
  47. if operation == 'add':
  48. return self.do_add(request_dict, response)
  49. elif operation == 'update':
  50. return self.do_update(request_dict, response, userID)
  51. elif operation == 'delete':
  52. return self.do_delete(request_dict, response)
  53. # search index table
  54. elif operation == 'query_context':
  55. return self.do_query(request_dict, response, userID)
  56. elif operation == 'query_key':
  57. return self.do_query_key(request_dict, response, userID)
  58. elif operation == 'query_location':
  59. return self.do_query_location(request_dict, response, userID)
  60. elif operation == 'query_translation':
  61. return self.do_query_translation(request_dict, response, userID)
  62. elif operation == 'query_saveOrEditKeyFrom':
  63. return self.do_query_saveOrEditKeyFrom(request_dict, response)
  64. elif operation == 'query_saveOrEditLocationFrom':
  65. return self.do_query_saveOrEditLocationFrom(request_dict, response)
  66. elif operation == 'query_saveOrEditTranslationFrom':
  67. return self.do_query_saveOrEditTranslationFrom(request_dict, response, userID)
  68. elif operation == 'saveOrExitKey':
  69. return self.do_saveOrExitKey(request_dict, response)
  70. elif operation == 'saveOrExitLocation':
  71. return self.do_saveOrExitLocation(request_dict, response)
  72. elif operation == 'saveOrExitTranslation':
  73. return self.do_saveOrExitTranslation(request_dict, response)
  74. elif operation == 'deleteKey':
  75. return self.do_deleteKey(request_dict, response)
  76. elif operation == 'deleteLocation':
  77. return self.do_deleteLocation(request_dict, response)
  78. elif operation == 'reset':
  79. return self.do_reset(request_dict, response, userID)
  80. else:
  81. return response.json(414)
  82. else:
  83. return response.json(tko.code)
  84. def do_add(self, request_dict, response):
  85. mokuainame = request_dict.get('name', None)
  86. type = request_dict.get('type', None)
  87. if not type:
  88. return response.json(444, 'type')
  89. lk = SearchToolBlock.objects.filter(name=mokuainame)
  90. if lk.exists():
  91. return response.json(404, repr("已存在模块名"))
  92. nowTime = int(time.time())
  93. try:
  94. SearchToolBlock.objects.create(name=mokuainame,type=type, addTime=nowTime, updTime=nowTime)
  95. except Exception as e:
  96. print(repr(e))
  97. return response.json(404, repr(e))
  98. else:
  99. return response.json(0)
  100. '''
  101. post_data = {
  102. word_key_id:1,
  103. word_key:xxx,
  104. word_arr:[
  105. {'lang':'','val':''},
  106. {'lang':'','val':''},
  107. {'lang':'','val':''}
  108. ]
  109. }
  110. '''
  111. def do_update(self, request_dict, response, userID):
  112. mokuainame = request_dict.get('name', None)
  113. mokuaitype = request_dict.get('type', None)
  114. mokuaiid = request_dict.get('id', None)
  115. mk = SearchToolBlock.objects.filter(name=mokuainame)
  116. if mk.exists():
  117. return response.json(404, repr("已存在模块名"))
  118. lk = SearchToolBlock.objects.filter(id=mokuaiid)
  119. nowTime = int(time.time())
  120. if lk.exists():
  121. lk.update(updTime=nowTime,name=mokuainame)
  122. return response.json(0)
  123. else:
  124. return response.json(404)
  125. def do_delete(self, request_dict, response):
  126. print('delete')
  127. mokuaiid = request_dict.get('id', None)
  128. try:
  129. SearchToolBlock.objects.get(id=mokuaiid).delete()
  130. except Exception as e:
  131. return response.json(404, repr(e))
  132. else:
  133. return response.json(0)
  134. def do_query(self, request_dict, response, userID):
  135. page = int(request_dict.get('page', None))
  136. line = int(request_dict.get('line', None))
  137. searchKey = request_dict.get('searchKey', None)
  138. searchVal = request_dict.get('searchVal', None)
  139. type = request_dict.get('type', None)
  140. if searchKey:
  141. searchKey = searchKey.strip()
  142. if searchVal:
  143. searchKey = searchKey.strip()
  144. orderByupdate = request_dict.get('orderByupdate', 0)
  145. if page and line:
  146. search_qs = SearchToolBlock.objects.filter(type__contains=type).values('name', 'type', 'id','updTime')
  147. if type == 0:
  148. search_qs = SearchToolBlock.objects.filter(type__in=(0))
  149. elif type == 1:
  150. search_qs = SearchToolBlock.objects.filter(type__in=(1))
  151. if searchKey and searchVal:
  152. search_qs = search_qs.filter(name__contains=searchVal)
  153. count = search_qs.count()
  154. if orderByupdate == 1:
  155. search_qs = search_qs.order_by('updTime')
  156. else:
  157. search_qs = search_qs.order_by('-updTime')
  158. search_qs = search_qs[(page - 1) * line:page * line]
  159. k_list = []
  160. lw_dict = {}
  161. for lk in search_qs:
  162. k_list.append(lk['name'])
  163. lw_dict[lk['name']] = {'updTime': lk['updTime']}
  164. res = {
  165. 'la_list': list(search_qs),
  166. 'lw_dict': lw_dict,
  167. # 'lk_list': list(lk_qs),
  168. # 'lv_list': list(lv_qs)
  169. 'count': count
  170. }
  171. return response.json(0, res)
  172. else:
  173. return response.json(444, 'page,line')
  174. def do_query_key(self, request_dict, response, userID):
  175. page = int(request_dict.get('page', None))
  176. line = int(request_dict.get('line', None))
  177. searchKey = request_dict.get('searchKey', None)
  178. searchVal = request_dict.get('searchVal', None)
  179. type = request_dict.get('type', None)
  180. if searchKey:
  181. searchKey = searchKey.strip()
  182. if searchVal:
  183. searchKey = searchKey.strip()
  184. orderByupdate = request_dict.get('orderByupdate', 0)
  185. if page and line:
  186. block_qs = SearchToolBlock.objects.filter(type__contains=type).values('id', 'name')
  187. k_list = []
  188. for bk in block_qs:
  189. k_list.append(bk['id'])
  190. search_qs = SearchToolKeyModel.objects.filter(bk__id__in=k_list).values('lk__id','lk__word_key','lk__updTime','bk__id','bk__name')
  191. #search_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime', 'project__id')
  192. if searchKey and searchVal:
  193. if searchKey == 'bk_name':
  194. search_qs = search_qs.filter(bk__name__contains=searchVal)
  195. else :
  196. search_qs = search_qs.filter(lk__word_key__contains=searchVal)
  197. count = search_qs.count()
  198. if orderByupdate == 1:
  199. search_qs = search_qs.order_by('lk__updTime')
  200. else:
  201. search_qs = search_qs.order_by('-lk__updTime')
  202. search_qs = search_qs[(page - 1) * line:page * line]
  203. lw_dict = {}
  204. for lk in search_qs:
  205. lw_dict[lk['lk__id']] = {'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key'], 'updTime': lk['lk__updTime'],
  206. 'bk_id': lk['bk__id'], 'name': lk['bk__name']}
  207. res = {
  208. 'la_list': lw_dict,
  209. 'count': count
  210. }
  211. return response.json(0, res)
  212. else:
  213. return response.json(444, 'page,line')
  214. def do_query_location(self, request_dict, response, userID):
  215. page = int(request_dict.get('page', None))
  216. line = int(request_dict.get('line', None))
  217. searchKey = request_dict.get('searchKey', None)
  218. searchVal = request_dict.get('searchVal', None)
  219. type = request_dict.get('type', None)
  220. if searchKey:
  221. searchKey = searchKey.strip()
  222. if searchVal:
  223. searchKey = searchKey.strip()
  224. orderByupdate = request_dict.get('orderByupdate', 0)
  225. if page and line:
  226. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', "searchtoolkeymodel__lk__id")
  227. k_list = []
  228. for bk in block_qs:
  229. k_list.append(bk['searchtoolkeymodel__lk__id'])
  230. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key')
  231. k_list = []
  232. for lk in lk_qs:
  233. k_list.append(lk['id'])
  234. search_qs = LangLocationModel.objects.filter(lk__id__in=k_list).values('id','filename','line','lk__id','lk__word_key','lk__updTime')
  235. if searchKey and searchVal:
  236. if searchKey == "word_key":
  237. search_qs = search_qs.filter(lk__word_key__contains=searchVal)
  238. elif searchKey == "filename":
  239. search_qs = search_qs.filter(filename__contains=searchVal)
  240. elif searchKey == "line":
  241. search_qs = search_qs.filter(line__contains=searchVal)
  242. count = search_qs.count()
  243. # if orderByupdate == 1:
  244. # search_qs = search_qs.order_by('updTime')
  245. # else:
  246. # search_qs = search_qs.order_by('-lk__updTime')
  247. # 根据 word_key 字母排序
  248. search_qs = search_qs.order_by('lk__word_key')
  249. search_qs = search_qs[(page - 1) * line:page * line]
  250. lw_dict = {}
  251. for lk in search_qs:
  252. lw_dict[lk['id']] = {'id': lk['id'], 'filename': lk['filename'], 'line': lk['line'], 'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key']}
  253. res = {
  254. 'la_list': lw_dict,
  255. 'count': count
  256. }
  257. return response.json(0, res)
  258. else:
  259. return response.json(444, 'page,line')
  260. def do_query_translation(self, request_dict, response, userID):
  261. page = int(request_dict.get('page', None))
  262. line = int(request_dict.get('line', None))
  263. searchKey = request_dict.get('searchKey', None)
  264. searchVal = request_dict.get('searchVal', None)
  265. type = request_dict.get('type', None)
  266. if searchKey:
  267. searchKey = searchKey.strip()
  268. if searchVal:
  269. searchKey = searchKey.strip()
  270. orderByupdate = request_dict.get('orderByupdate', 0)
  271. if page and line:
  272. lang_set_list = LangSetModel.objects.filter(user__id=userID).values_list('lang__id', flat=True)
  273. lang_set_list = list(lang_set_list)
  274. la_qs = LangAreaModel.objects.filter(id__in=lang_set_list).values('lang', 'id')
  275. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', "searchtoolkeymodel__lk__id")
  276. k_list = []
  277. for bk in block_qs:
  278. k_list.append(bk['searchtoolkeymodel__lk__id'])
  279. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime')
  280. if searchKey and searchVal:
  281. if searchKey == 'key':
  282. lk_qs = lk_qs.filter(word_key__contains=searchVal)
  283. # lk_qs = lk_qs.filter(word_key=searchVal)
  284. else:
  285. lk_qs = lk_qs.filter(langvalmodel__word_val__contains=searchVal, langvalmodel__la__lang=searchKey)
  286. count = lk_qs.count()
  287. # lk_qs = lk_qs[(page - 1) * line:page * line].values_list('word_key', flat=True)
  288. if orderByupdate == 1:
  289. lk_qs = lk_qs.order_by('updTime')
  290. else:
  291. lk_qs = lk_qs.order_by('-updTime')
  292. lk_qs = lk_qs[(page - 1) * line:page * line]
  293. k_list = []
  294. lw_dict = {}
  295. for lk in lk_qs:
  296. k_list.append(lk['id'])
  297. lw_dict[lk['id']] = {'word_key': lk['word_key'], 'updTime': lk['updTime']}
  298. lv_qs = LangValModel.objects.filter(lk__id__in=k_list, la__id__in=lang_set_list). \
  299. values('word_val', 'la__id', 'la__lang', 'lk__word_key', 'lk__id', 'status')
  300. user = UserModel.objects.get(id=userID)
  301. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  302. lang_perm_ls = list(lang_perm_ql)
  303. for lv in lv_qs:
  304. lang = lv['la__lang']
  305. # print('lang=%s' % lang)
  306. lw_dict[lv['lk__id']][lang] = lv['word_val']
  307. if user.role_type == 1:
  308. lw_dict[lv['lk__id']]['status'] = 0
  309. elif lang in lang_perm_ls:
  310. lw_dict[lv['lk__id']]['status'] = lv['status']
  311. res = {
  312. 'la_list': list(la_qs),
  313. 'lw_dict': lw_dict,
  314. # 'lk_list': list(lk_qs),
  315. # 'lv_list': list(lv_qs)
  316. 'count': count
  317. }
  318. return response.json(0, res)
  319. else:
  320. return response.json(444, 'page,line')
  321. def do_query_saveOrEditKeyFrom(self, request_dict, response):
  322. keyid = request_dict.get('keyid', None)
  323. type = request_dict.get('type', None)
  324. block_qs = SearchToolBlock.objects.filter(type=type).values('id', 'name')
  325. if keyid:
  326. search_qs = SearchToolKeyModel.objects.filter(lk__id=keyid).values('lk__id','lk__word_key','lk__updTime','bk__id','bk__name')
  327. lw_dict = {}
  328. for lk in search_qs:
  329. lw_dict[lk['lk__id']] = {'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key'],
  330. 'updTime': lk['lk__updTime'],
  331. 'bk_id': lk['bk__id'], 'name': lk['bk__name']}
  332. res = {
  333. 'la_list': lw_dict,
  334. 'lw_dict': list(block_qs)
  335. }
  336. return response.json(0, res)
  337. else:
  338. res = {
  339. 'lw_dict': list(block_qs)
  340. }
  341. return response.json(0, res)
  342. def do_query_saveOrEditLocationFrom(self, request_dict, response):
  343. locationid = request_dict.get('locationid', None)
  344. type = request_dict.get('type', None)
  345. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', 'searchtoolkeymodel__lk__id')
  346. k_list = []
  347. for bk in block_qs:
  348. k_list.append(bk['searchtoolkeymodel__lk__id'])
  349. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime')
  350. #lk_qs = LangKeyModel.objects.filter(project_id=project_id).values('id', 'word_key')
  351. if locationid:
  352. search_qs = LangLocationModel.objects.filter(id=locationid).values('id','filename','line','lk__id','lk__word_key','lk__updTime')
  353. lw_dict = {}
  354. for lk in search_qs:
  355. lw_dict[lk['id']] = {'id': lk['id'], 'filename': lk['filename'], 'line': lk['line'], 'lk_id': lk['lk__id'], 'word_key': lk['lk__word_key']}
  356. res = {
  357. 'la_list': lw_dict,
  358. 'lw_dict': list(lk_qs)
  359. }
  360. return response.json(0, res)
  361. else:
  362. res = {
  363. 'lw_dict': list(lk_qs)
  364. }
  365. return response.json(0, res)
  366. def do_query_saveOrEditTranslationFrom(self, request_dict, response, userID):
  367. valueid = request_dict.get('valueid', None)
  368. type = request_dict.get('type', None)
  369. # lk_qs = LangKeyModel.objects.filter(project_id=project_id).values('id', 'word_key')
  370. block_qs = SearchToolBlock.objects.filter(type=type).values('name', 'id', 'searchtoolkeymodel__lk__id')
  371. k_list = []
  372. for bk in block_qs:
  373. k_list.append(bk['searchtoolkeymodel__lk__id'])
  374. lk_qs = LangKeyModel.objects.filter(id__in=k_list).values('id', 'word_key', 'updTime')
  375. if valueid:
  376. lang_set_list = LangSetModel.objects.filter(user__id=userID).values_list('lang__id', flat=True)
  377. lang_set_list = list(lang_set_list)
  378. la_qs = LangAreaModel.objects.filter(id__in=lang_set_list).values('lang', 'id').order_by('id')
  379. # lk_qs = LangKeyModel.objects.filter(project_id=project_id).values('id', 'word_key', 'updTime')
  380. k_list = []
  381. lw_dict = {}
  382. for lk in lk_qs:
  383. k_list.append(lk['id'])
  384. lw_dict[lk['id']] = {'word_key': lk['word_key'], 'updTime': lk['updTime']}
  385. lv_qs = LangValModel.objects.filter(lk__id__in=k_list, la__id__in=lang_set_list). \
  386. values('word_val', 'la__id', 'la__lang', 'lk__word_key', 'lk__id', 'status')
  387. user = UserModel.objects.get(id=userID)
  388. lang_perm_ql = LangPermModel.objects.filter(user__id=userID).values_list('lang__lang', flat=True)
  389. lang_perm_ls = list(lang_perm_ql)
  390. for lv in lv_qs:
  391. lang = lv['la__lang']
  392. # print('lang=%s' % lang)
  393. lw_dict[lv['lk__id']][lang] = lv['word_val']
  394. if user.role_type == 1:
  395. lw_dict[lv['lk__id']]['status'] = 0
  396. elif lang in lang_perm_ls:
  397. lw_dict[lv['lk__id']]['status'] = lv['status']
  398. res = {
  399. 'la_list': list(la_qs),
  400. 'lw_dict': lw_dict,
  401. 'lk_dict': list(lk_qs)
  402. }
  403. return response.json(0, res)
  404. else:
  405. res = {
  406. 'lk_dict': list(lk_qs)
  407. }
  408. return response.json(0, res)
  409. def do_saveOrExitKey(self, request_dict, response):
  410. id = request_dict.get('id', None)
  411. bk_id = request_dict.get('bk_id', None)
  412. word_key = request_dict.get('word_key', None)
  413. type = request_dict.get('type', None)
  414. project_id = request_dict.get('project_id', None)
  415. if not type:
  416. return response.json(444, 'type')
  417. nowTime = int(time.time())
  418. try:
  419. if id:
  420. update_dict = {
  421. 'word_key': word_key,
  422. 'updTime': nowTime
  423. }
  424. LangKeyModel.objects.filter(id=id).update(**update_dict)
  425. SearchToolKeyModel.objects.filter(lk__id=id).update(bk_id = bk_id )
  426. else:
  427. lkModel = LangKeyModel.objects.create(word_key=word_key, type=0, project_id=project_id, addTime=nowTime, updTime=nowTime)
  428. SearchToolKeyModel.objects.create(lk = lkModel, bk_id = bk_id)
  429. except Exception as e:
  430. print(repr(e))
  431. return response.json(404, repr(e))
  432. else:
  433. return response.json(0)
  434. def do_saveOrExitLocation(self, request_dict, response):
  435. id = request_dict.get('id', None)
  436. filename = request_dict.get('filename', None)
  437. line = request_dict.get('line', None)
  438. lk_id = request_dict.get('lk_id', None)
  439. try:
  440. if id:
  441. update_dict = {
  442. 'filename': filename,
  443. 'line': line,
  444. 'lk_id' : lk_id
  445. }
  446. LangLocationModel.objects.filter(id=id).update(**update_dict )
  447. else:
  448. LangLocationModel.objects.create(filename=filename, line=line, lk_id=lk_id)
  449. except Exception as e:
  450. print(repr(e))
  451. return response.json(404, repr(e))
  452. else:
  453. return response.json(0)
  454. def do_saveOrExitTranslation(self, request_dict, response):
  455. id = request_dict.get('id', None)
  456. lk_id = request_dict.get('lk_id', None)
  457. word_arr = request_dict.get('word_arr', None)
  458. nowTime = int(time.time())
  459. try:
  460. if id:
  461. for w in word_arr:
  462. lm =LangValModel.objects.filter(lk__id=lk_id, la_id=w['la_id'])
  463. if lm :
  464. lm.delete()
  465. LangValModel.objects.create(la_id=w['la_id'], lk_id=lk_id, addTime=nowTime, updTime=nowTime,
  466. word_val=w['val'], status=1)
  467. else:
  468. for w in word_arr:
  469. LangValModel.objects.create(la_id=w['la_id'], lk_id=lk_id, addTime=nowTime, updTime=nowTime,
  470. word_val=w['val'], status=1)
  471. except Exception as e:
  472. print(repr(e))
  473. return response.json(404, repr(e))
  474. else:
  475. return response.json(0)
  476. def do_deleteKey(self, request_dict, response):
  477. print('delete')
  478. id = request_dict.get('id', None)
  479. try:
  480. LangKeyModel.objects.get(id=id).delete()
  481. except Exception as e:
  482. return response.json(404, repr(e))
  483. else:
  484. return response.json(0)
  485. def do_deleteLocation(self, request_dict, response):
  486. id = request_dict.get('id', None)
  487. try:
  488. LangLocationModel.objects.get(id=id).delete()
  489. except Exception as e:
  490. return response.json(404, repr(e))
  491. else:
  492. return response.json(0)
  493. def do_reset(self, request_dict, response, userID):
  494. return response.json(10,"数据已重置")
  495. def do_add_single(self, request_dict, response):
  496. word_class = request_dict.get('word_class', None)
  497. word_key = request_dict.get('word_key', None)
  498. word_array = request_dict.get('word_array', None)
  499. location_array = request_dict.get('location_array', None)
  500. if word_class and word_key and word_array and location_array:
  501. # SearchToolBlock
  502. # 检查是否已有该 name
  503. searchToolBlock_qs = SearchToolBlock.objects.filter(name=word_class)
  504. if searchToolBlock_qs.exists(): # 更新 updTime
  505. addTime = int(time.time())
  506. searchToolBlock_model = searchToolBlock_qs[0]
  507. searchToolBlock_model.updTime = addTime
  508. searchToolBlock_model.save()
  509. else: # 插入新数据
  510. addTime = int(time.time())
  511. dataDict = {
  512. 'name' : word_class,
  513. 'type': '0',
  514. 'addTime': addTime,
  515. 'updTime': addTime,
  516. }
  517. searchToolBlock_model = SearchToolBlock.objects.create(**dataDict)
  518. dataDict.clear()
  519. # LangKeyModel,SearchToolKeyModel
  520. word_key = word_class + '_' + word_key # 拼接word_class和word_key,避免word_key重复时写不进
  521. # 检查是否已有该 word_key
  522. langKey_qs = LangKeyModel.objects.filter(word_key=word_key)
  523. if langKey_qs.exists(): # 更新 updTime
  524. addTime = int(time.time())
  525. langKey_model = langKey_qs[0]
  526. langKey_model.updTime = addTime
  527. langKey_model.save()
  528. else: # 插入新数据, 更新SearchToolKeyModel
  529. addTime = int(time.time())
  530. dataDict = {
  531. 'word_key': word_key,
  532. 'project_id': 4,
  533. 'type': 0,
  534. 'addTime': addTime,
  535. 'updTime': addTime,
  536. }
  537. langKey_model = LangKeyModel.objects.create(**dataDict)
  538. dataDict.clear()
  539. # SearchToolKeyModel.objects.create(bk_id=searchToolBlock_model.id, lk_id=langKey_model.id)
  540. SearchToolKeyModel.objects.create(bk=searchToolBlock_model, lk=langKey_model)
  541. # LangLocationModel
  542. locations = list(location_array)
  543. for location in locations:
  544. # 不更新ls,filename和line三者都相等的
  545. if not LangLocationModel.objects.filter(lk=langKey_model, filename=location['filename'], line=location['line']).exists():
  546. dataDict = {
  547. 'lk': langKey_model,
  548. 'filename': location['filename'],
  549. 'line': location['line']
  550. }
  551. LangLocationModel.objects.create(**dataDict)
  552. dataDict.clear()
  553. # LangValModel
  554. translations = list(word_array)
  555. for translation in translations:
  556. la_id = translation['la_id']
  557. langArea = LangAreaModel.objects.filter(id=la_id)[0]
  558. translationValue = translation['val']
  559. addTime = int(time.time())
  560. dataDict = {
  561. 'lk': langKey_model,
  562. 'la': langArea,
  563. 'word_val': translationValue,
  564. 'addTime': addTime,
  565. 'updTime': addTime,
  566. 'status': 1,
  567. }
  568. LangValModel.objects.create(**dataDict)
  569. dataDict.clear()
  570. return response.json(0)
  571. else:
  572. return response.json(444)
  573. def do_delete_all(self, request_dict, response):
  574. LangKeyModel.objects.filter(project__id=4).delete()