467 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			467 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Python
		
	
	
	
| from django.http import HttpResponse, JsonResponse
 | |
| from django.shortcuts import render,reverse
 | |
| from django.shortcuts import redirect
 | |
| from .models import Group, GroupUser
 | |
| from .forms import GroupUserForm, UserForm
 | |
| from safesite import models as s_models
 | |
| from safesite.tasks import gettime
 | |
| import requests
 | |
| import json
 | |
| import time
 | |
| import re
 | |
| from datetime import datetime, date, timedelta
 | |
| from django.core.serializers.json import DjangoJSONEncoder
 | |
| from django.db.models import Q, F, Count, Sum
 | |
| from django.forms.models import model_to_dict
 | |
| from django.http import Http404
 | |
| from django.views.generic import View,TemplateView,CreateView,UpdateView
 | |
| from django.contrib.auth.hashers import make_password, check_password
 | |
| from django.core.serializers.json import DjangoJSONEncoder
 | |
| from .forms import CompanyForm
 | |
| 
 | |
| 
 | |
| 
 | |
| def fenye(request):
 | |
|     start = request.GET.get('offset',None)
 | |
|     end = request.GET.get('limit',None)
 | |
|     if start and end:
 | |
|         return int(start),int(start)+int(end)
 | |
|     else:
 | |
|         return 0, 99
 | |
| 
 | |
| class MyEncoder(json.JSONEncoder):
 | |
|     def default(self, obj):
 | |
|         if isinstance(obj, datetime):
 | |
|             return obj.strftime('%Y-%m-%d %H:%M')
 | |
|         elif isinstance(obj, date):
 | |
|             return obj.strftime("%Y-%m-%d")
 | |
|         elif isinstance(obj, decimal.Decimal):
 | |
|             return float(obj)
 | |
|         elif isinstance(obj, UUID):
 | |
|             # if the obj is uuid, we simply return the value of uuid
 | |
|             return obj.hex
 | |
|         else:
 | |
|             return json.JSONEncoder.default(self, obj)
 | |
| 
 | |
| def check_login(func):  # 自定义登录验证装饰器
 | |
|     def warpper(request, *args, **kwargs):
 | |
|         is_login = request.session.get('is_login', False)
 | |
|         if is_login:
 | |
|             return func(request, *args, **kwargs)
 | |
|         else:
 | |
|             return redirect(reverse('groups_login'))
 | |
| 
 | |
|     return warpper
 | |
| 
 | |
| 
 | |
| def login(request):
 | |
|     # 不允许重复登录
 | |
|     if request.session.get('is_login', None):
 | |
|         return redirect('/groups/index/')
 | |
|     if request.method == "POST":
 | |
|         groups_form = GroupUserForm(request.POST)
 | |
|         message = '请检查填写的内容!'
 | |
|         if groups_form.is_valid():
 | |
|             username = groups_form.cleaned_data.get('username')
 | |
|             password = groups_form.cleaned_data.get('password')
 | |
| 
 | |
|             try:
 | |
|                 user = GroupUser.objects.get(username=username)
 | |
|             except:
 | |
|                 message = '用户不存在!'
 | |
|                 return render(request, 'login.html', locals())
 | |
|             if user.password == password:
 | |
|                 request.session['is_login'] = True
 | |
|                 request.session['user_id'] = user.id
 | |
|                 request.session['user_name'] = user.username
 | |
|                 if user.issuper==1:
 | |
|                     request.session['issuper'] = True #是否是超级管理员
 | |
|                 return redirect('/groups/index/')
 | |
|             else:
 | |
|                 return render(request, 'groups/login.html', locals())
 | |
|         else:
 | |
|             return render(request, 'groups/login.html', locals())
 | |
|     groups_form = GroupUserForm()
 | |
|     return render(request, 'groups/login.html', locals())
 | |
| 
 | |
| 
 | |
| def logout(request):
 | |
|     # if not request.session.get('is_login', None):
 | |
|     #     return redirect('/groups/login')
 | |
