各公司考试比例统计-完成

This commit is contained in:
caoqianming 2020-11-06 17:48:01 +08:00
parent 99b9d0a2c8
commit 4346ee6603
3 changed files with 108 additions and 16 deletions

View File

@ -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;">
开始日期:<input type="text" id="test">
结束日期:<input type="text" id="test2">
<button class="btn btn-info" onclick="funTypeChange()">&nbsp;查询</button>
</div>
<div style="width:100%;">
开始日期:<input type="text" id="test">
结束日期:<input type="text" id="test2">
<button class="btn btn-info" onclick="funTypeChange()">&nbsp;查询</button>
</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 %}

View File

@ -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),

View File

@ -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')