Ejemplo n.º 1
0
 public override Result VisitCase_expression(RateGrammarParser.Case_expressionContext context)
 {
     caseDataObject = new CaseDataObject();
     VisitChildren(context);
     caseDataObjects.Add(caseDataObject.CaseHead, caseDataObject);
     return null;
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
        //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);
        }