|     request.session.flush()
 | |
|     return redirect('/groups/login')
 | |
| 
 | |
| 
 | |
| import json
 | |
| from captcha.models import CaptchaStore
 | |
| from captcha.helpers import captcha_image_url
 | |
| 
 | |
| 
 | |
| def refresh_captcha(request):
 | |
|     hashkey = CaptchaStore.generate_key()
 | |
|     image_url = captcha_image_url(hashkey)
 | |
|     return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json')
 | |
| 
 | |
| 
 | |
| @check_login
 | |
| def company(request):
 | |
|     # userid = request.session['user_id']
 | |
|     # if GroupUser.objects.get(id=userid).issuper==1:
 | |
|     #     companys = s_models.Partment.objects.filter(iscompany=1).order_by('-creattime')
 | |
|     # else:
 | |
|     #     companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all().order_by('-creattime')
 | |
|     # for i in companys:
 | |
|     #     try:
 | |
|     #         i.useradmin = s_models.User.objects.get(ubelongpart=i, issuper=1).username
 | |
|     #     except:
 | |
|     #         i.useradmin = None
 | |
|     return render(request, 'groups/company.html')
 | |
| 
 | |
| def company_list(request):
 | |
|     userid = request.session['user_id']
 | |
|     if GroupUser.objects.get(id=userid).issuper==1:
 | |
|         companys = s_models.Partment.objects.filter(iscompany=1).order_by('-creattime')
 | |
|     else:
 | |
|         companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all().order_by('-creattime')
 | |
|     total = companys.count()
 | |
|     company_list = companys.values('partid','partname','creattime','position','role__name')
 | |
|     return JsonResponse({'total':total,'rows':list(company_list)},encoder=MyEncoder)
 | |
| 
 | |
| 
 | |
| 
 | |
| class CompanyCreateView(CreateView):
 | |
|     # model = s_models.Partment
 | |
|     # fields = ['partid','partname','role']
 | |
|     # template_name = 'groups/company_form.html'
 | |
|     def get(self, request):
 | |
|         roles = s_models.Role.objects.values()
 | |
|         ret = {
 | |
|             'roles': roles,
 | |
|         }
 | |
|         return render(request, 'groups/company_form.html', ret)
 | |
|     def post(self, request):
 | |
|         res = dict(result=False)
 | |
|         form = CompanyForm(request.POST)
 | |
|         if form.is_valid():
 | |
|             companyname = form.cleaned_data['companyname']
 | |
|             admin = form.cleaned_data['admin']
 | |
|             role = form.cleaned_data['role']
 | |
|             if s_models.Partment.objects.filter(partname=companyname).exists():
 | |
|                 res['error'] ='公司已存在'
 | |
|             elif s_models.User.objects.filter(username=admin).exists():
 | |
|                 res['error'] = '用户已存在'
 | |
|             else:
 | |
|                 obj = s_models.Partment()
 | |
|                 obj.partname = companyname
 | |
|                 obj.partlink = ','
 | |
|                 obj.iscompany = 1
 | |
|                 obj.role = role
 | |
|                 try:
 | |
|                     positiondata = getPosition(companyname)
 | |
|                     if positiondata['status'] == '1' and int(positiondata['count']) > 0:
 | |
|                         obj.position = positiondata['geocodes'][0]
 | |
|                     else:
 | |
|                         companyname = companyname.replace('公司', '').replace('责任', '').replace('有限', '')
 | |
|                         positiondata = getPosition(companyname)
 | |
|                         if positiondata['status'] == '1' and int(positiondata['count']) > 0:
 | |
|                             obj.position = positiondata['geocodes'][0]
 | |
|                 except:
 | |
|                     pass
 | |
|                 obj.save()
 | |
|                 adminuser = s_models.User()
 | |
|                 adminuser.username = admin
 | |
|                 adminuser.name = '超级管理员'
 | |
|                 adminuser.password = 'Aq123456'
 | |
|                 adminuser.epassword = make_password('Aq123456')
 | |
