/// <summary> /// 取得RowIndex,科目名稱及屬性值相同視為相同群組 /// </summary> /// <param name="Subjects">課程規劃科目列表</param> /// <param name="SubjectName"></param> /// <param name="Domain"></param> /// <param name="Entry"></param> /// <param name="RequiredBy"></param> /// <param name="Required"></param> /// <param name="NotIncludeInCalc"></param> /// <param name="NotIncludeInCredit"></param> /// <returns></returns> public static int GetRowIndex(this List <ProgramSubject> Subjects , string SubjectName , string Domain , string Entry , string RequiredBy , bool Required , bool NotIncludeInCalc , bool NotIncludeInCredit) { #region 科目名稱及屬性值相同視為相同群組 ProgramSubject FindSubject = Subjects.Find(m => m.SubjectName.Equals(SubjectName) && m.Domain.Equals(Domain) && m.Entry.Equals(Entry) && m.RequiredBy.Equals(RequiredBy) && m.Required.Equals(Required) && m.NotIncludedInCalc.Equals(NotIncludeInCalc) && m.NotIncludedInCredit.Equals(NotIncludeInCredit)); #endregion int RowIndex = 1; if (FindSubject != null) { RowIndex = FindSubject.RowIndex; } else if (Subjects.Count > 0) { RowIndex = Subjects.Max(m => m.RowIndex) + 1; } return(RowIndex); }
/// <summary> /// 實際分批匯入 /// </summary> /// <param name="Rows"></param> /// <returns></returns> public override string Import(List <IRowStream> Rows) { if (mOption.Action == ImportAction.InsertOrUpdate) { #region 找系統中已有課程規劃物件 Dictionary <string, SHProgramPlanRecord> UpdateProgramPlans = ProgramPlanHelper .SelectProgramPlanByRows(Rows, mProgramPlanName) .ToDictionary(x => x.Name); Dictionary <string, SHProgramPlanRecord> NewProgramPlans = new Dictionary <string, SHProgramPlanRecord>(); #endregion #region 將IRowStream轉成對應的物件 foreach (IRowStream x in Rows) { #region 鍵值欄位(課程規劃表名稱、科目名稱、級別) string ProgramPlanName = x.GetValue(mProgramPlanName); //課程規劃表名稱 string SubjectName = x.GetValue(mSubject); //年級 string GradeYear = x.GetValue(mGradeYar); //年級 string Semester = x.GetValue(mSemester); //年級 #endregion #region 科目屬性 string Domain = x.GetValue(mDomain); //領域 string Entry = x.GetValue(mEntry); //分項 string RequiredBy = x.GetValue(mRequiredBy).Equals("校") ? "校訂" : "部訂"; //校部訂 bool Required = x.GetValue(mRequired).Equals("必") ? true : false; //必選修 bool NotIncludeInCalc = x.GetValue(mNotIncludeInCalc).Equals("是") ? true : false; //不需評分 bool NotIncludeInCredit = x.GetValue(mNotIncludeInCredit).Equals("是") ? true : false; //不計學分 #endregion #region 取得課程規劃表物件,若不存在則新增 SHProgramPlanRecord ProgramPlanRecord = UpdateProgramPlans.ContainsKey(ProgramPlanName) ? UpdateProgramPlans[ProgramPlanName] : null; if (ProgramPlanRecord == null) { ProgramPlanRecord = NewProgramPlans.ContainsKey(ProgramPlanName) ? NewProgramPlans[ProgramPlanName] : null; if (ProgramPlanRecord == null) { ProgramPlanRecord = new SHProgramPlanRecord(); ProgramPlanRecord.Name = ProgramPlanName; NewProgramPlans.Add(ProgramPlanRecord.Name, ProgramPlanRecord); } } #endregion #region 依『科目名稱』、『年級』及『學期』尋找科目,若無則新增 ProgramSubject Subject = ProgramPlanRecord.Subjects .Find(v => v.SubjectName.Equals(SubjectName) && ("" + v.GradeYear).Equals(GradeYear) && ("" + v.Semester).Equals(Semester)); if (Subject == null) { Subject = new ProgramSubject(); Subject.Category = string.Empty; Subject.SubjectName = SubjectName; Subject.GradeYear = K12.Data.Int.Parse(GradeYear); Subject.Semester = K12.Data.Int.Parse(Semester); Subject.RowIndex = ProgramPlanRecord.Subjects.GetRowIndex( SubjectName, Domain, Entry, RequiredBy, Required, NotIncludeInCalc, NotIncludeInCredit); ProgramPlanRecord.Subjects.Add(Subject); } #endregion #region 將相關欄位值填入 if (mOption.SelectedFields.Contains(mLevel)) { string Level = x.GetValue(mLevel); int? intLevel = null; if (!string.IsNullOrEmpty(Level)) { intLevel = K12.Data.Int.Parse(Level); } Subject.Level = intLevel; #region 處理StartLevel,只有考有填Level(級別)的情況 if (Subject.Level.HasValue) { List <ProgramSubject> LevelSubjects = ProgramPlanRecord.Subjects .FindAll(m => m.SubjectName.Equals(SubjectName) && m.Level != null && m.Domain == Domain && m.Entry == Entry && m.RequiredBy == RequiredBy && m.Required == Required && m.NotIncludedInCalc == NotIncludeInCalc && m.NotIncludedInCredit == NotIncludeInCredit ); LevelSubjects.Add(Subject); #region 全部重新計算StartLevel,確保值正確 int StartLevel = int.MaxValue; LevelSubjects.ForEach(m => { if (m.Level < StartLevel) { StartLevel = m.Level.Value; } }); if (StartLevel < int.MaxValue) { LevelSubjects.ForEach(m => m.StartLevel = StartLevel); } #endregion } #endregion } //組合成科目完成名稱 Subject.FullName = Subject.Level.HasValue ? Subject.SubjectName + " " + GetNumber(Subject.Level.Value) : Subject.SubjectName; Subject.Domain = Domain; Subject.Entry = Entry; Subject.Credit = K12.Data.Decimal.Parse(x.GetValue(mCredit)); Subject.RequiredBy = RequiredBy; Subject.Required = Required; Subject.NotIncludedInCalc = NotIncludeInCalc; Subject.NotIncludedInCredit = NotIncludeInCredit; #endregion } #region 實際新增或更新課程規劃表 if (UpdateProgramPlans.Count > 0) { int UpdateCount = SHProgramPlan.Update(UpdateProgramPlans.Values); } if (NewProgramPlans.Count > 0) { List <string> NewProgramIDs = SHProgramPlan.Insert(NewProgramPlans.Values); } #endregion #endregion } else if (mOption.Action == ImportAction.Delete) { } return(mstrBuilder.ToString()); }