Merge branch 'master' of 10.7.100.160:/job/safesite

This commit is contained in:
shilixia 2019-11-06 15:32:43 +08:00
commit 4efd33677d
18 changed files with 514 additions and 367 deletions

Binary file not shown.

View File

@ -35,8 +35,8 @@
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr role="row">
<th class="sorting_asc" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" style="width: 164.933px;" aria-sort="ascending"
aria-label="Rendering engine: activate to sort column descending">员工ID</th>
<!-- <th class="sorting_asc" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" style="width: 164.933px;" aria-sort="ascending"
aria-label="Rendering engine: activate to sort column descending">员工ID</th> -->
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" style="width: 204.15px;"
aria-label="Browser: activate to sort column ascending">员工名称</th>
<th class="sorting" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" style="width: 179.933px;"

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block title %}在线考试统计{% endblock %}

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block pagehead %}
<h1>
@ -174,5 +173,4 @@
map.setCenter([x/num,y/num])
})
</script>
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
{% endblock %}

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block title %}未遂事件统计{% endblock %}
@ -140,4 +139,3 @@
</script>
{% endblock %}
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block title %}行为统计{% endblock %}
@ -137,4 +136,3 @@
</script>
{% endblock %}
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block title %}风险管控{% endblock %}
@ -174,4 +173,3 @@
</script>
{% endblock %}
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block title %}教育培训统计{% endblock %}
@ -141,4 +140,3 @@
</script>
{% endblock %}
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345

View File

@ -1,4 +1,3 @@
{% extends "./base.html" %}
{% block title %}隐患统计{% endblock %}
@ -134,4 +133,3 @@
</script>
{% endblock %}
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345

View File

@ -1,317 +1,317 @@
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
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
from django.forms.models import model_to_dict
from django.http import Http404
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())
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")
# 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':
user_form = UserForm(request.POST)
if user_form.is_valid():
model_user = s_models.User.objects.filter(pk=user_form.cleaned_data.get('userid'))[0]
if model_user:
# model_user.ubelongpart = user_form.cleaned_data.get('ubelongpart')
# model_user.usecomp = user_form.cleaned_data.get('usecomp')
# model_user.save()
newpart = user_form.cleaned_data.get('ubelongpart')
oldpart = model_user.ubelongpart
oldpart.aqy = oldpart.aqy.replace(',' + str(model_user.userid) + ',', '')
oldpart.bmzg = oldpart.bmzg.replace(',' + str(model_user.userid) + ',', '')
oldpart.bsq = oldpart.bsq.replace(',' + str(model_user.userid) + ',', '')
oldpart.save()
part = s_models.Partment.objects.get(partid=newpart.partid)
if part.iscompany == 1:
usecomp = part
else:
usecomp = s_models.Partment.objects.get(partid=part.partlink.split(',')[1])
model_user.ubelongpart = part
model_user.usecomp = usecomp
model_user.save()
for i in s_models.Group.objects.filter(usecomp=usecomp):
i.users.remove(model_user)
groupobj = s_models.Group.objects.filter(usecomp=usecomp, grouptype=3).first()
groupobj.users.add(model_user)
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")
user_form = UserForm(model_to_dict(user))
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()
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')
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
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
from django.forms.models import model_to_dict
from django.http import Http404
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())
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")
# 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':
user_form = UserForm(request.POST)
if user_form.is_valid():
model_user = s_models.User.objects.filter(pk=user_form.cleaned_data.get('userid'))[0]
if model_user:
# model_user.ubelongpart = user_form.cleaned_data.get('ubelongpart')
# model_user.usecomp = user_form.cleaned_data.get('usecomp')
# model_user.save()
newpart = user_form.cleaned_data.get('ubelongpart')
oldpart = model_user.ubelongpart
oldpart.aqy = oldpart.aqy.replace(',' + str(model_user.userid) + ',', '')
oldpart.bmzg = oldpart.bmzg.replace(',' + str(model_user.userid) + ',', '')
oldpart.bsq = oldpart.bsq.replace(',' + str(model_user.userid) + ',', '')
oldpart.save()
part = s_models.Partment.objects.get(partid=newpart.partid)
if part.iscompany == 1:
usecomp = part
else:
usecomp = s_models.Partment.objects.get(partid=part.partlink.split(',')[1])
model_user.ubelongpart = part
model_user.usecomp = usecomp
model_user.save()
for i in s_models.Group.objects.filter(usecomp=usecomp):
i.users.remove(model_user)
groupobj = s_models.Group.objects.filter(usecomp=usecomp, grouptype=3).first()
groupobj.users.add(model_user)
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")
user_form = UserForm(model_to_dict(user))
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()
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')

