diff --git a/Pipfile b/Pipfile
deleted file mode 100644
index 9c7ae7bd..00000000
--- a/Pipfile
+++ /dev/null
@@ -1,11 +0,0 @@
-[[source]]
-name = "pypi"
-url = "https://pypi.org/simple"
-verify_ssl = true
-
-[dev-packages]
-
-[packages]
-
-[requires]
-python_version = "3.5"
diff --git a/groups.zip b/groups.zip
new file mode 100644
index 00000000..59b0273d
Binary files /dev/null and b/groups.zip differ
diff --git a/groups/templates/groups/exam.html b/groups/templates/groups/exam.html
index bd809608..c67a62cb 100644
--- a/groups/templates/groups/exam.html
+++ b/groups/templates/groups/exam.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block title %}隐患统计{% endblock %}
@@ -132,3 +133,145 @@
{% endblock %}
+=======
+{% extends "./base.html" %}
+
+{% block title %}在线考试统计{% endblock %}
+{% block pagehead %}
+
+
+ - 主页
+ - 在线考试统计
+
+{% endblock %}
+{% block content %}
+{% load static %}
+
+
在线考试统计
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endblock %}
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
diff --git a/groups/templates/groups/index.html b/groups/templates/groups/index.html
index 40df5f8c..8278b0a4 100644
--- a/groups/templates/groups/index.html
+++ b/groups/templates/groups/index.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block pagehead %}
@@ -173,4 +174,181 @@
map.setCenter([x/num,y/num])
})
+=======
+{% extends "./base.html" %}
+{% block pagehead %}
+
+ 本月数据
+ Month Data
+
+
+ - 主页
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
{{troublenum}}
+
+
事故隐患
+
+
+
+
+
+
+
+
+
+
+
+
+
{{observenum}}
+
+
+
+
行为观察
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{trainnum}}
+
+
教育培训
+
+
+
+
+
+
+
+
+
+
+
+
+
{{companynum}}
+
+
下属公司数
+
+
+
+
+
+
+
+
+
+
+
+
{{usernum}}
+
+
下属员工总数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{group.groupname}}
+
+
+
+
+
+
+
+
+
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
{% endblock %}
\ No newline at end of file
diff --git a/groups/templates/groups/miss.html b/groups/templates/groups/miss.html
index 48e70f6f..06a53758 100644
--- a/groups/templates/groups/miss.html
+++ b/groups/templates/groups/miss.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block title %}隐患统计{% endblock %}
@@ -133,3 +134,146 @@
{% endblock %}
+=======
+{% extends "./base.html" %}
+
+{% block title %}未遂事件统计{% endblock %}
+{% block pagehead %}
+
+
+ - 主页
+ - 未遂事件统计
+
+{% endblock %}
+{% block content %}
+{% load static %}
+
+
未遂事件统计
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endblock %}
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
diff --git a/groups/templates/groups/observe.html b/groups/templates/groups/observe.html
index 957964fa..bb9b8078 100644
--- a/groups/templates/groups/observe.html
+++ b/groups/templates/groups/observe.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block title %}隐患统计{% endblock %}
@@ -130,3 +131,143 @@
{% endblock %}
+=======
+{% extends "./base.html" %}
+
+{% block title %}行为统计{% endblock %}
+{% block pagehead %}
+
+
+ - 主页
+ - 行为观察统计
+
+{% endblock %}
+{% block content %}
+{% load static %}
+
+
行为统计
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endblock %}
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
diff --git a/groups/templates/groups/risk.html b/groups/templates/groups/risk.html
index 45b005a5..c20b48d7 100644
--- a/groups/templates/groups/risk.html
+++ b/groups/templates/groups/risk.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block title %}风险管控{% endblock %}
@@ -132,3 +133,180 @@
{% endblock %}
+=======
+{% extends "./base.html" %}
+
+{% block title %}风险管控{% endblock %}
+{% block pagehead %}
+
+
+ - 主页
+ - 风险统计
+
+{% endblock %}
+{% block content %}
+{% load static %}
+
+
风险统计
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endblock %}
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
diff --git a/groups/templates/groups/train.html b/groups/templates/groups/train.html
index 83c484c9..27ba7ef6 100644
--- a/groups/templates/groups/train.html
+++ b/groups/templates/groups/train.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block title %}教育培训统计{% endblock %}
@@ -134,3 +135,147 @@
{% endblock %}
+=======
+{% extends "./base.html" %}
+
+{% block title %}教育培训统计{% endblock %}
+{% block pagehead %}
+
+
+ - 主页
+ - 教育培训统计
+
+{% endblock %}
+{% block content %}
+{% load static %}
+
+
教育培训统计
+
+
+
+ 开始日期:
+ 结束日期:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endblock %}
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
diff --git a/groups/templates/groups/troublepic.html b/groups/templates/groups/troublepic.html
index 2be9ec4b..c481a4d6 100644
--- a/groups/templates/groups/troublepic.html
+++ b/groups/templates/groups/troublepic.html
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
{% extends "./base.html" %}
{% block title %}隐患统计{% endblock %}
@@ -127,3 +128,140 @@
{% endblock %}
+=======
+{% extends "./base.html" %}
+
+{% block title %}隐患统计{% endblock %}
+{% block pagehead %}
+
+
+ - 主页
+ - 隐患统计
+
+{% endblock %}
+{% block content %}
+{% load static %}
+
+
隐患统计
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endblock %}
+>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
diff --git a/groups/views.py b/groups/views.py
index 8cf049da..13879bbb 100644
--- a/groups/views.py
+++ b/groups/views.py
@@ -1,4 +1,4 @@
-from django.http import HttpResponse,JsonResponse
+from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from django.shortcuts import redirect
from .models import Group, GroupUser
@@ -8,21 +8,24 @@ from safesite.tasks import gettime
import requests
import json
import time
-from datetime import datetime,date,timedelta
+from datetime import datetime, date, timedelta
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.http import Http404
+
def check_login(func): # 自定义登录验证装饰器
- def warpper(request,*args,**kwargs):
+ def warpper(request, *args, **kwargs):
is_login = request.session.get('is_login', False)
if is_login:
- return func(request,*args,**kwargs)
+ return func(request, *args, **kwargs)
else:
return redirect('/groups/login')
+
return warpper
+
def login(request):
# 不允许重复登录
if request.session.get('is_login', None):
@@ -51,47 +54,56 @@ def login(request):
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()
+ 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
+ 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))
+ # 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)
@@ -120,7 +132,7 @@ def groups_userupdate(request):
model_user.save()
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.users.add(model_user)
else:
@@ -129,6 +141,7 @@ def groups_userupdate(request):
else:
return redirect('/groups/company/')
+
def company_userchange_page(request, uid):
try:
user = s_models.User.objects.get(pk=uid)
@@ -138,39 +151,45 @@ def company_userchange_page(request, uid):
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
+ 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()
+ 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()
+ 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)
+ 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:
+ if data['status'] == '1' and int(data['count']) > 0:
i.position = data['geocodes'][0]
i.save()
else:
- address = i.partname.replace('公司','').replace('责任','').replace('有限','')
+ address = i.partname.replace('公司', '').replace('责任', '').replace('有限', '')
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.save()
- return JsonResponse({"code":1})
+ return JsonResponse({"code": 1})
+
def getPosition(address):
url = 'http://restapi.amap.com/v3/geocode/geo'
@@ -179,101 +198,138 @@ def getPosition(address):
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):#隐患排查
+ 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):#行为观察
+
+
+def observe(request): # 行为观察
return render(request, 'groups/observe.html', locals())
-def miss(request):#未遂事件
+
+
+def miss(request): # 未遂事件
return render(request, 'groups/miss.html', locals())
-def risk(request):#风险管控
+
+
+def risk(request): # 风险管控
return render(request, 'groups/risk.html', locals())
-def train(request):#教育培训
+
+
+def train(request): # 教育培训
return render(request, 'groups/train.html', locals())
-def exam(request):#在线考试
+
+
+def exam(request): # 在线考试
return render(request, 'groups/exam.html', locals())
-def troubleChart(request):#隐患统计图
+
+
+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').annotate(number = Count('troubleid'))
- if start:
- troublelist = troublelist.filter(fxsj__gte=start)
- if end:
- troublelist = troublelist.filter(fxsj__lte=end)
- return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(troublelist)}}), content_type='application/json')
-def observeChart(request):#行为观察
+ 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').annotate(
+ number=Count('troubleid'))
+ if start:
+ troublelist = troublelist.filter(fxsj__gte=start)
+ if end:
+ troublelist = troublelist.filter(fxsj__lte=end)
+ 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').annotate(number = Count('lookid'))
- if start:
- observelist = observelist.filter(looktime__gte=start)
- if end:
- observelist = observelist.filter(looktime__lte=end)
- return HttpResponse(json.dumps({'code':1,'data':{'observelist':list(observelist)}}), content_type='application/json')
-
-def missChart(request):#未遂事件
+ 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').annotate(
+ number=Count('lookid'))
+ if start:
+ observelist = observelist.filter(looktime__gte=start)
+ if end:
+ observelist = observelist.filter(looktime__lte=end)
+ 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').annotate(number = Count('missid'))
- if start:
- misslist = misslist.filter(misstime__gte=start)
- if end:
- misslist = misslist.filter(misstime__lte=end)
- return HttpResponse(json.dumps({'code':1,'data':{'misslist':list(misslist)}}), content_type='application/json')
-
-def riskChart(request):#风险管控
+ 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').annotate(
+ number=Count('missid'))
+ if start:
+ misslist = misslist.filter(misstime__gte=start)
+ if end:
+ misslist = misslist.filter(misstime__lte=end)
+ 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')
- if code=='risk':
-
- companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
- risklist = s_models.Risk.objects.filter(usecomp__in=companys).values('usecomp__partid','usecomp__partname').annotate(number = Count('id'))
- if start:
- risklist = risklist.filter(createtime__gte=start)
- if end:
- risklist = risklist.filter(createtime__lte=end)
- return HttpResponse(json.dumps({'code':1,'data':{'risklist':list(risklist)}}), content_type='application/json')
-def trainChart(request):#教育培训
+ if code == 'risk':
+
+ companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
+ risklist = s_models.Risk.objects.filter(usecomp__in=companys).values('usecomp__partid',
+ 'usecomp__partname').annotate(
+ number=Count('id'))
+ if start:
+ risklist = risklist.filter(createtime__gte=start)
+ if end:
+ risklist = risklist.filter(createtime__lte=end)
+ return HttpResponse(json.dumps({'code': 1, 'data': {'risklist': list(risklist)}}),
+ 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).values('usecomp__partid','usecomp__partname').annotate(number = Count('trainid'))
- if start:
- trainlist = trainlist.filter(starttime__gte=start)
- if end:
- trainlist = trainlist.filter(starttime__lte=end)
- return HttpResponse(json.dumps({'code':1,'data':{'trainlist':list(trainlist)}}), content_type='application/json')
-
-def examChart(request):#在线考试
+ if code == 'train':
+ companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
+ trainlist = s_models.Train.objects.filter(usecomp__in=companys).values('usecomp__partid',
+ 'usecomp__partname').annotate(
+ number=Count('trainid'))
+ if start:
+ trainlist = trainlist.filter(starttime__gte=start)
+ if end:
+ trainlist = trainlist.filter(starttime__lte=end)
+ 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:
- examlist = s_models.ExamTest.objects.filter(usecomps__contains=','+i+',').count()
- if start:
+ if code == 'exam':
+ companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
+
+ for i in companys:
+ examlist = s_models.ExamTest.objects.filter(usecomps__contains=',' + i + ',').count()
+ if start:
examlist = examlist.filter(starttime__gte=start)
- if end:
+ if end:
examlist = examlist.filter(starttime__lte=end)
- examjson.append({'companyName':i.Partment,'number':Partment})
- return HttpResponse(json.dumps({'code':1,'data':examjson}), content_type='application/json')
-
+ examjson.append({'companyName': i.Partment, 'number': Partment})
+ return HttpResponse(json.dumps({'code': 1, 'data': examjson}), content_type='application/json')
+
diff --git a/mysite/settings.py b/mysite/settings.py
index b1fb09f1..01ffba4e 100644
--- a/mysite/settings.py
+++ b/mysite/settings.py
@@ -10,7 +10,7 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""
-import os
+import os,time
import psycopg2.extensions
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
@@ -146,5 +146,82 @@ CELERY_ENABLE_UTC=True
##配置session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
+SESSION_COOKIE_AGE = 1800
SESSION_SAVE_EVERY_REQUEST = True
+#日志配置
+# 创建日志的路径
+LOG_PATH = os.path.join(BASE_DIR, 'log')
+# 如果地址不存在,则自动创建log文件夹
+if not os.path.join(LOG_PATH):
+ os.mkdir(LOG_PATH)
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': True,
+ 'formatters': {
+ # 日志格式
+ 'standard': {
+ 'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
+ '[%(levelname)s]- %(message)s'},
+ 'simple': { # 简单格式
+ 'format': '%(levelname)s %(message)s'
+ },
+ },
+ # 过滤
+ 'filters': {
+ },
+ # 定义具体处理日志的方式
+ 'handlers': {
+ # 默认记录所有日志
+ 'default': {
+ 'level': 'INFO',
+ 'class': 'logging.handlers.RotatingFileHandler',
+ 'filename': os.path.join(LOG_PATH, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
+ 'maxBytes': 1024 * 1024 * 5, # 文件大小
+ 'backupCount': 5, # 备份数
+ 'formatter': 'standard', # 输出格式
+ 'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
+ },
+ # 输出错误日志
+ 'error': {
+ 'level': 'ERROR',
+ 'class': 'logging.handlers.RotatingFileHandler',
+ 'filename': os.path.join(LOG_PATH, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
+ 'maxBytes': 1024 * 1024 * 5, # 文件大小
+ 'backupCount': 5, # 备份数
+ 'formatter': 'standard', # 输出格式
+ 'encoding': 'utf-8', # 设置默认编码
+ },
+ # 控制台输出
+ 'console': {
+ 'level': 'DEBUG',
+ 'class': 'logging.StreamHandler',
+ 'formatter': 'standard'
+ },
+ # 输出info日志
+ 'info': {
+ 'level': 'INFO',
+ 'class': 'logging.handlers.RotatingFileHandler',
+ 'filename': os.path.join(LOG_PATH, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
+ 'maxBytes': 1024 * 1024 * 5,
+ 'backupCount': 5,
+ 'formatter': 'standard',
+ 'encoding': 'utf-8', # 设置默认编码
+ },
+ },
+ # 配置用哪几种 handlers 来处理日志
+ 'loggers': {
+ # 类型 为 django 处理所有类型的日志, 默认调用
+ 'django': {
+ 'handlers': ['default', 'console'],
+ 'level': 'INFO',
+ 'propagate': False
+ },
+ # log 调用时需要当作参数传入
+ 'log': {
+ 'handlers': ['error', 'info', 'console', 'default'],
+ 'level': 'INFO',
+ 'propagate': True
+ },
+ }
+}
\ No newline at end of file
diff --git a/safesite/daoru.py b/safesite/daoru.py
index 703c23fd..2dace7f4 100644
--- a/safesite/daoru.py
+++ b/safesite/daoru.py
@@ -268,7 +268,7 @@ def drusers(companyid,path):
wb = load_workbook(path)
sheet = wb.worksheets[0]
partdict = {}
- groupdict = {}
+ # groupdict = {}
userdict = {}
parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门
for i in parts:
diff --git a/safesite/static/safesite/mystatic/css/style.css b/safesite/static/safesite/mystatic/css/style.css
index e9339c47..f241c8f0 100644
--- a/safesite/static/safesite/mystatic/css/style.css
+++ b/safesite/static/safesite/mystatic/css/style.css
@@ -101,15 +101,15 @@ canvas{
}
.login{z-index: 2;position:absolute;width: 350px;border-radius: 5px;height: 500px;box-shadow: 0px 0px 5px #333333;background:white;top: 50%;left: 50%;margin-top: -250px;margin-left: -175px;transition: all 1s;-moz-transition: all 1s; /* Firefox 4 */-webkit-transition: all 1s; /* Safari 和 Chrome */-o-transition: all 1s; /* Opera */}
-.login-top{font-size: 24px;margin-top: 100px;padding-left: 40px;box-sizing: border-box;color: #333333;margin-bottom: 50px;font-family:"微软雅黑";font-weight:bold;color:dodgerblue}
+.login-top{font-size: 24px;margin-top: 100px;text-align: center;;box-sizing: border-box;color: #333333;margin-bottom: 50px;font-family:"微软雅黑";font-weight:bold;color:dodgerblue}
.login-center{width: 100%;box-sizing: border-box;padding: 0 40px;margin-bottom: 30px;}
.login-center-img{width: 20px;height: 20px;float: left;margin-top: 5px;}
.login-center-img>img{width: 100%;}
-.login-center-input{float: left;width: 230px;margin-left: 15px;height: 30px;position: relative;}
+.login-center-input{float: left;width: 80%;margin-left: 15px;height: 30px;position: relative;}
.login-center-input input{z-index: 2;transition: all 0.5s;padding-left: 10px;color: #333333;width: 100%;height: 30px;border: 0;border-bottom: 1px solid #cccccc;border-top: 1px solid #ffffff;border-left: 1px solid #ffffff;border-right: 1px solid #ffffff;box-sizing: border-box;outline: none;position: relative;}
.login-center-input input:focus{border: 1px solid dodgerblue;}
.login-center-input-text{background: white;padding: 0 5px;position: absolute;z-index: 0;opacity: 0;height: 20px;top: 50%;margin-top: -10px;font-size: 14px;left: 5px;color: dodgerblue;line-height: 20px;transition: all 0.5s;-moz-transition: all 0.5s; /* Firefox 4 */-webkit-transition: all 0.5s; /* Safari 和 Chrome */-o-transition: all 0.5s; /* Opera */}
.login-center-input input:focus~.login-center-input-text{top: 0;z-index: 3;opacity: 1;margin-top: -15px;}
.login.active{-webkit-animation: login-small 0.8s ; animation: login-small 0.8s ;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}
-.login-button{cursor: pointer;width: 250px;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;border-radius: 5px;margin: 0 auto;margin-top: 50px;color: white;font-size: 18px}
+.login-button{cursor: pointer;width: 80%;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;margin: 0 auto;margin-top: 50px;color: white;font-size: 18px}
diff --git a/safesite/static/safesite/mystatic/js/util.js b/safesite/static/safesite/mystatic/js/util.js
index 982a2f67..cae3dc06 100644
--- a/safesite/static/safesite/mystatic/js/util.js
+++ b/safesite/static/safesite/mystatic/js/util.js
@@ -526,7 +526,7 @@ function jsonSort(jsonObj) {
}
return str.substr(0, str.length - 1)
}
-//map定时显示,每分钟请求一次
+//map定时显示,每分钟请求一次,如果存在map
function update() {
if ($('#mapshowinput').length) {
source.clear()
@@ -571,4 +571,15 @@ function update() {
})
}
}
-var t1 = window.setInterval(update, 1000 * 60)
\ No newline at end of file
+function checksession(){
+$.get('api/check_session',function(res){
+ if(res.code==1){
+ }else{
+ $.messager.alert('','长时间未操作,请重新登陆!','warning',function(){
+ window.location.reload(true)
+ });
+ }
+})
+}
+var t1 = window.setInterval(update, 1000 * 60)
+var t2 = window.setInterval(checksession,1000*60*31)
\ No newline at end of file
diff --git a/safesite/templates/trainfigure.html b/safesite/templates/trainfigure.html
new file mode 100644
index 00000000..ab227e46
--- /dev/null
+++ b/safesite/templates/trainfigure.html
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/safesite/urls.py b/safesite/urls.py
index 354a213b..311468bf 100644
--- a/safesite/urls.py
+++ b/safesite/urls.py
@@ -88,6 +88,7 @@ urlpatterns = [
path('html/bhr',views.bhrhtml),
path('riskas',views.riskas),
path('html/examhistory//',views.examhistory),
+ path('html/trainfig',views.trainfigure),
#html页面
@@ -153,7 +154,8 @@ urlpatterns = [
path('api/report',views.apireport),
path('api/obscount',views.observepic),
path('api/riskas',views.apiriskas),
-
+ path('api/trainfg',views.trainfg),
+ path('api/check_session',views.check_session),
#path('api/rights/group/',views.rightsgroup),
path('api/main',views.mainapi),
diff --git a/safesite/views.py b/safesite/views.py
index 9b35bc1e..7a8bfabc 100644
--- a/safesite/views.py
+++ b/safesite/views.py
@@ -27,6 +27,9 @@ import jwt
import decimal
from . import forms
from .models import CompanyInfo
+from django.contrib.sessions.models import Session
+import logging
+logger = logging.getLogger('log')
#分页功能
def fenye(req):
@@ -63,7 +66,7 @@ def getcompany(x):
else:
return a.ubelongpart.partlink.split(',')[1]
def getparts(partid):#获取该部门及下属部门
- return Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
+ return Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
#转换为datagrid所用json
def transjson(total, obj):
a = {'total':total,'rows':list(obj),'code':1}
@@ -181,9 +184,9 @@ def noticedetail(req,id):
def noticeedit(req,id):
return render(req,'noticeedit.html',{'id':id})
def suggestupdate(req,jyid):
- return render(req,'suggestupdate.html',{'jyid':jyid})
+ return render(req,'suggestupdate.html',{'jyid':jyid})
def suggestdetail(req,jyid):
- return render(req,'suggestdetail.html',{'jyid':jyid})
+ return render(req,'suggestdetail.html',{'jyid':jyid})
def suggestadd(req):
return render(req,'suggestadd.html')
def suggest(req):
@@ -239,6 +242,8 @@ def userhtml(req):
return render(req,'userhtml.html')
def bhrhtml(req):
return render(req,'behavior.html')
+def trainfigure(req):
+ return render(req,'trainfigure.html')
def check_login(func):
def warpper(request,*args,**kwargs):
is_login = request.session.get('userid', None)
@@ -271,6 +276,11 @@ def check_login(func):
# return JsonResponse({"code": 401, "message": "please login!"})
return warpper
+def check_session(req):
+ if req.session.get('userid',None):
+ return JsonResponse({"code":1})
+ else:
+ return JsonResponse({"code":0})
#存储文件
def upfile(req):
username = User.objects.get(userid=req.session['userid']).username
@@ -309,6 +319,7 @@ def login(req):
user_form = UserForm()
return render(req,'login.html', locals())
+
def index(req):
if not req.session.get('userid', None):
return redirect('login')
@@ -327,6 +338,7 @@ def logout(req):
#del req.session['username']
# if "userid" in req.session:
# del req.session['userid']
+ logger.info('method: %s user: %s 登出' % (req.method,req.session['userid']))
req.session.flush()
#req.session.flush()
#req.session.delete("session_key")
@@ -553,7 +565,7 @@ def apirights(req):
groupid = req.GET.get('groupid')
haverights = Group.objects.get(groupid=groupid).menulink.split(',')
userid = req.session['userid']
- companyid = getcompany(userid)
+ companyid = getcompany(userid)
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:
@@ -573,7 +585,7 @@ def apirights(req):
return JsonResponse({"code":1})
elif a=='have':
userid = req.session['userid']
- companyid = getcompany(userid)
+ companyid = getcompany(userid)
allrights = Group.objects.get(usecomp__partid=companyid,grouptype=0).menulink.split(',')
return JsonResponse({'code':1,'rights':allrights})
@@ -611,7 +623,7 @@ def addyh(req):
a.yhdd = yhdd
if 'yhqy' in yhdata:
if yhdata['yhqy']:
- a.yhqy = Area.objects.get(id= yhdata['yhqy'])
+ a.yhqy = Area.objects.get(id= yhdata['yhqy'])
a.yhms = yhms
a.yhtp = yhtp
a.yhnum='YH'+time.strftime('%Y%m%d%H%M%S')
@@ -1471,7 +1483,7 @@ def grouphandle(req):
companyid = getcompany(userid)
a = Group.objects.filter(usecomp__partid = companyid).exclude(grouptype=0).values('groupid','groupname')
keystr=transstr(a,'groupid','groupname')
- return HttpResponse(keystr,content_type="application/json")
+ return HttpResponse(keystr,content_type="application/json")
elif req.method == 'POST':
data = json.loads(req.body.decode('utf-8'))
userid = req.session['userid']
@@ -1544,7 +1556,7 @@ def troublehandle(req):
a = a.filter(fxr__userid=fxr)
elif fxbm:
parts = Partment.objects.filter(partlink__contains=','+str(fxbm)+',')|Partment.objects.filter(partid=fxbm)
- a = a.filter(fxbm__in=parts)
+ a = a.filter(fxbm__in=parts)
if qssj:
a = a.filter(fxsj__gte=qssj)
if jssj:
@@ -1753,7 +1765,7 @@ def charthandle(req):
partid = req.GET.get('part')
else:
partid = companyid
- parts = Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
+ parts = Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
a = Train.objects.filter(deletemark=1,trainpart__in=parts,state=1)
value=[]
@@ -2224,11 +2236,10 @@ def parthandle(req):
return HttpResponse(json.dumps(b,cls=MyEncoder),content_type="application/json")
elif req.GET.get('a')=='del':
a = req.POST.get('partid')
- if Partment.objects.filter(partlink__contains=','+a+',') or User.objects.filter(ubelongpart=a):
+ if Partment.objects.filter(partlink__contains=','+a+',').exists() or User.objects.filter(ubelongpart=a).exists():
return JsonResponse({"code":0})
else:
- a = Partment.objects.get(partid=a)
- a.delete()
+ Partment.objects.get(partid=a).delete()
return JsonResponse({"code":1})
elif req.GET.get('a')=='addpart':
if req.POST.get('partid') != '':
@@ -2699,7 +2710,7 @@ def gchandle(req):
obj.lookpart = User.objects.get(userid=userid).ubelongpart
if 'looktime2' in gcdata:
if gcdata['looktime2']:
- obj.looktime2 = gcdata['looktime2']
+ obj.looktime2 = gcdata['looktime2']
if 'lookeder' in gcdata:
obj.lookeder = gcdata['lookeder']
if 'otherunsafe' in gcdata:
@@ -2736,7 +2747,7 @@ def gchandle(req):
i['readtime'] = Observeto.objects.filter(observe__lookid=i['lookid'],user__userid = userid)[0].submittime
else:
i['read']=0
- return HttpResponse(transjson(total,a),content_type="application/json")
+ return HttpResponse(transjson(total,a),content_type="application/json")
elif a == 'listself':
startnum,endnum=fenye(req)
a = Observe.objects.filter(looker__userid=userid,deletemark=1).order_by('-looktime')
@@ -2825,7 +2836,7 @@ def gchandle(req):
data = json.loads(req.body.decode('utf-8'))
url = exportdoc2('gc',data)
return JsonResponse({"code":1,"downloadurl":url})
-
+
def observepic(req):
userid = req.session['userid']
companyid = getcompany(userid)
@@ -2859,7 +2870,7 @@ def observepic(req):
rtgcx=[]#人体工程学
hjzj=[]#环境整洁
- for month in months:
+ for month in months:
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
if req.GET.get('part'):
partid = req.GET.get('part')
@@ -2882,14 +2893,14 @@ def observepic(req):
rtgcx.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
elif i.dicid==30:
hjzj.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
-
+
return JsonResponse({'code':1,'months':months,'userfy':userfy,'userwz':userwz,'grfh':grfh,'gjhsb':gjhsb,'cxhbz':cxhbz,'rtgcx':rtgcx,'hjzj':hjzj,})
elif req.GET.get('a')=='gclxbg':
userid = req.session['userid']
companyid = getcompany(userid)
a = Observe.objects.filter(usecomp=Partment.objects.get(partid=companyid),deletemark=1)
-
+
if req.GET.get('qssj'):#开始时间
a = a.filter(looktime__gte=req.GET.get('qssj'))
if req.GET.get('jssj'):#结束时间
@@ -2898,13 +2909,13 @@ def observepic(req):
gcbm = req.GET.get('fxbm')
parts = Partment.objects.filter(partlink__contains=',' + gcbm + ',')|Partment.objects.filter(partid=gcbm)
a = a.filter(lookpart__in=parts)
-
+
total = a.count()
objs = a.values('looker__userid','looker__name','lookpart__partname').annotate(number = Count('looker')).order_by('-number')
return HttpResponse(transjson(total,objs),content_type="application/json")
-
-
-
+
+
+
def dicchandle(req):
a = req.GET.get('a')
if a == 'tree':
@@ -3119,7 +3130,7 @@ def apicompany(req):
Yjsetup.objects.create(monthyhavg=100,safev=50,warnv=75,alertv=100,maxv=200,yhpgqz=4,yhdjqz=4,yhsblqz=1,yhzglqz=4,pxdjqz=3,pxxgqz=4,yldjqz=3,ylxgqz=3,usecomp=y)
Map.objects.create(name='默认地图',pic='/static/safesite/mystatic/images/snc.jpg',usecomp=y,default=1)
return JsonResponse({'code':1,'companyid':y.partid})
-
+
def drapi(req):
a = req.GET.get('a')
if a == 'user':
@@ -3195,13 +3206,13 @@ def drapi(req):
return JsonResponse({"code":1})
-
+
def apimiss(req):
a = req.GET.get('a')
userid = req.session['userid']
companyid = getcompany(userid)
- if a == 'add':
+ if a == 'add':
obj = Miss()
data = json.loads(req.body.decode('utf-8'))
obj.missplace = data['missplace']
@@ -3453,7 +3464,7 @@ def apisocert(req):
return JsonResponse({"code":1,"data":getTzzs(cardnum,realname)})
elif a=='updateTzzs':
updateTzzs()
-
+
def guoqi(x):
now = datetime.now()
now1 = datetime.now() + timedelta(days=180)
@@ -3462,7 +3473,7 @@ def guoqi(x):
elif now1 > datetime.strptime(x,'%Y-%m-%d') > now:
return 2
else:
- return 3
+ return 3
def apisafecert(req):
a = req.GET.get('a')
if a=='listall':
@@ -3630,8 +3641,8 @@ def apipartuser(req):
userobjs = User.objects.filter(ubelongpart=req.GET.get('parentid'),deletemark=1).exclude(issuper=1)
for i in userobjs:
lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]})
- return JsonResponse({"code":1,"data":lst})
-
+ return JsonResponse({"code":1,"data":lst})
+
def apiuser(req):
a = req.GET.get('a')
@@ -3804,7 +3815,7 @@ def apisuggest(req):
id = req.GET.get('id')
res = exportdoc('jy',id)
return res
-
+
elif a == 'update': #评估
userid = req.session['userid']
data = json.loads(req.body.decode('utf-8'))
@@ -3874,7 +3885,7 @@ def apisuggest(req):
obj.save()
Suggestflow.objects.create(suggest=obj,user=User.objects.get(userid=userid),action='驳回处理结果')
return JsonResponse({"code":1})
-
+
@@ -4029,7 +4040,7 @@ def apitool(req):
m.append(x)
return JsonResponse({'wxgs':m})
-
+
def apinotice(req):
a = req.GET.get('a')
@@ -4166,7 +4177,7 @@ def apinotice(req):
data['reads'] = list(reads)
data['readpeople']= readobj.exclude(read=0).count()
data['readsnum'] = readobj.aggregate(num=Sum('read')).get('num') or 0
-
+
try:
toobj = Noticeto.objects.get(noticeid__id=id,receiver__userid = userid)
toobj.read = int(toobj.read) + 1
@@ -4258,7 +4269,7 @@ def apioperation(req):
m = Operzyry(oper=obj,operzyry=x)
m.save()
b.append(x.openid)
-
+
postdict={
'touser':'',
'template_id':'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0',
@@ -4484,7 +4495,7 @@ def apioperation(req):
}
}
send_wechatmsg.delay(postdict)
-
+
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=1,spbm=spruser.ubelongpart)
except :
obj.zyzt['zyzt'] = '待关闭'
@@ -4733,7 +4744,8 @@ def apiquestion(req):
elif a == 'exercise':
data = json.loads(req.body.decode('utf-8'))
x = Question.objects.filter(deletemark=1)
- a = (x.filter(usecomps__contains=',1,')|x.filter(usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
+ #a = (x.filter(usecomps__contains=',1,')|x.filter(usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
+ a = x.exclude(nousecomps__contains=','+companyid+',')
tmlxs = data['tmlx']
ydtms = data['ydtms']
a = x.filter(questioncat__id__in=tmlxs).exclude(id__in=ydtms)
@@ -4852,7 +4864,7 @@ def apiexampaper(req):
elif int(i['type']) == 3:
ExamPaperDetail.objects.create(exampaper=obj,question=Question.objects.get(id=i['id']),score=int(pds))
return JsonResponse({"code":1})
-
+
def apiexamtest(req):
a = req.GET.get('a')
@@ -5112,7 +5124,7 @@ def apiexamtestdetail(req):
obj.testnum = obj.testnum + 1
obj.starttime = starttime
obj.endtime = endtime
- obj.took = took
+ obj.took = took
obj.testdetail = testdetail
obj.rights = rights
obj.score = score
@@ -5226,7 +5238,7 @@ def apimap(req):
id = req.POST.get('id')
Map.objects.filter(id=id).update(pic=req.POST.get('pic'))
return JsonResponse({"code":1})
-
+
def apiarea(req):
a = req.GET.get('a')
userid = req.session['userid']
@@ -5269,7 +5281,7 @@ def apiarea(req):
name = data['name']
order = data['order']
Area.objects.filter(id=data['id']).update(name = name,order=order)
- return JsonResponse({"code":1})
+ return JsonResponse({"code":1})
def apimapshow(req):
a = req.GET.get('a')
@@ -5459,7 +5471,7 @@ def apiinspect(req):
id = req.GET.get('id')
a = Inspect.objects.filter(id=id).values('id','state','content','creattime','equipment__num','equipment__id','equipment__name','equipment__area__name','user__name','user__ubelongpart__partname','trouble__yhzt','trouble__yhnum','trouble__yhms','trouble__troubleid')
return JsonResponse(a[0])
-
+
def apiriskact(req):
a = req.GET.get('a')
userid = req.session['userid']
@@ -5568,7 +5580,7 @@ def apiriskact(req):
RiskActTask.objects.create(riskact=obj,taskadd=tasktime,taskexpire = tasktime + timedelta(days=1),istask=1)
elif tasktype == 3:
RiskActTask.objects.create(riskact=obj,taskadd=tasktime,taskexpire = tasktime + timedelta(days=7),istask=1)
- return JsonResponse({"code":1})
+ return JsonResponse({"code":1})
def apirisk(req):
a = req.GET.get('a')
@@ -5949,7 +5961,7 @@ def apiriskcheck(req):
startnum,endnum=fenye(req)
objs = objs.order_by('-id')[startnum:endnum].values('id','risk__step','risk__level','risk__riskact__name','risk__riskact__area__name','risk__riskact__place','dotime','trouble__yhnum','user__ubelongpart__partname','user__name')
return HttpResponse(transjson(total,objs),content_type="application/json")
-
+
def apireport(req):
a = req.GET.get('a')
userid = req.session['userid']
@@ -5988,7 +6000,7 @@ def apireport(req):
obj.cause = data['cause']
obj.suggest = data['suggest']
obj.save()
- return JsonResponse({'code':1})
+ return JsonResponse({'code':1})
#公司信息展示
@@ -6039,4 +6051,41 @@ def refresh_captcha(request):
return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json')
def dump(obj):
- print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
\ No newline at end of file
+ print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
+
+
+def trainfg(req):
+ a = req.GET.get('a')
+ userid = req.session['userid']
+ companyid = getcompany(userid)
+
+ if a == 'trainfig':
+ year = int(req.GET.get('year'))
+ months = [1,2,3,4,5,6,7,8,9,10,11,12]
+ companylevel=[]#公司级
+ workshoplevel=[]#车间/工段级
+ teamlevel=[]#班组级
+ departmentlevel =[]#部门分厂级
+ for month in months:
+ first_day,first_day_of_next_month = gettime(datetime(year,month,1))
+
+ a = Train.objects.filter(usecomp__partid=companyid,deletemark=1,starttime__range=(first_day, first_day_of_next_month))
+ companylevel.append(a.filter(trainlevel__dicid=5).count())
+ workshoplevel.append(a.filter(trainlevel__dicid=6).count())
+ teamlevel.append(a.filter(trainlevel__dicid=7).count())
+ departmentlevel.append(a.filter(trainlevel__dicid=42).count())
+ return JsonResponse({'code':1,'companylevel':companylevel,'workshoplevel':workshoplevel,'teamlevel':teamlevel,'departmentlevel':departmentlevel})
+ elif a=='traintype':
+ year = int(req.GET.get('year'))
+ month = int(req.GET.get('month'))
+ daily=[]#日常培训
+ related=[]#相关方培训
+ jobuser=[]#在岗人员培训
+ first_day,first_day_of_next_month = gettime(datetime(year,month,1))
+ a = Train.objects.filter(usecomp__partid=companyid,deletemark=1,starttime__range=(first_day, first_day_of_next_month))
+ daily.append(a.filter(traintype__dickeyid=1).count())
+ related.append(a.filter(traintype__dickeyid=108).count())
+ jobuser.append(a.filter(traintype__dickeyid=107).count())
+ return JsonResponse({'code':1,'daily':daily,'related':related,'jobuser':jobuser})
+
+