public override Result VisitCase_expression(RateGrammarParser.Case_expressionContext context) { caseDataObject = new CaseDataObject(); VisitChildren(context); caseDataObjects.Add(caseDataObject.CaseHead, caseDataObject); return null; }
private bool InTimeRegion(CaseDataObject caseDataObject, DateTime startTime, DateTime endTime) { string sStartTime = startTime.ToShortTimeString(); string[] sArray = sStartTime.Split(':'); int sHour = Convert.ToInt32(sArray[0]); string sEndTime = endTime.ToShortTimeString(); string[] eArray = sEndTime.Split(':'); int eHour = Convert.ToInt32(eArray[0]); string leftTime = caseDataObject.CaseCondition.TimeRegion.LeftTime; string middleTime = caseDataObject.CaseCondition.TimeRegion.MiddleTime; string rightTime = caseDataObject.CaseCondition.TimeRegion.RightTime; if (leftTime != null && middleTime == null && rightTime != null) { string[] leftArray = leftTime.Split(':'); int leftHour = Convert.ToInt32(leftArray[0]); string[] rightArray = rightTime.Split(':'); int rightHour = Convert.ToInt32(rightArray[0]); //通过判断差值是否同为正或负数 int sub1 = rightHour - leftHour; int sub2 = eHour - sHour; if (sub1 * sub2 >= 0) { return(true); } } return(false); }
private double CompareToLimit(CaseDataObject caseDataObject, double fee) { foreach (var limit in caseDataObject.LimitDataObjects) { if (limit.LimitCondition.LimitedCase != null) { if (fee > limit.LimitBody.LimitFee) { Console.WriteLine("计算限额:实际结果:{0}元,时段限额:{1}元", limit.LimitBody.LimitFee, limit.LimitBody.LimitFee); fee = limit.LimitBody.LimitFee; } } } return(fee); }
//private double MonthLimitFee() //{ // foreach (var limit in CurrentRule.LimitDataObjects) // { // if (limit.Value.LimitCondition.IsMonthLimit) // { // double fee = limit.Value.LimitBody.LimitFee; // return fee; // } // } // return 0; //} //private double DayLimitFee(CaseDataObject caseDataObject) //{ // if (caseDataObject == null) // { // return 0; // } // foreach (var limit in caseDataObject.LimitDataObjects) // { // if (limit.LimitCondition.IsDayLimit) // { // double fee = limit.LimitBody.LimitFee; // return fee; // } // } // return 0; //} //private double NotToCalculate(DateTime startTime, DateTime endtTime) //{ // foreach (var _case in CurrentRule.CaseDataObjects) // { // CaseDataObject caseDataObject = _case.Value; // foreach (var _limit in caseDataObject.LimitDataObjects) // { // if (_limit.LimitCondition.LimitedCase == null) // { // if (caseDataObject.CaseBody.ApiDataObject == null) // { // NotContinue = true; // double fee = caseDataObject.CaseBody.Vaule; // } // } // } // } // return 0; //} private double CalculateBy(DateTime startTime, DateTime endTime) { CaseDataObject _case = GetMatchCase(startTime, endTime); if (_case == null) { return(0); } int unitTime = _case.CaseBody.ApiDataObject.Parameter; double unitMoney = _case.CaseBody.UnitMoney; int nMinutes = (int)(endTime - startTime).TotalMinutes; double calFee = SplitTime(nMinutes, unitTime, unitMoney); Console.WriteLine("本时段计费:{0}元 (单位时长:{1}分 单位金额:{2}元 停车时长:{3}分钟)", calFee, unitTime, unitMoney, nMinutes); double fee = CompareToLimit(_case, calFee); return(fee); }