public static IScoreRule Get(string scoreRuleName) { IScoreRule result = null; if (scoreRuleName == "一般週統計計算公式") { result = new GeneralScoreRule(); } else // 資源回收週統計計算公式 { result = new RecycleScoreRule(); } return(result); }
/// <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); }
private void Add(string ruleName, IScoreRule scoreRule) { scoreRules.Add(ruleName, scoreRule); }