Esempio n. 1
0
        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);
        }
Esempio n. 10
0
 /// <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);
             }
         }
     }
 }