各公司考试比例统计-完成
This commit is contained in:
parent
99b9d0a2c8
commit
4346ee6603
|
@ -13,16 +13,17 @@
|
||||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||||
<h3>在线考试统计</h3>
|
<h3>在线考试统计</h3>
|
||||||
</div>
|
</div>
|
||||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
<div style="width:100%;">
|
||||||
<div style="width:100%;height:100px;">
|
开始日期:<input type="text" id="test">
|
||||||
开始日期:<input type="text" id="test">
|
结束日期:<input type="text" id="test2">
|
||||||
结束日期:<input type="text" id="test2">
|
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||||
|
</div>
|
||||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
<div style="background-color:#dac2a3;margin-top:10px">
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="examChart" style="width:100%;height:500px;margin:auto"></div>
|
<div id="examChart" style="width:100%;height:500px;margin:auto"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div style="background-color:#dac2a3;margin-top:10px">
|
||||||
|
<div id="examChart2" style="width:100%;height:500px;margin:auto"></div>
|
||||||
|
</div>
|
||||||
<!-- jQuery 3 -->
|
<!-- jQuery 3 -->
|
||||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||||
<!-- Bootstrap 3.3.7 -->
|
<!-- Bootstrap 3.3.7 -->
|
||||||
|
@ -48,10 +49,11 @@
|
||||||
, format: 'yyyy-MM-dd' //可任意组合
|
, format: 'yyyy-MM-dd' //可任意组合
|
||||||
});
|
});
|
||||||
exam();
|
exam();
|
||||||
|
exam2()
|
||||||
});
|
});
|
||||||
function funTypeChange() {
|
function funTypeChange() {
|
||||||
exam();
|
exam();
|
||||||
|
exam2()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,7 +67,7 @@
|
||||||
examChart.showLoading({
|
examChart.showLoading({
|
||||||
maskColor: '#dac2a3',
|
maskColor: '#dac2a3',
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "get",
|
type: "get",
|
||||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||||
|
@ -74,7 +76,7 @@
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
console.log(data.data.number);
|
console.log(data.data.number);
|
||||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||||
|
|
||||||
|
|
||||||
var exnum = [];
|
var exnum = [];
|
||||||
var companyName = [];
|
var companyName = [];
|
||||||
|
@ -138,7 +140,88 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
function exam2() {
|
||||||
|
|
||||||
|
var start = $("#test").val();
|
||||||
|
var end = $("#test2").val();
|
||||||
|
var examChart = echarts.init(document.getElementById("examChart2"));
|
||||||
|
examChart.showLoading({
|
||||||
|
maskColor: '#dac2a3',
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "get",
|
||||||
|
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||||
|
url: "/groups/api/examrate/?start=" + start + "&end=" + end, //请求发送
|
||||||
|
dataType: "json", //返回数据形式为json
|
||||||
|
success: function (data) {
|
||||||
|
var labelOption = {
|
||||||
|
show: true,
|
||||||
|
formatter: '{c} {name|{a}}',
|
||||||
|
fontSize: 16,
|
||||||
|
rotate: 90,
|
||||||
|
align: 'left',
|
||||||
|
verticalAlign: 'middle',
|
||||||
|
position: 'insideBottom',
|
||||||
|
distance: 15,
|
||||||
|
rich: {
|
||||||
|
name: {
|
||||||
|
textBorderColor: '#fff'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (data.data != null) {
|
||||||
|
var series = []
|
||||||
|
for(var i=0;i<data.data.s.length;i++){
|
||||||
|
var item = data.data.s[i]
|
||||||
|
item.type = 'bar'
|
||||||
|
// item.label = labelOption
|
||||||
|
series.push(item)
|
||||||
|
}
|
||||||
|
examChart.hideLoading();
|
||||||
|
examChart.setOption(
|
||||||
|
option = {
|
||||||
|
color: ['#003366', '#006699', '#4cabce'],
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||||
|
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
title: {
|
||||||
|
text: data.data.t
|
||||||
|
},
|
||||||
|
tooltip: {},
|
||||||
|
legend: {
|
||||||
|
data: data.data.l
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: data.data.x.data,
|
||||||
|
boundaryGap: [0, 0.01],
|
||||||
|
axisLabel: {
|
||||||
|
interval: 0,//横轴信息全部显示
|
||||||
|
rotate: -30,//-30度角倾斜显示
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
yAxis: {},
|
||||||
|
series: series
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (errorMsg) {
|
||||||
|
examChart.hideLoading();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -31,7 +31,7 @@ urlpatterns = [
|
||||||
path('api/riskChart',views.riskChart),
|
path('api/riskChart',views.riskChart),
|
||||||
path('api/trainChart',views.trainChart),
|
path('api/trainChart',views.trainChart),
|
||||||
path('api/examChart',views.examChart),
|
path('api/examChart',views.examChart),
|
||||||
path('api/examrate',views.exam_rate),
|
path('api/examrate/',views.exam_rate),
|
||||||
path('api/admininfo/<int:id>/', views.admininfo),
|
path('api/admininfo/<int:id>/', views.admininfo),
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -463,22 +463,22 @@ def examChart(request):#在线考试
|
||||||
if end:
|
if end:
|
||||||
examobjs = examobjs.filter(starttime__lte=end)
|
examobjs = examobjs.filter(starttime__lte=end)
|
||||||
for i in companys:
|
for i in companys:
|
||||||
examnumber = examobjs.filter(usecomps__contains=','+str(i.partid)+',')
|
examnumber = examobjs.filter(usecomps__contains=','+str(i.partid)+',').exclude(nousecomps__contains=','+str(i.partid)+',')
|
||||||
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')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def exam_rate(request):
|
def exam_rate(request):
|
||||||
# 考试通过率
|
# 考试通过率
|
||||||
start = request.GET.get('start')
|
start = request.GET.get('start')
|
||||||
end = request.GET.get('end')
|
end = request.GET.get('end')
|
||||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||||
|
ret = {'x':{'name':'所属公司', 'data':[]}, 's':[{'name':'参考率', 'data':[]},{'name':'满分率', 'data':[]}, {'name':'优秀率', 'data':[]}], 't':'各公司考试比例统计', 'l':['参考率', '满分率', '优秀率']}
|
||||||
for i in companys:
|
for i in companys:
|
||||||
# 员工数
|
# 员工数
|
||||||
user_count = s_models.User.objects.filter(usecomp=i, deletemark=1).count()
|
user_count = s_models.User.objects.filter(usecomp=i, deletemark=1).count()
|
||||||
# 参加考试员工数
|
# 参加考试员工数
|
||||||
base = s_models.ExamTestDetail.objects.filter(user__usecomp=i, user__deletemark=1).exclude(examtest__nousecomps__contains=','+str(i.partid)+',')
|
base = s_models.ExamTestDetail.objects.filter(user__usecomp=i, user__deletemark=1, ison=1).exclude(examtest__nousecomps__contains=','+str(i.partid)+',')
|
||||||
testuser_count = base.values('user').distinct().count()
|
testuser_count = base.values('user').distinct().count()
|
||||||
# 参考率
|
# 参考率
|
||||||
rate1 = testuser_count/user_count
|
rate1 = testuser_count/user_count
|
||||||
|
@ -492,6 +492,15 @@ def exam_rate(request):
|
||||||
ninety_count = base.filter(score__gte = F('examtest__totalscore')*0.9).count()
|
ninety_count = base.filter(score__gte = F('examtest__totalscore')*0.9).count()
|
||||||
# 90以上得分率
|
# 90以上得分率
|
||||||
rate3 = ninety_count/test_count if test_count else 0
|
rate3 = ninety_count/test_count if test_count else 0
|
||||||
|
|
||||||
|
rate1 = '%.2f' % (rate1*100)
|
||||||
|
rate2 = '%.2f' % (rate2*100)
|
||||||
|
rate3 = '%.2f' % (rate3*100)
|
||||||
|
ret['x']['data'].append(i.partname)
|
||||||
|
ret['s'][0]['data'].append(rate1)
|
||||||
|
ret['s'][1]['data'].append(rate2)
|
||||||
|
ret['s'][2]['data'].append(rate3)
|
||||||
|
return HttpResponse(json.dumps({'code':200,'data':ret}), content_type='application/json')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue