private TariffOfGuanZhou GetTariffOfGuanZhouFromInput()
        {
            TariffOfGuanZhou tariff = new TariffOfGuanZhou();

            tariff.FreeMinutes = (byte)this.txtFreeMinutes5.IntergerValue;
            tariff.FeeOf24Hour = this.chkGuangZhouFeeOf24.Checked ? this.txtFeePerDay4.DecimalValue : 0;
            tariff.FeeOfMax    = this.chkGuangZhouFeeOfMax.Checked ? this.txtGuangZhouFeeOfMax.DecimalValue : 0;

            tariff.DayTimezone                       = new TariffTimeZone();
            tariff.DayTimezone.Beginning             = new TimeEntity(this.dtDayBegin.Value);
            tariff.DayTimezone.Ending                = new TimeEntity(this.dtDayEnd.Value);
            tariff.DayTimezone.RegularCharge         = new ChargeUnit();
            tariff.DayTimezone.RegularCharge.Minutes = (short)this.txtDayMinutes.IntergerValue;
            tariff.DayTimezone.RegularCharge.Fee     = this.txtDayFee.DecimalValue;
            if (chkDayLimite.Checked && this.txtDayLimitFee.DecimalValue > 0)
            {
                tariff.DayTimezone.LimiteFee = this.txtDayLimitFee.DecimalValue;
            }

            tariff.NightTimezone                       = new TariffTimeZone();
            tariff.NightTimezone.Beginning             = new TimeEntity(this.dtNightBegin.Value);
            tariff.NightTimezone.Ending                = new TimeEntity(this.dtNightEnd.Value);
            tariff.NightTimezone.RegularCharge         = new ChargeUnit();
            tariff.NightTimezone.RegularCharge.Minutes = (short)this.txtNightMinutes.IntergerValue;
            tariff.NightTimezone.RegularCharge.Fee     = this.txtNightFee.DecimalValue;
            if (chkNightLimite.Checked && this.txtNightLimitFee.DecimalValue > 0)
            {
                tariff.NightTimezone.LimiteFee = this.txtNightLimitFee.DecimalValue;
            }
            return(tariff);
        }
 private void ShowTariff(TariffOfGuanZhou info)
 {
     this.rdTariffOfGuanZhou.Checked    = true;
     this.txtFreeMinutes5.IntergerValue = info.FreeMinutes;
     this.chkGuangZhouFeeOf24.Checked   = info.FeeOf24Hour > 0;
     if (this.chkGuangZhouFeeOf24.Checked)
     {
         this.txtFeePerDay4.DecimalValue = info.FeeOf24Hour;
     }
     this.chkGuangZhouFeeOfMax.Checked = info.FeeOfMax > 0;
     if (info.FeeOfMax > 0)
     {
         this.txtGuangZhouFeeOfMax.DecimalValue = info.FeeOfMax;
     }
     if (info.DayTimezone != null)
     {
         this.dtDayBegin.Value            = new DateTime(2000, 1, 1, info.DayTimezone.Beginning.Hour, info.DayTimezone.Beginning.Minute, 0);
         this.dtDayEnd.Value              = new DateTime(2000, 1, 1, info.DayTimezone.Ending.Hour, info.DayTimezone.Ending.Minute, 0);
         this.txtDayMinutes.IntergerValue = info.DayTimezone.RegularCharge.Minutes;
         this.txtDayFee.DecimalValue      = info.DayTimezone.RegularCharge.Fee;
         if (info.DayTimezone.LimiteFee != null && info.DayTimezone.LimiteFee.Value > 0)
         {
             this.chkDayLimite.Checked        = true;
             this.txtDayLimitFee.DecimalValue = info.DayTimezone.LimiteFee.Value;
         }
         else
         {
             this.chkDayLimite.Checked = false;
             //this.txtDayLimitFee.DecimalValue = 0;
         }
     }
     if (info.NightTimezone != null)
     {
         this.dtNightBegin.Value            = new DateTime(2000, 1, 1, info.NightTimezone.Beginning.Hour, info.NightTimezone.Beginning.Minute, 0);
         this.dtNightEnd.Value              = new DateTime(2000, 1, 1, info.NightTimezone.Ending.Hour, info.NightTimezone.Ending.Minute, 0);
         this.txtNightMinutes.IntergerValue = info.NightTimezone.RegularCharge.Minutes;
         this.txtNightFee.DecimalValue      = info.NightTimezone.RegularCharge.Fee;
         if (info.NightTimezone.LimiteFee != null && info.NightTimezone.LimiteFee.Value > 0)
         {
             this.chkNightLimite.Checked        = true;
             this.txtNightLimitFee.DecimalValue = info.NightTimezone.LimiteFee.Value;
         }
         else
         {
             this.chkNightLimite.Checked = false;
             //this.txtNightLimitFee.DecimalValue = 0;
         }
     }
 }