View File

@ -0,0 +1,23 @@
# Generated by Django 2.1.5 on 2019-10-30 16:32
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('safesite', '0285_remove_companyinfo_liaison_fax'),
]
operations = [
# migrations.RemoveField(
# model_name='companyinfo',
# name='liaison_fax',
# ),
migrations.AddField(
model_name='equipment',
name='riskact',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='safesite.RiskAct'),
),
]

View File

@ -660,6 +660,24 @@ class Relation(models.Model):#各模块关系表,没用到
remark = models.CharField(max_length=1000,null=True,blank=True)
class RiskAct(models.Model):#风险点表
id = models.AutoField(primary_key=True)
area = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True,related_name='riskactarea')
place = models.CharField(max_length=50,null=True,blank=True)
type = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
name = models.CharField(max_length=200,null=True,blank=True)
createtime = models.DateTimeField(default = timezone.now)
level = models.CharField(max_length=50,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
qrcode = models.CharField(max_length=200,blank=True,null=True)
gkcj = models.CharField(max_length=50,null=True,blank=True)#从此往下以风险点来管控
zrbm = models.ForeignKey(Partment,related_name='riskzrbm2',on_delete=models.CASCADE,null=True,blank=True)
zrr = models.ForeignKey(User,related_name='riskzrr2',on_delete=models.CASCADE,null=True,blank=True)
group = models.ForeignKey(Group,on_delete=models.CASCADE,null=True,blank=True)
modifytime = models.DateTimeField(auto_now = True)
tasktype = models.IntegerField(default=0)
tasktime = models.DateTimeField(null=True,blank=True) #最后任务开始时间
class Equipment(models.Model):#设备表
id = models.AutoField(primary_key=True)
num = models.CharField(max_length=30,null=True,blank=True)
@ -686,6 +704,7 @@ class Equipment(models.Model):#设备表
zrr = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
img = models.CharField(max_length=1000,blank=True,null=True)
qrcode = models.CharField(max_length=200,blank=True,null=True)
riskact = models.ForeignKey(RiskAct,null=True,blank=True,on_delete=models.CASCADE)
class Inspect(models.Model):#设备巡检记录
id = models.AutoField(primary_key=True)
@ -697,24 +716,6 @@ class Inspect(models.Model):#设备巡检记录
user = models.ForeignKey(User,blank=True,null=True,on_delete=models.CASCADE)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
trouble = models.ForeignKey(Trouble,on_delete=models.CASCADE,null=True,blank=True)
class RiskAct(models.Model):#风险点表
id = models.AutoField(primary_key=True)
area = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True,related_name='riskactarea')
place = models.CharField(max_length=50,null=True,blank=True)
type = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
name = models.CharField(max_length=200,null=True,blank=True)
createtime = models.DateTimeField(default = timezone.now)
level = models.CharField(max_length=50,null=True,blank=True)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
qrcode = models.CharField(max_length=200,blank=True,null=True)
gkcj = models.CharField(max_length=50,null=True,blank=True)#从此往下以风险点来管控
zrbm = models.ForeignKey(Partment,related_name='riskzrbm2',on_delete=models.CASCADE,null=True,blank=True)
zrr = models.ForeignKey(User,related_name='riskzrr2',on_delete=models.CASCADE,null=True,blank=True)
group = models.ForeignKey(Group,on_delete=models.CASCADE,null=True,blank=True)
modifytime = models.DateTimeField(auto_now = True)
tasktype = models.IntegerField(default=0)
tasktime = models.DateTimeField(null=True,blank=True) #最后任务开始时间
class Risk(models.Model):#风险表
tasktype_choices = (

View File

@ -64,11 +64,15 @@
</tr>
<tr>
<td><label>责任部门:</label><input id="zrbm" name="zrbm" /></td>
<td><label>责任人员:</label><input id="zrr" class="easyui-combobox" name="zrr" /></td>
<td><label>责任人员:</label><input id="zrr" class="easyui-combobox" name="zrr" editable=false/></td>
<td><label>关联风险点</label><a onclick="choosefxd()" class="easyui-linkbutton">选择</a>
<span style="color: blue;" id="fxdspan"></span>
<input type=hidden id="fxdinput" name="riskact">
</td>
</tr>
<tr>
<td><label>技术参数:</label><input id="parameter" class="easyui-textbox" name="parameter"
style="height:100px" data-options="multiline:true" /></td>
<td colspan="3"><label>技术参数:</label><input id="parameter" class="easyui-textbox" name="parameter"
style="height:100px;width:90%" data-options="multiline:true" /></td>
</tr>
<tr>
<td><a id="savesb" onclick="savesb()" class="easyui-linkbutton" data-options="iconCls: 'fa-save'">保存</a></td>
@ -192,6 +196,13 @@
$('#cate').combobox('setValue', res.cate__dickeyid)
$('#area').combotree('setValue', res.area__id)
$('#zrbm').combotree('setValue', res.zrbm__partid)
$('#fxdinput').val(res.riskact__id)
$('#fxdspan').css('color','blue')
$('#fxdspan').html(' '+res.riskact__name)
if(res.riskact__name==undefined){
$('#fxdspan').css('color','red')
$('#fxdspan').html(' 未绑定')
}
$('#zrr').combobox({ url: 'getuser?partid=' + res.zrbm__partid + '&a=combobox', }).combobox('setValue', res.zrr__userid)
if (res.iskey == 1) {
$('#iskey').prop("checked", true);
@ -320,4 +331,9 @@
}; //请求完成
xhr.onerror = function (evt) { $.messager.alert('提示', '失败!文件内容有误'); document.getElementById('drfile').value = ''; }; //请求失败
}
function choosefxd(){
var myh = screen.availHeight * 0.8;
var area = $('#area').combotree('getValue')
opendg('选择风险点','html/riskact/chose?area='+area,myh)
}
</script>

