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"> <table id="example1" class="table table-bordered table-striped">
<thead> <thead>
<tr role="row"> <tr role="row">
<th class="sorting_asc" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" style="width: 164.933px;" aria-sort="ascending" <!-- <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> 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;" <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> 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;" <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" %} {% extends "./base.html" %}
{% block title %}在线考试统计{% endblock %} {% block title %}在线考试统计{% endblock %}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,317 +1,317 @@
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from django.shortcuts import render from django.shortcuts import render
from django.shortcuts import redirect from django.shortcuts import redirect
from .models import Group, GroupUser from .models import Group, GroupUser
from .forms import GroupUserForm, UserForm from .forms import GroupUserForm, UserForm
from safesite import models as s_models from safesite import models as s_models
from safesite.tasks import gettime from safesite.tasks import gettime
import requests import requests
import json import json
import time import time
from datetime import datetime, date, timedelta from datetime import datetime, date, timedelta
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
from django.db.models import Q, F, Count, Sum from django.db.models import Q, F, Count, Sum
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from django.http import Http404 from django.http import Http404
def check_login(func): # 自定义登录验证装饰器 def check_login(func): # 自定义登录验证装饰器
def warpper(request, *args, **kwargs): def warpper(request, *args, **kwargs):
is_login = request.session.get('is_login', False) is_login = request.session.get('is_login', False)
if is_login: if is_login:
return func(request, *args, **kwargs) return func(request, *args, **kwargs)
else: else:
return redirect('/groups/login') return redirect('/groups/login')
return warpper return warpper
def login(request): def login(request):
# 不允许重复登录 # 不允许重复登录
if request.session.get('is_login', None): if request.session.get('is_login', None):
return redirect('/groups/index/') return redirect('/groups/index/')
if request.method == "POST": if request.method == "POST":
groups_form = GroupUserForm(request.POST) groups_form = GroupUserForm(request.POST)
message = '请检查填写的内容!' message = '请检查填写的内容!'
if groups_form.is_valid(): if groups_form.is_valid():
username = groups_form.cleaned_data.get('username') username = groups_form.cleaned_data.get('username')
password = groups_form.cleaned_data.get('password') password = groups_form.cleaned_data.get('password')
try: try:
user = GroupUser.objects.get(username=username) user = GroupUser.objects.get(username=username)
except: except:
message = '用户不存在!' message = '用户不存在!'
return render(request, 'groups/login.html', locals()) return render(request, 'groups/login.html', locals())
if user.password == password: if user.password == password:
request.session['is_login'] = True request.session['is_login'] = True
request.session['user_id'] = user.id request.session['user_id'] = user.id
request.session['user_name'] = user.username request.session['user_name'] = user.username
return redirect('/groups/index/') return redirect('/groups/index/')
else: else:
return render(request, 'groups/login.html', locals()) return render(request, 'groups/login.html', locals())
else: else:
return render(request, 'groups/login.html', locals()) return render(request, 'groups/login.html', locals())
groups_form = GroupUserForm() groups_form = GroupUserForm()
return render(request, 'groups/login.html', locals()) return render(request, 'groups/login.html', locals())
def logout(request): def logout(request):
# if not request.session.get('is_login', None): # if not request.session.get('is_login', None):
# return redirect('/groups/login') # return redirect('/groups/login')
request.session.flush() request.session.flush()
return redirect('/groups/login') return redirect('/groups/login')
import json import json
from captcha.models import CaptchaStore from captcha.models import CaptchaStore
from captcha.helpers import captcha_image_url from captcha.helpers import captcha_image_url
def refresh_captcha(request): def refresh_captcha(request):
hashkey = CaptchaStore.generate_key() hashkey = CaptchaStore.generate_key()
image_url = captcha_image_url(hashkey) image_url = captcha_image_url(hashkey)
return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json') return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json')
@check_login @check_login
def company(request): def company(request):
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all() companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
for i in companys: for i in companys:
i.useradmin = s_models.User.objects.get(ubelongpart=i, issuper=1).username i.useradmin = s_models.User.objects.get(ubelongpart=i, issuper=1).username
return render(request, 'groups/company.html', locals()) return render(request, 'groups/company.html', locals())
def job(request): def job(request):
return render(request, 'groups/job.html', locals()) return render(request, 'groups/job.html', locals())
def company_user(request, cid): def company_user(request, cid):
users = s_models.User.objects.filter(usecomp=cid) users = s_models.User.objects.filter(usecomp=cid)
# for user in users: # for user in users:
# dump(user) # dump(user)
return render(request, 'groups/company_user.html', locals()) return render(request, 'groups/company_user.html', locals())
def company_userdetail(request, uid): def company_userdetail(request, uid):
try: try:
user = s_models.User.objects.get(pk=uid) user = s_models.User.objects.get(pk=uid)
except s_models.User.DoesNotExist: except s_models.User.DoesNotExist:
raise Http404("User does not exist") raise Http404("User does not exist")
# UserForm.set_usecomp(s_models.Partment.objects.filter(group__id=1)) # UserForm.set_usecomp(s_models.Partment.objects.filter(group__id=1))
user_form = UserForm(model_to_dict(user)) user_form = UserForm(model_to_dict(user))
return render(request, 'groups/company_userdetail.html', locals()) return render(request, 'groups/company_userdetail.html', locals())
def groups_userupdate(request): def groups_userupdate(request):
if request.method == 'POST': if request.method == 'POST':
user_form = UserForm(request.POST) user_form = UserForm(request.POST)
if user_form.is_valid(): if user_form.is_valid():
model_user = s_models.User.objects.filter(pk=user_form.cleaned_data.get('userid'))[0] model_user = s_models.User.objects.filter(pk=user_form.cleaned_data.get('userid'))[0]
if model_user: if model_user:
# model_user.ubelongpart = user_form.cleaned_data.get('ubelongpart') # model_user.ubelongpart = user_form.cleaned_data.get('ubelongpart')
# model_user.usecomp = user_form.cleaned_data.get('usecomp') # model_user.usecomp = user_form.cleaned_data.get('usecomp')
# model_user.save() # model_user.save()
newpart = user_form.cleaned_data.get('ubelongpart') newpart = user_form.cleaned_data.get('ubelongpart')
oldpart = model_user.ubelongpart oldpart = model_user.ubelongpart
oldpart.aqy = oldpart.aqy.replace(',' + str(model_user.userid) + ',', '') oldpart.aqy = oldpart.aqy.replace(',' + str(model_user.userid) + ',', '')
oldpart.bmzg = oldpart.bmzg.replace(',' + str(model_user.userid) + ',', '') oldpart.bmzg = oldpart.bmzg.replace(',' + str(model_user.userid) + ',', '')
oldpart.bsq = oldpart.bsq.replace(',' + str(model_user.userid) + ',', '') oldpart.bsq = oldpart.bsq.replace(',' + str(model_user.userid) + ',', '')
oldpart.save() oldpart.save()
part = s_models.Partment.objects.get(partid=newpart.partid) part = s_models.Partment.objects.get(partid=newpart.partid)
if part.iscompany == 1: if part.iscompany == 1:
usecomp = part usecomp = part
else: else:
usecomp = s_models.Partment.objects.get(partid=part.partlink.split(',')[1]) usecomp = s_models.Partment.objects.get(partid=part.partlink.split(',')[1])
model_user.ubelongpart = part model_user.ubelongpart = part
model_user.usecomp = usecomp model_user.usecomp = usecomp
model_user.save() model_user.save()
for i in s_models.Group.objects.filter(usecomp=usecomp): for i in s_models.Group.objects.filter(usecomp=usecomp):
i.users.remove(model_user) i.users.remove(model_user)
groupobj = s_models.Group.objects.filter(usecomp=usecomp, grouptype=3).first() groupobj = s_models.Group.objects.filter(usecomp=usecomp, grouptype=3).first()
groupobj.users.add(model_user) groupobj.users.add(model_user)
else: else:
message = '没有发现该用户' message = '没有发现该用户'
return render(request, 'groups/company_userchange.html', locals()) return render(request, 'groups/company_userchange.html', locals())
else: else:
return redirect('/groups/company/') return redirect('/groups/company/')
def company_userchange_page(request, uid): def company_userchange_page(request, uid):
try: try:
user = s_models.User.objects.get(pk=uid) user = s_models.User.objects.get(pk=uid)
except s_models.User.DoesNotExist: except s_models.User.DoesNotExist:
raise Http404("User does not exist") raise Http404("User does not exist")
user_form = UserForm(model_to_dict(user)) user_form = UserForm(model_to_dict(user))
return render(request, 'groups/company_userchange.html', locals()) return render(request, 'groups/company_userchange.html', locals())
def dump(obj): def dump(obj):
print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()])) print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
@check_login @check_login
def index(req): def index(req):
first_day, first_day_of_next_month = gettime() first_day, first_day_of_next_month = gettime()
group = GroupUser.objects.get(id=req.session['user_id']).group group = GroupUser.objects.get(id=req.session['user_id']).group
companys = group.members.all() companys = group.members.all()
troublenum = s_models.Trouble.objects.filter(deletemark=1, usecomp__in=companys, troublenum = s_models.Trouble.objects.filter(deletemark=1, usecomp__in=companys,
fxsj__range=(first_day, first_day_of_next_month)).count() fxsj__range=(first_day, first_day_of_next_month)).count()
observenum = s_models.Observe.objects.filter(deletemark=1, usecomp__in=companys, observenum = s_models.Observe.objects.filter(deletemark=1, usecomp__in=companys,
looktime__range=(first_day, first_day_of_next_month)).count() looktime__range=(first_day, first_day_of_next_month)).count()
missnum = s_models.Miss.objects.filter(deletemark=1, usecomp__in=companys, missnum = s_models.Miss.objects.filter(deletemark=1, usecomp__in=companys,
misstime__range=(first_day, first_day_of_next_month)).count() misstime__range=(first_day, first_day_of_next_month)).count()
trainnum = s_models.Train.objects.filter(deletemark=1, usecomp__in=companys, trainnum = s_models.Train.objects.filter(deletemark=1, usecomp__in=companys,
starttime__range=(first_day, first_day_of_next_month)).count() starttime__range=(first_day, first_day_of_next_month)).count()
companynum = len(companys) companynum = len(companys)
usernum = s_models.User.objects.filter(deletemark=1, usecomp__in=companys).count() usernum = s_models.User.objects.filter(deletemark=1, usecomp__in=companys).count()
return render(req, 'groups/index.html', locals()) return render(req, 'groups/index.html', locals())
def updateposition(req): def updateposition(req):
allcompanys = s_models.Partment.objects.filter(deletemark=1, iscompany=1) allcompanys = s_models.Partment.objects.filter(deletemark=1, iscompany=1)
for i in allcompanys: for i in allcompanys:
address = i.partname address = i.partname
data = getPosition(address) data = getPosition(address)
if data['status'] == '1' and int(data['count']) > 0: if data['status'] == '1' and int(data['count']) > 0:
i.position = data['geocodes'][0] i.position = data['geocodes'][0]
i.save() i.save()
else: else:
address = i.partname.replace('公司', '').replace('责任', '').replace('有限', '') address = i.partname.replace('公司', '').replace('责任', '').replace('有限', '')
data = getPosition(address) data = getPosition(address)
if data['status'] == '1' and int(data['count']) > 0: if data['status'] == '1' and int(data['count']) > 0:
i.position = data['geocodes'][0] i.position = data['geocodes'][0]
i.save() i.save()
return JsonResponse({"code": 1}) return JsonResponse({"code": 1})
def getPosition(address): def getPosition(address):
url = 'http://restapi.amap.com/v3/geocode/geo' url = 'http://restapi.amap.com/v3/geocode/geo'
par = {'address': address, 'key': '86e0993305a427ac2d0b5371ad97f242'} par = {'address': address, 'key': '86e0993305a427ac2d0b5371ad97f242'}
res = requests.get(url, par) res = requests.get(url, par)
json_data = json.loads(res.text) json_data = json.loads(res.text)
return json_data return json_data
def apipositions(req): def apipositions(req):
companys = GroupUser.objects.get(id = req.session['user_id']).group.members.all() companys = GroupUser.objects.get(id = req.session['user_id']).group.members.all()
positions = companys.values('position','partname') positions = companys.values('position','partname')
return JsonResponse({"code":1,"data":list(positions)}) return JsonResponse({"code":1,"data":list(positions)})
def trouble(request):#隐患排查 def trouble(request):#隐患排查
return render(request, 'groups/troublepic.html', locals()) return render(request, 'groups/troublepic.html', locals())
def observe(request):#行为观察 def observe(request):#行为观察
return render(request, 'groups/observe.html', locals()) return render(request, 'groups/observe.html', locals())
def miss(request):#未遂事件 def miss(request):#未遂事件
return render(request, 'groups/miss.html', locals()) return render(request, 'groups/miss.html', locals())
def risk(request):#风险管控 def risk(request):#风险管控
return render(request, 'groups/risk.html', locals()) return render(request, 'groups/risk.html', locals())
def train(request):#教育培训 def train(request):#教育培训
return render(request, 'groups/train.html', locals()) return render(request, 'groups/train.html', locals())
def exam(request):#在线考试 def exam(request):#在线考试
return render(request, 'groups/exam.html', locals()) return render(request, 'groups/exam.html', locals())
def troubleChart(request):#隐患统计图 def troubleChart(request):#隐患统计图
code = request.GET.get('code') code = request.GET.get('code')
start = request.GET.get('start') start = request.GET.get('start')
end = request.GET.get('end') end = request.GET.get('end')
if code=='tbpic': if code=='tbpic':
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() 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') troublelist = s_models.Trouble.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname')
if start: if start:
troublelist = troublelist.filter(fxsj__gte=start) troublelist = troublelist.filter(fxsj__gte=start)
if end: if end:
troublelist = troublelist.filter(fxsj__lte=end) troublelist = troublelist.filter(fxsj__lte=end)
troublelist=troublelist.annotate(number = Count('usecomp')).order_by('-number') troublelist=troublelist.annotate(number = Count('usecomp')).order_by('-number')
return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(troublelist)}}), content_type='application/json') return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(troublelist)}}), content_type='application/json')
def observeChart(request):#行为观察 def observeChart(request):#行为观察
code = request.GET.get('code') code = request.GET.get('code')
start = request.GET.get('start') start = request.GET.get('start')
end = request.GET.get('end') end = request.GET.get('end')
if code=='obv': if code=='obv':
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() 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') observelist = s_models.Observe.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname')
if start: if start:
observelist = observelist.filter(looktime__gte=start) observelist = observelist.filter(looktime__gte=start)
if end: if end:
observelist = observelist.filter(looktime__lte=end) observelist = observelist.filter(looktime__lte=end)
observelist=observelist.annotate(number = Count('usecomp')).order_by('-number') observelist=observelist.annotate(number = Count('usecomp')).order_by('-number')
return HttpResponse(json.dumps({'code':1,'data':{'observelist':list(observelist)}}), content_type='application/json') return HttpResponse(json.dumps({'code':1,'data':{'observelist':list(observelist)}}), content_type='application/json')
def missChart(request):#未遂事件 def missChart(request):#未遂事件
code = request.GET.get('code') code = request.GET.get('code')
start = request.GET.get('start') start = request.GET.get('start')
end = request.GET.get('end') end = request.GET.get('end')
if code=='miss': if code=='miss':
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() 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') misslist = s_models.Miss.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname')
if start: if start:
misslist = misslist.filter(misstime__gte=start) misslist = misslist.filter(misstime__gte=start)
if end: if end:
misslist = misslist.filter(misstime__lte=end) misslist = misslist.filter(misstime__lte=end)
misslist=misslist.annotate(number = Count('usecomp')).order_by('-number') misslist=misslist.annotate(number = Count('usecomp')).order_by('-number')
return HttpResponse(json.dumps({'code':1,'data':{'misslist':list(misslist)}}), content_type='application/json') return HttpResponse(json.dumps({'code':1,'data':{'misslist':list(misslist)}}), content_type='application/json')
def riskChart(request):#风险管控 def riskChart(request):#风险管控
code = request.GET.get('code') code = request.GET.get('code')
start = request.GET.get('start') start = request.GET.get('start')
end = request.GET.get('end') end = request.GET.get('end')
risks = [] risks = []
if code=='risk': if code=='risk':
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
for i in companys: for i in companys:
risk= s_models.RiskAct.objects.filter(usecomp__partid=i.partid) risk= s_models.RiskAct.objects.filter(usecomp__partid=i.partid)
if start: if start:
risk = risk.filter(createtime__gte=start) risk = risk.filter(createtime__gte=start)
if end: if end:
risk = risk.filter(createtime__lte=end) risk = risk.filter(createtime__lte=end)
datariskact=risk.count() datariskact=risk.count()
datariskact1=risk.filter(level="低风险").count() datariskact1=risk.filter(level="低风险").count()
datariskact2=risk.filter(level="一般风险").count() datariskact2=risk.filter(level="一般风险").count()
datariskact3=risk.filter(level="较大风险").count() datariskact3=risk.filter(level="较大风险").count()
datariskact4=risk.filter(level="重大风险").count() datariskact4=risk.filter(level="重大风险").count()
risks.append({'companyName':i.partname,'datariskact':datariskact,'datariskact1':datariskact1,'datariskact2':datariskact2,'datariskact3':datariskact3,'datariskact4':datariskact4}) 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') return HttpResponse(json.dumps({'code':1,'risks':risks}), content_type='application/json')
def trainChart(request):#教育培训 def trainChart(request):#教育培训
code = request.GET.get('code') code = request.GET.get('code')
start = request.GET.get('start') start = request.GET.get('start')
end = request.GET.get('end') end = request.GET.get('end')
if code=='train': if code=='train':
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() 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') trainlist = s_models.Train.objects.filter(usecomp__in=companys,deletemark=1).values('usecomp__partid','usecomp__partname')
if start: if start:
trainlist = trainlist.filter(starttime__gte=start) trainlist = trainlist.filter(starttime__gte=start)
if end: if end:
trainlist = trainlist.filter(starttime__lte=end) trainlist = trainlist.filter(starttime__lte=end)
trainlist=trainlist.annotate(number = Count('usecomp')).order_by('-number') trainlist=trainlist.annotate(number = Count('usecomp')).order_by('-number')
return HttpResponse(json.dumps({'code':1,'data':{'trainlist':list(trainlist)}}), content_type='application/json') return HttpResponse(json.dumps({'code':1,'data':{'trainlist':list(trainlist)}}), content_type='application/json')
def examChart(request):#在线考试 def examChart(request):#在线考试
code = request.GET.get('code') code = request.GET.get('code')
start = request.GET.get('start') start = request.GET.get('start')
end = request.GET.get('end') end = request.GET.get('end')
examjson = [] examjson = []
if code=='exam': if code=='exam':
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all() companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
for i in companys: for i in companys:
examnumber = s_models.ExamTest.objects.filter(usecomps__contains=','+str(i.partid)+',') examnumber = s_models.ExamTest.objects.filter(usecomps__contains=','+str(i.partid)+',')
if start: if start:
examnumber = examnumber.filter(usecomps__contains=','+str(i.partid)+',',starttime__gte=start) examnumber = examnumber.filter(usecomps__contains=','+str(i.partid)+',',starttime__gte=start)
if end: if end:
examnumber = examnumber.filter(usecomps__contains=','+str(i.partid)+',',starttime__lte=end) examnumber = examnumber.filter(usecomps__contains=','+str(i.partid)+',',starttime__lte=end)
examjson.append({'companyName':i.partname,'number':examnumber.count()}) examjson.append({'companyName':i.partname,'number':examnumber.count()})
return HttpResponse(json.dumps({'code':1,'data':examjson}), content_type='application/json') 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) 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):#设备表 class Equipment(models.Model):#设备表
id = models.AutoField(primary_key=True) id = models.AutoField(primary_key=True)
num = models.CharField(max_length=30,null=True,blank=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) zrr = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
img = models.CharField(max_length=1000,blank=True,null=True) img = models.CharField(max_length=1000,blank=True,null=True)
qrcode = models.CharField(max_length=200,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):#设备巡检记录 class Inspect(models.Model):#设备巡检记录
id = models.AutoField(primary_key=True) 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) user = models.ForeignKey(User,blank=True,null=True,on_delete=models.CASCADE)
usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True) usecomp = models.ForeignKey(Partment,on_delete=models.CASCADE,null=True,blank=True)
trouble = models.ForeignKey(Trouble,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):#风险表 class Risk(models.Model):#风险表
tasktype_choices = ( tasktype_choices = (

View File

@ -64,11 +64,15 @@
</tr> </tr>
<tr> <tr>
<td><label>责任部门:</label><input id="zrbm" name="zrbm" /></td> <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>
<tr> <tr>
<td><label>技术参数:</label><input id="parameter" class="easyui-textbox" name="parameter" <td colspan="3"><label>技术参数:</label><input id="parameter" class="easyui-textbox" name="parameter"
style="height:100px" data-options="multiline:true" /></td> style="height:100px;width:90%" data-options="multiline:true" /></td>
</tr> </tr>
<tr> <tr>
<td><a id="savesb" onclick="savesb()" class="easyui-linkbutton" data-options="iconCls: 'fa-save'">保存</a></td> <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) $('#cate').combobox('setValue', res.cate__dickeyid)
$('#area').combotree('setValue', res.area__id) $('#area').combotree('setValue', res.area__id)
$('#zrbm').combotree('setValue', res.zrbm__partid) $('#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) $('#zrr').combobox({ url: 'getuser?partid=' + res.zrbm__partid + '&a=combobox', }).combobox('setValue', res.zrr__userid)
if (res.iskey == 1) { if (res.iskey == 1) {
$('#iskey').prop("checked", true); $('#iskey').prop("checked", true);
@ -320,4 +331,9 @@
}; //请求完成 }; //请求完成
xhr.onerror = function (evt) { $.messager.alert('提示', '失败!文件内容有误'); document.getElementById('drfile').value = ''; }; //请求失败 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> </script>

View File

@ -14,14 +14,15 @@
animate: true, animate: true,
checkbox: true, checkbox: true,
lines: true, lines: true,
loadFilter: function (rows) { loadFilter: function (rows) {
return convertmenu(rows); var rows = convertmenu(rows)
return rows;
}, },
onClick: function (node) { onClick: function (node) {
}, },
onCheck:function(node){ onCheck:function(node){
console.log($('#rightstree').tree('getChecked', ['checked','indeterminate'])) //console.log($('#rightstree').tree('getChecked', ['checked','indeterminate']))
}, },
onBeforeLoad: function (node, param) { 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('提示', '未选择作业类型!'); $.messager.alert('提示', '未选择作业类型!');
} }
}
function addspjd(){
var row = $('#zylxlist').datalist('getSelected')
if (row){
opendg('新增审批节点','html/operationspjd/add')
}else{
$.messager.alert('提示', '未选择作业类型!');
}
} }
function delspjd(){ function delspjd(){
var row = $('#spjdtable').datagrid('getSelected') var row = $('#spjdtable').datagrid('getSelected')

View File

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

View File

@ -28,6 +28,7 @@ import decimal
from . import forms from . import forms
from .models import CompanyInfo from .models import CompanyInfo
from django.contrib.sessions.models import Session from django.contrib.sessions.models import Session
from groups import models as g_models
import logging import logging
logger = logging.getLogger('log') logger = logging.getLogger('log')
@ -96,6 +97,11 @@ def taskdo(req):
return render(req,'taskdo.html') return render(req,'taskdo.html')
def task(req): def task(req):
return render(req,'task.html') 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): def riskactedit(req,id):
return render(req,'riskactedit.html',{'id':id}) return render(req,'riskactedit.html',{'id':id})
def riskactadd(req): def riskactadd(req):
@ -512,11 +518,11 @@ def getspr(ubp):
def getsprs(userid,ubp): def getsprs(userid,ubp):
currentpart=ubp currentpart=ubp
a=getsprs_ubp(userid,currentpart) a=getsprs_ubp2(userid,currentpart)
while a==False: while a==False:
currentpart=currentpart.parentid #已找不到上级部门 currentpart=currentpart.parentid #已找不到上级部门
if currentpart: if currentpart:
a=getsprs_ubp(userid,currentpart) a=getsprs_ubp2(userid,currentpart)
else: else:
return User.objects.get(ubelongpart=currentpart,issuper=1) return User.objects.get(ubelongpart=currentpart,issuper=1)
return a return a
@ -545,6 +551,16 @@ def getsprs_ubp(userid,ubp):
else: else:
return False 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 @check_login
def menutree(req): def menutree(req):
userid = req.session['userid'] userid = req.session['userid']
@ -573,7 +589,7 @@ def apirights(req):
allrights = Group.objects.get(usecomp__partid=companyid,grouptype=0).menulink.split(',') 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() 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: for i in menus:
if str(i['menuid']) in haverights: if str(i['menuid']) in haverights and i['url'] != None:
i['checked']=True i['checked']=True
else: else:
i['checked']=False i['checked']=False
@ -585,6 +601,10 @@ def apirights(req):
rlist = ['11','9'] rlist = ['11','9']
for i in data: for i in data:
rlist.append(str(i['id'])) 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)))) Group.objects.filter(groupid=groupid).update(menulink=','.join(list(set(rlist))))
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a=='have': elif a=='have':
@ -1272,7 +1292,7 @@ def getdickey(req):
if req.GET.get('dicclass')=='33': if req.GET.get('dicclass')=='33':
for i in a: for i in a:
objs = Operationspjd.objects.filter(zylx=Dickey.objects.get(dickeyid=i['dickeyid']),usecomp=Partment.objects.get(partid=companyid)) objs = Operationspjd.objects.filter(zylx=Dickey.objects.get(dickeyid=i['dickeyid']),usecomp=Partment.objects.get(partid=companyid))
str='作业部门主管-属地部门主管' str='作业负责人-作业部门安全员-属地部门安全员'
for x in objs: for x in objs:
str = str + '-' + x.jdmc str = str + '-' + x.jdmc
i['splcdetail'] = str i['splcdetail'] = str
@ -4043,6 +4063,19 @@ def apitool(req):
x['id']=i.partid x['id']=i.partid
m.append(x) m.append(x)
return JsonResponse({'wxgs':m}) 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.zyzt = {'zyzt':'确认中','index':0}
obj.save() obj.save()
splc = [] splc = []
splc.append({'jdmc':'作业负责人审批','sprs':[userid]}) splc.append({'jdmc':'作业负责人','sprs':[userid]})
splc.append({'jdmc':'作业部门审批','sprs':getsprs(userid,obj.zybm)}) splc.append({'jdmc':'作业部门审批','sprs':getsprs(userid,obj.zybm)})
splc.append({'jdmc':'属地部门审批','sprs':getsprs(userid,obj.sdbm)}) 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'): 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}) splc.append({'jdmc':i.jdmc,'sprs':i.sprs})
obj.zyzt['splc']=splc obj.zyzt['splc']=splc
@ -5360,6 +5393,8 @@ def apiequipment(req):
obj.zrbm = Partment.objects.get(partid=data['zrbm']) obj.zrbm = Partment.objects.get(partid=data['zrbm'])
if data['zrr']: if data['zrr']:
obj.zrr = User.objects.get(userid=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.parameter = data['parameter']
obj.usecomp=Partment.objects.get(partid=companyid) obj.usecomp=Partment.objects.get(partid=companyid)
obj.save() obj.save()
@ -5377,7 +5412,7 @@ def apiequipment(req):
return JsonResponse({"code":0}) return JsonResponse({"code":0})
elif a == 'detail': elif a == 'detail':
id = req.GET.get('id') 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]) return JsonResponse(a[0])
@ -5482,9 +5517,9 @@ def apiriskact(req):
companyid = getcompany(userid) companyid = getcompany(userid)
if a=='listall': if a=='listall':
a = RiskAct.objects.filter(usecomp__partid=companyid) 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')) 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')) a = a.filter(type__dickeyid=req.GET.get('type'))
total = a.count() total = a.count()
startnum,endnum=fenye(req) startnum,endnum=fenye(req)
@ -5620,8 +5655,14 @@ def apirisk(req):
data = json.loads(req.body.decode('utf-8')) data = json.loads(req.body.decode('utf-8'))
if req.GET.get('type') == 'equipment': if req.GET.get('type') == 'equipment':
areaid = data['areaid'] areaid = data['areaid']
equipmentid = data['id']
equipmentname = data['name'] 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(): 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'))}) return JsonResponse({'code':1,'steps':list(objs.values('id','step','hazard','result','level','riskact__group__groupname','riskact__zrbm__partname','riskact__zrr__name'))})
else: else: