/// <summary> /// 取得所有編班人數 /// </summary> /// <returns></returns> public static List <ClassStudent> GetClassStudentAllList() { List <ClassStudent> retValue = new List <ClassStudent>(); // 取得鎖定班級名稱 QueryHelper qh1 = new QueryHelper(); List <string> lockClassId = new List <string>(); // 加入班級被鎖定判斷 string query1 = "select class_id from $kh.automatic.class.lock where is_lock = true"; DataTable dt1 = qh1.Select(query1); foreach (DataRow dr in dt1.Rows) { lockClassId.Add(dr["class_id"].ToString()); } // 取得班級人數(一般生,休學,輟學 1,4,8) ,因小組會議討論加入休學狀態 QueryHelper qh2 = new QueryHelper(); string query2 = "select class.class_name,class.id as classid,count(student.id) as stud_count from student inner join class on student.ref_class_id=class.id where student.status in(1,4,8) group by class.class_name,classid order by stud_count;"; DataTable dt2 = qh2.Select(query2); foreach (DataRow dr in dt2.Rows) { int csi; ClassStudent cs = new ClassStudent(); cs.ClassID = dr["classid"].ToString(); cs.ClassName = dr["class_name"].ToString(); if (int.TryParse(cs.ClassName, out csi)) { cs.ClassNameInt = csi; } cs.StudentCount = int.Parse(dr["stud_count"].ToString()); cs.ClassStudentCount = cs.StudentCount; cs.HasHStudentCount = 0; // 排除班級鎖定 if (!lockClassId.Contains(cs.ClassID)) { retValue.Add(cs); } } // 取得班級高關懷人數,因小組會議討論加入休學狀態,2015/11/30 QueryHelper qh3 = new QueryHelper(); string query3 = "select class.class_name,sum(number_reduce) as class_hcount,count($kh.automatic.placement.high.concern.ref_student_id) as class_hscount from $kh.automatic.placement.high.concern inner join student on to_number($kh.automatic.placement.high.concern.ref_student_id,'999999999')=student.id inner join class on student.ref_class_id=class.id where student.status in(1,4,8) group by class.class_name;"; DataTable dt3 = qh3.Select(query3); foreach (DataRow dr in dt3.Rows) { string className = dr["class_name"].ToString(); int number_reduce = int.Parse(dr["class_hcount"].ToString()); int hscount = int.Parse(dr["class_hscount"].ToString()); // 加入高關懷學生 foreach (ClassStudent cs in retValue) { if (cs.ClassName == className) { cs.HStudentCount = number_reduce; cs.ClassHStudentCount = hscount; cs.ClassStudentCount += cs.HStudentCount; cs.HasHStudentCount = 1; break; } } } return(retValue); }
/// <summary> /// 取得所有編班人數(Classid,ClassStudent) /// </summary> /// <returns></returns> public static Dictionary <string, ClassStudent> GetClassStudentAllIDDict() { Dictionary <string, ClassStudent> retValue = new Dictionary <string, ClassStudent>(); //// 取得鎖定班級名稱 //QueryHelper qh1 = new QueryHelper(); //List<string> lockClassID = new List<string>(); //string query1 = "select class_id from $kh.automatic.class.lock"; //DataTable dt1 = qh1.Select(query1); //foreach (DataRow dr in dt1.Rows) // lockClassID.Add(dr["class_id"].ToString()); // 取得班級人數(一般生、休學,輟學 1,4,8),因小組會議討論加入休學狀態,2015/11/30 QueryHelper qh2 = new QueryHelper(); string query2 = "select class.class_name,class.id as classid,count(student.id) as stud_count from student inner join class on student.ref_class_id=class.id where student.status in(1,4,8) group by class.class_name,classid order by stud_count;"; DataTable dt2 = qh2.Select(query2); foreach (DataRow dr in dt2.Rows) { int csi; ClassStudent cs = new ClassStudent(); cs.ClassID = dr["classid"].ToString(); cs.ClassName = dr["class_name"].ToString(); if (int.TryParse(cs.ClassName, out csi)) { cs.ClassNameInt = csi; } cs.StudentCount = int.Parse(dr["stud_count"].ToString()); cs.ClassStudentCount = cs.StudentCount; cs.ClassStudentCountStr = cs.StudentCount.ToString(); cs.HasHStudentCount = 0; //// 排除班級鎖定 //if (!lockClassID.Contains(cs.ClassID)) retValue.Add(cs.ClassID, cs); } // 取得班級高關懷人數,因小組會議討論加入休學狀態,2015/11/30 QueryHelper qh3 = new QueryHelper(); string query3 = "select class.id as class_id,sum(number_reduce) as class_hcount,count($kh.automatic.placement.high.concern.ref_student_id) as class_hscount from $kh.automatic.placement.high.concern inner join student on to_number($kh.automatic.placement.high.concern.ref_student_id,'999999999')=student.id inner join class on student.ref_class_id=class.id and student.status in(1,4,8) group by class_id;"; DataTable dt3 = qh3.Select(query3); foreach (DataRow dr in dt3.Rows) { string classID = dr["class_id"].ToString(); int number_reduce = int.Parse(dr["class_hcount"].ToString()); int sCount = int.Parse(dr["class_hscount"].ToString()); // 加入高關懷學生 if (retValue.ContainsKey(classID)) { retValue[classID].HStudentCount = number_reduce; retValue[classID].ClassHStudentCount = sCount; string str1 = "(" + retValue[classID].ClassStudentCount + "+" + number_reduce + ")"; retValue[classID].ClassStudentCount += retValue[classID].HStudentCount; retValue[classID].ClassStudentCountStr = retValue[classID].ClassStudentCount + str1; // 有高關懷學生 retValue[classID].HasHStudentCount = 1; } } return(retValue); }
/// <summary> /// 透過年及取得編班人數 /// </summary> /// <param name="GradeYear"></param> /// <returns></returns> public static List <ClassStudent> GetClassStudentList(string GradeYear) { /* * 自動編班順位規則 (判斷順序) * 1. 排除鎖定班級 * 2. 編班人數少的班級優先 * 3. 若編班人數相同,則無特殊生(高關懷學生)班級優先 * 4-1. 若皆無特殊生,則班號小者優先 * 4-2. 若有特殊生,則以實際人數少優先 * 4-2-1. 若有特殊生且實際人數又相同,則以班號小者優先 */ List <ClassStudent> retValue = new List <ClassStudent>(); // 是否有特殊生 bool hasSStudent = false; if (!string.IsNullOrWhiteSpace(GradeYear)) { // 取得鎖定班級名稱 QueryHelper qh1 = new QueryHelper(); List <string> lockClassID = new List <string>(); // 加入班級被鎖定判斷 string query1 = "select class_id from $kh.automatic.class.lock where is_lock = true"; DataTable dt1 = qh1.Select(query1); foreach (DataRow dr in dt1.Rows) { lockClassID.Add(dr["class_id"].ToString()); } // 取得班級人數(一般生,休學,輟學 1,4,8) 2015/11/30 因小組會議討論後加入休學狀態 QueryHelper qh2 = new QueryHelper(); string query2 = "select class.class_name,class.id as classid,count(student.id) as stud_count from student inner join class on student.ref_class_id=class.id where class.grade_year=" + GradeYear + " and student.status in(1,4,8) group by class.class_name,classid order by stud_count;"; DataTable dt2 = qh2.Select(query2); foreach (DataRow dr in dt2.Rows) { int csi; ClassStudent cs = new ClassStudent(); cs.ClassID = dr["classid"].ToString(); cs.ClassName = dr["class_name"].ToString(); if (int.TryParse(cs.ClassName, out csi)) { cs.ClassNameInt = csi; } cs.StudentCount = int.Parse(dr["stud_count"].ToString()); cs.ClassStudentCount = cs.StudentCount; cs.HasHStudentCount = 0; // 排除班級鎖定 if (!lockClassID.Contains(cs.ClassID)) { retValue.Add(cs); } } // 取得班級高關懷人數, 因小組會議討論加入休學狀態 QueryHelper qh3 = new QueryHelper(); string query3 = "select class.class_name,sum(number_reduce) as class_hcount,count($kh.automatic.placement.high.concern.ref_student_id) as class_hscount from $kh.automatic.placement.high.concern inner join student on to_number($kh.automatic.placement.high.concern.ref_student_id,'999999999')=student.id inner join class on student.ref_class_id=class.id where class.grade_year=" + GradeYear + " and student.status in(1,4,8) group by class.class_name;"; DataTable dt3 = qh3.Select(query3); foreach (DataRow dr in dt3.Rows) { string className = dr["class_name"].ToString(); int number_reduce = int.Parse(dr["class_hcount"].ToString()); int hscount = int.Parse(dr["class_hscount"].ToString()); // 加入高關懷學生 foreach (ClassStudent cs in retValue) { if (cs.ClassName == className) { hasSStudent = true; cs.HStudentCount = number_reduce; cs.ClassHStudentCount = hscount; cs.ClassStudentCount += cs.HStudentCount; cs.HasHStudentCount = 1; break; } } } bool classNameInt = true; // 檢查班級名稱是否有非數字 foreach (ClassStudent cs in retValue) { if (cs.ClassNameInt == 0) { classNameInt = false; break; } } if (classNameInt) { // 班級名稱是數字處理方式 // 有特殊生 if (hasSStudent) { //// 編班人數排序 (先編班人數小>大,沒有高關懷人在前,高關懷人數小到大,班級名稱數字小在前) //retValue = (from data in retValue orderby data.ClassStudentCount ascending, data.HasHStudentCount ascending, data.ClassHStudentCount ascending, data.ClassNameInt ascending select data).ToList(); // 2014/11/11,高雄小組會議討論後調整:編班人數排序 (先編班人數小>大,沒有高關懷人在前,班級名稱數字小在前) retValue = (from data in retValue orderby data.ClassStudentCount ascending, data.HasHStudentCount ascending, data.ClassNameInt ascending select data).ToList(); } else { // 編班人數排序 (先編班人數小>大,班級名稱數字小在前) retValue = (from data in retValue orderby data.ClassStudentCount ascending, data.ClassNameInt ascending select data).ToList(); } } else { // 班級名稱非數字處理方式 Dictionary <string, int> classOrderDict = new Dictionary <string, int>(); QueryHelper qh4 = new QueryHelper(); string query4 = "select id,display_order from class where display_order is not null;"; DataTable dt4 = qh4.Select(query4); foreach (DataRow dr in dt4.Rows) { int ii; if (int.TryParse(dr["display_order"].ToString(), out ii)) { classOrderDict.Add(dr["id"].ToString(), ii); } } // 加入班級排序 foreach (ClassStudent cs in retValue) { cs.ClassOrder = 999; if (classOrderDict.ContainsKey(cs.ClassID)) { cs.ClassOrder = classOrderDict[cs.ClassID]; } } // 有特殊生 if (hasSStudent) { // 2014/11/11,高雄小組會議討論修改:編班人數排序 (先編班人數小>大,沒有高關懷人在前,班級排序數字小在前) retValue = (from data in retValue orderby data.ClassStudentCount ascending, data.HasHStudentCount ascending, data.ClassOrder ascending select data).ToList(); } else { // 編班人數排序 (先編班人數小>大,班級排序數字小在前) retValue = (from data in retValue orderby data.ClassStudentCount ascending, data.ClassOrder ascending select data).ToList(); } } } return(retValue); }