views.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. # -*- coding: utf-8 -*-
  2. from django.shortcuts import render
  3. from django.views.generic import ListView
  4. from apps.AppInfoManage.models import MyUser, User_Log, Equip, Group
  5. from django import forms
  6. from django.db.models import Q
  7. import re
  8. import datetime
  9. # 分配设备
  10. class EquipAllot(ListView):
  11. def get(self, request):
  12. # 接收当前用户
  13. current_user = request.session.get('username')
  14. print("current_user:", current_user)
  15. current_user = MyUser.objects.get(username=current_user)
  16. # 判断是经销商还是超级管理员
  17. if current_user.is_superuser == True or current_user.is_staff == True:
  18. user_list = MyUser.objects.all()
  19. else:
  20. user_list = MyUser.objects.filter(user_agency=current_user.user_agency)
  21. nums = user_list.count()
  22. User_Log.objects.create(log_user=request.user.username,
  23. log_ip=request.META['REMOTE_ADDR'], log_desc='设备分配')
  24. return render(request, 'equipallot/equipallot.html', context={"nums": nums})
  25. def post(self, request):
  26. pass
  27. def allot_user_list(request):
  28. if request.method == 'GET':
  29. page = int(request.GET.get('page'))
  30. print("page=", page)
  31. # 接收当前用户
  32. current_user = request.session.get('username')
  33. print("current_user:", current_user)
  34. current_user = MyUser.objects.get(username=current_user)
  35. # 判断是经销商还是超级管理员
  36. if current_user.is_superuser == True or current_user.is_staff == True:
  37. user_list = MyUser.objects.all().order_by(
  38. "-date_joined")[(10*(page-1)):(page*10)]
  39. else:
  40. user_list = MyUser.objects.filter(user_agency=current_user.user_agency).order_by(
  41. "-date_joined")[(10*(page-1)):(page*10)]
  42. return render(request, 'equipallot/allot_user_list.html', context={'user_list': user_list})
  43. elif request.method == 'POST':
  44. req = request.POST.get('req')
  45. print("req:", req)
  46. current_user = request.session.get('username')
  47. print("current_user:", current_user)
  48. current_user = MyUser.objects.get(username=current_user)
  49. if req == "filter":
  50. # 筛选:用户名、创建时间:f:filter
  51. print("筛选:")
  52. f_name = request.POST.get('uname')
  53. f_tbegin = request.POST.get('begin')
  54. f_tend = request.POST.get('end')
  55. print("f_name:", f_name)
  56. print("f_tbegin:", f_tbegin)
  57. print("f_tend:", f_tend)
  58. page = int(request.POST.get('page'))
  59. print("page:", page)
  60. if f_name == '' and f_tbegin == '' and f_tend == '':
  61. # 判断是经销商还是超级管理员
  62. if current_user.is_superuser == True or current_user.is_staff == True:
  63. user_list = MyUser.objects.all()
  64. else:
  65. user_list = MyUser.objects.filter(user_agency=current_user.user_agency)
  66. elif f_name == '' and f_tbegin != '' and f_tend != '':
  67. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  68. enddate = re.findall(r"\d+\.?\d*", f_tend)
  69. print("begindate:", begindate)
  70. print("enddate:", enddate)
  71. start_date = datetime.date(
  72. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  73. end_date = datetime.date(
  74. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  75. print("begindate:", begindate)
  76. print("enddate:", enddate)
  77. # 判断是经销商还是超级管理员
  78. if current_user.is_superuser == True or current_user.is_staff == True:
  79. user_list = MyUser.objects.filter(
  80. date_joined__range=(start_date, end_date))
  81. else:
  82. user_list = MyUser.objects.filter(
  83. user_agency=current_user.user_agency,date_joined__range=(start_date, end_date))
  84. elif f_name != '' and f_tbegin == '' and f_tend == '':
  85. # 判断是经销商还是超级管理员
  86. if current_user.is_superuser == True or current_user.is_staff == True:
  87. user_list = MyUser.objects.filter(username__contains=f_name)
  88. else:
  89. user_list = MyUser.objects.filter(
  90. user_agency=current_user.user_agency,username__contains=f_name)
  91. elif f_name != '' and f_tbegin != '' and f_tend != '':
  92. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  93. enddate = re.findall(r"\d+\.?\d*", f_tend)
  94. start_date = datetime.date(
  95. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  96. end_date = datetime.date(
  97. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  98. # 判断是经销商还是超级管理员
  99. if current_user.is_superuser == True or current_user.is_staff == True:
  100. user_list = MyUser.objects.filter(
  101. username__contains=f_name, date_joined__range=(start_date, end_date))
  102. else:
  103. user_list = MyUser.objects.filter(
  104. user_agency=current_user.user_agency,username__contains=f_name, date_joined__range=(start_date, end_date))
  105. nums = user_list.count()
  106. user_list = user_list[(10*(page-1)):(page*10)]
  107. return render(request, 'equipallot/allot_user_list.html', context={'user_list': user_list, "nums": nums})
  108. from django.views.decorators.csrf import csrf_exempt
  109. @csrf_exempt
  110. def allot_equip_list(request):
  111. # 当前用户已拥有的设备的列表:
  112. equip_list1 = []
  113. # 未被分配的设备的列表:
  114. equip_list2 = []
  115. # 当前页的设备id列表:
  116. equip_ids = []
  117. if request.method == 'GET':
  118. # 选中需要进行分配设备的用户后:显示的设备列表;
  119. uname = request.GET.get('uname')
  120. print("uname=", uname)
  121. uname_obj = MyUser.objects.get(username=uname)
  122. page = int(request.GET.get('page'))
  123. print("page=", page)
  124. # 接收当前用户
  125. current_user = request.session.get('username')
  126. print("current_user:", current_user)
  127. current_user = MyUser.objects.get(username=current_user)
  128. # 判断是经销商还是超级管理员
  129. if current_user.is_superuser == True or current_user.is_staff == True:
  130. equip_list = Equip.objects.filter(
  131. Q(equip_user=None) | Q(equip_user=uname_obj))
  132. else:
  133. equip_list = Equip.objects.filter(
  134. Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency,
  135. equip_user=uname_obj))
  136. equip_list = list(equip_list)
  137. print('type equip_list:', type(equip_list))
  138. # print('equip_list:', equip_list)
  139. for i in equip_list:
  140. if i.equip_user != None:
  141. equip_list1.append(i)
  142. else:
  143. equip_list2.append(i)
  144. # print('equip_list1:', equip_list1)
  145. # print('equip_list2:', equip_list2)
  146. equip_list = equip_list1+equip_list2
  147. equip_list = equip_list[(10*(page-1)):(page*10)]
  148. for i in equip_list:
  149. equip_ids.append(i.equip_id)
  150. equip_ids = ','.join(equip_ids)
  151. return render(request, 'equipallot/allot_equip_list.html', context={'equip_list': equip_list, 'equip_ids': equip_ids, "uname": uname})
  152. elif request.method == 'POST':
  153. req = request.POST.get('req')
  154. print("req:", req)
  155. current_user = request.session.get('username')
  156. print("current_user:", current_user)
  157. current_user = MyUser.objects.get(username=current_user)
  158. if req == "filter":
  159. # 筛选:用户名、创建时间:f:filter
  160. print("筛选:")
  161. uname = request.POST.get('uname')
  162. print("uname=", uname)
  163. uname_obj = MyUser.objects.get(username=uname)
  164. f_type = request.POST.get('type')
  165. f_id = request.POST.get('f_id')
  166. f_tbegin = request.POST.get('begin')
  167. f_tend = request.POST.get('end')
  168. print("f_type:", f_type)
  169. print("f_id:", f_id)
  170. print("f_tbegin:", f_tbegin)
  171. print("f_tend:", f_tend)
  172. page = int(request.POST.get('page'))
  173. print("page:", page)
  174. # 000
  175. if f_id == None and f_type == '0' and f_tbegin == '' and f_tend == '':
  176. if current_user.is_superuser == True or current_user.is_staff == True:
  177. equip_list = Equip.objects.filter(
  178. Q(equip_user=None) | Q(equip_user=uname_obj))
  179. else:
  180. equip_list = Equip.objects.filter(
  181. Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency,
  182. equip_user=uname_obj))
  183. # 001 Q(equip_id=None)|
  184. elif f_id == None and f_type == '0' and f_tbegin != '' and f_tend != '':
  185. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  186. enddate = re.findall(r"\d+\.?\d*", f_tend)
  187. print("begindate:", begindate)
  188. print("enddate:", enddate)
  189. start_date = datetime.date(
  190. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  191. end_date = datetime.date(
  192. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  193. print("begindate:", begindate)
  194. print("enddate:", enddate)
  195. if current_user.is_superuser == True or current_user.is_staff == True:
  196. equip_list = Equip.objects.filter(Q(equip_user=None, equip_add_time__range=(
  197. start_date, end_date)) | Q(equip_user=uname_obj, equip_add_time__range=(start_date, end_date)))
  198. else:
  199. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency,
  200. equip_user=None, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency,
  201. equip_user=uname_obj, equip_add_time__range=(start_date, end_date)))
  202. # 010
  203. elif f_id == None and f_type != '0' and f_tbegin == '' and f_tend == '':
  204. if current_user.is_superuser == True or current_user.is_staff == True:
  205. equip_list = Equip.objects.filter(Q(equip_user=None, equip_type=f_type) | Q(
  206. equip_user=uname_obj, equip_type=f_type))
  207. else:
  208. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None,
  209. equip_type=f_type) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_type=f_type))
  210. # 011
  211. elif f_id == None and f_type != '0' and f_tbegin != '' and f_tend != '':
  212. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  213. enddate = re.findall(r"\d+\.?\d*", f_tend)
  214. start_date = datetime.date(
  215. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  216. end_date = datetime.date(
  217. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  218. if current_user.is_superuser == True or current_user.is_staff == True:
  219. equip_list = Equip.objects.filter(Q(equip_user=None, equip_type=f_type, equip_add_time__range=(
  220. start_date, end_date)) | Q(equip_user=uname_obj, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
  221. else:
  222. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_type=f_type,
  223. equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency,
  224. equip_user=uname_obj, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
  225. # 100
  226. elif f_id != None and f_type == '0' and f_tbegin == '' and f_tend == '':
  227. if current_user.is_superuser == True or current_user.is_staff == True:
  228. equip_list = Equip.objects.filter(
  229. Q(equip_user=None, equip_id__contains=f_id) | Q(equip_user=uname_obj, equip_id__contains=f_id))
  230. else:
  231. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None,
  232. equip_id__contains=f_id) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_id__contains=f_id))
  233. # 101
  234. elif f_id != None and f_type == '0' and f_tbegin != '' and f_tend != '':
  235. begindate = re.findall(r"\d+\.?\d*", f_tbegin)
  236. enddate = re.findall(r"\d+\.?\d*", f_tend)
  237. start_date = datetime.date(
  238. int(begindate[0]), int(begindate[1]), int(begindate[2]))
  239. end_date = datetime.date(
  240. int(enddate[0]), int(enddate[1]), int(enddate[2]))
  241. if current_user.is_superuser == True or current_user.is_staff == True:
  242. equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_add_time__range=(
  243. start_date, end_date)) | Q(equip_user=uname_obj, equip_id__contains=f_id, equip_add_time__range=(start_date, end_date)))
  244. else:
  245. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id,
  246. equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj,
  247. equip_id__contains=f_id, equip_add_time__range=(start_date, end_date)))
  248. # 110
  249. elif f_id != None and f_type != '0' and f_tbegin == '' and f_tend == '':
  250. if current_user.is_superuser == True or current_user.is_staff == True:
  251. equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_type=f_type) | Q(
  252. equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type))
  253. else:
  254. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None,
  255. equip_id__contains=f_id, equip_type=f_type) | Q(equip_agency=current_user.user_agency,
  256. equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type))
  257. # 111
  258. elif f_id != None and f_type != '0' and f_tbegin != '' and f_tend != '':
  259. if current_user.is_superuser == True or current_user.is_staff == True:
  260. equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(
  261. start_date, end_date)) | Q(equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
  262. else:
  263. equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id,
  264. equip_type=f_type, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj,
  265. equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(start_date, end_date)))
  266. nums = equip_list.count()
  267. equip_list = equip_list[(10*(page-1)):(page*10)]
  268. for i in equip_list:
  269. equip_ids.append(i.equip_id)
  270. equip_ids = ','.join(equip_ids)
  271. return render(request, 'equipallot/allot_equip_list.html', context={'equip_list': equip_list, 'equip_ids': equip_ids, "nums": nums})
  272. # 进入对应的用户分配设备页面
  273. def allot(request):
  274. if request.method == 'GET':
  275. current_user = request.session.get('username')
  276. print("current_user:", current_user)
  277. current_user = MyUser.objects.get(username=current_user)
  278. uname = request.GET.get('uname')
  279. uname_obj = MyUser.objects.get(username=uname)
  280. print("uname=", uname)
  281. if current_user.is_superuser == True or current_user.is_staff == True:
  282. nums = Equip.objects.filter(
  283. Q(equip_user=None) | Q(equip_user=uname_obj)).count()
  284. else:
  285. nums = Equip.objects.filter(
  286. Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj)).count()
  287. print('nums:', nums)
  288. return render(request, 'equipallot/allot.html', context={'nums': nums, "uname": uname})
  289. if request.method == 'POST':
  290. current_user = request.session.get('username')
  291. print("current_user:", current_user)
  292. current_user = MyUser.objects.get(username=current_user)
  293. uname = request.POST.get('uname')
  294. uname_obj = MyUser.objects.get(username=uname)
  295. print("uname=", uname)
  296. # 获得当前页的全部id:equip_ids
  297. equip_ids = request.POST.get('equip_ids')
  298. # print("equip_ids=", equip_ids)
  299. equip_ids = equip_ids.split(',')
  300. # print("当前页的所有设备id:equip_ids=", equip_ids)
  301. # # 此处equip_list不应该是 当前用户下所有设备和所有未分配的设备的“并集”
  302. # # 而应该是对该“并集”进行当前页的切片!否则会对非当前页的设备进行分配;
  303. # equip_list = equip_list1+equip_list2
  304. # # equip_list = equip_list[(10*(page-1)):(page*10)]
  305. button = request.POST.get('submit')
  306. if button == "fenpei":
  307. # 获得选中的复选框:
  308. check_box_list = request.POST.getlist('check_box_list')
  309. print('check_box_list:', check_box_list)
  310. no_check_box_list = []
  311. for i in equip_ids:
  312. if i in check_box_list:
  313. pass
  314. else:
  315. no_check_box_list.append(i)
  316. # print('no_check_box_list=', no_check_box_list)
  317. # # 定义空列表no_check_box_list---#获得未选中的复选框
  318. # no_check_box_list = []
  319. # # 当前页的设备列表:# 当前页的全部id:
  320. # for a in equip_ids:
  321. # no_check_box_list.append(a)
  322. # # 先获得选中的复选框的list(从set到list)
  323. # print('no_check_box_list=', no_check_box_list)
  324. # # 遍历选中的复选框中的元素
  325. # for b in check_box_list:
  326. # # 如果复选框中的元素在当前显示的no_check_box_list中
  327. # if b in no_check_box_list:
  328. # # 得到该元素对应的列表no_check_box_list中的索引;
  329. # x = no_check_box_list.index(b)
  330. # # 根据no_check_box_list列表的索引删除元素,剩下的即使没有被勾选的复选框
  331. # no_check_box_list.pop(x)
  332. # print('no_check_box_list2=', no_check_box_list) # 得到未选中的复选框的list
  333. # 分配复选框选中的设备:
  334. for checked_id in check_box_list:
  335. choose_equip = Equip.objects.get(equip_id=checked_id)
  336. # 如果选中的设备没有用户:即选中的设备 设备用户为None:
  337. if choose_equip.equip_user == None: # 只有当选中的设备id对应的设备 没有用户时才分配
  338. choose_equip.equip_user = uname_obj
  339. choose_equip.save() # 保存到数据库
  340. # 取消分配:给当前用户取消已分配的设备;
  341. for a in no_check_box_list:
  342. choose_equip = Equip.objects.get(equip_id=a)
  343. choose_equip.equip_user = None # 把设备的设备用户改为None,表示取消分配
  344. choose_equip.save()
  345. if current_user.is_superuser == True:
  346. equip_list = Equip.objects.filter(
  347. Q(equip_user=None) | Q(equip_user=uname_obj))
  348. else:
  349. equip_list = Equip.objects.filter(
  350. Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj))
  351. user_equip_list = Equip.objects.filter(equip_user=uname_obj)
  352. equip_type_list = []
  353. for i in user_equip_list:
  354. equip_type_list.append(i.equip_type.type_id)
  355. print('abcdef',equip_type_list)
  356. groups = Group.objects.filter(user=uname_obj)
  357. # uname_obj.groups.clear()
  358. # uname_obj.groups.add(post_groups)
  359. scdgroup = Group.objects.get(name='杀虫灯用户')
  360. cbdgroup = Group.objects.get(name='测报灯用户')
  361. qxzgroup = Group.objects.get(name='气象站用户')
  362. bzygroup = Group.objects.get(name='孢子仪用户')
  363. jkgroup = Group.objects.get(name='监控用户')
  364. # 将用户加入所拥有设备类型的相对应的分组
  365. if 2 in equip_type_list:
  366. uname_obj.groups.add(scdgroup)
  367. else:
  368. uname_obj.groups.remove(scdgroup)
  369. if 3 in equip_type_list:
  370. uname_obj.groups.add(cbdgroup)
  371. else:
  372. uname_obj.groups.remove(cbdgroup)
  373. if 5 in equip_type_list:
  374. uname_obj.groups.add(qxzgroup)
  375. else:
  376. uname_obj.groups.remove(qxzgroup)
  377. if 6 in equip_type_list:
  378. uname_obj.groups.add(jkgroup)
  379. else:
  380. uname_obj.groups.remove(jkgroup)
  381. if 7 in equip_type_list:
  382. uname_obj.groups.add(bzygroup)
  383. else:
  384. uname_obj.groups.remove(bzygroup)
  385. nums = equip_list.count()
  386. User_Log.objects.create(log_user=request.user.username,
  387. log_ip=request.META['REMOTE_ADDR'], log_desc='设备分配--分配设备')
  388. return render(request, 'equipallot/allot.html', context={'equip_list': equip_list, 'nums': nums, "uname": uname, 'allot_note': '设备分配成功!'})