コード例 #1
0
 private void ShowTariff(TariffOfDixiakongjian info)
 {
     rdTimezoneLimitation.Checked    = true;
     tl_txtFreeMinutes.IntergerValue = info.FreeMinutes;
     tl_chkFeeOf24.Checked           = info.FeeOf24Hour > 0;
     if (tl_chkFeeOf24.Checked)
     {
         tl_txtPerDay.DecimalValue = info.FeeOf24Hour;
     }
     tl_chkFeeOfMax.Checked = info.FeeOfMax > 0;
     if (tl_chkFeeOfMax.Checked)
     {
         tl_txtFeeOfMax.DecimalValue = info.FeeOfMax;
     }
     tl_txtFirstMinutes.IntergerValue    = info.FirstMinutes;
     tl_txtFirstFeeMinutes.IntergerValue = info.FirstFee.Minutes;
     tl_txtFirstFee.DecimalValue         = info.FirstFee.Fee;
     tl_txtRegularMinutes.IntergerValue  = info.RegularFee.Minutes;
     tl_txtRegularFee.DecimalValue       = info.RegularFee.Fee;
     tl_Timezone1.Value = new DateTime(2000, 1, 1, info.LimitationTimezone.Beginning.Hour, info.LimitationTimezone.Beginning.Minute, 0);
     tl_Timezone2.Value = new DateTime(2000, 1, 1, info.LimitationTimezone.Ending.Hour, info.LimitationTimezone.Ending.Minute, 0);
     tl_txtLimitationMinutes.IntergerValue = info.LimitationRegularFee != null ? info.LimitationRegularFee.Minutes : 0;
     tl_txtLimitationFee.DecimalValue      = info.LimitationRegularFee != null ? info.LimitationRegularFee.Fee : 0;
     tl_txtLimitation.DecimalValue         = info.Limitation;
 }
コード例 #2
0
ファイル: TariffTest.cs プロジェクト: darcyg/510-Null
        public void TariffOfDixiakongjian()  //地下空间费率测试
        {
            //停放3个小时内(含三个小时)收取2.5元/半小时,超过3个小时的部分按5元/半小时收取,每天22:00--8:00 2元/半小时,最高限价为10元,24小时限价65元
            TariffOfDixiakongjian tariff = new TariffOfDixiakongjian();

            tariff.FeeOf24Hour          = 65;
            tariff.FreeMinutes          = 15;
            tariff.FirstMinutes         = 180;
            tariff.FirstFee             = new ChargeUnit(30, 2.5m);
            tariff.RegularFee           = new ChargeUnit(30, 5m);
            tariff.LimitationTimezone   = new Ralid.Park.BusinessModel.Model.TimeZone(new TimeEntity(22, 0), new TimeEntity(8, 0));
            tariff.LimitationRegularFee = new ChargeUnit(30, 2);
            tariff.Limitation           = 10;

            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 11, 18, 0)) == 0);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 11, 46, 0)) == 2.5m);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 12, 16, 0)) == 5);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 14, 16, 0)) == 15);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 9, 14, 17, 3)) == 20);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 11, 15, 0)) == 65);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 11, 16, 0), new DateTime(2011, 3, 10, 11, 17, 0)) == 67.5m);

            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 21, 16, 0), new DateTime(2011, 3, 9, 22, 0, 0)) == 5);
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 21, 16, 0), new DateTime(2011, 3, 9, 22, 16, 0)) == 7m);    //跨时段分开计费
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 21, 16, 0), new DateTime(2011, 3, 9, 22, 17, 0)) == 7m);    //跨时段分开计费
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 21, 16, 0), new DateTime(2011, 3, 10, 0, 16, 0)) == 15m);   //跨时段分开计费
            Assert.IsTrue(tariff.CalculateFee(new DateTime(2011, 3, 9, 21, 46, 0), new DateTime(2011, 3, 9, 23, 46, 0)) == 10.5m); //跨时段分开计费

            Assert.IsTrue(tariff.CalculateFee(new DateTime(2013, 2, 4, 20, 26, 0), new DateTime(2013, 2, 5, 8, 16, 0)) == 22.5m);  //跨时段分开计费

            Assert.IsTrue(tariff.CalculateFee(new DateTime(2013, 2, 4, 7, 35, 57), new DateTime(2013, 2, 4, 12, 58, 34)) == 37m);  //跨时段分开计费
        }
コード例 #3
0
        private TariffOfDixiakongjian GetTariffOfTimezoneLimitationFromInput()
        {
            TariffOfDixiakongjian tariff = new TariffOfDixiakongjian();

            tariff.FreeMinutes                  = (byte)tl_txtFreeMinutes.IntergerValue;
            tariff.FeeOf24Hour                  = tl_chkFeeOf24.Checked ? tl_txtPerDay.DecimalValue : 0;
            tariff.FeeOfMax                     = tl_chkFeeOfMax.Checked ? tl_txtFeeOfMax.DecimalValue : 0;
            tariff.FirstMinutes                 = tl_txtFirstMinutes.IntergerValue;
            tariff.FirstFee                     = new ChargeUnit();
            tariff.FirstFee.Minutes             = (short)tl_txtFirstFeeMinutes.IntergerValue;
            tariff.FirstFee.Fee                 = tl_txtFirstFee.DecimalValue;
            tariff.RegularFee                   = new ChargeUnit();
            tariff.RegularFee.Minutes           = (short)tl_txtRegularMinutes.IntergerValue;
            tariff.RegularFee.Fee               = tl_txtRegularFee.DecimalValue;
            tariff.LimitationTimezone           = new BusinessModel.Model.TimeZone();
            tariff.LimitationTimezone.Beginning = new TimeEntity(tl_Timezone1.Value);
            tariff.LimitationTimezone.Ending    = new TimeEntity(tl_Timezone2.Value);
            tariff.LimitationRegularFee         = new ChargeUnit();
            tariff.LimitationRegularFee.Minutes = (short)tl_txtLimitationMinutes.IntergerValue;
            tariff.LimitationRegularFee.Fee     = tl_txtLimitationFee.DecimalValue;
            tariff.Limitation                   = tl_txtLimitation.DecimalValue;
            return(tariff);
        }
コード例 #4
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);
        }