# -*- coding: utf-8 -*- from django.shortcuts import render from django.views.generic import ListView from apps.AppInfoManage.models import MyUser, User_Log, Equip, Group from django import forms from django.db.models import Q import re import datetime # 分配设备 class EquipAllot(ListView): def get(self, request): # 接收当前用户 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: user_list = MyUser.objects.all() else: user_list = MyUser.objects.filter(user_agency=current_user.user_agency) nums = user_list.count() User_Log.objects.create(log_user=request.user.username, log_ip=request.META['REMOTE_ADDR'], log_desc='设备分配') return render(request, 'equipallot/equipallot.html', context={"nums": nums}) def post(self, request): pass def allot_user_list(request): if request.method == 'GET': page = int(request.GET.get('page')) print("page=", page) # 接收当前用户 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: user_list = MyUser.objects.all().order_by( "-date_joined")[(10*(page-1)):(page*10)] else: user_list = MyUser.objects.filter(user_agency=current_user.user_agency).order_by( "-date_joined")[(10*(page-1)):(page*10)] return render(request, 'equipallot/allot_user_list.html', context={'user_list': user_list}) elif request.method == 'POST': req = request.POST.get('req') print("req:", req) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) if req == "filter": # 筛选:用户名、创建时间:f:filter print("筛选:") f_name = request.POST.get('uname') f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_name:", f_name) print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) page = int(request.POST.get('page')) print("page:", page) if f_name == '' and f_tbegin == '' and f_tend == '': # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: user_list = MyUser.objects.all() else: user_list = MyUser.objects.filter(user_agency=current_user.user_agency) elif f_name == '' and f_tbegin != '' and f_tend != '': begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) print("begindate:", begindate) print("enddate:", enddate) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) print("begindate:", begindate) print("enddate:", enddate) # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: user_list = MyUser.objects.filter( date_joined__range=(start_date, end_date)) else: user_list = MyUser.objects.filter( user_agency=current_user.user_agency,date_joined__range=(start_date, end_date)) elif f_name != '' and f_tbegin == '' and f_tend == '': # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: user_list = MyUser.objects.filter(username__contains=f_name) else: user_list = MyUser.objects.filter( user_agency=current_user.user_agency,username__contains=f_name) elif f_name != '' and f_tbegin != '' and f_tend != '': begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: user_list = MyUser.objects.filter( username__contains=f_name, date_joined__range=(start_date, end_date)) else: user_list = MyUser.objects.filter( user_agency=current_user.user_agency,username__contains=f_name, date_joined__range=(start_date, end_date)) nums = user_list.count() user_list = user_list[(10*(page-1)):(page*10)] return render(request, 'equipallot/allot_user_list.html', context={'user_list': user_list, "nums": nums}) from django.views.decorators.csrf import csrf_exempt @csrf_exempt def allot_equip_list(request): # 当前用户已拥有的设备的列表: equip_list1 = [] # 未被分配的设备的列表: equip_list2 = [] # 当前页的设备id列表: equip_ids = [] if request.method == 'GET': # 选中需要进行分配设备的用户后:显示的设备列表; uname = request.GET.get('uname') print("uname=", uname) uname_obj = MyUser.objects.get(username=uname) page = int(request.GET.get('page')) print("page=", page) # 接收当前用户 current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) # 判断是经销商还是超级管理员 if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter( Q(equip_user=None) | Q(equip_user=uname_obj)) else: equip_list = Equip.objects.filter( Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj)) equip_list = list(equip_list) print('type equip_list:', type(equip_list)) # print('equip_list:', equip_list) for i in equip_list: if i.equip_user != None: equip_list1.append(i) else: equip_list2.append(i) # print('equip_list1:', equip_list1) # print('equip_list2:', equip_list2) equip_list = equip_list1+equip_list2 equip_list = equip_list[(10*(page-1)):(page*10)] for i in equip_list: equip_ids.append(i.equip_id) equip_ids = ','.join(equip_ids) return render(request, 'equipallot/allot_equip_list.html', context={'equip_list': equip_list, 'equip_ids': equip_ids, "uname": uname}) elif request.method == 'POST': req = request.POST.get('req') print("req:", req) current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) if req == "filter": # 筛选:用户名、创建时间:f:filter print("筛选:") uname = request.POST.get('uname') print("uname=", uname) uname_obj = MyUser.objects.get(username=uname) f_type = request.POST.get('type') f_id = request.POST.get('f_id') f_tbegin = request.POST.get('begin') f_tend = request.POST.get('end') print("f_type:", f_type) print("f_id:", f_id) print("f_tbegin:", f_tbegin) print("f_tend:", f_tend) page = int(request.POST.get('page')) print("page:", page) # 000 if f_id == None and f_type == '0' and f_tbegin == '' and f_tend == '': if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter( Q(equip_user=None) | Q(equip_user=uname_obj)) else: equip_list = Equip.objects.filter( Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj)) # 001 Q(equip_id=None)| elif f_id == None and f_type == '0' and f_tbegin != '' and f_tend != '': begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) print("begindate:", begindate) print("enddate:", enddate) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) print("begindate:", begindate) print("enddate:", enddate) if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter(Q(equip_user=None, equip_add_time__range=( start_date, end_date)) | Q(equip_user=uname_obj, equip_add_time__range=(start_date, end_date))) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_add_time__range=(start_date, end_date))) # 010 elif f_id == None and f_type != '0' and f_tbegin == '' and f_tend == '': if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter(Q(equip_user=None, equip_type=f_type) | Q( equip_user=uname_obj, equip_type=f_type)) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_type=f_type) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_type=f_type)) # 011 elif f_id == None and f_type != '0' and f_tbegin != '' and f_tend != '': begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter(Q(equip_user=None, equip_type=f_type, equip_add_time__range=( start_date, end_date)) | Q(equip_user=uname_obj, equip_type=f_type, equip_add_time__range=(start_date, end_date))) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_type=f_type, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_type=f_type, equip_add_time__range=(start_date, end_date))) # 100 elif f_id != None and f_type == '0' and f_tbegin == '' and f_tend == '': if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter( Q(equip_user=None, equip_id__contains=f_id) | Q(equip_user=uname_obj, equip_id__contains=f_id)) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_id__contains=f_id)) # 101 elif f_id != None and f_type == '0' and f_tbegin != '' and f_tend != '': begindate = re.findall(r"\d+\.?\d*", f_tbegin) enddate = re.findall(r"\d+\.?\d*", f_tend) start_date = datetime.date( int(begindate[0]), int(begindate[1]), int(begindate[2])) end_date = datetime.date( int(enddate[0]), int(enddate[1]), int(enddate[2])) if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_add_time__range=( start_date, end_date)) | Q(equip_user=uname_obj, equip_id__contains=f_id, equip_add_time__range=(start_date, end_date))) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_id__contains=f_id, equip_add_time__range=(start_date, end_date))) # 110 elif f_id != None and f_type != '0' and f_tbegin == '' and f_tend == '': if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_type=f_type) | Q( equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type)) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id, equip_type=f_type) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type)) # 111 elif f_id != None and f_type != '0' and f_tbegin != '' and f_tend != '': if current_user.is_superuser == True or current_user.is_staff == True: equip_list = Equip.objects.filter(Q(equip_user=None, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=( 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))) else: equip_list = Equip.objects.filter(Q(equip_agency=current_user.user_agency, equip_user=None, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(start_date, end_date)) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj, equip_id__contains=f_id, equip_type=f_type, equip_add_time__range=(start_date, end_date))) nums = equip_list.count() equip_list = equip_list[(10*(page-1)):(page*10)] for i in equip_list: equip_ids.append(i.equip_id) equip_ids = ','.join(equip_ids) return render(request, 'equipallot/allot_equip_list.html', context={'equip_list': equip_list, 'equip_ids': equip_ids, "nums": nums}) # 进入对应的用户分配设备页面 def allot(request): if request.method == 'GET': current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) uname = request.GET.get('uname') uname_obj = MyUser.objects.get(username=uname) print("uname=", uname) if current_user.is_superuser == True or current_user.is_staff == True: nums = Equip.objects.filter( Q(equip_user=None) | Q(equip_user=uname_obj)).count() else: nums = Equip.objects.filter( Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj)).count() print('nums:', nums) return render(request, 'equipallot/allot.html', context={'nums': nums, "uname": uname}) if request.method == 'POST': current_user = request.session.get('username') print("current_user:", current_user) current_user = MyUser.objects.get(username=current_user) uname = request.POST.get('uname') uname_obj = MyUser.objects.get(username=uname) print("uname=", uname) # 获得当前页的全部id:equip_ids equip_ids = request.POST.get('equip_ids') # print("equip_ids=", equip_ids) equip_ids = equip_ids.split(',') # print("当前页的所有设备id:equip_ids=", equip_ids) # # 此处equip_list不应该是 当前用户下所有设备和所有未分配的设备的“并集” # # 而应该是对该“并集”进行当前页的切片!否则会对非当前页的设备进行分配; # equip_list = equip_list1+equip_list2 # # equip_list = equip_list[(10*(page-1)):(page*10)] button = request.POST.get('submit') if button == "fenpei": # 获得选中的复选框: check_box_list = request.POST.getlist('check_box_list') print('check_box_list:', check_box_list) no_check_box_list = [] for i in equip_ids: if i in check_box_list: pass else: no_check_box_list.append(i) # print('no_check_box_list=', no_check_box_list) # # 定义空列表no_check_box_list---#获得未选中的复选框 # no_check_box_list = [] # # 当前页的设备列表:# 当前页的全部id: # for a in equip_ids: # no_check_box_list.append(a) # # 先获得选中的复选框的list(从set到list) # print('no_check_box_list=', no_check_box_list) # # 遍历选中的复选框中的元素 # for b in check_box_list: # # 如果复选框中的元素在当前显示的no_check_box_list中 # if b in no_check_box_list: # # 得到该元素对应的列表no_check_box_list中的索引; # x = no_check_box_list.index(b) # # 根据no_check_box_list列表的索引删除元素,剩下的即使没有被勾选的复选框 # no_check_box_list.pop(x) # print('no_check_box_list2=', no_check_box_list) # 得到未选中的复选框的list # 分配复选框选中的设备: for checked_id in check_box_list: choose_equip = Equip.objects.get(equip_id=checked_id) # 如果选中的设备没有用户:即选中的设备 设备用户为None: if choose_equip.equip_user == None: # 只有当选中的设备id对应的设备 没有用户时才分配 choose_equip.equip_user = uname_obj choose_equip.save() # 保存到数据库 # 取消分配:给当前用户取消已分配的设备; for a in no_check_box_list: choose_equip = Equip.objects.get(equip_id=a) choose_equip.equip_user = None # 把设备的设备用户改为None,表示取消分配 choose_equip.save() if current_user.is_superuser == True: equip_list = Equip.objects.filter( Q(equip_user=None) | Q(equip_user=uname_obj)) else: equip_list = Equip.objects.filter( Q(equip_agency=current_user.user_agency, equip_user=None) | Q(equip_agency=current_user.user_agency, equip_user=uname_obj)) user_equip_list = Equip.objects.filter(equip_user=uname_obj) # 设备类型列表 equip_type_list = [] for i in user_equip_list: equip_type_list.append(i.equip_type.type_id) print('abcdef',equip_type_list) groups = Group.objects.filter(user=uname_obj) # uname_obj.groups.clear() # uname_obj.groups.add(post_groups) scdgroup = Group.objects.get(name='杀虫灯用户') cbdgroup = Group.objects.get(name='测报灯用户') qxzgroup = Group.objects.get(name='气象站用户') bzygroup = Group.objects.get(name='孢子仪用户') jkgroup = Group.objects.get(name='监控用户') ybpgroup = Group.objects.get(name='诱捕器用户') # 将用户加入所拥有设备类型的相对应的分组 if 2 in equip_type_list: uname_obj.groups.add(scdgroup) else: uname_obj.groups.remove(scdgroup) if 3 in equip_type_list: uname_obj.groups.add(cbdgroup) else: uname_obj.groups.remove(cbdgroup) if 5 in equip_type_list: uname_obj.groups.add(qxzgroup) else: uname_obj.groups.remove(qxzgroup) if 6 in equip_type_list: uname_obj.groups.add(jkgroup) else: uname_obj.groups.remove(jkgroup) if 7 in equip_type_list: uname_obj.groups.add(bzygroup) else: uname_obj.groups.remove(bzygroup) if 4 in equip_type_list: uname_obj.groups.add(ybpgroup) else: uname_obj.groups.remove(ybpgroup) nums = equip_list.count() User_Log.objects.create(log_user=request.user.username, log_ip=request.META['REMOTE_ADDR'], log_desc='设备分配--分配设备') return render(request, 'equipallot/allot.html', context={'equip_list': equip_list, 'nums': nums, "uname": uname, 'allot_note': '设备分配成功!'})