Example #3
0
        public void TariffOfTaiguhui()
        {
            TariffOfGuanZhou tt = new TariffOfGuanZhou();

            tt.DayTimezone             = new TariffTimeZone(new TimeEntity(8, 0), new TimeEntity(22, 0), new ChargeUnit(30, 5));
            tt.NightTimezone           = new TariffTimeZone(new TimeEntity(22, 0), new TimeEntity(8, 0), new ChargeUnit(30, 10));
            tt.NightTimezone.LimiteFee = 10;
            tt.FreeMinutes             = 15;
            tt.FeeOf24Hour             = 80;

            //2011-8-12 10:45	2011-8-12 8:08	16	0	0	0	0	30
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 8, 12, 8, 8, 0), new DateTime(2011, 8, 12, 10, 45, 0)) == 30);
            //2011-8-12 11:52	2011-8-12 7:59
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 8, 12, 7, 59, 0), new DateTime(2011, 8, 12, 11, 52, 0)) > 0);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 10, 30, 22, 3, 0), new DateTime(2011, 10, 31, 11, 03, 0)) > 0);
        }
Example #4
0
        public void TariffOfGuanZhouTest()
        {
            //广州收费时段,8:00-18:00 每小时收3元,18:00-8:00 每12小时收费10元(注意18点到8点有14个小时,所以在这个时段内超过10小时就收20元)
            TariffOfGuanZhou tt = new TariffOfGuanZhou();

            tt.DayTimezone   = new TariffTimeZone(new TimeEntity(8, 0), new TimeEntity(18, 0), new ChargeUnit(60, 3));
            tt.NightTimezone = new TariffTimeZone(new TimeEntity(18, 0), new TimeEntity(8, 0), new ChargeUnit(720, 10));
            tt.FreeMinutes   = 15;

            //没有每24小时限额
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 12, 16, 0)) == 3);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 18, 0, 0)) == 21);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 18, 1, 0)) == 31);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 8, 0, 0)) == 41);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 8, 2, 0)) == 44);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 11, 16, 0)) == 53);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 11, 18, 0)) == 53);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 18, 0, 0)) == 71);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 18, 1, 0)) == 81);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 8, 0, 0)) == 91);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 8, 2, 0)) == 94);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 11, 16, 0)) == 103);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 11, 18, 0)) == 103);

            tt.FeeOf24Hour = 40;  //每24小时限额40元
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 12, 16, 0)) == 3);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 18, 0, 0)) == 21);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 18, 1, 0)) == 31);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 8, 0, 0)) == 40);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 8, 2, 0)) == 40);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 11, 16, 0)) == 40);
            //从下面三个可以看出每24小时到点后重新开始收
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 11, 18, 0)) == 43);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 12, 16, 0)) == 43);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 12, 17, 0)) == 46);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 18, 0, 0)) == 61);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 18, 1, 0)) == 71);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 8, 0, 0)) == 80);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 8, 2, 0)) == 80);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 11, 16, 0)) == 80);
            Assert.IsTrue(tt.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 11, 11, 18, 0)) == 83);
        }
