1 # classtop_urls.py 2 # ————————64PerfectCRM实现CRM课程排名详情———————— 3 from django.conf.urls import url 4 from bpm.coursetop import coursetop_views 5 urlpatterns = [ 6 url( r'^coursetop_details/(d+)/$', coursetop_views.coursetop_details, name="coursetop_details" ), # 课程排名详情 7 8 # ————————65PerfectCRM实现CRM课程分数排名———————— 9 url( r'^coursetop_score/(d+)/$', coursetop_views.coursetop_score, name="coursetop_score" ), # 班级分数排行 10 # ————————65PerfectCRM实现CRM课程分数排名———————— 11 12 ] 13 # ————————64PerfectCRM实现CRM课程排名详情————————
1 # coursetop_views.py 2 # ————————64PerfectCRM实现CRM课程排名详情———————— 3 #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员ID: [分数, 排名] }————# 4 #班级学生详情#计算#{学员ID:分数} 5 from django.db.models import Sum #返回数组中所有值的和 6 def get_course_grades(class_obj):#返回整个班级的成绩 7 c=models.StudyRecord.objects.filter(course_record__from_class=class_obj).values_list('student') 8 a=Sum('score')#Sum返回数组中所有值的和 #学习成绩 9 e=c.annotate(a) #annotate数据库的数据聚合函数 10 class_grade_dic=dict(e)#{1: 285, 16: 190}#{学员ID:分数} 11 print( '全班成绩:', class_grade_dic) 12 return class_grade_dic #as class_grade_dic 13 14 #班级学生详情#计算 #{学员ID: [分数, 排名] } 15 def get_course_ranking(class_grade_dic):#返回整个班级的排名数据 16 ranking_list = sorted(class_grade_dic.items(),key=lambda x:x[1],reverse=True)#进行排序后的列表#以第2个参数对比#倒序 17 print('成绩排序:',ranking_list) 18 ranking_dic = {} 19 for item in ranking_list: 20 ranking_dic[item[0]] = [item[1], ranking_list.index(item)+1] #循环添加 排名数 到 排序后的列表 21 print( '全班排名:', ranking_dic)#{1: [285, 1], 10: [280, 2], }#{学员ID: [分数, 排名] } 22 return ranking_dic 23 #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员ID: [分数, 排名] }————# 24 25 from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 26 from django.shortcuts import render #页面返回 27 from crm import models #数据库 28 #班级学生详情 29 @login_required # 登陆后页面才能访问 30 def coursetop_details(request,class_id): 31 classes_obj = models.ClassList.objects.get(id=class_id)#通过ID获取02班级表 32 enrollmentlist=classes_obj.enrollment_set.all()#通过班级ID,获取06学员报名信息表 33 34 class_grade_dic=get_course_grades(classes_obj.id)#{学员ID:分数} #全班成绩 # coursetop_tags.py 根据id 找对应的分数 35 ranking_dic=get_course_ranking(class_grade_dic)#{学员ID: [分数, 排名] } #全班排名 # coursetop_tags.py 根据id 找对应的排名 36 37 return render(request,'bpm_coursetop/coursetop_details.html',locals()) 38 # ————————64PerfectCRM实现CRM课程排名详情———————— 39 40 41 42 # ————————65PerfectCRM实现CRM课程分数排名———————— 43 #———— 班级学生详情——#计算 #{排名: (ID, 分数)}#排名查名字————# 44 def get_ranking_name(class_grade_dic): 45 lists=[] 46 ranking_list = sorted(class_grade_dic.items(),key=lambda x:x[1],reverse=True)#进行排序后的列表#以第2个参数对比#倒序 47 #ranking_list [(1, 285), (10, 280)] #按分高排序的ID顺序 48 for item in ranking_list: 49 temp={} 50 temp[ranking_list.index(item) + 1] = item # 循环添加 排名数 到 排序后的列表 51 lists.append(temp) 52 print( '排名查名字:', lists )#[{1: (1, 285)}, {2: (10, 280)}]#[{排名: (学员ID, 分数)}] 53 return lists 54 #———— 班级学生详情——#计算 #{排名: (ID, 分数)}#排名查名字————# 55 56 #班级学生详情#全班成绩排名 #通过#{排名: (ID, 分数)}#排名查名字 57 @login_required # 登陆后页面才能访问 58 def coursetop_score(request,class_id): 59 classes_obj = models.ClassList.objects.get(id=class_id)#通过ID获取02班级表 60 class_grade_dic=get_course_grades(classes_obj.id)#{学员ID:分数} #全班成绩 61 lists=get_ranking_name(class_grade_dic)#计算#[{排名: (学员ID, 分数)}] #按分高排序的ID顺序 62 return render(request,'bpm_coursetop/coursetop_score.html',locals()) 63 64 # ————————65PerfectCRM实现CRM课程分数排名————————
1 # coursetop_tags.py 2 # ————————64PerfectCRM实现CRM课程排名详情———————— 3 from crm import models 4 from django import template 5 register = template.Library() 6 7 @register.simple_tag 8 def fetch_stu_course_score(class_grade_dic, enroll_obj_id ): #获取 学员 课程 分数 9 score=class_grade_dic.get(enroll_obj_id) #根据 id 找对应的分数 10 # print('#{学员ID:分数} #全班成绩',score) 11 return score 12 13 @register.simple_tag 14 def get_stu_grade_ranking(course_ranking_dic,enroll_obj_id):#得到 学员 班级 排名 15 score_top = course_ranking_dic.get(enroll_obj_id) #根据id 找对应的排名 16 if score_top: 17 # print( '#{学员ID: [分数, 排名] } #全班排名:', score_top[1] ) 18 return score_top[1] 19 20 @register.simple_tag 21 def get_already_homework(enroll_obj_id): #获得已交作业 22 score_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('score')#根据09学习纪录的ID #获取学习成绩列表 23 number=0 24 for score in score_list: 25 if score!= (0,) : 26 number += 1 27 # print('已交作业次数',number) 28 return number 29 30 31 @register.simple_tag 32 def get_stu_attendance(enroll_obj_id): #获得学员出勤次数 33 attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance') 34 number=0 35 for attendance in attendance_list: 36 if attendance == (0,) : 37 number += 1 38 # print('获得点名出勤',number) 39 return number 40 41 @register.simple_tag 42 def get_stu_late(enroll_obj_id): #获得学员迟到次数 43 attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance') 44 number=0 45 for attendance in attendance_list: 46 if attendance == (1,) : 47 number += 1 48 # print('获得点名迟到',number) 49 return number 50 51 @register.simple_tag 52 def get_stu_absenteeism(enroll_obj_id): #获得学员缺勤次数 53 attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance') 54 number=0 55 for attendance in attendance_list: 56 if attendance == (2,) : 57 number += 1 58 # print('获得点名缺勤',number) 59 return number 60 61 @register.simple_tag 62 def get_stu_early(enroll_obj_id): #获得学员早退次数 63 attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance') 64 number=0 65 for attendance in attendance_list: 66 if attendance == (3,) : 67 number += 1 68 # print('获得点名早退',number) 69 return number 70 # ————————64PerfectCRM实现CRM课程排名详情———————— 71 72 # ————————65PerfectCRM实现CRM课程分数排名———————— 73 @register.simple_tag 74 def id_enrollment(enroll_obj):#ID查姓名 75 enrollment = models.Enrollment.objects.filter(id=enroll_obj).first()#通过学员ID查06学员报名信息表 76 return enrollment #06学员报名信息表 77 # ————————65PerfectCRM实现CRM课程分数排名————————
1 {#coursetop_score.html#} 2 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load coursetop_tags %} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-default"> 8 <div class="panel-body"> 9 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 10 讲师QQ:{{ request.user.stu_account }} </h4> 11 <ol class="breadcrumb"> 12 <li><a href="{% url 'teacher_class' %}">我的班级</a></li> 13 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 14 <li><a href="{% url 'coursetop_score' classes_obj.id %}">分数排名</a></li> 15 </ol> 16 <table class="table table-striped table-responsive"> 17 <thead> 18 <tr> 19 <th><a href="{% url 'coursetop_details' classes_obj.id %}">学员ID</a></th> 20 <th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a> 21 </th> 22 <th>学员QQ</th> 23 <th>报名日期</th> 24 <th>课程成绩</th> 25 <th>班级排名</th> 26 <th>已交作业</th> 27 <th>出勤次数</th> 28 <th>迟到次数</th> 29 <th>缺勤次数</th> 30 <th>早退次数</th> 31 </tr> 32 </thead> 33 34 35 <tbody> 36 {% for enroll_objs in lists %} 37 {% for top,enroll_obj in enroll_objs.items %}{#分离提取K,V#[{排名: (学员ID, 分数)}]#} 38 {% id_enrollment enroll_obj.0 as enrollment %}{#enroll_obj.0 #学员ID#}{#通过学员ID查06学员报名信息表#} 39 <tr> 40 <td>{{ enroll_obj.0 }}</td> 41 {#学员ID#} 42 <td>{{ enrollment.customer.name }}</td> 43 {#学员姓名#} 44 <td>{{ enrollment.customer.qq }}</td> 45 {#学员QQ#} 46 <td>{{ enrollment.date }}</td> 47 {#报名日期#} 48 <td style="color: #ff0f00"> {{ enroll_obj.1 }}{#课程成绩#} </td> 49 <td style="color: #ff0f00"> 50 {{ top }}{#班级排名#} 51 </td> 52 <td>{% get_already_homework enroll_obj.0 %}</td> 53 {#已交作业#} 54 <td> 55 {% get_stu_attendance enroll_obj.0 %}{#出勤次数#} 56 </td> 57 <td> 58 {% get_stu_late enroll_obj.0 %}{#迟到次数#} 59 </td> 60 <td> 61 {% get_stu_absenteeism enroll_obj.0 %}{#缺勤次数#} 62 </td> 63 <td> 64 {% get_stu_early enroll_obj.0 %}{#早退次数#} 65 </td> 66 </tr> 67 {% endfor %} 68 {% endfor %} 69 </tbody> 70 </table> 71 </div> 72 </div> 73 </div> 74 {% endblock %} 75 {## ————————65PerfectCRM实现CRM课程分数排名————————#}
1 {#coursetop_details.html#} 2 {## ————————64PerfectCRM实现CRM课程排名详情————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load coursetop_tags %} {#计算课程排名#} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-default"> 8 <div class="panel-body"> 9 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 10 讲师QQ:{{ request.user.stu_account }} </h4> 11 <ol class="breadcrumb"> 12 <li><a href="{% url 'teacher_class' %}">我的班级</a></li> 13 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 14 <li><a href="{% url 'coursetop_details' classes_obj.id %}">课程排行</a></li> 15 </ol> 16 <table class="table table-striped table-responsive"> 17 <thead> 18 <tr> 19 <th>学员ID</th> 20 <th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a> 21 </th> 22 <th>学员QQ</th> 23 <th>报名日期</th> 24 <th> 25 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 26 <a href="{% url 'coursetop_score' classes_obj.id %}"> 27 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 28 课程成绩 29 </a> 30 </th> 31 <th> 32 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 33 <a href="{% url 'coursetop_score' classes_obj.id %}"> 34 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 35 班级排名 36 </a> 37 </th> 38 <th>已交作业</th> 39 <th>出勤次数</th> 40 <th>迟到次数</th> 41 <th>缺勤次数</th> 42 <th>早退次数</th> 43 </tr> 44 </thead> 45 46 47 <tbody> 48 {% for enroll_obj in enrollmentlist %} 49 <tr> 50 <td style="color: #ff0f00">{{ enroll_obj.id }}</td> 51 {# 学员id#} 52 <td>{{ enroll_obj.customer.name }}</td> 53 {# 学员姓名#} 54 <td>{{ enroll_obj.customer.qq }}</td> 55 {# 学员QQ#} 56 <td>{{ enroll_obj.date }}</td> 57 {# 报名日期#} 58 <td> 59 {% fetch_stu_course_score class_grade_dic enroll_obj.id %} {# 得到 学员 课程 分数#} 60 </td> 61 <td> 62 {% get_stu_grade_ranking ranking_dic enroll_obj.id %} {# 得到 学员 课程 排名#} 63 </td> 64 <td> 65 {% get_already_homework enroll_obj.id %}{# 已交作业#} 66 </td> 67 <td> 68 {% get_stu_attendance enroll_obj.id %} {# 得到 学员出勤次数#} 69 </td> 70 <td> 71 {% get_stu_late enroll_obj.id %} {# 得到 学员出勤次数#} 72 </td> 73 <td> 74 {% get_stu_absenteeism enroll_obj.id %} {# 得到 学员出勤次数#} 75 </td> 76 <td> 77 {% get_stu_early enroll_obj.id %} {# 得到 学员早退次数#} 78 </td> 79 </tr> 80 {% endfor %} 81 </tbody> 82 </table> 83 </div> 84 </div> 85 </div> 86 {% endblock %} 87 {## ————————64PerfectCRM实现CRM课程排名详情————————#}