public static IScoreRule Get(string scoreRuleName)
        {
            IScoreRule result = null;

            if (scoreRuleName == "一般週統計計算公式")
            {
                result = new GeneralScoreRule();
            }
            else // 資源回收週統計計算公式
            {
                result = new RecycleScoreRule();
            }

            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// 計算本區之週成績。
        /// 1. 本週每天的總扣分數(已套用每日扣分上限)之加總  2. 再套用本區域之週統計計算公式
        /// </summary>
        /// <returns></returns>
        public decimal CalculateWeeklyScore()
        {
            IScoreRule scoreRule = ScoreRuleFactory.Get(this.ScoreRuleName);

            scoreRule.DailyMaxScore = this.DailyMaxScore;

            // 計算本 週總扣分數
            decimal totalDeduction = 0;
            decimal totalScore     = 0;

            foreach (string occurDate in this.dicDailyScores.Keys)
            {
                totalDeduction += this.dicDailyScores[occurDate].CalculateScore(scoreRule.DailyMaxScore);
            }

            // 套用計算公式
            totalScore = scoreRule.Calculate(this.DailyMaxScore, this.WeeklyBaseScore, totalDeduction);

            return(totalScore);
        }
Esempio n. 3
0
 private void Add(string ruleName, IScoreRule scoreRule)
 {
     scoreRules.Add(ruleName, scoreRule);
 }