Example #5
0
        private Ralid.Park.Hardware.H_TariffInfo ConvertTariffInfo(short freeTimeAfterPay, Ralid.Park.BusinessModel.Model.TariffBase tariff)
        {
            H_TariffInfo h_Tariff = new H_TariffInfo();

            h_Tariff.TariffType = ConvertTariffType(tariff.TariffType);
            h_Tariff.CardType   = ConvertTariffCardType(tariff.CardType);
            h_Tariff.CarType    = ConvertTariffCarType(tariff.CarType, tariff.TariffType);
            h_Tariff.T2         = freeTimeAfterPay;

            if (tariff is TariffPerTime)//按次收费
            {
                TariffPerTime t = tariff as TariffPerTime;
                h_Tariff.ChargeType     = H_Tariff_ChargeType.Mode1;
                h_Tariff.ChargeProperty = H_Tariff_ChargeProperty.OverTimeInvalid
                                          | H_Tariff_ChargeProperty.DailyLimitInvalid
                                          | H_Tariff_ChargeProperty.IntervalTop1Invalid
                                          | H_Tariff_ChargeProperty.IntervalTop2Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval1Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval2Invalid
                                          | H_Tariff_ChargeProperty.MaximumAmountInvalid;
                h_Tariff.T1    = t.FreeMinutes;
                h_Tariff.M1[0] = (int)(t.FeePerTime * 100);
            }

            if (tariff is TariffPerDay)//按天收费
            {
                TariffPerDay t = tariff as TariffPerDay;
                h_Tariff.ChargeType     = H_Tariff_ChargeType.Mode2;
                h_Tariff.ChargeProperty = H_Tariff_ChargeProperty.DailyLimitInvalid
                                          | H_Tariff_ChargeProperty.IntervalTop1Invalid
                                          | H_Tariff_ChargeProperty.IntervalTop2Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval1Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval2Invalid;
                h_Tariff.T1    = t.FreeMinutes;
                h_Tariff.M1[0] = (int)(t.FeePerDay * 100);

                if (t.OverDay > 0)
                {
                    h_Tariff.T3 = t.OverDay;
                    h_Tariff.M2 = (int)(t.FeePerOverDay * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.OverTimeInvalid;
                }

                if (t.FeeOfMax > 0)
                {
                    h_Tariff.M7 = (int)(t.FeeOfMax * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.MaximumAmountInvalid;
                }
            }

            if (tariff is TariffOfTurning)//过点收费
            {
                TariffOfTurning t = tariff as TariffOfTurning;
                h_Tariff.ChargeType     = H_Tariff_ChargeType.Mode1;
                h_Tariff.ChargeProperty = H_Tariff_ChargeProperty.DailyLimitInvalid
                                          | H_Tariff_ChargeProperty.IntervalTop1Invalid
                                          | H_Tariff_ChargeProperty.IntervalTop2Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval1Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval2Invalid;
                h_Tariff.T1    = t.FreeMinutes;
                h_Tariff.M1[0] = (int)(t.FirstFee * 100);
                h_Tariff.T3    = (short)(Ralid.GeneralLibrary.BCDConverter.IntToBCD(t.Turning.Hour) * 0x100 + Ralid.GeneralLibrary.BCDConverter.IntToBCD(t.Turning.Minute));
                h_Tariff.M2    = (int)(t.FeeOfTurning * 100);

                if (t.FeeOfMax > 0)
                {
                    h_Tariff.M7 = (int)(t.FeeOfMax * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.MaximumAmountInvalid;
                }
            }

            if (tariff is TariffOfLimitation)//限额收费
            {
                TariffOfLimitation t = tariff as TariffOfLimitation;
                h_Tariff.ChargeType     = H_Tariff_ChargeType.Mode4;
                h_Tariff.ChargeProperty = H_Tariff_ChargeProperty.OverTimeInvalid
                                          | H_Tariff_ChargeProperty.IntervalTop2Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval1Invalid
                                          | H_Tariff_ChargeProperty.Mode3Interval2Invalid;
                h_Tariff.T1 = t.FreeMinutes;
                if (t.FirstCharge != null)
                {
                    h_Tariff.T4    = t.FirstCharge.Minutes;
                    h_Tariff.T5[0] = t.FirstCharge.Minutes;
                    h_Tariff.M1[0] = (int)(t.FirstCharge.Fee * 100);
                }
                h_Tariff.T6[0] = t.RegularCharge.Minutes;
                h_Tariff.M3[0] = (int)(t.RegularCharge.Fee * 100);
                if (t.FeeOf12Hour > 0)
                {
                    h_Tariff.T7 = 12 * 60;//12小时限额
                    h_Tariff.M5 = (int)(t.FeeOf12Hour * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.IntervalTop1Invalid;
                }
                if (t.FeeOf24Hour > 0)
                {
                    h_Tariff.M6 = (int)(t.FeeOf24Hour * 100);//24小时限额
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.DailyLimitInvalid;
                }
                if (t.FeeOfMax > 0)//封顶收费,最高收费
                {
                    h_Tariff.M7 = (int)(t.FeeOfMax * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.MaximumAmountInvalid;
                }
            }

            if (tariff is TariffOfGuanZhou)//日夜差异收费
            {
                TariffOfGuanZhou t = tariff as TariffOfGuanZhou;
                h_Tariff.ChargeType     = H_Tariff_ChargeType.Mode3;
                h_Tariff.ChargeProperty = H_Tariff_ChargeProperty.OverTimeInvalid;
                h_Tariff.T1             = t.FreeMinutes;
                h_Tariff.M6             = (int)(t.FeeOf24Hour * 100);//24小时限额

                //白天时段
                h_Tariff.TimeInterval[0]           = new H_TimeInterval();
                h_Tariff.TimeInterval[0].BeginTime = new H_TimeEntity(t.DayTimezone.Beginning.Hour, t.DayTimezone.Beginning.Minute);
                h_Tariff.TimeInterval[0].EndTime   = new H_TimeEntity(t.DayTimezone.Ending.Hour, t.DayTimezone.Ending.Minute);
                h_Tariff.T6[0] = t.DayTimezone.RegularCharge.Minutes;
                h_Tariff.M3[0] = (int)(t.DayTimezone.RegularCharge.Fee * 100);
                if (t.DayTimezone.LimiteFee.HasValue && t.DayTimezone.LimiteFee.Value > 0)//白天时段有最高限额
                {
                    h_Tariff.M4[0] = (int)(t.DayTimezone.LimiteFee.Value * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.IntervalTop1Invalid;
                }

                //夜间时段
                h_Tariff.TimeInterval[1]           = new H_TimeInterval();
                h_Tariff.TimeInterval[1].BeginTime = new H_TimeEntity(t.NightTimezone.Beginning.Hour, t.NightTimezone.Beginning.Minute);
                h_Tariff.TimeInterval[1].EndTime   = new H_TimeEntity(t.NightTimezone.Ending.Hour, t.NightTimezone.Ending.Minute);
                h_Tariff.T6[1] = t.NightTimezone.RegularCharge.Minutes;
                h_Tariff.M3[1] = (int)(t.NightTimezone.RegularCharge.Fee * 100);
                if (t.NightTimezone.LimiteFee.HasValue && t.NightTimezone.LimiteFee.Value > 0)//夜间有最高限额
                {
                    h_Tariff.M4[1] = (int)(t.NightTimezone.LimiteFee.Value * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.IntervalTop2Invalid;
                }

                if (t.FeeOf24Hour > 0)
                {
                    h_Tariff.M6 = (int)(t.FeeOf24Hour * 100);//24小时限额
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.DailyLimitInvalid;
                }

                if (t.FeeOfMax > 0)//封顶收费,最高收费
                {
                    h_Tariff.M7 = (int)(t.FeeOfMax * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.MaximumAmountInvalid;
                }
            }

            if (tariff is TariffOfDixiakongjian)//时段限额收费
            {
                TariffOfDixiakongjian t = tariff as TariffOfDixiakongjian;
                h_Tariff.ChargeType     = H_Tariff_ChargeType.Mode3;
                h_Tariff.ChargeProperty = H_Tariff_ChargeProperty.OverTimeInvalid
                                          | H_Tariff_ChargeProperty.IntervalTop1Invalid;
                h_Tariff.T1 = t.FreeMinutes;
                h_Tariff.M6 = (int)(t.FeeOf24Hour * 100);//24小时限额

                //正常时段
                h_Tariff.TimeInterval[0]           = new H_TimeInterval();
                h_Tariff.TimeInterval[0].BeginTime = new H_TimeEntity(t.LimitationTimezone.Ending.Hour, t.LimitationTimezone.Ending.Minute);       //以限价时段结束时间为开始时间
                h_Tariff.TimeInterval[0].EndTime   = new H_TimeEntity(t.LimitationTimezone.Beginning.Hour, t.LimitationTimezone.Beginning.Minute); //以限价时段开始时间为结束时间
                h_Tariff.T4    = (short)t.FirstMinutes;
                h_Tariff.T5[0] = t.FirstFee.Minutes;
                h_Tariff.M1[0] = (int)(t.FirstFee.Fee * 100);
                h_Tariff.T6[0] = t.RegularFee.Minutes;
                h_Tariff.M3[0] = (int)(t.RegularFee.Fee * 100);

                //限价时段
                h_Tariff.TimeInterval[1]           = new H_TimeInterval();
                h_Tariff.TimeInterval[1].BeginTime = new H_TimeEntity(t.LimitationTimezone.Beginning.Hour, t.LimitationTimezone.Beginning.Minute);
                h_Tariff.TimeInterval[1].EndTime   = new H_TimeEntity(t.LimitationTimezone.Ending.Hour, t.LimitationTimezone.Ending.Minute);
                h_Tariff.T6[1] = t.LimitationRegularFee.Minutes;
                h_Tariff.M3[1] = (int)(t.LimitationRegularFee.Fee * 100);
                h_Tariff.M4[1] = (int)(t.Limitation * 100);

                if (t.FeeOf24Hour > 0)
                {
                    h_Tariff.M6 = (int)(t.FeeOf24Hour * 100);//24小时限额
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.DailyLimitInvalid;
                }
                if (t.FeeOfMax > 0)//封顶收费,最高收费
                {
                    h_Tariff.M7 = (int)(t.FeeOfMax * 100);
                }
                else
                {
                    h_Tariff.ChargeProperty |= H_Tariff_ChargeProperty.MaximumAmountInvalid;
                }
            }

            return(h_Tariff);
        }
Example #6
0
        public void TariffOfGuanZhouDiscountTest()
        {
            //太古汇收费时段入场免费30分钟,8:00-22:00 每15分钟收4元,22:00-8:00 每15分钟收1元 最高限价10元,24小时最高收费128元
            TariffOfGuanZhou tt = new TariffOfGuanZhou();

            tt.FreeMinutes             = 30;
            tt.DayTimezone             = new TariffTimeZone(new TimeEntity(8, 0), new TimeEntity(22, 0), new ChargeUnit(15, 4));
            tt.NightTimezone           = new TariffTimeZone(new TimeEntity(22, 0), new TimeEntity(8, 0), new ChargeUnit(15, 1));
            tt.NightTimezone.LimiteFee = 10;
            tt.FeeOf24Hour             = 128;

            int curHour = 0;

            //第一条为费用,第二条为优惠金额,第三条为使用优惠时数
            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 15, 12, 04), new DateTime(2014, 9, 12, 18, 23, 03)) == 180);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 15, 12, 04), new DateTime(2014, 9, 12, 18, 23, 03), 3, out curHour) == 48);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 15, 12, 04), new DateTime(2014, 9, 12, 15, 15, 53)) == 132);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 15, 12, 04), new DateTime(2014, 9, 12, 15, 15, 53), 1, out curHour) == 4);
            Assert.IsTrue(curHour == 1);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 19, 15, 48, 47), new DateTime(2014, 9, 19, 17, 03, 12)) == 20);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 19, 15, 48, 47), new DateTime(2014, 9, 19, 17, 03, 12), 1, out curHour) == 16);
            Assert.IsTrue(curHour == 1);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 11, 10, 07, 00)) == 46);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 11, 10, 07, 00), 3, out curHour) == 36);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 11, 12, 55, 16)) == 84);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 11, 12, 55, 16), 3, out curHour) == 48);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 11, 09, 50, 08)) == 36);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 11, 09, 50, 08), 3, out curHour) == 36);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 06, 02, 42)) == 128);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 06, 02, 42), 3, out curHour) == 0);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 12, 04, 29)) == 200);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 12, 04, 29), 3, out curHour) == 48);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 06, 10, 06)) == 128);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 06, 10, 06), 3, out curHour) == 0);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 03, 10, 12)) == 128);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 07, 04, 27), new DateTime(2014, 9, 12, 03, 10, 12), 3, out curHour) == 0);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 11, 12, 07, 48)) == 78);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 11, 12, 07, 48), 3, out curHour) == 48);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 09, 08, 54)) == 158);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 09, 08, 54), 3, out curHour) == 22);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 09, 08, 54)) == 158);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 09, 08, 54), 2, out curHour) == 20);
            Assert.IsTrue(curHour == 2);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 12, 10, 14)) == 206);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 12, 10, 14), 3, out curHour) == 48);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 03, 09, 25)) == 128);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 12, 03, 09, 25), 3, out curHour) == 0);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 05, 06, 08)) == 1285);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 05, 06, 08), 3, out curHour) == 5);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 08, 06, 08)) == 1294);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 08, 06, 08), 3, out curHour) == 10);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 05, 06, 08)) == 1285);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 05, 06, 08), 27, out curHour) == 133);
            Assert.IsTrue(curHour == 27);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 08, 06, 08)) == 1294);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 08, 06, 08), 27, out curHour) == 138);
            Assert.IsTrue(curHour == 27);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 21, 10, 00), new DateTime(2014, 9, 11, 22, 09, 00)) == 17);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 21, 10, 00), new DateTime(2014, 9, 11, 22, 09, 00), 1, out curHour) == 17);
            Assert.IsTrue(curHour == 1);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 21, 28, 00), new DateTime(2014, 9, 11, 22, 27, 00)) == 14);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 21, 28, 00), new DateTime(2014, 9, 11, 22, 27, 00), 1, out curHour) == 14);
            Assert.IsTrue(curHour == 1);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 18, 10, 00), new DateTime(2014, 9, 11, 22, 11, 00)) == 65);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 18, 10, 00), new DateTime(2014, 9, 11, 22, 11, 00), 3, out curHour) == 49);
            Assert.IsTrue(curHour == 3);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 21, 28, 00), new DateTime(2014, 9, 11, 22, 29, 00)) == 14);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 21, 28, 00), new DateTime(2014, 9, 11, 22, 29, 00), 1, out curHour) == 14);
            Assert.IsTrue(curHour == 1);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 05, 06, 08)) == 1285);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 05, 06, 08), 23, out curHour) == 123);
            Assert.IsTrue(curHour == 23);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 08, 06, 08)) == 1294);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 11, 04, 05, 08), new DateTime(2014, 9, 21, 08, 06, 08), 23, out curHour) == 132);
            Assert.IsTrue(curHour == 23);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 19, 21, 34, 35), new DateTime(2014, 9, 20, 19, 35, 01)) == 128);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 19, 21, 34, 35), new DateTime(2014, 9, 20, 19, 35, 01), 20, out curHour) == 120);
            Assert.IsTrue(curHour == 20);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 9, 18, 07, 32, 10), new DateTime(2014, 9, 19, 08, 33, 06)) == 142);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 9, 18, 07, 32, 10), new DateTime(2014, 9, 19, 08, 33, 06), 20, out curHour) == 132);
            Assert.IsTrue(curHour == 20);

            Assert.IsTrue(tt.CalculateFee(new DateTime(2014, 11, 05, 21, 35, 51), new DateTime(2014, 11, 06, 14, 56, 48)) == 128);
            Assert.IsTrue(tt.CalculateDiscountFee(new DateTime(2014, 11, 05, 21, 35, 51), new DateTime(2014, 11, 06, 14, 56, 48), 3, out curHour) == 46);
            Assert.IsTrue(curHour == 3);
        }