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; }
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); //跨时段分开计费 }
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); }
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); }