from django.http import HttpResponse,JsonResponse from django.shortcuts import render from django.shortcuts import redirect from .models import Group,GroupUser from .forms import GroupUserForm from safesite import models as s_models from safesite.tasks import gettime import requests import json import time from datetime import datetime,date,timedelta from django.core.serializers.json import DjangoJSONEncoder from django.db.models import Q,F,Count,Sum 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('/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, 'groups/login.html', locals()) if user.password == password: request.session['is_login'] = True request.session['user_id'] = user.id request.session['user_name'] = user.username 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): companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() for i in companys: i.useradmin = s_models.User.objects.get(ubelongpart=i,issuper=1).username return render(request, 'groups/company.html', locals()) def job(request): return render(request, 'groups/job.html', locals()) @check_login def index(req): first_day,first_day_of_next_month=gettime() 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 = len(companys) 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('有限','') 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): companys = GroupUser.objects.get(id = req.session['user_id']).group.members.all() 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() 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() 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() 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() 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() 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() for i in companys: examnumber = s_models.ExamTest.objects.filter(usecomps__contains=','+str(i.partid)+',') if start: examnumber = examnumber.filter(usecomps__contains=','+str(i.partid)+',',starttime__gte=start) if end: examnumber = examnumber.filter(usecomps__contains=','+str(i.partid)+',',starttime__lte=end) examjson.append({'companyName':i.partname,'number':examnumber.count()}) return HttpResponse(json.dumps({'code':1,'data':examjson}), content_type='application/json')