public override void Process(ProcessRecord recordInfo)
 {
     try
     {
         ///////////////////////////车|ì位?已°?锁?定?§///////////////////////////////
         if (1 == recordInfo.INOUT_RECODE.LOCK_FLAG)
         {
             recordInfo.CheckPointResult = false;
             recordInfo.SpeechType       = enumSpeechType.CarLocked;
             Sound(recordInfo);
             return;
         }
         ///////////////////////////黑¨2名?单죤校?ê验¨|///////////////////////////////
         if (base.getCurrParkInfo().blacklist)
         {
             //////////////////////获?取¨?当ì?à前??出?口¨2车|ì牌?的ì?鉴?权¨?§//////////////////////////
             recordInfo.CheckPointResult = recordInfo.authenticationType == enumAuthenticationType.SPECIAL_TYPE_BLACK ? false : true;
             if (!recordInfo.CheckPointResult)
             {
                 recordInfo.SpeechType = enumSpeechType.BlacklistCarOut;
                 Sound(recordInfo);
                 return;
             }
         }
         //如¨?果?是o?贵¨?宾à?车|ì不?需¨¨鉴?权¨?§,ê?直?à接¨?放¤?行D
         if (recordInfo.authenticationType == enumAuthenticationType.SPECIAL_TYPE_VIP)
         {
             recordInfo.CheckPointResult = true;
             return;
         }
         //////////////////////////////临¢¨′时o?à通a?§行D权¨?§限T///////////////////////////////
         var tempAccessRight = EngineContext.Current.Resolve <IPL_ACCESS_RIGHTS_MANAGERS>();
         var accessRight     = tempAccessRight.GetModelByVEHICLE_NO(recordInfo.INOUT_RECODE.VEHICLE_NO);
         //判D断?是o?否¤?是o?临¢¨′时o?à授o¨2权¨?§车|ì并?é且¨°入¨?场?时o?à间?是o?否¤?在¨2临¢¨′时o?à授o¨2权¨?§时o?à间?内¨2
         if (null != accessRight && accessRight.BEGIN_TIME <= recordInfo.INOUT_RECODE.IN_TIME && recordInfo.INOUT_RECODE.IN_TIME <= accessRight.END_TIME)
         {
             if (accessRight.ACCREDIT_TYPE == 1)
             {
                 if (accessRight.ACCESS_CHANNEL_CODE.Contains(recordInfo.CHN_CODE))
                 {
                     recordInfo.authenticationType = enumAuthenticationType.TempAuthorization;
                     recordInfo.IsFree             = accessRight.TIMEOUT_BILING == 0 ? true : false;
                     recordInfo.temporaryBilling   = (enumTemporaryBilling)accessRight.TIMEOUT_BILING;
                     if (recordInfo.temporaryBilling == enumTemporaryBilling.CHARGE)
                     {
                         if (accessRight.END_TIME > System.DateTime.Now)
                         {
                             recordInfo.IsFree = true;
                         }
                         else
                         {
                             recordInfo.TemporaryEndTime = accessRight.END_TIME;
                         }
                     }
                     recordInfo.CheckPointResult = true;
                     return;
                 }
                 else
                 {
                     recordInfo.CheckPointResult = false;
                     recordInfo.SpeechType       = enumSpeechType.NoPermissions;
                     Sound(recordInfo);
                     return;
                 }
             }
         }
         var tempPermit = EngineContext.Current.Resolve <Parking.DBService.IBLL.ICR_TRAFFIC_PERMIT_INFO>();
         var permitList = tempPermit.GetIssueInfo(recordInfo.INOUT_RECODE.VEHICLE_NO).ToList();
         var firstSigle = permitList.OrderBy(x => x.END_TIME).FirstOrDefault();
         //月?卡?§停a?ê用??则¨°月?转áa临¢¨′处?|理¤¨a
         if (recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_MONTH)
         {
             if (null != permitList && permitList.Count > 0)
             {
                 int count = permitList.Where(x => x.TRAFFIC_PERMIT_STATUS == 0).Count();
                 if (count > 0)
                 {
                     recordInfo.CARD_TYPE     = enumCardType.CAR_TYPE_TEMP;
                     recordInfo.IsMonthToTemp = true;
                     recordInfo.SpeechType    = enumSpeechType.MonthCarLocking;
                 }
             }
         }
         ///////////////////////车|ì位?权¨?§限T,ê?查¨|询?¥入¨?场?时o?à是o?否¤?占?用??车|ì位?,ê?没?有?D占?用??车|ì位?当ì?à月?转áa临¢¨′处?|理¤¨a/////////////////////////
         if (recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_MONTH || recordInfo.IsMonthToTemp)
         {
             var spaceBllTemp = EngineContext.Current.Resolve <IPBA_PARKING_SPACE_MANAGER>();
             var model        = spaceBllTemp.GetModelByINOUTID(recordInfo.INOUT_RECODE.ID);
             //////////////////////无T场?内¨2记?录?//////////////////////////
             if (null != model && DateTime.Now < model.END_TIME)
             {
                 recordInfo.SPACE_CODE = model.SPACE_CODE;
                 TimeSpan sp = model.END_TIME.Subtract(DateTime.Now.AddDays(-1));
                 recordInfo.Validity = sp.Days;
             }
             else
             {
                 //如¨?果?场?内¨2过y期¨2当ì?à临¢¨′时o?à车|ì处?|理¤¨a并?é产¨2生|¨2订?单죤
                 if ((null != model && DateTime.Now > model.END_TIME) || recordInfo.IsMonthToTemp)
                 {
                     recordInfo.IsMonthToTemp = true;
                     recordInfo.SpeechType    = enumSpeechType.MonthCardOverdueOut;
                     if (GlobalEnvironment.MVMP && null != model)
                     {
                         recordInfo.SPACE_CODE        = model.SPACE_CODE;
                         recordInfo.ChargingStartTime = model.END_TIME;
                     }
                     else
                     {
                         if (recordInfo.INOUT_RECODE.IN_TIME < firstSigle.END_TIME && firstSigle.END_TIME < DateTime.Now)
                         {
                             recordInfo.ChargingStartTime = firstSigle.END_TIME;
                         }
                     }
                     var orderBll   = EngineContext.Current.Resolve <ICR_ORDER_RECORD_INFO>();
                     var recordBll  = EngineContext.Current.Resolve <ICR_INOUT_RECODE>();
                     var recordTemp = recordBll.GetInSideCarNo(recordInfo.INOUT_RECODE);
                     var OrderEnter = orderBll.GetCurrentPartitionOrder(recordInfo.PARTITION_CODE, recordInfo.INOUT_RECODE.ID);
                     if (null == OrderEnter)
                     {
                         CR_ORDER_RECORD_INFO orderTemp = new CR_ORDER_RECORD_INFO();
                         orderTemp.ID = Guid.NewGuid().ToString("N");
                         orderTemp.INOUT_RECODE_ID   = recordTemp.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);
                     }
                 }
                 //if (GlobalEnvironment.MVMP)
                 //{
                 //    //没?有?D剩o?ê余?¨¤车|ì位?月?转áa临¢¨′
                 //    if (null == model && !spaceBllTemp.IsSurplus(recordInfo.VEHICLE_NO))
                 //    {
                 //        recordInfo.CARD_TYPE = enumCardType.CAR_TYPE_TEMP;
                 //        recordInfo.IsMonthToTemp = true;
                 //        recordInfo.SpeechType = enumSpeechType.ParkingOccupyOut;
                 //    }
                 //}
             }
         }
         ///////////////////////////校?ê验¨|卡?§类¤¨¤通a?§行D权¨?§限T///////////////////////////////
         var strArea = GlobalEnvironment.ListOragnization.Where(x => x.ORGANIZATION_CODE == recordInfo.CHN_CODE).FirstOrDefault() as Area;
         if (strArea.ckIE.Contains(((int)recordInfo.CARD_TYPE).ToString()))
         {
             recordInfo.CheckPointResult = true;
             //////////////////月?卡?§权¨?§限T组á¨|通a?§行D权¨?§限T//////////////////////
             if (!base.HasPermit(recordInfo) && recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_MONTH)
             {
                 ////////////////////////月?卡?§无T通a?§行D权¨?§限T,ê?月?转áa临¢¨′///////////////////////
                 recordInfo.IsMonthToTemp = true;
             }
         }
         else
         {
             recordInfo.CheckPointResult = false;
             recordInfo.SpeechType       = enumSpeechType.NoPermissions;
             Sound(recordInfo);
             return;
         }
     }
     catch (Exception ex)
     {
         LogHelper.Log.Error(ex.Message);
         recordInfo.CheckPointResult = false;
     }
 }
 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);
             }
         }
     }
 }