public override decimal Charge(CR_ORDER_RECORD_DETAILS OrderDetails, int time = 0) { Dictionary <DateTime, DateTime> dictionary = new Dictionary <DateTime, DateTime>(); if (OrderDetails.OUT_TIME.Subtract(OrderDetails.IN_TIME).TotalMinutes <= this.freeTime) { return(0M); } int num2 = Convert.ToDateTime(OrderDetails.OUT_TIME.ToShortDateString()).Subtract(Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString())).Days + 1; decimal num3 = 0M; for (int i = 0; i < num2; i++) { DateTime key = (i == 0) ? OrderDetails.IN_TIME : Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString()).AddDays((double)i); DateTime time2 = Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString()).AddDays((double)(i + 1)).AddSeconds(-1.0); time2 = (time2 > OrderDetails.OUT_TIME) ? OrderDetails.OUT_TIME : time2; dictionary.Add(key, time2); } foreach (KeyValuePair <DateTime, DateTime> pair in dictionary) { TimeSpan span2 = pair.Value - pair.Key; num3 += this.GetMoney(span2.TotalMinutes); } return(num3); }
public decimal GetChargeB(CR_ORDER_RECORD_DETAILS OrderDetails) { decimal payMoney = 0M; TimeSpan span = (TimeSpan)(OrderDetails.OUT_TIME - OrderDetails.IN_TIME); if (span.TotalMinutes <= this.freeTime) { OrderDetails.DUE_MONEY = 0M; return(payMoney); } decimal oneDayTotalMoney = 0M; if (this.GetExceed24HourMoney(OrderDetails) > 0M) { oneDayTotalMoney = this.GetOneDayTotalMoney(OrderDetails) + this.payMoney; } else { oneDayTotalMoney = this.GetOneDayTotalMoney(OrderDetails); } if (oneDayTotalMoney >= this.dailyCapMoney) { payMoney = 0M; } else if ((this.dailyCapMoney - oneDayTotalMoney) >= this.payMoney) { payMoney = this.payMoney; } else { payMoney = this.dailyCapMoney - oneDayTotalMoney; } return(payMoney + (this.payMoney * span.Days)); }
public decimal GetChargeA(CR_ORDER_RECORD_DETAILS OrderDetails) { decimal payMoney = 0M; TimeSpan span = (TimeSpan)(OrderDetails.OUT_TIME - OrderDetails.IN_TIME); int days = Convert.ToDateTime(OrderDetails.OUT_TIME.ToShortDateString()).Subtract(Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString())).Days; if (span.TotalMinutes <= this.freeTime) { return(0M); } decimal oneDayTotalMoney = 0M; if (this.GetMultipleMoney(OrderDetails) > 0M) { oneDayTotalMoney = this.GetOneDayTotalMoney(OrderDetails) + this.payMoney; } else { oneDayTotalMoney = this.GetOneDayTotalMoney(OrderDetails); } if (oneDayTotalMoney >= this.dailyCapMoney) { payMoney = 0M; } else if ((this.dailyCapMoney - oneDayTotalMoney) >= this.payMoney) { payMoney = this.payMoney; } else { payMoney = this.dailyCapMoney - oneDayTotalMoney; } return(payMoney + (this.payMoney * days)); }
private void btnRelease_Click(object sender, EventArgs e) { CR_ORDER_RECORD_DETAILS record = new CR_ORDER_RECORD_DETAILS(); record.IN_TIME = DateTime.Parse(dtInTime.Text.Trim()); record.OUT_TIME = DateTime.Parse(dtOutTime.Text.Trim()); var code = cmbCharge.SelectedValue.ToString(); var temp = EngineContext.Current.Resolve <IPBA_CHARGE_INFO>(); var model = temp.GetModel(code); var voiceTemp = EngineContext.Current.Resolve <IChargeStandard>(model.CHARGE_PARAM_CODE); voiceTemp.InitChargeStandard(code); lblMoney.Text = voiceTemp.Charge(record).ToString(); }
public override decimal Charge(CR_ORDER_RECORD_DETAILS OrderDetails, int time = 0) { try { switch (this.cumulativeWay) { case "A": return(this.GetChargeA(OrderDetails)); case "B": return(this.GetChargeB(OrderDetails)); case "C": return(this.GetChargeC(OrderDetails)); } return(0M); } catch { return(0M); } }
public decimal GetChargeC(CR_ORDER_RECORD_DETAILS OrderDetails) { decimal num = 0M; TimeSpan span = (TimeSpan)(OrderDetails.OUT_TIME - OrderDetails.IN_TIME); if (span.TotalMinutes <= this.freeTime) { OrderDetails.DUE_MONEY = 0M; return(num); } decimal nowDayTotalMoney = EngineContext.Current.Resolve <ICR_INOUT_RECODE>().GetNowDayTotalMoney(OrderDetails); if (nowDayTotalMoney >= this.dailyCapMoney) { OrderDetails.DUE_MONEY = 0M; return(num); } if ((this.dailyCapMoney - nowDayTotalMoney) >= this.payMoney) { return(this.payMoney); } return(this.dailyCapMoney - nowDayTotalMoney); }
public override decimal Charge(CR_ORDER_RECORD_DETAILS OrderDetails, int time = 0) { Dictionary <DateTime, DateTime> dictionary = new Dictionary <DateTime, DateTime>(); if (OrderDetails.OUT_TIME.Subtract(OrderDetails.IN_TIME).TotalMinutes <= this.freeTime) { return(0M); } int num2 = Convert.ToDateTime(OrderDetails.OUT_TIME.ToShortDateString()).Subtract(Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString())).Days + 1; for (int i = 0; i < num2; i++) { DateTime key = (i == 0) ? OrderDetails.IN_TIME : Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString()).AddDays((double)i); DateTime time2 = Convert.ToDateTime(OrderDetails.IN_TIME.ToShortDateString()).AddDays((double)(i + 1)).AddSeconds(-1.0); time2 = (time2 > OrderDetails.OUT_TIME) ? OrderDetails.OUT_TIME : time2; dictionary.Add(key, time2); } decimal totalMoney = 0M; foreach (KeyValuePair <DateTime, DateTime> pair in dictionary) { TimeSpan span2 = pair.Value - pair.Key; double totalMinutes = span2.TotalMinutes; if (this.dailyCapTime > 0) { totalMinutes = (totalMinutes > this.dailyCapTime) ? ((double)this.dailyCapTime) : totalMinutes; } DateTime time3 = pair.Key.Date.AddHours((double)this.dayStartTime.Hour).AddMinutes((double)this.dayStartTime.Minute).AddSeconds((double)this.dayStartTime.Second); DateTime time4 = pair.Key.Date.AddHours((double)this.nightStartTime.Hour).AddMinutes((double)this.nightStartTime.Minute).AddSeconds((double)this.nightStartTime.Second); if ((pair.Key >= time3) && (pair.Key < time4)) { totalMinutes -= this.dayFirstBillingTime; totalMoney += this.dayFirstChargeMoney; if (totalMinutes > 0.0) { if (pair.Value <= time4) { this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.dayIntervalBillingTime, this.dayIntervalCharge); } else if (this.nightChargeType == 1) { double num6 = time4.Subtract(pair.Key).TotalMinutes; this.CaculateIntervalBilling(num6 - this.dayFirstBillingTime, ref totalMoney, this.dayIntervalBillingTime, this.dayIntervalCharge); totalMinutes -= num6 - this.dayFirstBillingTime; totalMinutes -= this.nightFirstBillingTine; totalMoney += this.nightFirstCharge; if (totalMinutes > 0.0) { this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.nightIntervalBillingTime, this.nightIntervalCharge); } } else { totalMoney += this.nightChargePerTime; } } } else if (pair.Key < time3) { TimeSpan span3; if (this.nightChargeType == 1) { totalMoney += this.nightFirstCharge; totalMinutes -= this.nightFirstBillingTine; if (totalMinutes > 0.0) { if (pair.Value < time4) { if (pair.Value <= time3) { this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.nightIntervalBillingTime, this.nightIntervalCharge); } else { span3 = time3.Subtract(pair.Key); this.CaculateIntervalBilling(span3.TotalMinutes - this.nightFirstBillingTine, ref totalMoney, this.nightIntervalBillingTime, this.nightIntervalCharge); totalMinutes -= span3.TotalMinutes - this.nightFirstBillingTine; totalMinutes -= this.dayFirstBillingTime; totalMoney += this.dayFirstChargeMoney; if (totalMinutes > 0.0) { this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.dayIntervalBillingTime, this.dayIntervalCharge); } } } else { span3 = time3.Subtract(pair.Key); this.CaculateIntervalBilling(span3.TotalMinutes - this.nightFirstBillingTine, ref totalMoney, this.nightIntervalBillingTime, this.nightIntervalCharge); totalMinutes -= span3.TotalMinutes - this.nightFirstBillingTine; totalMinutes -= this.dayFirstBillingTime; totalMoney += this.dayFirstChargeMoney; span3 = time4.Subtract(time3); this.CaculateIntervalBilling(span3.TotalMinutes - this.dayFirstBillingTime, ref totalMoney, this.dayIntervalBillingTime, this.dayIntervalCharge); totalMinutes -= span3.TotalMinutes - this.dayFirstBillingTime; this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.nightIntervalBillingTime, this.nightIntervalCharge); } } } else { totalMoney += this.nightChargePerTime; if (totalMinutes > 0.0) { if (pair.Value < time4) { if (pair.Value > time3) { span3 = time3.Subtract(pair.Key); if (span3.TotalMinutes > 0.0) { totalMinutes -= span3.TotalMinutes; totalMinutes -= this.dayFirstBillingTime; totalMoney += this.dayFirstChargeMoney; if (totalMinutes > 0.0) { this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.dayIntervalBillingTime, this.dayIntervalCharge); } } } } else if (pair.Value > time3) { totalMoney += this.dayFirstChargeMoney; TimeSpan span4 = time4.Subtract(time3); this.CaculateIntervalBilling(span4.TotalMinutes - this.dayFirstBillingTime, ref totalMoney, this.dayIntervalBillingTime, this.dayIntervalCharge); totalMoney += this.nightChargePerTime; } } } } else if (this.nightChargeType == 1) { totalMinutes -= this.nightFirstBillingTine; totalMoney += this.nightFirstCharge; if (totalMinutes > 0.0) { this.CaculateIntervalBilling(totalMinutes, ref totalMoney, this.nightIntervalBillingTime, this.nightIntervalCharge); } } else { totalMoney += this.nightChargePerTime; } if (this.dailyCapMoney > 0) { totalMoney = (totalMoney > this.dailyCapMoney) ? this.dailyCapMoney : totalMoney; decimal oneDayTotalMoney = this.GetOneDayTotalMoney(OrderDetails); if ((oneDayTotalMoney + totalMoney) > this.dailyCapMoney) { totalMoney = this.dailyCapMoney - oneDayTotalMoney; } } } return(totalMoney); }
public decimal GetOneDayTotalMoney(CR_ORDER_RECORD_DETAILS record) { return(EngineContext.Current.Resolve <ICR_INOUT_RECODE>().GetOneDayTotalMoney(record)); }
public override decimal Charge(CR_ORDER_RECORD_DETAILS OrderDetails, int time = 0) { base.ListChargeInfo.Clear(); this.VEHICLE_NO = OrderDetails.VEHICLE_NO; base.ListChargeInfo.Add(VEHICLE_NO); OrderDetails.IN_TIME = OrderDetails.IN_TIME.AddMinutes(time); Dictionary <DateTime, DateTime> dicSubsection = new Dictionary <DateTime, DateTime>(); //减?去¨£¤免a费¤?时o?à间? double totalMin = (OrderDetails.OUT_TIME - OrderDetails.IN_TIME).TotalMinutes - freeTime; int totalTime = Convert.ToInt32((OrderDetails.OUT_TIME - OrderDetails.IN_TIME).TotalMinutes); base.ListChargeInfo.Add("入¨?场?时o?à间?:" + OrderDetails.IN_TIME.ToString("yyyy-MM-dd HH:mm:ss") + "出?场?时o?à间?:" + OrderDetails.OUT_TIME.ToString("yyyy-MM-dd HH:mm:ss") + ",总á¨1时o?à长?è" + (totalTime < 0 ? 0 : totalTime) + "分¤?钟¨?"); if (totalMin <= 0) { return(0); } DateTime IN_TIME = OrderDetails.IN_TIME; DateTime OUT_TIME = OrderDetails.OUT_TIME; if (!freeOvertimeBiling) { IN_TIME = IN_TIME.AddMinutes(freeTime); base.ListChargeInfo.Add("减?免a免a费¤?停a?ê车|ì时o?à长?è" + freeTime + "分¤?钟¨?"); } if ("A" == cumulativeWay) { //总á¨1段?数oy int totalDay = Convert.ToDateTime(OUT_TIME.ToShortDateString()).Subtract(Convert.ToDateTime(IN_TIME.ToShortDateString())).Days + 1; for (int i = 0; i < totalDay; i++) { DateTime dtStart = i == 0 ? IN_TIME : Convert.ToDateTime(IN_TIME.ToShortDateString()).AddDays(i); DateTime dtEnd = Convert.ToDateTime(IN_TIME.ToShortDateString()).AddDays(i + 1).AddSeconds(-1); dtEnd = dtEnd > OUT_TIME ? OUT_TIME : dtEnd; dicSubsection.Add(dtStart, dtEnd); } } else { //总á¨1段?数oy double totalDay = OUT_TIME.Subtract(Convert.ToDateTime(IN_TIME)).TotalHours / 24; for (double i = 0; i < totalDay; i++) { DateTime dtStart = i == 0 ? IN_TIME : Convert.ToDateTime(IN_TIME).AddHours(24 * i); DateTime dtEnd = Convert.ToDateTime(IN_TIME).AddHours(24 * (i + 1)).AddSeconds(-1); dtEnd = dtEnd > OUT_TIME ? OUT_TIME : dtEnd; dicSubsection.Add(dtStart, dtEnd); } } //总á¨1金e额? decimal totalMoney = 0; bool isFirst = true; //按???天?¨?遍à¨|历¤¨2 foreach (var temp in dicSubsection) { TimeSpan ts = temp.Value - temp.Key; //总á¨1分¤?钟¨?数oy double totalMinDay = ts.TotalMinutes; if (totalMinDay > 0) { totalMoney += GetMoney(temp.Key, temp.Value, isFirst); isFirst = false; } } base.ListChargeInfo.Add("本à?次??实o|ì缴¨|总á¨1金e额?" + totalMoney + "元a"); return(totalMoney); }
/// <summary> /// 计?费¤? /// </summary> /// <param name="OrderDetails"></param> /// <param name="freeTime"></param> /// <returns></returns> public virtual decimal Charge(CR_ORDER_RECORD_DETAILS OrderDetails, int freeTime = 0) { return(5); }
public override void Process(ProcessRecord recordInfo) { recordInfo.CheckPointResult = true; if (recordInfo.CARD_TYPE != enumCardType.CAR_TYPE_MONTH || recordInfo.IsMonthToTemp) { var orderBll = EngineContext.Current.Resolve <ICR_ORDER_RECORD_INFO>(); var orderDetailsBll = EngineContext.Current.Resolve <ICR_ORDER_RECORD_DETAILS>(); //如果是贵宾车,直接放行 if (recordInfo.authenticationType == enumAuthenticationType.SPECIAL_TYPE_VIP) { return; } /////////////////当前区域//////////////// string Leave = recordInfo.INOUT_RECODE.CURR_PARTITION_CODE; string Enter = base.getCurrChannel(recordInfo) == null ? string.Empty : base.getCurrChannel(recordInfo).Enter; var Order = orderBll.GetCurrentPartitionOrder(recordInfo.INOUT_RECODE); ////////////////////////////大车场入小车场//////////////////////// if (!string.IsNullOrEmpty(Leave)) { if (null != Order) { recordInfo.Order = Order; ////////////////////已经中央缴费/////////////////// if (DateTime.Now < Order.FREE_TIME && Order.IS_PAY) { recordInfo.IsCenterPay = true; recordInfo.CheckPointResult = true; /////////////////////如果是中央缴费则播报中央已缴费语音////////////////////////// if (recordInfo.CHANNEL_TYPE == enumChannelType.centerPayment) { var voiceBllTemp = EngineContext.Current.Resolve <IPBA_VOICE_TEMPLATE>(); List <string> strArr = new List <string>(); PBA_VOICE_TEMPLATE voiceModel = voiceBllTemp.GetModelByType((int)enumTemplateType.MODEL_TYPE_VOICE, (int)enumSpeechType.CenterPayed); strArr.Add(CommHelper.VoiceContent(voiceModel.CUSTOM_MODEL, recordInfo)); CommHelper.Sound(recordInfo, strArr.ToArray()); recordInfo.CheckPointResult = false; new G5MessageBox("您已经缴费,请在规定时间内出场").ShowDialog(); } else if (recordInfo.CHANNEL_TYPE == enumChannelType.chn_out) { var temp = EngineContext.Current.Resolve <ICR_PREFERENTIAL_RECORD>(); var discounts = temp.GetListByInOutRecordCode(recordInfo.INOUT_RECODE.ID); decimal preMoney = 0; decimal totalMoney = 0; foreach (var discount in discounts) { preMoney += discount.PREFERENTIAL_MONEY; totalMoney = discount.CHARGE_MONEY; } recordInfo.INOUT_RECODE.PRE_MONEY = preMoney; recordInfo.INOUT_RECODE.DUE_MONEY = totalMoney; recordInfo.INOUT_RECODE.CHARGE_MONEY = totalMoney - preMoney; } } else { CR_ORDER_RECORD_DETAILS orderDetails = new CR_ORDER_RECORD_DETAILS(); var OrderDetails = orderDetailsBll.GetOrderDetailsInfo(recordInfo); if (null != OrderDetails) { orderDetails = OrderDetails; orderDetails.OUT_TIME = DateTime.Now; orderDetails.OUT_CHANNEL_CODE = recordInfo.CHN_CODE; recordInfo.INOUT_RECODE.IN_TIME = OrderDetails.IN_TIME; recordInfo.INOUT_RECODE.OUT_TIME = OrderDetails.OUT_TIME; recordInfo.CheckPointResult = recordInfo.CheckPointResult && orderDetailsBll.Update(orderDetails); } else { orderDetails.ID = Guid.NewGuid().ToString("N"); orderDetails.ORDER_CODE = Order.ID; orderDetails.IN_CHANNEL_CODE = Order.IN_CHANNEL_CODE; orderDetails.OUT_CHANNEL_CODE = recordInfo.CHN_CODE; orderDetails.IN_TIME = recordInfo.INOUT_RECODE.IN_TIME; orderDetails.OUT_TIME = DateTime.Now; orderDetails.VEHICLE_NO = recordInfo.INOUT_RECODE.VEHICLE_NO; recordInfo.CheckPointResult = recordInfo.CheckPointResult && orderDetailsBll.Add(orderDetails); } } } } if (!string.IsNullOrEmpty(Enter)) { if (null == Order) { CR_ORDER_RECORD_INFO orderTemp = new CR_ORDER_RECORD_INFO(); orderTemp.ID = Guid.NewGuid().ToString("N"); orderTemp.INOUT_RECODE_ID = recordInfo.INOUT_RECODE.ID; orderTemp.PARTITION_CODE = recordInfo.PARTITION_CODE; orderTemp.IN_CHANNEL_CODE = recordInfo.CHN_CODE; orderTemp.TOTAL_TIME = 0; orderTemp.VEHICLE_NO = recordInfo.INOUT_RECODE.VEHICLE_NO; orderTemp.DUE_MONEY = 0; orderTemp.PER_MONEY = 0; orderTemp.PAY_PLATFORM = 0; orderTemp.PAY_TYPE = 0; orderTemp.IS_PAY = false; orderTemp.CREATE_TIME = DateTime.Now; recordInfo.CheckPointResult = recordInfo.CheckPointResult && orderBll.Add(orderTemp); } } } }