各公司考试比例统计-完成
This commit is contained in:
parent
99b9d0a2c8
commit
4346ee6603
|
@ -13,16 +13,17 @@
|
|||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>在线考试统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
<div style="width:100%;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div style="background-color:#dac2a3;margin-top:10px">
|
||||
<div id="examChart" style="width:100%;height:500px;margin:auto"></div>
|
||||
</div>
|
||||
<div style="background-color:#dac2a3;margin-top:10px">
|
||||
<div id="examChart2" style="width:100%;height:500px;margin:auto"></div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
|
@ -48,10 +49,11 @@
|
|||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
exam();
|
||||
|
||||
exam2()
|
||||
});
|
||||
function funTypeChange() {
|
||||
exam();
|
||||
exam2()
|
||||
}
|
||||
|
||||
|
||||
|
@ -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>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -31,7 +31,7 @@ urlpatterns = [
|
|||
path('api/riskChart',views.riskChart),
|
||||
path('api/trainChart',views.trainChart),
|
||||
path('api/examChart',views.examChart),
|
||||
path('api/examrate',views.exam_rate),
|
||||
path('api/examrate/',views.exam_rate),
|
||||
path('api/admininfo/<int:id>/', views.admininfo),
|
||||
|
||||
|
||||
|
|
|
@ -463,22 +463,22 @@ def examChart(request):#在线考试
|
|||
if end:
|
||||
examobjs = examobjs.filter(starttime__lte=end)
|
||||
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()})
|
||||
return HttpResponse(json.dumps({'code':1,'data':examjson}), content_type='application/json')
|
||||
|
||||
|
||||
|
||||
def exam_rate(request):
|
||||
# 考试通过率
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
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:
|
||||
# 员工数
|
||||
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()
|
||||
# 参考率
|
||||
rate1 = testuser_count/user_count
|
||||
|
@ -493,6 +493,15 @@ def exam_rate(request):
|
|||
# 90以上得分率
|
||||
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