|                 adminuser.issuper = 1
 | |
|                 adminuser.ubelongpart = obj
 | |
|                 adminuser.usecomp = obj
 | |
|                 adminuser.save()
 | |
|                 obj.bmzg = ','+str(adminuser.userid)+','
 | |
|                 obj.save()
 | |
|                 menus = list(role.permissions.all().values_list('menuid',flat=True))
 | |
|                 s_models.Group.objects.create(groupname='超管', grouptype=0, usecomp=obj, menulist=menus)
 | |
|                 s_models.Group.objects.create(groupname='安全员', grouptype=1, usecomp=obj, menulist=menus)
 | |
|                 s_models.Group.objects.create(groupname='全体用户', grouptype=3, usecomp=obj, menulist=menus)
 | |
|                 z = s_models.Group.objects.create(groupname='主管', grouptype=2,usecomp=obj, menulist=menus)
 | |
|                 z.users.add(adminuser)
 | |
|                 s_models.Yjsetup.objects.create(monthyhavg=100, safev=50, warnv=75, alertv=100, maxv=200, yhpgqz=4,
 | |
|                                        yhdjqz=4, yhsblqz=1, yhzglqz=4, pxdjqz=3, pxxgqz=4, yldjqz=3, ylxgqz=3, usecomp=obj)
 | |
|                 s_models.Map.objects.create(
 | |
|                     name='默认地图', pic='/static/safesite/mystatic/images/snc.jpg', usecomp=obj, default=1)
 | |
|                 res['result'] = True
 | |
|         else:
 | |
|             errors = form.errors.as_text()
 | |
|             res['error'] = errors
 | |
|         return HttpResponse(json.dumps(res), content_type='application/json')
 | |
| 
 | |
| class CompanyUpdateView(View):
 | |
|     def get(self, request):
 | |
|         roles = s_models.Role.objects.all()
 | |
|         company = s_models.Partment.objects.get(partid=request.GET.get('id'))
 | |
|         admin = s_models.User.objects.get(issuper=1,usecomp=company)
 | |
|         return render(request,'groups/company_update.html',locals())
 | |
|     def post(self, request):
 | |
|         res = dict(result=False)
 | |
|         form = CompanyForm(request.POST)
 | |
|         if form.is_valid():
 | |
|             id = form.cleaned_data['id']
 | |
|             companyname = form.cleaned_data['companyname']
 | |
|             role = form.cleaned_data['role']
 | |
|             if s_models.Partment.objects.filter(partname=companyname).exclude(partid=id).exists():
 | |
|                 res['error'] ='公司已存在'
 | |
|             else:
 | |
|                 s_models.Partment.objects.filter(partid=id).update(partname=companyname,role=role)
 | |
|                 res['result']=True
 | |
|         else:
 | |
|             errors = form.errors.as_text()
 | |
|             res['error'] = errors
 | |
|         return JsonResponse(res)
 | |
|     
 | |
| 
 | |
| 
 | |
| def job(request):
 | |
|     return render(request, 'groups/job.html', locals())
 | |
| 
 | |
| 
 | |
| def company_user(request, cid):
 | |
|     users = s_models.User.objects.filter(usecomp=cid).order_by('userid')
 | |
|     # for user in users:
 | |
|     #     dump(user)
 | |
|     return render(request, 'groups/company_user.html', locals())
 | |
| 
 | |
| 
 | |
| def company_userdetail(request, uid):
 | |
|     try:
 | |
|         user = s_models.User.objects.get(pk=uid)
 | |
|     except s_models.User.DoesNotExist:
 | |
|         raise Http404("User does not exist")
 | |
| 
 | |
|     # UserForm.set_usecomp(s_models.Partment.objects.filter(group__id=1))
 | |
|     user_form = UserForm(model_to_dict(user))
 | |
| 
 | |
|     return render(request, 'groups/company_userdetail.html', locals())
 | |
| 
 | |
| 
 | |
| def groups_userupdate(request):
 | |
