safesite/groups/views.py

211 lines
9.6 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, UserForm
from safesite import models as s_models
from safesite.tasks import gettime
from django.forms.models import model_to_dict
from django.http import Http404
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
request.session['group_id'] = user.group
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())
def company_user(request, cid):
users = s_models.User.objects.filter(usecomp=cid)
# 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")
user_form = UserForm(model_to_dict(user))
# print(type(user))
# print(user_form)
# dump(user)
return render(request, 'groups/company_userdetail.html', locals())
def groups_userupdate(request):
if request.method == 'POST':
user_form = UserForm(request.POST)
if user_form.is_valid():
model_user = s_models.User()
model_user.userid = user_form.cleaned_data.get('userid')
model_user.username = user_form.cleaned_data.get('username')
model_user.name = user_form.cleaned_data.get('name')
model_user.empid = user_form.cleaned_data.get('empid')
model_user.ubelongpart = user_form.cleaned_data.get('ubelongpart')
model_user.openid = user_form.cleaned_data.get('openid')
model_user.nickname = user_form.cleaned_data.get('nickname')
model_user.headimgurl = user_form.cleaned_data.get('headimgurl')
model_user.deletemark = user_form.cleaned_data.get('deletemark')
model_user.mpopenid = user_form.cleaned_data.get('mpopenid')
model_user.usecomp = user_form.cleaned_data.get('usecomp')
model_user.save()
return render(request, 'groups/company_userdetail.html', locals())
else:
return redirect('/groups/company/')
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()
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')
year = int(request.GET.get('year'))
month =int( request.GET.get('month'))
if code=='tbpic':
yhcompanys=[]
yhcompanyscount=[]
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
troublelist = s_models.Trouble.objects.filter(deletemark=1,usecomp__in=companys,fxsj__range=(first_day, first_day_of_next_month)).values('usecomp__partid','usecomp__partname').annotate(number = Count('troubleid'))
return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(troublelist)}}), 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()
Observe = s_models.Observe.objects.filter(deletemark=1,usecomp__in=companys,looktime__range=(first_day, first_day_of_next_month)).values('usecomp__partid','usecomp__partname').annotate(number = Count('lookid'))
for j in Observe:
for i in s_models.Dicclass.objects.filter(parentid__dicid=23):
if i.dicid==24:
userfy.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
elif i.dicid==25:
userwz.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
elif i.dicid==26:
grfh.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
elif i.dicid==27:
gjhsb.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
elif i.dicid==28:
cxhbz.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
elif i.dicid==29:
rtgcx.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
elif i.dicid==30:
hjzj.append(s_models.Unsafes.objects.filter(observe__in=j,unsafedicclass=i).count())
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')