PctestController.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. import hashlib
  2. import logging
  3. import shutil
  4. import time
  5. import traceback
  6. import os
  7. from urllib import request, parse
  8. import requests
  9. from django.http import HttpResponse
  10. import jwt
  11. from django.views.generic.base import View
  12. from Model.models import PctestuserModel, PctestjobModel, PctestdeviceModel,\
  13. PctestfunctionModel, PctestjobdeviceModel, PctestModel, PctestlogModel
  14. from Object.ResponseObject import ResponseObject
  15. from Object.TokenObject import TokenObject
  16. from Service.CommonService import CommonService
  17. from Ansjer.config import OAUTH_ACCESS_TOKEN_SECRET
  18. class PcTest(View):
  19. def dispatch(self, requset, *args, **kwargs):
  20. return super(PcTest, self).dispatch(requset, *args, **kwargs)
  21. def get(self, request, *args, **kwargs):
  22. operation = kwargs.get('operation')
  23. request.encoding = 'utf-8'
  24. return self.validation(request.GET, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. operation = kwargs.get('operation')
  27. request.encoding = 'utf-8'
  28. return self.validation(request.POST, request, operation)
  29. def validation(self, request_dict, request, operation):
  30. response = ResponseObject()
  31. if not operation:
  32. return response.json(444, 'operation')
  33. else:
  34. if operation == 'login':
  35. return self.login(request_dict, response)
  36. else:
  37. print(operation)
  38. token = request_dict.get('token', None)
  39. print('token:', token)
  40. # 解析token,验证是否有id
  41. tko = TokenObject1(token)
  42. response.lang = tko.lang
  43. if tko.code != 0:
  44. return response.json(tko.code)
  45. # 获取访问者的id和岗位
  46. userID = tko.id
  47. jobID = tko.job
  48. if jobID == 1:
  49. # 管理员可访问的接口
  50. if operation == 'job/add':
  51. return self.jobadd(request_dict, userID, response)
  52. elif operation == 'job/query':
  53. return self.jobquery(request_dict, userID, response)
  54. elif operation == 'device/add':
  55. return self.deviceadd(request_dict, userID, response)
  56. elif operation == 'device/query':
  57. return self.devicequery(request_dict, userID, response)
  58. elif operation == 'function/add':
  59. return self.functionadd(request_dict, userID, response)
  60. elif operation == 'function/query':
  61. return self.functionquery(request_dict, userID, response)
  62. elif operation == 'job/device/add':
  63. return self.jobdeviceadd(request_dict, userID, response)
  64. elif operation == 'job/device/query':
  65. return self.jobdevicequery(request_dict, jobID, response)
  66. elif operation == 'device/function/add':
  67. return self.devicefunctionadd(request_dict, userID, response)
  68. elif operation == 'device/function/query':
  69. return self.devicefunctionquery(request_dict, jobID, response)
  70. elif operation == 'staff/add':
  71. return self.staffadd(request_dict, userID, response)
  72. elif operation == 'staff/query':
  73. return self.staffquery(request_dict, userID, response)
  74. elif operation == 'staff/delete':
  75. return self.staffdelete(request_dict, userID, response)
  76. elif operation == 'log/query':
  77. return self.logquery(request_dict, userID, response)
  78. else:
  79. return response.json(404)
  80. else:
  81. # 普通员工访问的接口
  82. if operation == 'job/device/query':
  83. return self.jobdevicequery(request_dict, jobID, response)
  84. elif operation == 'device/function/query':
  85. return self.devicefunctionquery(request_dict, jobID, response)
  86. elif operation == 'log/add':
  87. return self.logadd(request_dict, userID, response)
  88. elif operation == 'log/query':
  89. return self.logquery(request_dict, userID, response)
  90. else:
  91. return response.json(404)
  92. def login(self, request_dict, response):
  93. username = request_dict.get('username', None)
  94. password = request_dict.get('password', None)
  95. param_flag = CommonService.get_param_flag(
  96. data=[username, password])
  97. if param_flag is not True:
  98. return response.json(444)
  99. user_qs = PctestuserModel.objects.filter(username=username, password=password)
  100. if not user_qs.exists():
  101. return response.json(104)
  102. users = user_qs.values('id', 'username', 'password', 'job')[0]
  103. tko = TokenObject()
  104. # 加密
  105. res = tko.generate(
  106. data={'id': users['id'], 'username': users['username'], 'password': users['password'], 'job': users['job']})
  107. res_qs = {
  108. 'res': res,
  109. 'job': users['job']
  110. }
  111. return response.json(0, res_qs)
  112. def jobadd(self, request_dict, userID, response):
  113. jobname = request_dict.get('jobname', None)
  114. param_flag = CommonService.get_param_flag(
  115. data=[jobname])
  116. if param_flag is not True:
  117. return response.json(444)
  118. job_qs = PctestjobModel.objects.filter(jobname=jobname)
  119. if job_qs.exists():
  120. return response.json(174)
  121. else:
  122. PctestjobModel.objects.create(jobname=jobname)
  123. return response.json(0)
  124. def jobquery(self, request_dict, userID, response):
  125. job_list = PctestjobModel.objects.filter(id__gt=1)
  126. count = job_list.count()
  127. res = job_list
  128. send_json = CommonService.qs_to_dict(res)
  129. send_json['count'] = count
  130. return response.json(0, send_json)
  131. def deviceadd(self, request_dict, userID, response):
  132. devicename = request_dict.get('devicename', None)
  133. param_flag = CommonService.get_param_flag(
  134. data=[devicename])
  135. if param_flag is not True:
  136. return response.json(444)
  137. job_qs = PctestdeviceModel.objects.filter(devicename=devicename)
  138. if job_qs.exists():
  139. return response.json(174)
  140. else:
  141. PctestdeviceModel.objects.create(devicename=devicename)
  142. return response.json(0)
  143. def devicequery(self, request_dict, userID, response):
  144. device_list = PctestdeviceModel.objects.all()
  145. count = device_list.count()
  146. res = device_list
  147. send_json = CommonService.qs_to_dict(res)
  148. send_json['count'] = count
  149. return response.json(0, send_json)
  150. def functionadd(self, request_dict, userID, response):
  151. functionname = request_dict.get('functionname', None)
  152. param_flag = CommonService.get_param_flag(
  153. data=[functionname])
  154. if param_flag is not True:
  155. return response.json(444)
  156. job_qs = PctestfunctionModel.objects.filter(functionname=functionname)
  157. if job_qs.exists():
  158. return response.json(174)
  159. else:
  160. PctestfunctionModel.objects.create(functionname=functionname)
  161. return response.json(0)
  162. def functionquery(self, request_dict, userID, response):
  163. function_list = PctestfunctionModel.objects.all()
  164. count = function_list.count()
  165. res = function_list
  166. send_json = CommonService.qs_to_dict(res)
  167. send_json['count'] = count
  168. return response.json(0, send_json)
  169. def jobdeviceadd(self, request_dict, userID, response):
  170. job_id = request_dict.get('job_id', None)
  171. device_id = request_dict.get('device_id', None)
  172. param_flag = CommonService.get_param_flag(
  173. data=[job_id, device_id])
  174. if param_flag is not True:
  175. return response.json(444)
  176. # 判断岗位与设备是否存在
  177. job_list = PctestjobModel.objects.filter(id=job_id)
  178. device_list = PctestdeviceModel.objects.filter(id=device_id)
  179. if not job_list.exists() or not device_list.exists():
  180. return response.json(173)
  181. # 判断岗位与此设备是否有关联,避免重复添加
  182. job_device_list = PctestjobdeviceModel.objects.filter(job_id=job_id, device_id=device_id)
  183. if job_device_list.exists():
  184. return response.json(174)
  185. else:
  186. PctestjobdeviceModel.objects.create(job_id=job_id, device_id=device_id)
  187. return response.json(0)
  188. def jobdevicequery(self, request_dict, jobID, response):
  189. if jobID == 1:
  190. job_device_list = PctestjobdeviceModel.objects.values('job__jobname', 'device__devicename')
  191. else:
  192. job_device_list = PctestjobdeviceModel.objects.filter(job_id=jobID).values('device_id','device__devicename')
  193. device_list = []
  194. for i in job_device_list:
  195. device_list.append(i)
  196. return response.json(0, device_list)
  197. def devicefunctionadd(self, request_dict, userID, response):
  198. device_id = request_dict.get('device_id', None)
  199. function_id = request_dict.get('function_id', None)
  200. param_flag = CommonService.get_param_flag(
  201. data=[function_id, device_id])
  202. if param_flag is not True:
  203. return response.json(444)
  204. # 判断设备与职能是否存在
  205. device_list = PctestdeviceModel.objects.filter(id=device_id)
  206. function_list = PctestfunctionModel.objects.filter(id=function_id)
  207. if not function_list.exists() or not device_list.exists():
  208. return response.json(173)
  209. # 判断设备与此职能是否有关联,避免重复添加
  210. device_function_list = PctestModel.objects.filter(device_id=device_id, function_id=function_id)
  211. if device_function_list.exists():
  212. return response.json(174)
  213. else:
  214. PctestModel.objects.create(device_id=device_id, function_id=function_id)
  215. return response.json(0)
  216. def devicefunctionquery(self, request_dict, jobID, response):
  217. if jobID == 1:
  218. device_function_list = PctestModel.objects.values('device__devicename', 'function__functionname')
  219. else:
  220. device_id = request_dict.get('device_id', None)
  221. param_flag = CommonService.get_param_flag(
  222. data=[device_id])
  223. if param_flag is not True:
  224. return response.json(444)
  225. # 判断岗位与此设备是否有关联,有关联则通过
  226. job_device_list = PctestjobdeviceModel.objects.filter(job_id=jobID, device_id=device_id)
  227. if not job_device_list.exists():
  228. return response.json(173)
  229. device_function_list = PctestModel.objects.filter(device_id=device_id).values('function_id', 'function__functionname')
  230. function_list = []
  231. for i in device_function_list:
  232. function_list.append(i)
  233. return response.json(0, function_list)
  234. def staffadd(self, request_dict, userID, response):
  235. username = request_dict.get('username', None)
  236. password = request_dict.get('password', None)
  237. job_id = request_dict.get('job_id', None)
  238. param_flag = CommonService.get_param_flag(
  239. data=[username, password, job_id])
  240. if param_flag is not True:
  241. return response.json(444)
  242. # 判断员工与岗位是否存在,员工存在返回174
  243. user_list = PctestuserModel.objects.filter(username=username)
  244. job_list = PctestjobModel.objects.filter(id=job_id)
  245. if not job_list.exists() or user_list.exists():
  246. return response.json(174)
  247. else:
  248. PctestuserModel.objects.create(username=username, password=password, job_id=job_id)
  249. return response.json(0)
  250. def staffquery(self, request_dict, userID, response):
  251. user_list = PctestuserModel.objects.filter(id__gt=1).values('id', 'username', 'job__jobname')
  252. users_list = []
  253. for i in user_list:
  254. users_list.append(i)
  255. return response.json(0, users_list)
  256. def staffdelete(self, request_dict, userID, response):
  257. id = request_dict.get('id', None)
  258. param_flag = CommonService.get_param_flag(data=[id])
  259. if param_flag is not True:
  260. return response.json(444)
  261. staff = PctestuserModel.objects.filter(id=id)
  262. if not staff.exists():
  263. return response.json(173)
  264. else:
  265. staff.delete()
  266. return response.json(0)
  267. def logadd(self, request_dict, userID, response):
  268. content = request_dict.get('content', None)
  269. param_flag = CommonService.get_param_flag(data=[content])
  270. if param_flag is not True:
  271. return response.json(444)
  272. addtime = time.time()
  273. PctestlogModel.objects.create(user_id=userID, content=content, addtime=addtime)
  274. return response.json(0)
  275. def logquery(self, request_dict, userID, response):
  276. if userID == 1:
  277. job_device_list = PctestlogModel.objects.values('user__username', 'content', 'addtime')
  278. else:
  279. job_device_list = PctestlogModel.objects.filter(user_id=userID).values('content','addtime')
  280. device_list = []
  281. for i in job_device_list:
  282. device_list.append(i)
  283. return response.json(0, device_list)
  284. class TokenObject1:
  285. def __init__(self, token=None):
  286. if token == 'local':
  287. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTg0MzUxODk2MjgyMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM2ODAzMTc1OTYiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1ODcyNzcwNjB9.c0LV_XyxwbzUlYqMJqx7vw9f19Jv-0kGnUHuu_go-mo'
  288. if token == 'test':
  289. token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1Njk5OTg4OTYsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.VAQtT9AbCCfXcrNj9DL5cvVasMDoI7AP8ptgU1GoMu8'
  290. self.token = token
  291. self.lang = None
  292. self.id = None
  293. self.job = None
  294. self.user = ''
  295. self.code = 0
  296. # 令牌校验
  297. self.valid()
  298. def valid(self):
  299. if self.token is None:
  300. self.code = 309
  301. return
  302. try:
  303. res = jwt.decode(self.token, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256')
  304. print('res:', res)
  305. # print(res)
  306. self.id = res.get('id', None)
  307. self.lang = res.get('lang', None)
  308. self.job = res.get('job', None)
  309. self.user = res.get('user', '')
  310. # 刷新登录时间
  311. # if self.userID:
  312. # print(self.user)
  313. # redisObj = RedisObject(db=3)
  314. # redisObj.set_data(key=self.userID, val=self.user, expire=300)
  315. except jwt.ExpiredSignatureError as e:
  316. print('过期')
  317. print(repr(e))
  318. self.code = 309
  319. return
  320. except Exception as e:
  321. self.code = 309
  322. return
  323. else:
  324. if not self.id:
  325. self.code = 309
  326. return
  327. else:
  328. if self.id:
  329. self.code = 0
  330. return res
  331. else:
  332. self.code = 309
  333. return