|     if request.method == 'POST':
 | |
|         id = request.POST.get('id')
 | |
|         company = request.POST.get('company')
 | |
|         model_user = s_models.User.objects.filter(userid=id)[0]
 | |
|         if model_user:
 | |
|             for i in s_models.Partment.objects.filter(Q(aqy__contains=','+str(id)+',')|Q(bmzg__contains=','+str(id)+',')|Q(bsq__contains=','+str(id)+',')):
 | |
|                 i.aqy = i.aqy.replace(','+str(id)+',',',')
 | |
|                 i.bmzg = i.bmzg.replace(','+str(id)+',',',')
 | |
|                 i.bsq = i.bsq.replace(','+str(id)+',',',')
 | |
|                 i.save()
 | |
|             company = s_models.Partment.objects.get(partid=company)
 | |
|             model_user.ubelongpart = company
 | |
|             model_user.usecomp = company
 | |
|             model_user.save()
 | |
|             bgroups = model_user.userg.all() #所属用户组
 | |
|             for i in bgroups:
 | |
|                 i.users.remove(model_user)
 | |
|             groupobj = s_models.Group.objects.filter(usecomp=company, grouptype=3).first()
 | |
|             groupobj.users.add(model_user)
 | |
|             return redirect('/groups/company/')
 | |
|         else:
 | |
|             message = '没有发现该用户'
 | |
|         return render(request, 'groups/company_userchange.html', locals())
 | |
|     else:
 | |
|         return redirect('/groups/company/')
 | |
| 
 | |
| 
 | |
| def company_userchange_page(request, uid):
 | |
|     try:
 | |
|         user = s_models.User.objects.get(pk=uid)
 | |
|     except s_models.User.DoesNotExist:
 | |
|         raise Http404("User does not exist")
 | |
|     oldcompany = user.usecomp
 | |
|     companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all().order_by('creattime')
 | |
|     return render(request, 'groups/company_userchange.html', locals())
 | |
| 
 | |
| 
 | |
| def dump(obj):
 | |
|     print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
 | |
| 
 | |
| 
 | |
| @check_login
 | |
| def index(req):
 | |
|     first_day, first_day_of_next_month = gettime()
 | |
|     groupuser = GroupUser.objects.get(id=req.session['user_id'])
 | |
|     if groupuser.issuper==1:
 | |
|         companys = s_models.Partment.objects.filter(iscompany=1)
 | |
|     else:
 | |
|         group = GroupUser.objects.get(id=req.session['user_id']).group
 | |
|         companys = group.members.all()
 | |
|     troublenum = s_models.Trouble.objects.filter(deletemark=1, usecomp__in=companys,
 | |
|                                                  fxsj__range=(first_day, first_day_of_next_month)).count()
 | |
|     observenum = s_models.Observe.objects.filter(deletemark=1, usecomp__in=companys,
 | |
|                                                  looktime__range=(first_day, first_day_of_next_month)).count()
 | |
|     missnum = s_models.Miss.objects.filter(deletemark=1, usecomp__in=companys,
 | |
|                                            misstime__range=(first_day, first_day_of_next_month)).count()
 | |
|     trainnum = s_models.Train.objects.filter(deletemark=1, usecomp__in=companys,
 | |
|                                              starttime__range=(first_day, first_day_of_next_month)).count()
 | |
|     companynum = companys.count()
 | |
|     usernum = s_models.User.objects.filter(deletemark=1, usecomp__in=companys).count()
 | |
|     return render(req, 'groups/index.html', locals())
 | |
| 
 | |
| 
 | |
| def updateposition(req):
 | |
|     allcompanys = s_models.Partment.objects.filter(deletemark=1, iscompany=1)
 | |
|     for i in allcompanys:
 | |
|         address = i.partname
 | |
|         data = getPosition(address)
 | |
|         if data['status'] == '1' and int(data['count']) > 0:
 | |
|             i.position = data['geocodes'][0]
 | |
|             i.save()
 | |
|         else:
 | |
|             address = i.partname.replace('公司', '').replace('责任', '').replace('有限', '').replace('水泥','')
 | |
|             data = getPosition(address)
 | |
|             if data['status'] == '1' and int(data['count']) > 0:
 | |
|                 i.position = data['geocodes'][0]
 | |
|                 i.save()
 | |
|     return JsonResponse({"code": 1})
 | |
| 
 | |
| 
 | |
| def getPosition(address):
 | |
|     url = 'http://restapi.amap.com/v3/geocode/geo'
 | |
|     par = {'address': address, 'key': '86e0993305a427ac2d0b5371ad97f242'}
 | |
|     res = requests.get(url, par)
 | |
|     json_data = json.loads(res.text)
 | |
|     return json_data
 | |
| 
 | |
| 
 | |
| 
 | |
| def apipositions(req):
 | |
|     user = GroupUser.objects.get(id = req.session['user_id'])
 | |
|     if user.issuper==1:
 | |
|         companys = s_models.Partment.objects.filter(iscompany=1).order_by('-creattime')
 | |
|     else:
 | |
|         companys = user.group.members.all().order_by('-creattime')
 | |
|     positions = companys.values('position','partname')
 | |
|     return JsonResponse({"code":1,"data":list(positions)})
 | |
| def trouble(request):#隐患排查
 | |
|     return render(request, 'groups/troublepic.html', locals())
 | |
| def observe(request):#行为观察
 | |
|     return render(request, 'groups/observe.html', locals())
 | |
| def miss(request):#未遂事件
 | |
|     return render(request, 'groups/miss.html', locals())
 | |
| def risk(request):#风险管控
 | |
|     return render(request, 'groups/risk.html', locals())
 | |
| def train(request):#教育培训
 | |
|     return render(request, 'groups/train.html', locals())
 | |
| def exam(request):#在线考试
 | |
|     return render(request, 'groups/exam.html', locals())
 | |
| def troubleChart(request):#隐患统计图
 | |
|     code = request.GET.get('code')
 | |
|     start = request.GET.get('start')
 | |
|     end = request.GET.get('end')
 | |
|     if code=='tbpic':
 | |
|         companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
 | |
|         if request.session.get('issuper'):
 | |
|             companys = s_models.Partment.objects.filter(iscompany=1,deletemark=1)
 | |
|         troublelist = s_models.Trouble.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname')
 | |
|         if start:
 | |
|             troublelist = troublelist.filter(fxsj__gte=start)
 | |
|         if end:
 | |
|             troublelist = troublelist.filter(fxsj__lte=end)
 | |
|         troublelist=troublelist.annotate(number = Count('usecomp')).order_by('-number')
 | |
| 
 | |
|         return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(troublelist)}}), content_type='application/json')
 | |
| def observeChart(request):#行为观察
 | |
|     code = request.GET.get('code')
 | |
|     start = request.GET.get('start')
 | |
|     end = request.GET.get('end')
 | |
|     if code=='obv':
 | |
|          companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
 | |
|          if request.session.get('issuper'):
 | |
|             companys = s_models.Partment.objects.filter(iscompany=1,deletemark=1)
 | |
|          observelist = s_models.Observe.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname')
 | |
|          if start:
 | |
|                 observelist = observelist.filter(looktime__gte=start)
 | |
|          if end:
 | |
|                 observelist = observelist.filter(looktime__lte=end)
 | |
|          observelist=observelist.annotate(number = Count('usecomp')).order_by('-number')
 | |
|          return HttpResponse(json.dumps({'code':1,'data':{'observelist':list(observelist)}}), content_type='application/json')
 | |
|          
 | |
| def missChart(request):#未遂事件
 | |
|     code = request.GET.get('code')
 | |
|     start = request.GET.get('start')
 | |
|     end = request.GET.get('end')
 | |
|     if code=='miss':
 | |
|         
 | |
|          companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
 | |
|          if request.session.get('issuper'):
 | |
|             companys = s_models.Partment.objects.filter(iscompany=1,deletemark=1)
 | |
