/// <summary> /// 開始進行志願序資料整合 /// </summary> public void 開始進行志願序資料整合() { //整理志願序資料 foreach (OnlineVolunteer each in VolunteerList) { if (StudentDic.ContainsKey(each.RefStudentId)) { //學生 OnlineStudent OnlineStud = StudentDic[each.RefStudentId]; if (!string.IsNullOrEmpty(each.Content)) { XmlElement xml = DSXmlHelper.LoadXml(each.Content); int ClubNumber = 1; foreach (XmlElement node in xml.SelectNodes("Club")) { if (node.GetAttribute("Index") == ClubNumber.ToString()) { string clubID = node.GetAttribute("Ref_Club_ID"); if (ClubDic.ContainsKey(clubID)) { //社團 OnlineClub OnlineClub = ClubDic[clubID]; if (!OnlineStud.VolunteerList.ContainsKey(ClubNumber)) { OnlineStud.VolunteerList.Add(ClubNumber, OnlineClub); } } } ClubNumber++; } } } } }
public void SetSLRInStudent(SLRecord slr) { if (StudentDic.ContainsKey(slr.RefStudentID)) { string sKey = slr.SchoolYear + "/" + slr.Semester; Dictionary <string, decimal> SLRDic = StudentDic[slr.RefStudentID].SLRDic; // 假如找到同一個學年度跟學期, 就把服務時間加總 if (SLRDic.ContainsKey(sKey)) { SLRDic[sKey] += slr.Hours; } // 沒有找到同一個學年度跟學期, 就把資料新增進去 else { SLRDic.Add(sKey, slr.Hours); } // 所有學生的學年度跟學期的聯集 if (!this.SLRSchoolYearSemesterDic.ContainsKey(sKey)) { this.SLRSchoolYearSemesterDic.Add(sKey, 0); } } }
private void Increase(Dictionary <string, 一個社團檢查> CLUBCheckDic, Dictionary <string, SCJoin> SCJLockDic) { foreach (SCJoin stud in SCJLockDic.Values) { if (CLUBCheckDic.ContainsKey(stud.RefClubID)) { if (StudentDic.ContainsKey(stud.RefStudentID)) { 一個社團檢查 c = CLUBCheckDic[stud.RefClubID]; 一名學生 s = StudentDic[stud.RefStudentID]; SetClubGradeYearCount(c, s, true); } } } }
void BGW_DoWork(object sender, DoWorkEventArgs e) { ClubDic = GetClubDic(); List <SCJoin> SCJoin = _AccessHelper.Select <SCJoin>(UDT_S.PopOneCondition("ref_club_id", ClubDic.Values.ToList().Select(X => X.UID).ToList())); StudentDic = GetStudentDic(SCJoin); //主要資料內容 DataDic = new Dictionary <string, StudRepeatObj>(); //建立學生容器 foreach (SCJoin each in SCJoin) { if (!DataDic.ContainsKey(each.RefStudentID)) { if (StudentDic.ContainsKey(each.RefStudentID)) { StudRepeatObj sr = new StudRepeatObj(StudentDic[each.RefStudentID]); sr._SCJoinList.Add(each); DataDic.Add(each.RefStudentID, sr); } } else { DataDic[each.RefStudentID]._SCJoinList.Add(each); } } //依據資料內容呈現在畫面上 List <StudRepeatObj> list = new List <StudRepeatObj>(); foreach (string each in DataDic.Keys) { if (DataDic[each]._SCJoinList.Count > 1) { list.Add(DataDic[each]); } } e.Result = list; }
/// <summary> /// 傳入分配 /// </summary> private bool Allocation(學生選社亂數檔 ran, int NumberIndex) { //社團選社資料 VolunteerRecord vr = ran._record; XmlElement xml = XmlHelper.LoadXml(vr.Content); //每一個社團 foreach (XmlElement each in xml.SelectNodes("Club")) { int index = 0; int.TryParse(each.GetAttribute("Index"), out index); //當進行第一輪志願分配時 if (index != NumberIndex) { continue; } string clubID = each.GetAttribute("Ref_Club_ID"); string StudentID = vr.RefStudentID; //2013/4/8號 //需建立一個ClubCount字典 //覆蓋 - 把本期除了鎖定學生之社團記錄清除 //略過 - 本期的社團記錄不予更動 //1.須檢查目前系統是否有要加入的社團(例如該社團被選社後刪除) //2.目前此社團是否已額滿或目前社團人數為可加入狀態 if (!CLUBDic.ContainsKey(clubID)) { continue; } //不存在社團記錄,表示可以新增 if (!SCJLockDic.ContainsKey(StudentID)) { #region 存在社團記錄,表示可以新增 SCJoin scj = new SCJoin(); 一個社團檢查 一社團 = CLUBCheckDic[clubID]; if (!一社團.人數未滿) { if (StudentDic.ContainsKey(StudentID)) { 一名學生 一學生 = StudentDic[StudentID]; sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString())); sb_Log.AppendLine(string.Format("分配失敗原因:社團「{0}」人數已滿", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); return(false); } } if (StudentDic.ContainsKey(StudentID)) { 一名學生 一學生 = StudentDic[StudentID]; //序號「{0}」 ran._Index sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString())); //你必須是本社團科別限制之學生 //Count大於0,表示有科別限制 if (一社團.DeptList.Count > 0) { if (!一社團.DeptList.Contains(一學生.dept_name)) { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」受到科別限制「{1}」", 一社團._ClubObj.ClubName, 一學生.dept_name)); sb_Log.AppendLine(""); //本社團選社失敗 continue; } } if (一社團.男女限制 == 一學生.gender || 一社團.男女限制 == GetVolunteerData.男女.限制) { if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10") { if (一社團.一年級未滿) { scj.RefClubID = clubID; scj.RefStudentID = StudentID; 一社團._Now_ClubStudentCount++; 一社團._Now_GradeYear1++; sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); InsertList1.Add(scj); return(true); } else { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year)); sb_Log.AppendLine(""); } } else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11") { if (一社團.二年級未滿) { scj.RefClubID = clubID; scj.RefStudentID = StudentID; 一社團._Now_ClubStudentCount++; 一社團._Now_GradeYear2++; sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); InsertList1.Add(scj); return(true); } else { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year)); sb_Log.AppendLine(""); } } else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12") { if (一社團.年級未滿) { scj.RefClubID = clubID; scj.RefStudentID = StudentID; 一社團._Now_ClubStudentCount++; 一社團._Now_GradeYear3++; sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); InsertList1.Add(scj); return(true); } else { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year)); sb_Log.AppendLine(""); } } else { sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合年級設定", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); } } else { sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合男女限制「{1}」", 一社團._ClubObj.ClubName, 一社團.男女限制)); sb_Log.AppendLine(""); } } #endregion } else //已存在,要判斷是覆蓋還是略過 { #region 已存在,要判斷是覆蓋還是略過 //已有社團記錄時 - 覆蓋 if (By_V.已有社團記錄時) { #region 覆蓋 SCJoin scj_del = SCJLockDic[StudentID]; if (!scj_del.Lock) { #region 未鎖定 //新增一筆資料 SCJoin scj = new SCJoin(); //因為覆蓋所以 - 列入刪除 if (!DeleteList.Contains(scj_del)) { DeleteList.Add(scj_del); } 一個社團檢查 一社團 = CLUBCheckDic[clubID]; if (!一社團.人數未滿) { if (StudentDic.ContainsKey(StudentID)) { 一名學生 一學生 = StudentDic[StudentID]; sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString())); sb_Log.AppendLine(string.Format("分配失敗原因:社團「{0}」人數已滿", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); return(false); } } if (StudentDic.ContainsKey(StudentID)) { 一名學生 一學生 = StudentDic[StudentID]; string clubName = ""; if (CLUBDic.ContainsKey(scj_del.RefClubID)) { clubName = CLUBDic[scj_del.RefClubID].ClubName; } //序號「{0}」 ran._Index sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString())); sb_Log.AppendLine(string.Format("已是社團「{0}」參與學生,因「未被鎖定」將進行重新分配", clubName)); //你必須是本社團科別限制之學生 //Count大於0,表示有科別限制 if (一社團.DeptList.Count > 0) { if (!一社團.DeptList.Contains(一學生.dept_name)) { sb_Log.AppendLine(string.Format("社團「{0}」分配失敗!原因:志願「{1}」受到科別限制「{2}」", 一社團._ClubObj.ClubName, NumberIndex, 一學生.dept_name)); sb_Log.AppendLine(""); //本社團選社失敗 continue; } } if (一社團.男女限制 == 一學生.gender || 一社團.男女限制 == GetVolunteerData.男女.限制) { if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10") { if (一社團.一年級未滿) { scj.RefStudentID = StudentID; scj.RefClubID = clubID; 一社團._Now_ClubStudentCount++; 一社團._Now_GradeYear1++; InsertList2.Add(scj); sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); return(true); } else { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year)); sb_Log.AppendLine(""); } } else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11") { if (一社團.二年級未滿) { scj.RefStudentID = StudentID; scj.RefClubID = clubID; 一社團._Now_ClubStudentCount++; 一社團._Now_GradeYear2++; InsertList2.Add(scj); sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); return(true); } else { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year)); sb_Log.AppendLine(""); } } else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12") { if (一社團.年級未滿) { scj.RefStudentID = StudentID; scj.RefClubID = clubID; 一社團._Now_ClubStudentCount++; 一社團._Now_GradeYear3++; sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); InsertList2.Add(scj); return(true); } else { sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year)); sb_Log.AppendLine(""); } } else { sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合年級設定", 一社團._ClubObj.ClubName)); sb_Log.AppendLine(""); } } else { sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合男女限制「{1}」", 一社團._ClubObj.ClubName, 一社團.男女限制)); sb_Log.AppendLine(""); } } #endregion } else { //取得社團記錄 SCJoin scj = SCJLockDic[StudentID]; string clubName = ""; if (CLUBDic.ContainsKey(scj.RefClubID)) { clubName = CLUBDic[scj_del.RefClubID].ClubName; } // 2018/03/08 羿均 同步code //2017/9/1 - 修正Bug //這是多餘的程式邏輯 - By Dylan if (StudentDic.ContainsKey(StudentID)) { 一名學生 一學生 = StudentDic[StudentID]; //序號「{0}」 ran._Index sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString())); sb_Log.AppendLine(string.Format("已是社團「{0}」鎖定學生,將不變更社團", clubName)); sb_Log.AppendLine(""); return(true); } #region 鎖定 //一個社團檢查 一社團 = CLUBCheckDic[scj_del.RefClubID]; //if (StudentDic.ContainsKey(StudentID)) //{ // 一名學生 一學生 = StudentDic[StudentID]; // if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10") // { // 一社團._Now_ClubStudentCount++; // 一社團._Now_GradeYear1++; // return true; // } // else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11") // { // 一社團._Now_ClubStudentCount++; // 一社團._Now_GradeYear2++; // return true; // } // else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12") // { // 一社團._Now_ClubStudentCount++; // 一社團._Now_GradeYear3++; // return true; // } //} #endregion } #endregion } else { //2017/9/1 - 修正Bug //這是多餘的程式邏輯 - By Dylan #region 略過 //取得社團記錄 SCJoin scj = SCJLockDic[StudentID]; string clubName = ""; if (CLUBDic.ContainsKey(scj.RefClubID)) { clubName = CLUBDic[scj.RefClubID].ClubName; } if (StudentDic.ContainsKey(StudentID)) { 一名學生 一學生 = StudentDic[StudentID]; //序號「{0}」 ran._Index sb_Log.AppendLine(string.Format("目前設定:「略過」已入選學生,序號「{0}」學生「{1}」社團「{2}」將不變更", ran._Index, 一學生.student_name, clubName)); sb_Log.AppendLine(""); return(true); //if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10") //{ // 一社團._Now_ClubStudentCount++; // 一社團._Now_GradeYear1++; // return true; //} //else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11") //{ // 一社團._Now_ClubStudentCount++; // 一社團._Now_GradeYear2++; // return true; //} //else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12") //{ // 一社團._Now_ClubStudentCount++; // 一社團._Now_GradeYear3++; // return true; //} } #endregion } #endregion } } //選社失敗 return(false); }
public Dictionary <string, int> GetMerit(List <一名學生> StudentList) { //取得學生ID StudentDic = GetStudentIDList(StudentList); //取得獎懲資料 List <MeritRecord> MeritList = Merit.SelectByStudentIDs(StudentDic.Keys); List <DemeritRecord> DemeritList = Demerit.SelectByStudentIDs(StudentDic.Keys); //取得功過相抵換算值 _Reduce = K12.Data.MeritDemeritReduce.Select(); foreach (MeritRecord mr in MeritList) { if (StudentDic.ContainsKey(mr.RefStudentID)) { int studINT = 0; int a = mr.MeritA.HasValue ? mr.MeritA.Value : 0; int b = mr.MeritB.HasValue ? mr.MeritB.Value : 0; int c = mr.MeritC.HasValue ? mr.MeritC.Value : 0; if (_Reduce.MeritAToMeritB.HasValue) { int aa = a * _Reduce.MeritAToMeritB.Value; studINT += aa * _Reduce.MeritBToMeritC.Value; } if (_Reduce.MeritBToMeritC.HasValue) { studINT += b * _Reduce.MeritBToMeritC.Value; } studINT += c; StudentDic[mr.RefStudentID] += studINT; } } foreach (DemeritRecord mr in DemeritList) { if (mr.Cleared == "是") //銷過資料則離開 { continue; } if (mr.MeritFlag == "2") //留查資料則離開 { continue; } if (StudentDic.ContainsKey(mr.RefStudentID)) { int studINT = 0; int a = mr.DemeritA.HasValue ? mr.DemeritA.Value : 0; int b = mr.DemeritB.HasValue ? mr.DemeritB.Value : 0; int c = mr.DemeritC.HasValue ? mr.DemeritC.Value : 0; if (_Reduce.MeritAToMeritB.HasValue) { int aa = a * _Reduce.MeritAToMeritB.Value; studINT += aa * _Reduce.MeritBToMeritC.Value; } if (_Reduce.MeritBToMeritC.HasValue) { studINT += b * _Reduce.MeritBToMeritC.Value; } studINT += c; StudentDic[mr.RefStudentID] -= studINT; } } return(StudentDic); }
public override string Import(List <Campus.DocumentValidator.IRowStream> Rows) { if (mOption.Action == ImportAction.InsertOrUpdate) { List <BodyTmperature> InsertList = new List <BodyTmperature>(); List <BodyTmperature> UpdateList = new List <BodyTmperature>(); //學號:學生紀錄 GetStudentByNumber(Rows); GetBodyTmperature(); foreach (IRowStream Row in Rows) { string studentNumber = Row.GetValue("學號"); string body_tag = Row.GetValue("對象"); string category = Row.GetValue("類別"); string measurement_method = Row.GetValue("量測方式"); string location = Row.GetValue("地點"); string remark = Row.GetValue("備註"); DateTime occurDate; DateTime.TryParse("" + Row.GetValue("量測日期"), out occurDate); double body_temperature; double.TryParse("" + Row.GetValue("體溫"), out body_temperature); //學生是否存在 if (StudentByNumberDic.ContainsKey(studentNumber)) { StudRecord stud = StudentByNumberDic[studentNumber]; //學號 + 類別 + 日期 string name_key = studentNumber + "_" + category + "_" + occurDate.ToString("yyyy/MM/dd");; if (BodyTmperatureDic.ContainsKey(name_key)) { //更新,取得原檔 BodyTmperature body_tmperature = BodyTmperatureDic[name_key]; //20202/3/24 - 建立修改前的副本內容 body_tmperature.NowClone(); //類別 body_tmperature.BodyTag = "Student"; body_tmperature.Category = category; body_tmperature.BodyTemperature = body_temperature; body_tmperature.MeasurementMethod = measurement_method; body_tmperature.Location = location; body_tmperature.Remark = remark; //證書日期 if (occurDate != null) { body_tmperature.OccurDate = occurDate; } UpdateList.Add(body_tmperature); } else { //新增 BodyTmperature body_tmperature = new BodyTmperature(); if (occurDate != null) { body_tmperature.OccurDate = occurDate; } body_tmperature.BodyTag = "Student"; body_tmperature.Category = category; body_tmperature.BodyTemperature = body_temperature; body_tmperature.MeasurementMethod = measurement_method; body_tmperature.Location = location; body_tmperature.Remark = remark; body_tmperature.ObjID = int.Parse(stud.id); InsertList.Add(body_tmperature); } } } if (InsertList.Count > 0) { tool._A.InsertValues(InsertList); StringBuilder sb_log_new = new StringBuilder(); sb_log_new.AppendLine("新增學生體溫紀錄"); foreach (BodyTmperature each in InsertList) { if (StudentDic.ContainsKey(each.ObjID.ToString())) { StudRecord stud = StudentDic[each.ObjID.ToString()]; sb_log_new.AppendLine(string.Format("班級「{0}」座號「{1}」學生「{2}」", stud.class_name, stud.seat_no, stud.name)); sb_log_new.AppendLine("對象「學生」"); sb_log_new.AppendLine("類別「" + each.Category + "」"); sb_log_new.AppendLine("量測日期「" + each.OccurDate.ToString("yyyy/MM/dd") + "」"); sb_log_new.AppendLine("體溫「" + each.BodyTemperature + "」"); sb_log_new.AppendLine("量測方式「" + each.MeasurementMethod + "」"); sb_log_new.AppendLine("地點「" + each.Location + "」"); sb_log_new.AppendLine("備註「" + each.Remark + "」"); sb_log_new.AppendLine(""); } } FISCA.LogAgent.ApplicationLog.Log("匯入學生體溫紀錄", "新增", sb_log_new.ToString()); } if (UpdateList.Count > 0) { tool._A.UpdateValues(UpdateList); StringBuilder sb_log_update = new StringBuilder(); sb_log_update.AppendLine("更新學生體溫紀錄"); foreach (BodyTmperature each in UpdateList) { if (StudentDic.ContainsKey(each.ObjID.ToString())) { StudRecord stud = StudentDic[each.ObjID.ToString()]; StringBuilder sb_aing = new StringBuilder(); bool change = false; sb_aing.AppendLine(string.Format("班級「{0}」座號「{1}」學生「{2}」", stud.class_name, stud.seat_no, stud.name)); sb_aing.AppendLine(string.Format("日期「{0}」", each.OccurDate.ToString("yyyy/MM/dd"))); if (each.bt.BodyTemperature != each.BodyTemperature) { change = true; sb_aing.AppendLine("體溫紀錄由「" + each.bt.BodyTemperature + "」修改為「" + each.BodyTemperature + "」"); } if (each.bt.Location != each.Location) { change = true; sb_aing.AppendLine("地點由「" + each.bt.Location + "」修改為「" + each.Location + "」"); } if (each.bt.Remark != each.Remark) { change = true; sb_aing.AppendLine("備註由「" + each.bt.Remark + "」修改為「" + each.Remark + "」"); } if (each.bt.MeasurementMethod != each.MeasurementMethod) { change = true; sb_aing.AppendLine("量測方式由「" + each.bt.MeasurementMethod + "」修改為「" + each.MeasurementMethod + "」"); } sb_aing.AppendLine(""); if (change) { sb_log_update.Append(sb_aing.ToString()); } } } if (sb_log_update.ToString() != "更新學生體溫紀錄") { FISCA.LogAgent.ApplicationLog.Log("匯入學生體溫紀錄", "更新", sb_log_update.ToString()); } } } return(""); }