private void RefreshUI()
        {
            List <string> SelectStudentIDs = K12.Presentation.NLDPanels.Student.SelectedSource;

            StudentScores = SHSemesterScore.SelectByStudentIDs(SelectStudentIDs, false);

            //取得選取學生的學年科目成績
            StudentSchoolYearScores = SHSchoolYearScore.SelectByStudentIDs(SelectStudentIDs);

            //根據選取學生的學期科目成績計算出成績裡的學年度、學期、級別及科目
            List <string> SchoolYears = new List <string>();
            List <string> Semesters   = new List <string>();
            List <int>    Levels      = new List <int>();
            List <string> Subjects    = new List <string>();

            foreach (SHSemesterScoreRecord record in StudentScores)
            {
                if (!SchoolYears.Contains("" + record.SchoolYear))
                {
                    SchoolYears.Add("" + record.SchoolYear);
                }

                if (!Semesters.Contains("" + record.Semester))
                {
                    Semesters.Add("" + record.Semester);
                }

                Levels.AddRange(record.Subjects.Values.Where(x => x.Level.HasValue).Select(x => x.Level.Value).ToList());
                Subjects.AddRange(record.Subjects.Values.Where(x => !Subjects.Contains(x.Subject)).Select(x => x.Subject));
            }

            Levels.Sort();
            Levels.Distinct().ToList().ForEach(x => cmbLevels.Items.Add("" + x));

            Subjects.Sort();
            Subjects.Sort(new SubjectComparer()
            {
            });
            Subjects.ForEach(x => cmbSubjects.Items.Add(x));

            SchoolYears.Sort();
            SchoolYears.ForEach(x => cmbSchoolYear.Items.Add(x));

            Semesters.Sort();
            Semesters.ForEach(x => cmbSemester.Items.Add(x));
        }
        private Dictionary <string, List <SHSemesterScoreRecord> > GetSemesterScore(List <string> StudentIDList)
        {
            Dictionary <string, List <SHSemesterScoreRecord> > dic = new Dictionary <string, List <SHSemesterScoreRecord> >();
            List <SHSemesterScoreRecord> SemesterScoreList         = SHSemesterScore.SelectByStudentIDs(StudentIDList);

            foreach (SHSemesterScoreRecord ssr in SemesterScoreList)
            {
                if (ssr.SchoolYear.ToString() == _SchoolYear && ssr.Semester.ToString() == _Semester)
                {
                    if (!dic.ContainsKey(ssr.RefStudentID))
                    {
                        dic.Add(ssr.RefStudentID, new List <SHSemesterScoreRecord>());
                    }

                    dic[ssr.RefStudentID].Add(ssr);
                }
            }

            return(dic);
        }
