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')