/// <summary> /// 被分配成功後 /// 本方法可由資訊社團中取得本校之社團物件 /// </summary> public void SuccessSetupClub(OnlineMergerClub megr) { foreach (OnlineClub club in megr.AllClubList) { if (club.School == School) { 新參與社團 = club; megr.Increase(this); } } }
//進行社團資源整合 static public Dictionary <string, OnlineMergerClub> ResourceMerger(Dictionary <string, AcrossRecord> SchoolClubDic) { Dictionary <string, OnlineMergerClub> Mergerdic = new Dictionary <string, OnlineMergerClub>(); foreach (AcrossRecord Across in SchoolClubDic.Values) { foreach (OnlineClub club in Across.ClubDic.Values) { if (!Mergerdic.ContainsKey(club.ClubName)) { OnlineMergerClub Mclub = new OnlineMergerClub(tool.Point); Mergerdic.Add(club.ClubName, Mclub); } Mergerdic[club.ClubName].AddClub(club); } } return(Mergerdic); }
/// <summary> /// 退出社團 /// 1.清除目前已選擇的社團 /// 2.減去社團的人數 /// </summary> public void RetirementCommunity(Dictionary <string, OnlineMergerClub> MergerClub) { if (IsLick) { return; } if (原有社團 == null) { return; } if (MergerClub.ContainsKey(原有社團.ClubName)) { OnlineMergerClub merger = MergerClub[原有社團.ClubName]; merger.Decrease(this); } 新參與社團 = null; }
void BGW_DoWork(object sender, DoWorkEventArgs e) { #region 資料整理 //是否可連線&是否可取得相關資料 if (!tool.UserConnection()) { e.Cancel = true; } //取得學校連線資料 LoginSchoolList = tool._A.Select <LoginSchool>(); LoginSchoolDic = new Dictionary <string, string>(); foreach (LoginSchool s in LoginSchoolList) { if (!LoginSchoolDic.ContainsKey(s.School_Name)) { LoginSchoolDic.Add(s.School_Name, s.Remark); } } //取得學校相關資料 SchoolClubDic = SchoolClubDetail(LoginSchoolList); //資料整合(以掛載模組為主) MergerClubDic = tool.ResourceMerger(SchoolClubDic); //取得志願 foreach (string each in SchoolClubDic.Keys) { //設定目前社團人數狀況 SchoolClubDic[each].設定目前社團人數(MergerClubDic); } #endregion #region 報表範本整理 Campus.Report.ReportConfiguration ConfigurationInCadre = new Campus.Report.ReportConfiguration(ConfigName); Aspose.Words.Document Template; if (ConfigurationInCadre.Template == null) { //如果範本為空,則建立一個預設範本 Campus.Report.ReportConfiguration ConfigurationInCadre_1 = new Campus.Report.ReportConfiguration(ConfigName); ConfigurationInCadre_1.Template = new Campus.Report.ReportTemplate(Properties.Resources.社團概況表_範本, Campus.Report.TemplateType.Word); Template = ConfigurationInCadre_1.Template.ToDocument(); } else { //如果已有範本,則取得樣板 Template = ConfigurationInCadre.Template.ToDocument(); } #endregion DataTable table = new DataTable(); table.Columns.Add("學校名稱"); table.Columns.Add("學年度"); table.Columns.Add("學期"); table.Columns.Add("列印日期"); for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("類型{0}", x)); table.Columns.Add(string.Format("代碼{0}", x)); table.Columns.Add(string.Format("社團名稱{0}", x)); table.Columns.Add(string.Format("指導老師{0}", x)); table.Columns.Add(string.Format("科別限制{0}", x)); table.Columns.Add(string.Format("男女限制{0}", x)); foreach (string each in SchoolClubDic.Keys) { table.Columns.Add(string.Format("1年級{0}{1}", SchoolClubDic[each].SchoolRemake, x)); table.Columns.Add(string.Format("2年級{0}{1}", SchoolClubDic[each].SchoolRemake, x)); table.Columns.Add(string.Format("3年級{0}{1}", SchoolClubDic[each].SchoolRemake, x)); } table.Columns.Add(string.Format("1年級總{0}", x)); table.Columns.Add(string.Format("2年級總{0}", x)); table.Columns.Add(string.Format("3年級總{0}", x)); table.Columns.Add(string.Format("總人數{0}", x)); table.Columns.Add(string.Format("場地{0}", x)); } DataRow row = table.NewRow(); row["學校名稱"] = K12.Data.School.ChineseName; row["學年度"] = _SchoolYear; row["學期"] = _Semester; row["列印日期"] = DateTime.Today.ToShortDateString(); int y = 1; foreach (string each in MergerClubDic.Keys) { if (y <= 學生多少個) { OnlineMergerClub club = MergerClubDic[each]; row[string.Format("類型{0}", y)] = club.ClubCategory; row[string.Format("代碼{0}", y)] = club.ClubNumber; row[string.Format("社團名稱{0}", y)] = club.ClubName; row[string.Format("指導老師{0}", y)] = club.TeacherName; row[string.Format("男女限制{0}", y)] = club.GenderRestrict; row[string.Format("總人數{0}", y)] = club.NowStudentCount; row[string.Format("場地{0}", y)] = club.Location; int Grade1 = 0; int Grade2 = 0; int Grade3 = 0; foreach (string gr1 in club.Grade1.SchoolGradeDic.Keys) { row[string.Format("1年級{0}{1}", LoginSchoolDic[gr1], y)] = club.Grade1.SchoolGradeDic[gr1].ToString(); Grade1 += club.Grade1.SchoolGradeDic[gr1]; } foreach (string gr2 in club.Grade2.SchoolGradeDic.Keys) { row[string.Format("2年級{0}{1}", LoginSchoolDic[gr2], y)] = club.Grade2.SchoolGradeDic[gr2].ToString(); Grade2 += club.Grade2.SchoolGradeDic[gr2]; } foreach (string gr3 in club.Grade3.SchoolGradeDic.Keys) { row[string.Format("3年級{0}{1}", LoginSchoolDic[gr3], y)] = club.Grade3.SchoolGradeDic[gr3].ToString(); Grade3 += club.Grade3.SchoolGradeDic[gr3]; } if (Grade1 != 0) { row[string.Format("1年級總{0}", y)] = Grade1; } if (Grade2 != 0) { row[string.Format("2年級總{0}", y)] = Grade2; } if (Grade3 != 0) { row[string.Format("3年級總{0}", y)] = Grade3; } y++; } } table.Rows.Add(row); Document PageOne = (Document)Template.Clone(true); PageOne.MailMerge.Execute(table); e.Result = PageOne; }
/// <summary> /// 進行學生的志願分配 /// </summary> private void VolunteersDistributor(OnlineStudent oStudent, int Number, bool IsStep1) { string message = ""; if (oStudent.VolunteerList.Count != 0) { //如果學生身上有此志願,無此志願則視為選社失敗 if (oStudent.VolunteerList.ContainsKey(Number)) { OnlineClub oc = oStudent.VolunteerList[Number]; if (IsStep1) //高優先權 { if (oc.ClubName == oStudent.LastClubName) { #region 如果共同資源包含本社團 if (MergerClubDic.ContainsKey(oc.ClubName)) { OnlineMergerClub Mclub = MergerClubDic[oc.ClubName]; //不符資格,將帶有錯誤訊息 oStudent.ErrorMessage = Mclub.EligibilityCheck(oStudent); //符合資格 if (string.IsNullOrEmpty(oStudent.ErrorMessage)) { //符合資格 oStudent.SuccessSetupClub(Mclub); LogAssignRecord lar = new LogAssignRecord(); if (string.IsNullOrEmpty(LoginSchoolDic[oStudent.School])) { lar.部別 = oStudent.School + "(" + LoginSchoolDic[oStudent.School] + ")"; } else { lar.部別 = oStudent.School; } lar.班級 = oStudent.ClassName; lar.姓名 = oStudent.Name; lar.座號 = oStudent.SeatNo; lar.志願 = Number.ToString(); lar.社團名稱 = Mclub.ClubName; lar.其它 = "(高優先學生)"; LogDic.Add(lar); } } #endregion } } else //第二優先權 { #region 如果共同資源包含本社團 if (MergerClubDic.ContainsKey(oc.ClubName)) { OnlineMergerClub Mclub = MergerClubDic[oc.ClubName]; //不符資格,將帶有錯誤訊息 oStudent.ErrorMessage = Mclub.EligibilityCheck(oStudent); //符合資格 if (string.IsNullOrEmpty(oStudent.ErrorMessage)) { //符合資格 oStudent.SuccessSetupClub(Mclub); LogAssignRecord lar = new LogAssignRecord(); lar.部別 = GetSchoolName(oStudent.School); lar.班級 = oStudent.ClassName; lar.姓名 = oStudent.Name; lar.座號 = oStudent.SeatNo; lar.志願 = Number.ToString(); lar.社團名稱 = Mclub.ClubName; lar.其它 = ""; LogDic.Add(lar); } } #endregion } } } }
void BGW_DoWork(object sender, DoWorkEventArgs e) { //開始列印學生清單 #region 資料整理 //取得需連線學校 LoginSchoolList = tool._A.Select <LoginSchool>(); // 取得社團老師資料 key : DSNS Dictionary <string, ClubTeacher> clubTeacherDic = new Dictionary <string, ClubTeacher>(); // 2018/01/23 羿均 新增 取得學校相關資料 SchoolClubDic = tool.SchoolClubDetail(LoginSchoolList); foreach (AcrossRecord Across in SchoolClubDic.Values) { foreach (OnlineClub club in Across.ClubDic.Values) { if (!Mergerdic.ContainsKey(club.ClubName)) { OnlineMergerClub Mclub = new OnlineMergerClub(tool.Point); Mergerdic.Add(club.ClubName, Mclub); Mclub.AddClub(club); } Mergerdic[club.ClubName].AddClub(club); } } //選擇了哪些社團(使用名稱進行比對) List <string> ClubIDList = K12.Club.Volunteer.ClubAdmin.Instance.SelectedSource; List <CLUBRecord> ClubRecordList = tool._A.Select <CLUBRecord>(ClubIDList); //社團名稱清單 List <string> ClubNameList = new List <string>(); foreach (CLUBRecord club in ClubRecordList) { ClubNameList.Add(club.ClubName); } //社團名稱 + 社團參與記錄學生 Dictionary <string, List <OnlineSCJoin> > dic = new Dictionary <string, List <OnlineSCJoin> >(); List <string> ClubNewNameList = new List <string>(); foreach (LoginSchool school in LoginSchoolList) { schoolMark = school.Remark; Connection me = new Connection(); me.Connect(school.School_Name, tool._contract, FISCA.Authentication.DSAServices.PassportToken); Dictionary <string, OnlineSCJoin> ScjList = RunService.GetSCJoinByClubName(me, ClubNameList); foreach (OnlineSCJoin each in ScjList.Values) { // 2018/01/24 羿均 紀錄:主要連線學校社團老師 if (school.School_Name == tool.Point) { if (!clubTeacherDic.ContainsKey(school.School_Name)) { ClubTeacher ct = new ClubTeacher(); ct.SchoolName = school.School_Name; ct.Teacher1 = each.TeacherName; ct.Teacher2 = each.TeacherName2; ct.Teacher3 = each.TeacherName3; clubTeacherDic.Add(school.School_Name, ct); } } string name = each.ClubName; if (!dic.ContainsKey(name)) { dic.Add(name, new List <OnlineSCJoin>()); ClubNewNameList.Add(name); } // 2018/01/23 羿均 新增部別欄位 each.SchoolReMark = school.Remark; dic[name].Add(each); } } ClubNewNameList.Sort(); #endregion #region 報表範本整理 Campus.Report.ReportConfiguration ConfigurationInCadre = new Campus.Report.ReportConfiguration(ConfigName); Aspose.Words.Document Template; if (ConfigurationInCadre.Template == null) { //如果範本為空,則建立一個預設範本 Campus.Report.ReportConfiguration ConfigurationInCadre_1 = new Campus.Report.ReportConfiguration(ConfigName); ConfigurationInCadre_1.Template = new Campus.Report.ReportTemplate(Properties.Resources.社團點名單_週報表樣式範本, Campus.Report.TemplateType.Word); Template = ConfigurationInCadre_1.Template.ToDocument(); } else { //如果已有範本,則取得樣板 Template = ConfigurationInCadre.Template.ToDocument(); } #endregion #region 範本再修改 List <string> config = new List <string>(); XmlElement day = (XmlElement)e.Argument; if (day == null) { MsgBox.Show("第一次使用報表請先進行[日期設定]"); return; } else { config.Clear(); foreach (XmlElement xml in day.SelectNodes("item")) { config.Add(xml.InnerText); } } SCJoinDataLoad scjoinData = new SCJoinDataLoad(); DataTable table = new DataTable(); table.Columns.Add("學校名稱"); table.Columns.Add("社團名稱"); table.Columns.Add("學年度"); table.Columns.Add("學期"); table.Columns.Add("上課地點"); table.Columns.Add("社團類型"); table.Columns.Add("社團代碼"); //table.Columns.Add("社團老師"); table.Columns.Add("社團老師1"); table.Columns.Add("社團老師2"); table.Columns.Add("社團老師3"); table.Columns.Add("列印日期"); table.Columns.Add("上課開始"); table.Columns.Add("上課結束"); table.Columns.Add("人數"); for (int x = 1; x <= 日期多少天; x++) { table.Columns.Add(string.Format("日期_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("社團_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("部別名稱_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("班級_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("座號_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("姓名_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("學號_{0}", x)); } for (int x = 1; x <= 學生多少個; x++) { table.Columns.Add(string.Format("性別_{0}", x)); } #endregion foreach (string each in scjoinData.CLUBRecordDic.Keys) { //社團資料 CLUBRecord cr = scjoinData.CLUBRecordDic[each]; } foreach (string each in ClubNewNameList) { DataRow row = table.NewRow(); row["學校名稱"] = K12.Data.School.ChineseName; row["學年度"] = School.DefaultSchoolYear; row["學期"] = School.DefaultSemester; row["列印日期"] = DateTime.Today.ToShortDateString(); row["上課開始"] = config[0]; row["上課結束"] = config[config.Count - 1]; row["社團名稱"] = each; // 2018/01/23 羿均 新增合併欄位: row["上課地點"] = Mergerdic[each].Location; row["社團類型"] = Mergerdic[each].ClubCategory; row["社團代碼"] = Mergerdic[each].ClubNumber; row["社團老師1"] = clubTeacherDic[tool.Point].Teacher1; row["社團老師2"] = clubTeacherDic[tool.Point].Teacher2; row["社團老師3"] = clubTeacherDic[tool.Point].Teacher3; //特殊 //if (dic[each].Count > 0) //row["社團老師"] = dic[each][0].TeacherName; for (int x = 1; x <= config.Count; x++) { row[string.Format("日期_{0}", x)] = config[x - 1]; } dic[each].Sort(SortStudentSCJoin); int y = 1; foreach (OnlineSCJoin scjoin in dic[each]) { if (y <= 學生多少個) { row[string.Format("部別名稱_{0}", y)] = scjoin.SchoolReMark; row[string.Format("班級_{0}", y)] = scjoin.ClassName; row[string.Format("座號_{0}", y)] = scjoin.SeatNo; row[string.Format("姓名_{0}", y)] = scjoin.StudentName; row[string.Format("學號_{0}", y)] = scjoin.StudentNumber; row[string.Format("性別_{0}", y)] = scjoin.Gender; y++; } } row["人數"] = y - 1; table.Rows.Add(row); } Document PageOne = (Document)Template.Clone(true); PageOne.MailMerge.Execute(table); e.Result = PageOne; }