机房合作下机之职责链模式
首先需要获得消费时间,由上机时间和下机时间可以获得,这不是难点。而我们计算下机结账的时候使用的职责链模式,理由就是不同分段的时间由不同的消费标准,通过传时间参数,依次处理,并得到最后的结果返回。(前提获取基本数据)
例如在准备时间内,是不收费的,即消费为0:
public class BLL_PrepareHandler : BLL_TimeHandler
{
/// <summary>
/// 返回计算消费金额
/// </summary>
/// <param name="M_Online"></param>
/// <param name="M_BasicData"></param>
public override decimal CountCash(int time, decimal cash)
{
decimal count = 0.0M;//定义一个消费金额
//减去准备时间再计算
time = time - model.BasicData.BdPrepareTime;
//判断消费时间是否大于准备时间(即>0),则移交给下一级
if (time > 0)
{
//消费大于准本时间,转交到上级,BLL_LeastHandler
if (superior != null)
{
count = superior.CountCash(time, cash);
}
}
return count;
}
}
如果上机时间超过准备时间,则将时间减去准备时间,剩下的时间传给至少上机时间,由至少上机时间处理方法处理:
public class BLL_LeastHandler : BLL_TimeHandler
{
/// <summary>
/// 返回计算消费金额
/// </summary>
/// <param name="M_Online"></param>
/// <param name="M_BasicData"></param>
public override decimal CountCash(int time, decimal cash)
{
decimal count = 0.0M;//定义一个消费金额
//判断消费时间是否不大于最少上机时间,否则移交给下一级
if (time <= model.BasicData.BdLeastTime)
{
//消费时间不大于最少上机时间,收取一个递增时间的费用
count =Convert .ToDecimal ( cash /(60/model.BasicData .BdUpTime)) ;
}
else
{
//消费大于最少上机时间,转交到上级,BLL_LeastHandler
if (superior != null)
{
count=superior.CountCash(time, cash);
}
}
return count;
}
}
如果上机时间超过了最少上机时间,则按正常标准来计算消费:
public class BLL_OverTimeHandler : BLL_TimeHandler
{
/// <summary>
/// 返回计算消费金额
/// </summary>
/// <param name="M_Online"></param>
/// <param name="M_BasicData"></param>
public override decimal CountCash(int time, decimal cash)
{
decimal count = 0.0M;//定义一个消费金额
int hour = 0;//定义小时个数
int min = 0;//定义除开小时外剩余分钟
int upNum = 0;//定义剩余分钟数存在的递增时间个数
int least = 0;//定义剩余分钟数小于递增时间
decimal upcash= cash /(60/model.BasicData .BdUpTime);//定义递增时间的消费费用
hour = time / 60;
min = time % 60;
upNum = min / model.BasicData.BdUpTime;
least = min % model.BasicData.BdUpTime;
//判断是否存在小于递增时间的分钟
if (least ==0)
{
//不存在小于递增时间的分钟数
count = Convert.ToDecimal(cash * hour+upcash *upNum );
}
else
{
//存在小于递增时间的分钟数,再加一个递增时间的消费
count = Convert.ToDecimal(cash * hour + upcash * (upNum + 1));
}
return count;
}
}