|          misslist = s_models.Miss.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname')
 | |
|          if start:
 | |
|                 misslist = misslist.filter(misstime__gte=start)
 | |
|          if end:
 | |
|                 misslist = misslist.filter(misstime__lte=end)
 | |
|          misslist=misslist.annotate(number = Count('usecomp')).order_by('-number')
 | |
|          return HttpResponse(json.dumps({'code':1,'data':{'misslist':list(misslist)}}), content_type='application/json')
 | |
|          
 | |
| def riskChart(request):#风险管控
 | |
| 
 | |
|     code = request.GET.get('code')
 | |
|     start = request.GET.get('start')
 | |
|     end = request.GET.get('end')
 | |
|     risks = []
 | |
|     if code=='risk':
 | |
|         companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
 | |
|         if request.session.get('issuper'):
 | |
|             companys = s_models.Partment.objects.filter(iscompany=1,deletemark=1)
 | |
|         for i in companys:
 | |
|             risk= s_models.RiskAct.objects.filter(usecomp__partid=i.partid)
 | |
|             if start:
 | |
|                 risk = risk.filter(createtime__gte=start)
 | |
|             if end:
 | |
|                 risk = risk.filter(createtime__lte=end)
 | |
|             datariskact=risk.count()
 | |
|             datariskact1=risk.filter(level="低风险").count()
 | |
|             datariskact2=risk.filter(level="一般风险").count()
 | |
|             datariskact3=risk.filter(level="较大风险").count()
 | |
|             datariskact4=risk.filter(level="重大风险").count()
 | |
|             risks.append({'companyName':i.partname,'datariskact':datariskact,'datariskact1':datariskact1,'datariskact2':datariskact2,'datariskact3':datariskact3,'datariskact4':datariskact4})
 | |
|         return HttpResponse(json.dumps({'code':1,'risks':risks}), content_type='application/json')
 | |
|    
 | |
| def trainChart(request):#教育培训
 | |
|     code = request.GET.get('code')
 | |
|     start = request.GET.get('start')
 | |
|     end = request.GET.get('end')
 | |
|     if code=='train':
 | |
|          companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
 | |
|          if request.session.get('issuper'):
 | |
|             companys = s_models.Partment.objects.filter(iscompany=1,deletemark=1)
 | |
|          trainlist = s_models.Train.objects.filter(usecomp__in=companys,deletemark=1).values('usecomp__partid','usecomp__partname')
 | |
|          if start:
 | |
|                 trainlist = trainlist.filter(starttime__gte=start)
 | |
|          if end:
 | |
|                 trainlist = trainlist.filter(starttime__lte=end)
 | |
|          trainlist=trainlist.annotate(number = Count('usecomp')).order_by('-number')
 | |
| 
 | |
|          return HttpResponse(json.dumps({'code':1,'data':{'trainlist':list(trainlist)}}), content_type='application/json')
 | |
|                   
 | |
| def examChart(request):#在线考试
 | |
|     code = request.GET.get('code')
 | |
|     start = request.GET.get('start')
 | |
|     end = request.GET.get('end')
 | |
|     examjson = []
 | |
|     if code=='exam':
 | |
|         companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
 | |
|         if request.session.get('issuper'):
 | |
|             companys = s_models.Partment.objects.filter(iscompany=1,deletemark=1)
 | |
|         examobjs = s_models.ExamTest.objects.all()
 | |
|         if start:
 | |
|             examobjs = examobjs.filter(starttime__gte=start)
 | |
|         if end:
 | |
|             examobjs = examobjs.filter(starttime__lte=end)
 | |
|         for i in companys:
 | |
|             examnumber = examobjs.filter(usecomps__contains=','+str(i.partid)+',')
 | |
|             examjson.append({'companyName':i.partname,'number':examnumber.count()})
 | |
|         return HttpResponse(json.dumps({'code':1,'data':examjson}), content_type='application/json')
 | |
| 
 | |
| 
 | |
| 
 |