Esempio n. 3
0
        public void ExecuteAutoCorrect(IEnumerable <string> EntityIDs)
        {
            try
            {
                if (!K12.Data.Utility.Utility.IsNullOrEmpty(EntityIDs))
                {
                    if (MsgBox.Show("自動修正將依照檢查結果建議值進行修正總共" + EntityIDs.Count() + "筆,強烈建議您務必將檢查結果匯出備份,是否進行自動修正?", "您是否要進行自動修正?", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                    {
                        StringBuilder strBuilder = new StringBuilder(1024 * 1024);
                        List <string> LogValues  = new List <string>();

                        strBuilder.AppendLine("學號,狀態,學年度,學期" + Environment.NewLine);

                        foreach (SHSemesterScoreRecord sems in CorrectableRecs)
                        {
                            if (EntityIDs.Contains(sems.ID))
                            {
                                LogValues.Add(sems.Student.StudentNumber);
                                LogValues.Add(sems.Student.StatusStr);
                                LogValues.Add("" + sems.SchoolYear);
                                LogValues.Add("" + sems.Semester);
                                strBuilder.AppendLine(string.Join(",", LogValues.ToArray()));
                                LogValues.Clear();
                            }
                        }

                        FISCA.LogAgent.ApplicationLog.Log("資料合理性檢查.學生學期科目與領域成績有空值", "刪除學生學期科目與領域成績有空值", strBuilder.ToString());
                        SHSemesterScore.Delete(EntityIDs);
                        MsgBox.Show("已自動修正完成!");
                    }
                }
            }
            catch (Exception e)
            {
                SmartSchool.ErrorReporting.ReportingService.ReportException(e);

                MsgBox.Show(e.Message);
            }
        }
Esempio n. 4
0
        //[SelectMethod("SchoolYearScoreJudge", "取得選取學生學年科目不及格進校判斷")]
        public static List <SchoolYearScoreJudgeRecord> Select()
        {
            List <SchoolYearScoreJudgeRecord> Result = new List <SchoolYearScoreJudgeRecord>();

            List <string> StudentIDs = K12.Presentation.NLDPanels.Student.SelectedSource;

            if (K12.Data.Utility.Utility.IsNullOrEmpty(StudentIDs))
            {
                return(Result);
            }

            List <SHSchoolYearScoreRecord> StudentSchoolYearScores = SHSchoolYearScore.SelectByStudentIDs(StudentIDs);
            List <SHSemesterScoreRecord>   StudentScores           = SHSemesterScore.SelectByStudentIDs(StudentIDs);

            //將學期科目成績用學生編號做群組
            foreach (var StudentGroup in StudentScores.GroupBy(x => x.RefStudentID))
            {
                //將個別學生學期科目成績用學年度做群組
                foreach (var StudentSchoolYearGroup in StudentGroup.GroupBy(x => x.SchoolYear))
                {
                    //假學生的學年有上下兩筆學期科目成績才進行處理
                    if (StudentSchoolYearGroup.ToList().Count >= 2)
                    {
                        //將資料根據學期加以排序
                        List <SHSemesterScoreRecord> records = StudentSchoolYearGroup.OrderBy(x => x.Semester).ToList();

                        //掃描上學期的每筆學期科目成績
                        foreach (string strSubject in records[0].Subjects.Keys)
                        {
                            //判斷下學期是否有相同的科目名稱
                            if (records[1].Subjects.ContainsKey(strSubject))
                            {
                                //上學期科目成績
                                decimal?UpScore = records[0].Subjects[strSubject].Score;
                                //下學期科目成績
                                decimal?DownScore = records[1].Subjects[strSubject].Score;

                                //判斷是否上學期科目成績大於50小於60,並且下學期科目成績大於60
                                if ((UpScore >= 50 && UpScore < 60) && DownScore > 60)
                                {
                                    decimal?SchoolYearScore = null;

                                    List <SHSchoolYearScoreRecord> SchoolYearScoreRecords = StudentSchoolYearScores.Where(x => x.RefStudentID.Equals(StudentGroup.Key) && x.SchoolYear.Equals(StudentSchoolYearGroup.Key)).ToList();

                                    if (SchoolYearScoreRecords.Count > 0)
                                    {
                                        List <SHSchoolYearScoreSubject> Subjects = SchoolYearScoreRecords[0].Subjects.Where(x => x.Subject.Equals(strSubject)).ToList();

                                        if (Subjects.Count > 0)
                                        {
                                            SchoolYearScore = Subjects[0].Score;
                                        }
                                    }

                                    SchoolYearScoreJudgeRecord record = new SchoolYearScoreJudgeRecord();

                                    record.StudentNumber       = records[0].Student.StudentNumber;
                                    record.Name                = records[0].Student.Name;
                                    record.SchoolYear          = records[0].SchoolYear;
                                    record.UPSemesterSubject   = (strSubject + records[0].Subjects[strSubject].Level);
                                    record.UpScore             = records[0].Subjects[strSubject].Score;
                                    record.DownSemesterSubject = (strSubject + records[1].Subjects[strSubject].Level);
                                    record.DownSemesterScore   = records[1].Subjects[strSubject].Score;
                                    record.SchoolYearSubject   = strSubject;
                                    record.SchoolYearScore     = SchoolYearScore;

                                    Result.Add(record);
                                }
                            }
                        }
                    }
                }
            }

            return(Result);
        }
Esempio n. 5
0
        public DataRationalityMessage Execute()
        {
            QueryHelper Helper = new QueryHelper();

            List <string> StudentIDs = new List <string>();

            DataTable StudentIDTable = Helper.Select("select ref_student_id from sems_subj_score where score_info like'%<SemesterSubjectScoreInfo/>%'");

            for (int i = 0; i < StudentIDTable.Rows.Count; i++)
            {
                StudentIDs.Add("" + StudentIDTable.Rows[i][0]);
            }

            List <SHSemesterScoreRecord> SemsScoreList = new List <SHSemesterScoreRecord>();

            if (StudentIDs.Count > 0)
            {
                SHSemesterScore.SelectByStudentIDs(StudentIDs);
            }

            CorrectableRecs.Clear();
            RATRecs.Clear();
            DataRationalityMessage retMsg = new DataRationalityMessage();

            try
            {
                foreach (SHSemesterScoreRecord SmesRec in SemsScoreList)
                {
                    if (SmesRec.Subjects.Count == 0)
                    {
                        EmptySemesterScoreRATRec rec = new EmptySemesterScoreRATRec();
                        rec.學期成績系統編號 = SmesRec.ID;
                        rec.學生系統編號   = SmesRec.RefStudentID;
                        rec.身分證號     = SmesRec.Student.IDNumber;
                        rec.姓名       = SmesRec.Student.Name;
                        rec.狀態       = SmesRec.Student.StatusStr;
                        rec.座號       = K12.Data.Int.GetString(SmesRec.Student.SeatNo);
                        if (SmesRec.Student.Class != null)
                        {
                            rec.班級 = SmesRec.Student.Class.Name;
                        }
                        rec.學年度 = SmesRec.SchoolYear.ToString();
                        rec.學期  = SmesRec.Semester.ToString();
                        rec.學號  = SmesRec.Student.StudentNumber;

                        RATRecs.Add(rec);
                        CorrectableRecs.Add(SmesRec);
                    }
                }
            }
            catch (Exception ex)
            {
                retMsg.Message = ex.Message;

                return(retMsg);
            }

            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendLine("檢查學期成績筆數:" + SemsScoreList.Count);
            strBuilder.AppendLine("學期科目成績空值筆數:" + RATRecs.Count);

            var SortedRATRecords = from RATRecord in RATRecs orderby RATRecord.狀態, RATRecord.班級, K12.Data.Int.ParseAllowNull(RATRecord.座號), RATRecord.學年度, RATRecord.學期 select RATRecord;

            retMsg.Message = strBuilder.ToString();
            retMsg.Data    = SortedRATRecords.ToList();

            return(retMsg);
        }
        private void btnDeleteSubject_Click(object sender, EventArgs e)
        {
            if (!IsInput())
            {
                MessageBox.Show("請完整輸入欄位資訊!");
                return;
            }

            int    SchoolYear = K12.Data.Int.Parse("" + cmbSchoolYear.SelectedItem);
            int    Semester   = K12.Data.Int.Parse("" + cmbSemester.SelectedItem);
            int?   Level      = K12.Data.Int.ParseAllowNull("" + cmbLevels.SelectedItem);
            string Subject    = "" + cmbSubjects.SelectedItem;

            strLog = new StringBuilder();
            strLog.AppendLine("『刪除學期科目成績紀錄』");
            int RemoveCount = 0;

            List <SHSemesterScoreRecord> FinalUpdateRecords = new List <SHSemesterScoreRecord>();

            UpdateRecords = StudentScores.Where(x => x.SchoolYear == SchoolYear && x.Semester == Semester).ToList();

            foreach (SHSemesterScoreRecord record in UpdateRecords)
            {
                List <string> RemoveSubjects = new List <string>();

                foreach (SHSubjectScore SubjectScore in record.Subjects.Values)
                {
                    if (SubjectScore.Subject.Equals(Subject) && SubjectScore.Level.Equals(Level))
                    {
                        RemoveSubjects.Add(SubjectScore.Subject);
                        RemoveCount++;
                    }
                }

                if (RemoveSubjects.Count > 0)
                {
                    FinalUpdateRecords.Add(record);
                    strLog.AppendLine("系統編號:" + record.ID + ",學生編號:" + record.RefStudentID + ",學生學號:" + record.Student.StudentNumber + ",學生姓名:" + record.Student.Name + ",學年度:" + record.SchoolYear + ",學期:" + record.Semester);
                }

                foreach (string RemoveSubject in RemoveSubjects)
                {
                    strLog.AppendLine(record.Subjects[RemoveSubject].ToXML().OuterXml);
                    record.Subjects.Remove(RemoveSubject);
                }
            }

            int SuccessCount = 0;

            if (K12.Data.Utility.Utility.IsNullOrEmpty(FinalUpdateRecords))
            {
                MessageBox.Show("沒有資料不需刪除!!");
                return;
            }

            if (MessageBox.Show("與您確認是否要刪除總共" + RemoveCount + "筆成績?提醒在刪除前先備份該位學生所有學期科目成績,並在成功後備份『刪除紀錄』。", "刪除學期科目成績確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                try
                {
                    SuccessCount = SHSemesterScore.Update(FinalUpdateRecords);
                    MessageBox.Show("成功刪除筆數:" + RemoveCount);
                    txtLog.Text = txtLog.Text + strLog.ToString();
                    FISCA.LogAgent.ApplicationLog.Log("成績模組.學期科目成績資料維護", strLog.ToString());
                    SelectByCondition();
                }
                catch (Exception ve)
                {
                    MessageBox.Show(ve.Message);
                    txtLog.Text = txtLog.Text + ve.Message;
                }
                finally
                {
                }
            }
        }
        private void btnChangeSubject_Click(object sender, System.EventArgs e)
        {
            //if (record.Subjects.ContainsKey(Subject))
            //{
            //    //strLog.AppendLine(record.ID,record.Student.StudentNumber,);
            //    SHSubjectScore Score = record.Subjects[Subject];
            //    record.Subjects.Remove(Subject);
            //    Score.Subject = ChangeSubject;
            //    record.Subjects.Add(Score.Subject, Score);
            //}

            if (!IsInput() && !string.IsNullOrEmpty(txtChangeSubject.Text))
            {
                MessageBox.Show("請完整輸入欄位資訊!");
                return;
            }

            int a;

            if (!(int.TryParse(txtChangeLevel.Text, out a) || string.IsNullOrEmpty(txtChangeLevel.Text)))
            {
                MessageBox.Show("級別必需為數字或空白!");
                return;
            }

            int    SchoolYear    = K12.Data.Int.Parse("" + cmbSchoolYear.SelectedItem);
            int    Semester      = K12.Data.Int.Parse("" + cmbSemester.SelectedItem);
            int?   Level         = K12.Data.Int.ParseAllowNull("" + cmbLevels.SelectedItem);
            int?   ChangeLevel   = K12.Data.Int.ParseAllowNull("" + txtChangeLevel.Text);
            string Subject       = "" + cmbSubjects.SelectedItem;
            string ChangeSubject = txtChangeSubject.Text;

            strLog = new StringBuilder();
            strLog.AppendLine("『更改學期科目名稱』");
            int UpdateCount = 0;

            List <SHSemesterScoreRecord> FinalUpdateRecords = new List <SHSemesterScoreRecord>();

            UpdateRecords = StudentScores.Where(x => x.SchoolYear == SchoolYear && x.Semester == Semester).ToList();

            foreach (SHSemesterScoreRecord record in UpdateRecords)
            {
                List <string> UpdateSubjects = new List <string>();

                foreach (SHSubjectScore SubjectScore in record.Subjects.Values)
                {
                    if (SubjectScore.Subject.Equals(Subject) && K12.Data.Int.GetString(SubjectScore.Level) == K12.Data.Int.GetString(Level))
                    {
                        UpdateSubjects.Add(SubjectScore.Subject);
                        UpdateCount++;
                    }
                }

                if (UpdateSubjects.Count > 0)
                {
                    FinalUpdateRecords.Add(record);
                    strLog.AppendLine("系統編號:" + record.ID + ",學生編號:" + record.RefStudentID + ",學生學號:" + record.Student.StudentNumber + ",學生姓名:" + record.Student.Name + ",學年度:" + record.SchoolYear + ",學期:" + record.Semester + ",更新後科目名稱:" + ChangeSubject);
                }

                foreach (string UpdateSubject in UpdateSubjects)
                {
                    strLog.AppendLine(record.Subjects[UpdateSubject].ToXML().OuterXml);

                    SHSubjectScore Score = record.Subjects[UpdateSubject];

                    record.Subjects.Remove(UpdateSubject);

                    Score.Subject = ChangeSubject;
                    Score.Level   = ChangeLevel;

                    record.Subjects.Add(Score.Subject, Score);
                }
            }

            int SuccessCount = 0;

            if (K12.Data.Utility.Utility.IsNullOrEmpty(FinalUpdateRecords))
            {
                MessageBox.Show("沒有資料不需更新!!");
                return;
            }

            if (MessageBox.Show("與您確認是否要更新總共" + UpdateCount + "筆成績?提醒在更新前先備份該位學生所有學期科目成績,並在成功後備份『更新紀錄』。", "更新學期科目成績確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                try
                {
                    SuccessCount = SHSemesterScore.Update(FinalUpdateRecords);
                    MessageBox.Show("成功更新筆數:" + UpdateCount);
                    txtLog.Text = txtLog.Text + strLog.ToString();
                    FISCA.LogAgent.ApplicationLog.Log("成績模組.學期科目成績資料維護", strLog.ToString());
                    SelectByCondition();
                }
                catch (Exception ve)
                {
                    MessageBox.Show(ve.Message);
                    txtLog.Text = txtLog.Text + ve.Message;
                }
                finally
                {
                }
            }
        }
Esempio n. 8
0
        //  初始化所需資料
        private void ProduceData(List <SHStudentRecord> pStudents)
        {
            IEnumerable <string> pStudentIDs = pStudents.Select(x => x.ID);

            //  先快取班級資料,否則在查詢學生所屬班級的成績計算規則資料時會降低系統效能
            IEnumerable <string> classiDs = pStudents.Select(x => x.RefClassID);

            SHClass.SelectByIDs(classiDs);


            //  後期中等教育核心科目標示
            _SubjectTable = SHSubjectTable.Select(null, null, null);
            foreach (SHSubjectTableRecord sr in _SubjectTable)
            {
                if (sr.Catalog.Equals("核心科目表") && sr.Name.Equals("後期中等教育核心課程"))
                {
                    foreach (SHSubjectTableSubject ss in sr.Subjects)
                    {
                        string key = string.Empty;
                        if (ss.Levels.Count == 0)
                        {
                            key = ss.Name;
                            if (!_CoreSubjectTable.Contains(key))
                            {
                                _CoreSubjectTable.Add(key);
                            }
                        }
                        else
                        {
                            foreach (int a in ss.Levels)
                            {
                                key = ss.Name + "_" + a.ToString();
                                if (!_CoreSubjectTable.Contains(key))
                                {
                                    _CoreSubjectTable.Add(key);
                                }
                            }
                        }
                    }
                }
            }

            //  學生修習科目學期成績資料
            List <SHSemesterScoreRecord> _SHSemesterScore = SHSemesterScore.SelectByStudentIDs(pStudentIDs, false);

            if (_SHSemesterScore.Count > 0)
            {
                _SHSemesterScore = _SHSemesterScore.OrderByDescending(x => x.SchoolYear).ThenBy(x => x.Semester).Select(x => x).ToList();
            }

            //Dictionary<string, List<SHSemesterScoreRecord>> dReReading = new Dictionary<string, List<SHSemesterScoreRecord>>();

            //  收集學生修習科目學期成績資料
            foreach (SHSemesterScoreRecord sr in _SHSemesterScore)
            {
                //  重讀要檢查所有科目成績資料,若「科目名稱+級別+成績年級」有2筆以上,表示該科目成績資料屬重讀
                //  若已存在同年級成績,且成績所屬學年度不同,則移除前學年度之所有學期成績
                //  重修要檢查所有科目成績資料,若「科目名稱+級別」有2筆以上,表示該科目成績資料屬重修(成績計算時才用的到,此時判斷將造成資料謬誤)
                //string keyReReadingSR = sr.RefStudentID + "_" + sr.GradeYear.ToString();
                //if (!dReReading.ContainsKey(keyReReadingSR))
                //{
                //    dReReading.Add(keyReReadingSR, new List<SHSemesterScoreRecord>() { sr });
                //}
                //else
                //{
                //    if (sr.SchoolYear == dReReading[keyReReadingSR][0].SchoolYear)
                //        dReReading[keyReReadingSR].Add(sr);
                //    else
                //    {
                //        if (sr.SchoolYear > dReReading[keyReReadingSR][0].SchoolYear)
                //        {
                //            for (int i = 0; i < dReReading[keyReReadingSR].Count; i++)
                //            {
                //                _PersonalSemesterSubjectScoreInfo.Remove(sr.RefStudentID + "_" + dReReading[keyReReadingSR][0].SchoolYear.ToString() + "_" + dReReading[keyReReadingSR][0].Semester.ToString());
                //                KeyValuePair<int, int> schoolYearSemesterPair = new KeyValuePair<int, int>(dReReading[keyReReadingSR][0].SchoolYear, dReReading[keyReReadingSR][0].Semester);
                //                if (_PersonalSemesterSubjectScoreHistoryInfo.ContainsKey(sr.RefStudentID))
                //                    if (_PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID].ContainsKey(schoolYearSemesterPair))
                //                        _PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID].Remove(schoolYearSemesterPair);
                //            }
                //        }
                //        else
                //            continue;
                //    }
                //}

                if (!_PersonalSemesterSubjectScoreHistoryInfo.ContainsKey(sr.RefStudentID))
                {
                    _PersonalSemesterSubjectScoreHistoryInfo.Add(sr.RefStudentID, new Dictionary <int, List <KeyValuePair <int, int> > >());
                }

                if (!_PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID].ContainsKey(sr.GradeYear))
                {
                    _PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID].Add(sr.GradeYear, new List <KeyValuePair <int, int> >());
                    _PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID][sr.GradeYear].Add(new KeyValuePair <int, int>(sr.SchoolYear, sr.Semester));
                }
                else
                {
                    if (_PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID][sr.GradeYear].Where(x => (x.Value == sr.Semester)).Count() == 0)
                    {
                        _PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID][sr.GradeYear].Add(new KeyValuePair <int, int>(sr.SchoolYear, sr.Semester));
                    }
                    else
                    {
                        if (!_PersonalReReadSchoolYear.ContainsKey(sr.RefStudentID))
                        {
                            _PersonalReReadSchoolYear.Add(sr.RefStudentID, new List <int>());
                        }

                        _PersonalReReadSchoolYear[sr.RefStudentID].Add(sr.SchoolYear);
                    }
                }

                //  重讀成績不處理
                if (_PersonalReReadSchoolYear.ContainsKey(sr.RefStudentID) && _PersonalReReadSchoolYear[sr.RefStudentID].Contains(sr.SchoolYear))
                {
                    continue;
                }

                foreach (SHSchool.Data.SHSubjectScore ss in sr.Subjects.Values)
                {
                    //  不計學分不處理
                    if (ss.NotIncludedInCredit)
                    {
                        continue;
                    }

                    //KeyValuePair<int, int> schoolYearSemesterPair = new KeyValuePair<int, int>(ss.SchoolYear, ss.Semester);

                    //_PersonalSemesterSubjectScoreHistoryInfo[sr.RefStudentID][sr.GradeYear].Add(schoolYearSemesterPair);

                    string keySingleSubject   = sr.RefStudentID + "_" + sr.SchoolYear.ToString() + "_" + sr.Semester.ToString() + "_" + ss.Subject + "_" + ((ss.Level.HasValue) ? ss.Level.ToString() : "");
                    string keySemesterSubject = sr.RefStudentID + "_" + sr.SchoolYear.ToString() + "_" + sr.Semester.ToString();

                    if (!_PersonalSubjectSemesterScoreInfo.ContainsKey(keySingleSubject))
                    {
                        _PersonalSubjectSemesterScoreInfo.Add(keySingleSubject, new SHSubjectSemesterScoreInfo());
                    }

                    ProducePersonalSubjectSemesterScoreInfo(_PersonalSubjectSemesterScoreInfo, ss, sr.GradeYear);

                    //if (!_PersonalSemesterSubjectScoreHistoryInfo.ContainsKey(ss.RefStudentID))
                    //    _PersonalSemesterSubjectScoreHistoryInfo.Add(ss.RefStudentID, new Dictionary<KeyValuePair<int, int>, int>());

                    //if (!_PersonalSemesterSubjectScoreHistoryInfo[ss.RefStudentID].ContainsKey(schoolYearSemesterPair))
                    //    _PersonalSemesterSubjectScoreHistoryInfo[ss.RefStudentID].Add(schoolYearSemesterPair, sr.GradeYear);

                    if (!_PersonalSemesterSubjectScoreInfo.ContainsKey(keySemesterSubject))
                    {
                        _PersonalSemesterSubjectScoreInfo.Add(keySemesterSubject, new List <SHSubjectSemesterScoreInfo>());
                    }

                    _PersonalSemesterSubjectScoreInfo[keySemesterSubject].Add(_PersonalSubjectSemesterScoreInfo[keySingleSubject]);
                }
            }
            //Dictionary<string, Dictionary<KeyValuePair<int, int>, int>> dd = new Dictionary<string, Dictionary<KeyValuePair<int, int>, int>>();
            //foreach (string studentID in _PersonalSemesterSubjectScoreHistoryInfo.Keys)
            //{
            //    var _SemesterHistoryItems = from pair in _PersonalSemesterSubjectScoreHistoryInfo[studentID] orderby pair.Value descending, pair.Key.Key descending, pair.Key.Value ascending select pair;
            //    Dictionary<KeyValuePair<int, int>, int> d = new Dictionary<KeyValuePair<int, int>, int>();
            //    int yIndex = 0;
            //    int year = 0;
            //    foreach (KeyValuePair<KeyValuePair<int, int>, int> sh in _SemesterHistoryItems)
            //    {
            //        if (yIndex != sh.Value)
            //        {
            //            d.Add(new KeyValuePair<int, int>(sh.Key.Key, sh.Key.Value), sh.Value);
            //            yIndex = sh.Value;
            //            year = sh.Key.Key;
            //        }
            //        else
            //        {
            //            if (year == sh.Key.Key)
            //            {
            //                d.Add(new KeyValuePair<int, int>(sh.Key.Key, sh.Key.Value), sh.Value);
            //                year = sh.Key.Key;
            //            }
            //        }
            //    }
            //    dd.Add(studentID, d);
            //}
            //_PersonalSemesterSubjectScoreHistoryInfo = dd;
            _SHSemesterScore = null;
        }
Esempio n. 9
0
        public DataRationalityMessage Execute()
        {
            RATList.Clear();
            DataRationalityMessage Message           = new DataRationalityMessage();
            List <string>          Err_StudentIDList = new List <string>();

            try
            {
                // 取得學生基本
                List <SHStudentRecord> StudRecListAll = SHStudent.SelectAll();

                Dictionary <string, SHStudentRecord> StudRecDict = new Dictionary <string, SHStudentRecord>();

                foreach (SHStudentRecord rec in StudRecListAll)
                {
                    if (rec.Status == K12.Data.StudentRecord.StudentStatus.一般 || rec.Status == K12.Data.StudentRecord.StudentStatus.延修)
                    {
                        StudRecDict.Add(rec.ID, rec);
                    }
                }

                Err_StudentIDList = StudRecDict.Keys.ToList();

                // 檢查並取得資料,status 1 一般,2 延俢

                if (Err_StudentIDList.Count > 0)
                {
                    // 取得學生科目成績
                    List <SHSemesterScoreRecord> SHSemScoreList = SHSemesterScore.SelectByStudentIDs(Err_StudentIDList);

                    // 學生科目成績索引,StudentID,
                    Dictionary <string, List <ssSHSubjectScore> > SHSubjScoreDict = new Dictionary <string, List <ssSHSubjectScore> >();

                    foreach (SHSemesterScoreRecord SemsRec in SHSemScoreList)
                    {
                        if (!SHSubjScoreDict.ContainsKey(SemsRec.RefStudentID))
                        {
                            SHSubjScoreDict.Add(SemsRec.RefStudentID, new List <ssSHSubjectScore>());
                        }

                        foreach (SHSubjectScore ss in SemsRec.Subjects.Values)
                        {
                            ssSHSubjectScore sss = new ssSHSubjectScore();
                            sss.ss         = ss;
                            sss.SchoolYear = SemsRec.SchoolYear.ToString();
                            sss.Semester   = SemsRec.Semester.ToString();
                            sss.GradeYear  = SemsRec.GradeYear.ToString();
                            SHSubjScoreDict[SemsRec.RefStudentID].Add(sss);
                        }
                    }

                    Dictionary <string, List <ssSHSubjectScore> > ssSubjDict = new Dictionary <string, List <ssSHSubjectScore> >();
                    // 檢查 科目名稱及級別重覆
                    foreach (string studID in SHSubjScoreDict.Keys)
                    {
                        ssSubjDict.Clear();

                        foreach (ssSHSubjectScore ss1 in SHSubjScoreDict[studID])
                        {
                            string key = ss1.ss.Subject;
                            if (ss1.ss.Level.HasValue)
                            {
                                key += ss1.ss.Subject + ss1.ss.Level.Value;
                            }

                            if (!ssSubjDict.ContainsKey(key))
                            {
                                ssSubjDict.Add(key, new List <ssSHSubjectScore>());
                            }

                            ssSubjDict[key].Add(ss1);
                        }

                        if (StudRecDict.ContainsKey(studID))
                        {
                            foreach (string ssid in ssSubjDict.Keys)
                            {
                                // 有相同2個以上
                                if (ssSubjDict[ssid].Count > 1)
                                {
                                    foreach (ssSHSubjectScore ssScore in ssSubjDict[ssid])
                                    {
                                        SubjectNameDb snb = new SubjectNameDb();
                                        snb.學生系統編號 = studID;
                                        snb.科目名稱   = ssScore.ss.Subject;
                                        snb.科目級別   = "";
                                        if (ssScore.ss.Level.HasValue)
                                        {
                                            snb.科目級別 = ssScore.ss.Level.Value.ToString();
                                        }

                                        snb.座號 = "";
                                        if (StudRecDict[studID].SeatNo.HasValue)
                                        {
                                            snb.座號 = StudRecDict[studID].SeatNo.Value.ToString();
                                        }

                                        if (StudRecDict[studID].Class != null)
                                        {
                                            snb.班級 = StudRecDict[studID].Class.Name;
                                        }

                                        snb.學生姓名 = StudRecDict[studID].Name;
                                        snb.學年度  = ssScore.SchoolYear;
                                        snb.學期   = ssScore.Semester;
                                        snb.年級   = ssScore.GradeYear;
                                        snb.學號   = StudRecDict[studID].StudentNumber;

                                        RATList.Add(snb);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Message.Message = ex.Message;
                return(Message);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("(學期科目名稱+科目級別)有重覆紀錄筆數: " + RATList.Count + " 筆");

            Message.Message = sb.ToString();
            // 排序
            var SortedRATRecords = from RATRecord in RATList orderby RATRecord.學號, RATRecord.班級, K12.Data.Int.ParseAllowNull(RATRecord.座號), RATRecord.科目名稱, RATRecord.科目級別, RATRecord.學年度, RATRecord.學期 select RATRecord;

            Message.Data = SortedRATRecords.ToList();

            return(Message);
        }