safesite/groups/views.py

152 lines
6.5 KiB
Python

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 troubleChart(request):#隐患统计图
code = request.GET.get('code')
if code=='tbpic':
yhcompanys=[]
yhcompanyscount=[]
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').annotate(number = Count('troubleid'))
if request.GET.get('starttime'):#开始时间
a = troublelist.filter(fxsj__gte=request.GET.get('qssj'))
if request.GET.get('endtime'):#结束时间
a = troublelist.filter(fxsj__lte=request.GET.get('jssj'))
return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(a)}}), content_type='application/json')
def observeChart(request):#行为观察
code = request.GET.get('code')
year = int(request.GET.get('year'))
month =int( request.GET.get('month'))
if code=='tbpic':
userfy=[]#人员反映
userwz=[]#员工的位置
grfh=[]#个人防护装备
gjhsb=[]#工具和设备
cxhbz=[]#程序和标准
rtgcx=[]#人体工程学
hjzj=[]#环境整洁
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all().values('partname')
return HttpResponse(json.dumps({'code':1,'data':{'list':list(Observe)},'userfy':userfy,'userwz':userwz,'grfh':grfh,'gjhsb':gjhsb,'cxhbz':cxhbz,'rtgcx':rtgcx,'hjzj':hjzj,}), content_type='application/json')