View File

@ -14,14 +14,15 @@
animate: true,
checkbox: true,
lines: true,
loadFilter: function (rows) {
return convertmenu(rows);
loadFilter: function (rows) {
var rows = convertmenu(rows)
return rows;
},
onClick: function (node) {
},
onCheck:function(node){
console.log($('#rightstree').tree('getChecked', ['checked','indeterminate']))
//console.log($('#rightstree').tree('getChecked', ['checked','indeterminate']))
},
onBeforeLoad: function (node, param) {

View File

@ -0,0 +1,68 @@
<div class="easyui-layout" style="width:100%;height:100%;">
<div id="riskactbar" style="padding:5px;height:auto">
<div>
<form id="searchriskactff">
<label>区域</label>
<input class="easyui-combotree" name="area" data-options="
url: 'api/area?a=tree',
method: 'get',
editable: false,
loadFilter: function (rows) {
return convert(rows);
},
formatter: function (node) {
var s = node.text;
if (node.children) {
s += '&nbsp;<span style=\'color:blue\'>(' + node.children.length + ')</span>';
}
return s;
},"/>
<a onclick="searchriskact()" class="easyui-linkbutton" data-options="iconCls: 'fa-search',plain:true">查询</a>
</form>
</div>
</div>
<table id="riskacttable" style="height:100%;"></table>
</div>
<script>
var area = {{area}};
var url = 'api/riskact?a=listall&type=396&area='+area
$('#riskacttable').datagrid({
url: url,
singleSelect:true,
rownumbers: true,
fitColumns: true,
striped: true,
method: 'get',
toolbar: '#riskactbar',
pagination: 'true',
pageSize: 20,
columns: [[
// { field: 'ck', checkbox:true },
{ field: 'id', title: 'ID', hidden: true },
{ field: 'area__name', title: '区域', width: 100 },
{ field: 'type__dickeyname', title: '类型', width: 80 },
{ field: 'name', title: '名称', width: 100 },
{ field: 'level', title: '级别', width: 80 , styler: function (value, row, index) {
switch (value) {
case '低风险': return 'background-color:blue;color:white'; break;
case '一般风险': return 'background-color:yellow;'; break;
case '较大风险': return 'background-color:orange;'; break;
case '重大风险': return 'background-color:red;color:white'; break;
}
}},
{ field: 'gkcj', title: '层级', width: 80 },
{ field: 'zrbm__partname', title: '责任部门', width: 80 },
{ field: 'zrr__name', title: '责任人', width: 80 },
{ field: 'group__groupname', title: '岗位', width: 100 },
]],
onSelect: function (index, data) {
$('#fxdspan').css('color','blue')
$('#fxdspan').html(' '+data.name)
$('#fxdinput').val(data.id)
closeForm()
}})
function searchriskact(){
var querydata = $('#searchriskactff').serializeJSON();
$('#riskacttable').datagrid('load',querydata);
}
</script>

View File

@ -100,6 +100,15 @@
$.messager.alert('提示', '未选择作业类型!');
}
}
function addspjd(){
var row = $('#zylxlist').datalist('getSelected')
if (row){
opendg('新增审批节点','html/operationspjd/add')
}else{
$.messager.alert('提示', '未选择作业类型!');
}
}
function delspjd(){
var row = $('#spjdtable').datagrid('getSelected')

View File

@ -88,6 +88,7 @@ urlpatterns = [
path('html/bhr',views.bhrhtml),
path('riskas',views.riskas),
path('html/examhistory/<int:id>/',views.examhistory),
path('html/riskact/chose',views.riskactchose),
path('html/trainfig',views.trainfigure),
path('html/examfig',views.examfigure),
#html页面

View File

@ -28,6 +28,7 @@ import decimal
from . import forms
from .models import CompanyInfo
from django.contrib.sessions.models import Session
from groups import models as g_models
import logging
logger = logging.getLogger('log')
@ -96,6 +97,11 @@ def taskdo(req):
return render(req,'taskdo.html')
def task(req):
return render(req,'task.html')
def riskactchose(req):
area = 0
if req.GET.get('area',None):
area = req.GET.get('area')
return render(req,'riskactchose.html',locals())
def riskactedit(req,id):
return render(req,'riskactedit.html',{'id':id})
def riskactadd(req):
@ -512,11 +518,11 @@ def getspr(ubp):
def getsprs(userid,ubp):
currentpart=ubp
a=getsprs_ubp(userid,currentpart)
a=getsprs_ubp2(userid,currentpart)
while a==False:
currentpart=currentpart.parentid #已找不到上级部门
if currentpart:
a=getsprs_ubp(userid,currentpart)
a=getsprs_ubp2(userid,currentpart)
else:
return User.objects.get(ubelongpart=currentpart,issuper=1)
return a
@ -545,6 +551,16 @@ def getsprs_ubp(userid,ubp):
else:
return False
def getsprs_ubp2(userid,ubp):
a=ubp
if a.aqy !=',' or a.bmzg !=',':
allstr = a.aqy + a.bmzg
alllist = allstr.split(',')
alist = list(map(int, list(filter(None, alllist))))
return alist
else:
return False
@check_login
def menutree(req):
userid = req.session['userid']
@ -573,7 +589,7 @@ def apirights(req):
allrights = Group.objects.get(usecomp__partid=companyid,grouptype=0).menulink.split(',')
menus = Menu.objects.exclude(menuid__in=[11,9]).filter(menuid__in = allrights,deletemark=1).order_by('menuid').values('menuid','menucode','parentid','url','menuname','icon').distinct()
for i in menus:
if str(i['menuid']) in haverights:
if str(i['menuid']) in haverights and i['url'] != None:
i['checked']=True
else:
i['checked']=False
@ -585,6 +601,10 @@ def apirights(req):
rlist = ['11','9']
for i in data:
rlist.append(str(i['id']))
# x = i['id']
# while Menu.objects.get(menuid=x).parentid != None:
# x = Menu.objects.get(menuid=x).parentid.menuid
# rlist.append(str(x))
Group.objects.filter(groupid=groupid).update(menulink=','.join(list(set(rlist))))
return JsonResponse({"code":1})
elif a=='have':
@ -1272,7 +1292,7 @@ def getdickey(req):
if req.GET.get('dicclass')=='33':
for i in a:
objs = Operationspjd.objects.filter(zylx=Dickey.objects.get(dickeyid=i['dickeyid']),usecomp=Partment.objects.get(partid=companyid))
str='作业部门主管-属地部门主管'
str='作业负责人-作业部门安全员-属地部门安全员'
for x in objs:
str = str + '-' + x.jdmc
i['splcdetail'] = str
@ -4043,6 +4063,19 @@ def apitool(req):
x['id']=i.partid
m.append(x)
return JsonResponse({'wxgs':m})
elif a == 'correct_spjd':
for i in Operationspjd.objects.all():
if i.spr:
i.sprs = [i.spr.userid]
i.save()
return JsonResponse({"code":1})
elif a == 'supercompany':
supergroup = g_models.Group.objects.get(groupname='supergroup')
for i in Partment.objects.filter(iscompany=1,deletemark=1):
obj,create = g_models.Groupmember.objects.get_or_create(group=supergroup,member=i,defaults={'group':supergroup,'member':i})
if create:
print(i.partname+'---加入supergroup')
return JsonResponse({"code":1})
@ -4259,9 +4292,9 @@ def apioperation(req):
obj.zyzt = {'zyzt':'确认中','index':0}
obj.save()
splc = []
splc.append({'jdmc':'作业负责人审批','sprs':[userid]})
splc.append({'jdmc':'作业部门审批','sprs':getsprs(userid,obj.zybm)})
splc.append({'jdmc':'属地部门审批','sprs':getsprs(userid,obj.sdbm)})
splc.append({'jdmc':'作业负责人','sprs':[userid]})
splc.append({'jdmc':'作业部门审批','sprs':getsprs(userid,obj.zybm)})
splc.append({'jdmc':'属地部门审批','sprs':getsprs(userid,obj.sdbm)})
for i in Operationspjd.objects.filter(zylx=obj.zylx,usecomp=Partment.objects.get(partid=getcompany(userid))).order_by('id'):
splc.append({'jdmc':i.jdmc,'sprs':i.sprs})
obj.zyzt['splc']=splc
@ -5360,6 +5393,8 @@ def apiequipment(req):
obj.zrbm = Partment.objects.get(partid=data['zrbm'])
if data['zrr']:
obj.zrr = User.objects.get(userid=data['zrr'] )
if data['riskact']:
obj.riskact = RiskAct.objects.get(id=data['riskact'])
obj.parameter = data['parameter']
obj.usecomp=Partment.objects.get(partid=companyid)
obj.save()
@ -5377,7 +5412,7 @@ def apiequipment(req):
return JsonResponse({"code":0})
elif a == 'detail':
id = req.GET.get('id')
a = Equipment.objects.filter(id=id).values('id','num','name','type','oem','udate','fdate','fnum','place','istz','iskey','state','cate__dickeyname','cate__dickeyid','parameter','img','area__name','area__id','zrbm__partid','zrr__userid','zrbm__partname','zrr__name','qrcode')
a = Equipment.objects.filter(id=id).values('id','num','name','type','oem','udate','fdate','fnum','place','istz','iskey','state','cate__dickeyname','cate__dickeyid','parameter','img','area__name','area__id','zrbm__partid','zrr__userid','zrbm__partname','zrr__name','qrcode','riskact__name','riskact__id')
return JsonResponse(a[0])
@ -5482,9 +5517,9 @@ def apiriskact(req):
companyid = getcompany(userid)
if a=='listall':
a = RiskAct.objects.filter(usecomp__partid=companyid)
if req.GET.get('area'):
if int(req.GET.get('area',0)):
a = a.filter(area__id = req.GET.get('area'))
if req.GET.get('type'):
if int(req.GET.get('type',0)):
a = a.filter(type__dickeyid=req.GET.get('type'))
total = a.count()
startnum,endnum=fenye(req)
@ -5620,8 +5655,14 @@ def apirisk(req):
data = json.loads(req.body.decode('utf-8'))
if req.GET.get('type') == 'equipment':
areaid = data['areaid']
equipmentid = data['id']
equipmentname = data['name']
objs = Risk.objects.filter(usecomp__partid=companyid,riskact__area__id=areaid,riskact__name__contains=equipmentname)
objs = Risk.objects.filter(usecomp__partid=companyid)
equipment = Equipment.objects.get(id=equipmentid)
if equipment.riskact:#如果该设备存在绑定的风险
objs = objs.filter(riskact=equipment.riskact)
else:
objs = objs.filter(riskact__area__id=areaid,riskact__name__contains=equipmentname)
if objs.exists():
return JsonResponse({'code':1,'steps':list(objs.values('id','step','hazard','result','level','riskact__group__groupname','riskact__zrbm__partname','riskact__zrr__name'))})
else: