示例#1
0
        /// <summary>
        /// 判斷是否連續八周前3。
        /// 如果本週沒有前3,則次數歸零。
        /// 如果本週有前三:
        ///    a. 如果上週沒有資料,則上週次數視為 0
        ///    b. 如果上週的 needReset 欄位為 true,表示上周已經完成,所以上週次數視為 0
        ///    c. 否則:
        ///         1. 如果上週已經連七週三,則本週會連八週達成,所以次數為8,且 needReset 欄位為 true。
        ///         2.否則,就上週的次數 + 1
        /// </summary>
        /// <param name="wr"></param>
        private void checkIfTop3In8Weeks(UDT.WeeklyRank wr)
        {
            // 如果本週沒有前3
            if (wr.Rank > 3)
            {
                wr.Top3InARow = 0;
            }
            else
            {
                // 找出此班級上週的排名
                UDT.WeeklyRank wrLast = null;

                if (_dicLastWeeklyRankByClassID.ContainsKey("" + wr.RefClassID))
                {
                    wrLast = this._dicLastWeeklyRankByClassID["" + wr.RefClassID];
                }

                // 如果上週沒有資料,或上週的 needReset 欄位為 true,則上週次數視為 0
                if (wrLast == null || wrLast.NeedReset)
                {
                    wr.Top3InARow = 1;
                    return;
                }

                wr.Top3InARow = wrLast.Top3InARow + 1;

                // 如果上週已經連四週二,則本週會連五週達成,所以次數為5,且 needReset 欄位為 true。
                if (wrLast.Top3InARow >= 7)
                {
                    wr.NeedReset = true;
                }
            }
        }
示例#2
0
        public void Execute()
        {
            List <UDT.WeeklyRank> listInsertData = new List <UDT.WeeklyRank>();

            // 1.對於每個年級
            foreach (int grade in _dicAllClassByGrade.Keys)
            {
                List <UDT.WeeklyStats> weeklyStats = new List <UDT.WeeklyStats>();

                // 建立分數名次清單
                List <decimal> listScoreRank = new List <decimal>();

                // 2.找出該年級所有班級
                foreach (string classID in _dicAllClassByGrade[grade])
                {
                    // 3.找出班級週統計成績
                    weeklyStats.Add(this._dicWeeklyStatsByClassID[classID]);             // 該年級所有統計資
                    listScoreRank.Add(this._dicWeeklyStatsByClassID[classID].WeekTotal); // 記錄該年級所有分數
                }

                // 4.計算排名
                // 4.0 排序分數名次清單
                listScoreRank.Sort(new ScoreSort());

                foreach (UDT.WeeklyStats ws in weeklyStats)
                {
                    // 找出分數所對應的排名
                    int rank = listScoreRank.IndexOf(ws.WeekTotal) + 1;
                    // 4.1 建立排名物件
                    UDT.WeeklyRank wr = this.createRankObject(ws, rank, grade);

                    // 5. 判斷是否前5週連2
                    checkIfTop2In5Weeks(wr);

                    // 6. 判斷是否連8週前三
                    checkIfTop3In8Weeks(wr);

                    listInsertData.Add(wr);
                }
            }

            // 0.刪除學年度、學期、週次的週排行資料
            List <UDT.WeeklyRank> listRank = this._access.Select <UDT.WeeklyRank>(string.Format("school_year = {0} AND semester = {1} AND week_number = {2}", this._schoolYear, this._semester, this._weekNumber));

            this._access.DeletedValues(listRank);
            // 5.寫入資料庫
            this._access.InsertValues(listInsertData);
        }
示例#3
0
        private UDT.WeeklyRank createRankObject(UDT.WeeklyStats ws, int rank, int grade)
        {
            UDT.WeeklyRank wr = new UDT.WeeklyRank();
            wr.RefWeeklyStatsID = int.Parse(ws.UID);
            wr.SchoolYear       = int.Parse(this._schoolYear);
            wr.Semester         = int.Parse(this._semester);
            wr.RefClassID       = ws.RefClassID;
            wr.GradeYear        = grade;
            wr.WeekTotal        = ws.WeekTotal;
            wr.WeekNumber       = this._weekNumber;
            wr.CreateTime       = DateTime.Now;
            wr.CreatedBy        = this._userAccount;
            wr.PublicTime       = DateTime.Now;
            wr.PublicBy         = this._userAccount;
            wr.Rank             = rank;

            return(wr);
        }