public override void Process(ProcessRecord recordInfo) { try { recordInfo.CheckPointResult = true; bool AutoGate = false; var currChannel = base.getCurrChannel(recordInfo); if (null != currChannel) { AutoGate = currChannel.autoGate; } //自á?动?¥开a闸?é if (AutoGate) { recordInfo.AutoOpenGate = true; } else { //如¨?果?是o?贵¨?宾à?车|ì,ê?直?à接¨?放¤?行D if (recordInfo.authenticationType == enumAuthenticationType.SPECIAL_TYPE_VIP) { return; } //先¨¨查¨|找¨°订?单죤 ICR_ORDER_RECORD_INFO orderRecord = EngineContext.Current.Resolve <ICR_ORDER_RECORD_INFO>(); string Leave = base.getCurrChannel(recordInfo) == null ? recordInfo.INOUT_RECODE.CURR_PARTITION_CODE : base.getCurrChannel(recordInfo).Leave; var order = orderRecord.GetOrders(recordInfo.INOUT_RECODE).Where(x => x.PARTITION_CODE == Leave).FirstOrDefault(); //////////////////////////余?¨¤额?不?足á?转áa临¢¨′时o?à卡?§/////////////////////////// if (recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_STORED) { if (null == recordInfo.OwnerInfo || recordInfo.OwnerInfo.balance < recordInfo.CurrNeedPay) { recordInfo.IsMonthToTemp = true; } else { order.ALREADY_PAID = order.DUE_MONEY; order.IS_PAY = true; recordInfo.PayMethod = enumPayMethod.STORED_PAY; recordInfo.INOUT_RECODE.CHARGE_MONEY = recordInfo.INOUT_RECODE.DUE_MONEY; } } if (recordInfo.CHANNEL_TYPE != enumChannelType.centerPayment && (null == order || order.DUE_MONEY == order.ALREADY_PAID || 0 == recordInfo.INOUT_RECODE.DUE_MONEY || recordInfo.IsFree)) { } else { base.TriggerEvent(enumOperaterType.ShowCharge, recordInfo, true); base.WaitOne(recordInfo); } } } catch (Exception ex) { LogHelper.Log.Error(ex.Message); recordInfo.CheckPointResult = false; } }
public override void Process(ProcessRecord recordInfo) { var tempChannel = getCurrChannel(recordInfo); if (null != tempChannel) { if (tempChannel.autoGate || recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_STORED || recordInfo.authenticationType == enumAuthenticationType.SPECIAL_TYPE_VIP || recordInfo.authenticationType == enumAuthenticationType.TEMP_VISITOR) { recordInfo.CheckPointResult = true; } else { if (recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_TEMP) { Sound(recordInfo); base.TriggerEvent(enumOperaterType.OpenInConfirmGate, recordInfo, true); base.WaitOne(recordInfo); } else if (recordInfo.CARD_TYPE == enumCardType.CAR_TYPE_MONTH) { recordInfo.CheckPointResult = true; } } } else { recordInfo.CheckPointResult = false; } }
/// <summary> /// 流程过程中触发事件 /// </summary> /// <param name="recordinfo">过程数据</param> /// <param name="isWaitOne">是否模态窗口</param> public void triggerEvent(ProcessRecord recordinfo, bool isWaitOne) { if (null != OnMessageBroadcast) { OnMessageBroadcast(recordinfo, isWaitOne); } }
private void Instance_OnMessageBroadcast(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.ShowInSideForm) { CarInSideForm form = new CarInSideForm(recordInfo.INOUT_RECODE.VEHICLE_NO); form.ShowDialog(); } if (recordInfo.OPERATER_TYPE == enumOperaterType.CentralPayment) { CentralPaymentForm form = new CentralPaymentForm(); form.ShowDialog(); } if (recordInfo.OPERATER_TYPE == enumOperaterType.ShowChangeRoleForm) { ChangeRoleForm form = new ChangeRoleForm(); if (isWaitOne) { form.ShowDialog(); } else { form.Show(); } } }
/// <summary> /// 折扣 /// </summary> /// <param name="recordInfo"></param> public decimal Discount(ProcessRecord recordInfo, CRPreferentialDetails details) { decimal disMoney = 1; decimal.TryParse(details.PREFERENTIAL_CONTENT.ToString(), out disMoney); return(recordInfo.INOUT_RECODE.CHARGE_MONEY * (1 - disMoney)); }
/// <summary> /// 现金减免 /// </summary> /// <param name="recordInfo"></param> public decimal Discount(ProcessRecord recordInfo, CRPreferentialDetails details) { decimal disMoney = 0; decimal.TryParse(details.PREFERENTIAL_CONTENT.ToString(), out disMoney); return(disMoney); }
/// <summary> /// 响应广播消息 /// </summary> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> private void ActiveMessage(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.FeePlugInTest) { new FeePlugInTestFrm().Show(); } }
/// <summary> /// 往队列中添加正式数据 /// </summary> /// <param name="acceptBytes"></param> public void AcceptFormalData(ProcessRecord acceptBytes) { lock (AcceptDataQue) { AcceptDataQue.Enqueue(acceptBytes); } }
public OccupyRecordInfo(ProcessRecord recordInfo) { InitializeComponent(); _recordInfo = recordInfo; this.grdInOutsInfo.AutoGenerateColumns = false; base.Title = "车位信息列表"; }
/// <summary> /// 响应广播消息 /// </summary> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> private void ActiveMessage(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.OutSuccessed || recordInfo.OPERATER_TYPE == enumOperaterType.CentralPaySuccess) { if (recordInfo.OPERATER_TYPE == enumOperaterType.CentralPaySuccess || ((recordInfo.CHANNEL_TYPE == enumChannelType.chn_out) && !recordInfo.AutoOpenGate)) { //////////贵宾车不生成订单信息////////////// if (null != recordInfo && !recordInfo.IsCenterPay && recordInfo.PayMethod == enumPayMethod.Cash) { this.lbChargeAmount.Text = (Convert.ToDecimal(this.lbChargeAmount.Text) + recordInfo.INOUT_RECODE.CHARGE_MONEY).ToString("#0.00"); this.lbDiscountAmount.Text = (Convert.ToDecimal(this.lbDiscountAmount.Text) + recordInfo.INOUT_RECODE.PRE_MONEY).ToString("#0.00"); GlobalEnvironment.LocalUserInfo.DUE_MONEY = decimal.Parse(this.lbChargeAmount.Text); GlobalEnvironment.LocalUserInfo.PER_MONEY = decimal.Parse(this.lbDiscountAmount.Text); ICR_PARK_EXCHANGE bllRecord = EngineContext.Current.Resolve <ICR_PARK_EXCHANGE>(); var model = bllRecord.GetModelByAccount(GlobalEnvironment.LocalUserInfo.USER_ACCOUNT, GlobalEnvironment.LocalUserInfo.WORKSTATION_NO); if (null != model) { model.WORK_STATUS = 0; model.DUE_MONEY = GlobalEnvironment.LocalUserInfo.DUE_MONEY; model.PER_MONEY = GlobalEnvironment.LocalUserInfo.PER_MONEY; bllRecord.Update(model); } } } } if (recordInfo.OPERATER_TYPE == enumOperaterType.ChangeRole) { InitPanelInfo(); } }
/// <summary> /// 响应广播消息 /// </summary> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> private void ActiveMessage(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.OpenGate || recordInfo.OPERATER_TYPE == enumOperaterType.OutSuccessed) { BindGrd(recordInfo); } }
/// <summary> /// 响应广播消息 /// </summary> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> private void ActiveMessage(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.OutSuccessed) { Query(); } }
/// <summary> /// 发¤?é送¨a余?¨¤位?信?息?é /// </summary> public void ShowMoreThanInfo(ProcessRecord recordInfo) { LogHelper.Log.Info("发¤?é送¨a余?¨¤位?显?示o?屏¨¢命¨1令¢?:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); var TempLate = EngineContext.Current.Resolve <IPBA_VOICE_TEMPLATE>(); List <string> strArr = new List <string>(); var childrenList = CommHelper.GetOrgInfos(recordInfo.CHN_CODE).Where(x => x.productLine == enumProductLine.DisplayScreen).ToList(); childrenList = CommHelper.GetOrgInfos(recordInfo.INOUT_RECODE.IN_CHANNEL_CODE).Where(x => x.productLine == enumProductLine.DisplayScreen).ToList(); foreach (var temp in childrenList) { foreach (var info in temp.LedInfos.OrderBy(x => x.serialNo)) { StringBuilder strSB = new StringBuilder(); string[] strArrSerialNo = info.displayContent.Split(','); if (!string.IsNullOrEmpty(info.displayContent)) { foreach (string s in strArrSerialNo) { int SeriNo = Convert.ToInt32(s); if (SeriNo == 9) { var strTemp = TempLate.GetModelByType((int)enumTemplateType.MODEL_TYPE_DISPLAY, SeriNo); if (null != strTemp) { strSB.Append(CommHelper.LedContent(strTemp.CUSTOM_MODEL, recordInfo, SeriNo)); } } } strArr.Add(strSB.ToString()); Parking.Core.Common.CommHelper.ShowLED(temp, strArr.ToArray(), info); strArr.Clear(); } } } }
/// <summary> /// 响应广播消息 /// </summary> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> private void ActiveMessage(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.QueryUserIfno) { new OwnerInfo().Show(); } }
/// <summary> /// 获?取¨?当ì?à前??通a?§道쨤 /// </summary> /// <param name="recordInfo"></param> /// <returns></returns> protected Equipment getCurrChannel(ProcessRecord recordInfo) { if (null == recordInfo.CHN_CODE) { return(null); } return(GlobalEnvironment.ListOragnization.Where(x => x.ORGANIZATION_CODE == recordInfo.CHN_CODE).FirstOrDefault()); }
public PlateCorrectionForm(ProcessRecord record) { InitializeComponent(); recordInfo = record; Initialize(); this.carNo.Focus(); base.Title = "车牌校正框"; }
/// <summary> /// 处理队列中的正式数据 /// </summary> /// <param name="state"></param> public void AcceptDataWork(object state) { while (true) { try { AcceptDataEvent.WaitOne(1); while (AcceptDataQue.Count > 0) { ProcessRecord msg = null; lock (AcceptDataQueLock) { if (AcceptDataQue.Count > 0) { msg = AcceptDataQue.Dequeue(); } } if (msg != null) { var channel = EngineContext.Current.Resolve <IChannel>(msg.CHANNEL_TYPE.ToString()); if (null != channel) { ///////////////////////补抓图片////////////////////////////////// if (string.IsNullOrEmpty(msg.PicFullName)) { var channelList = CommHelper.GetOrgInfos(msg.CHN_CODE); var cameraDevice = channelList.Where(x => x.productLine == enumProductLine.IdentificationCamera && x.autoRecognition).FirstOrDefault(); if (null != cameraDevice) { var cameraSDK = EngineContext.Current.Resolve <ICamera>(cameraDevice.deviceType.ToString()); if (null != cameraSDK) { string strPicName = string.Empty; cameraSDK.CapturePicture(cameraDevice.IP, out strPicName); msg.PicFullName = strPicName; } } } ///////////////////////开始流程////////////////////////////////// ProcessDelegate dl = new ProcessDelegate(RunProcess); dl.BeginInvoke(channel, msg, null, null); if (null != OnPlate) { OnPlate(msg); } } } } AcceptDataEvent.Reset(); } catch (Exception ex) { AcceptDataEvent.Reset(); LogHelper.Log.Error(ex.Message, ex.InnerException); } } }
public void WaitOne(ProcessRecord recordInfo) { if (ChannelEngine.dicChargeInfo.ContainsKey(recordInfo.INOUT_RECODE.VEHICLE_NO)) { var autoResetevent = ChannelEngine.dicChargeInfo.Where(x => x.Key == recordInfo.INOUT_RECODE.VEHICLE_NO).FirstOrDefault(); var temp = autoResetevent.Value as AutoResetEvent; temp.WaitOne(); } }
public ConfirmGateForm(ProcessRecord record) { InitializeComponent(); recordInfo = record; base.Title = "入口确认开闸"; this.lbCarNo.Text = recordInfo.INOUT_RECODE.VEHICLE_NO; this.lbInOutTime.Text = recordInfo.REPORTIMG_TIME.ToString("yyyy-MM-dd HH:mm:ss"); this.lbChannelName.Text = recordInfo.CHN_NAME; }
private void Instance_OnMessageBroadcast(ProcessRecord recordInfo, bool isWaitOne) { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(delegate { ActiveMessage(recordInfo); })); return; } ActiveMessage(recordInfo); }
/// <summary> /// 事件响应 /// </summary> /// <param name="data"></param> public void Instance_OnPlate(ProcessRecord data) { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(delegate { ShowPictureInfo(data); })); return; } ShowPictureInfo(data); }
public ProcessRecord ConvertRecord(DataUploadEventArgs data) { ProcessRecord recordInfo = new ProcessRecord(); //车牌号码 recordInfo.INOUT_RECODE.VEHICLE_NO = data.TempRecordInfo.plateNum; //特征码 recordInfo.INOUT_RECODE.UNIQUE_IDENTIFIER = data.TempRecordInfo.INOUT_RECODE.UNIQUE_IDENTIFIER; //是否发送短信 recordInfo.SendSMS = data.TempRecordInfo.SendSMS; //手机号码 recordInfo.Phone = data.TempRecordInfo.Phone; //通道编号 recordInfo.CHN_CODE = data.TempRecordInfo.CHN_CODE; //通道名称 recordInfo.CHN_NAME = data.TempRecordInfo.CHN_NAME; //分区信息 var parentsList = CommHelper.GetOrgInfos(recordInfo.CHN_CODE, false); var par = parentsList.Where(x => x.channelType == enumChannelType.par).LastOrDefault(); if (null != par) { recordInfo.PARTITION_CODE = par.ORGANIZATION_CODE; recordInfo.PARTITION_NAME = par.OrganizationInfo.ORGANIZATION_NAME; } //获取工作站信息 var wsn = parentsList.Where(x => x.channelType == enumChannelType.wsn).LastOrDefault(); if (null != wsn) { recordInfo.FIELD_NAME = wsn.OrganizationInfo.ORGANIZATION_NAME; recordInfo.FIELD_CODE = wsn.OrganizationInfo.ORGANIZATION_CODE; } //获取操作员信息 if (null != GlobalEnvironment.LocalUserInfo) { recordInfo.OPERATOR_ID = GlobalEnvironment.LocalUserInfo.USER_ID; recordInfo.OPERATOR_NAME = GlobalEnvironment.LocalUserInfo.USER_NAME; } //车牌号码 recordInfo.INOUT_RECODE.VEHICLE_NO = data.TempRecordInfo.plateNum; //入场类型 recordInfo.PARK_TYPE = "无牌车放行"; //刷卡时间 recordInfo.REPORTIMG_TIME = data.TempRecordInfo.REPORTIMG_TIME; //出入场类型 recordInfo.CHANNEL_TYPE = data.TempRecordInfo.CHANNEL_TYPE; //抓拍图片 recordInfo.PicFullName = data.TempRecordInfo.fullPicName; //初始化公共信息 base.InitBaseInfo(recordInfo); return(recordInfo); }
/// <summary> /// 触?£¤发¤?é事o?件t /// </summary> /// <param name="operaterType"></param> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> /// <returns></returns> protected virtual bool TriggerEvent(enumOperaterType operaterType, ProcessRecord recordInfo, bool isWaitOne = false) { try { recordInfo.OPERATER_TYPE = operaterType; ThreadMessageTransact.Instance.triggerEvent(recordInfo, isWaitOne); } catch { return(false); } return(true); }
/// <summary> /// 建立交易过程model /// </summary> /// <param name="row"></param> /// <returns></returns> private ProcessRecord ToModel(DataRow row) { ProcessRecord processRecord = new ProcessRecord(); processRecord.goodsId = (Guid)row["GoodsId"]; processRecord.id = (Guid)row["Id"]; processRecord.tradeNameId = (Guid)row["TradeNameId"]; processRecord.tradePrice = (decimal)row["TradePrice"]; processRecord.tradeTime = (DateTime)row["TradeTime"]; return(processRecord); }
/// <summary> /// 响应广播消息 /// </summary> /// <param name="recordInfo"></param> /// <param name="isWaitOne"></param> private void ActiveMessage(ProcessRecord recordInfo, bool isWaitOne) { if (recordInfo.OPERATER_TYPE == enumOperaterType.SwitchdataGrid) { if (!string.IsNullOrEmpty(recordInfo.PicFullName)) { this.lblCarNum.Text = recordInfo.VEHICLE_NO; this.picCarImg.Image = new Bitmap(GlobalEnvironment.BasePath + recordInfo.PicFullName); } } }
public ChargeForm(ProcessRecord record) { InitializeComponent(); recordInfo = record; base.WindowsClosed = false; CheckForIllegalCrossThreadCalls = false; orderRecord = EngineContext.Current.Resolve <ICR_ORDER_RECORD_INFO>(); order = recordInfo.ListOrder;//orderRecord.GetOrders(recordInfo.INOUT_RECODE.ID, ); base.Title = record.CHANNEL_TYPE == enumChannelType.centerPayment ? "中央缴费框" : "出口收费框"; Initialize(); }
/// <summary> /// 道闸设备开闸 /// </summary> /// <param name="channelCode"></param> /// <param name="strArr"></param> public static void OpenGate(ProcessRecord recordInfo) { var temp = CommHelper.GetOrgInfos(recordInfo.CHN_CODE, false); if (null != temp) { var par = temp.Where(x => x.channelType == enumChannelType.par).LastOrDefault(); var chargMap = par.ListChargMap.Where(x => x.carType == (int)recordInfo.CarType).FirstOrDefault(); int[] roadType = chargMap.roadGateType; var childrenList = GetOrgInfos(recordInfo.CHN_CODE); if (null != childrenList && childrenList.Count > 0) { //查找道闸设备 var roadGateDevice = childrenList.Where(x => x.productLine == enumProductLine.RoadGate).FirstOrDefault(); if (null != roadGateDevice && !string.IsNullOrEmpty(roadGateDevice.IP)) { //if (roadGateDevice.Online) //{ var tempControlPanel = EngineContext.Current.Resolve <IControlPanel>(roadGateDevice.deviceType.ToString()); if (null != tempControlPanel) { LogHelper.Log.Info("道闸设备【" + roadGateDevice.ORGANIZATION_NAME + "】" + ";车牌号:" + recordInfo.INOUT_RECODE.VEHICLE_NO + ";发送开闸命令时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tempControlPanel.OpenGate(roadGateDevice.IP, roadGateDevice.Port, roadType); recordInfo.OPERATER_TYPE = enumOperaterType.OpenGate; ThreadMessageTransact.Instance.triggerEvent(recordInfo, false); } //} //else // LogHelper.Log.Info("道闸设备【" + roadGateDevice.ORGANIZATION_NAME + "】不在线!"); } else //找父节点 ----- (一般是主控板) { var boardDevice = childrenList.Where(x => x.productLine == enumProductLine.MasterBoard).FirstOrDefault(); if (null != boardDevice && !string.IsNullOrEmpty(boardDevice.IP)) { //if (boardDevice.Online) //{ var tempControlPanel = EngineContext.Current.Resolve <IControlPanel>(boardDevice.deviceType.ToString()); if (null != tempControlPanel) { LogHelper.Log.Info("道闸设备【" + boardDevice.ORGANIZATION_NAME + "】" + ";车牌号:" + recordInfo.INOUT_RECODE.VEHICLE_NO + ";发送开闸命令时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tempControlPanel.OpenGate(boardDevice.IP, boardDevice.Port, roadType); recordInfo.OPERATER_TYPE = enumOperaterType.OpenGate; ThreadMessageTransact.Instance.triggerEvent(recordInfo, false); } //} //else // LogHelper.Log.Info("道闸设备【" + boardDevice.ORGANIZATION_NAME + "】不在线!"); } } } } }
private void Instance_OnMessageBroadcast(ProcessRecord msg, bool isWaitOne) { if (msg.OPERATER_TYPE == enumOperaterType.RecognitionEvent) { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(delegate { AddLastPoint(msg.IP); })); return; } AddLastPoint(msg.IP); } }
/// <summary> /// 显示最新车辆信息 /// </summary> /// <param name="data"></param> public void ShowPictureInfo(ProcessRecord data) { try { lblType.Text = data.CARD_TYPE == enumCardType.CAR_TYPE_TEMP ? "临时车" : data.CARD_TYPE == enumCardType.CAR_TYPE_MONTH ? "月卡车" : "固定车"; picCarImg.Image = GetThumbnail(data.PicFullName, this.picCarImg.Width, picCarImg.Height); lblCarNum.Text = data.INOUT_RECODE.VEHICLE_NO; } catch (Exception ex) { LogHelper.Log.Error(ex.Message); } }
/// <summary> /// 播£¤报à?§语??音°? /// </summary> /// <param name="recordInfo"></param> public void Sound(ProcessRecord recordInfo) { /////////////////////////播£¤报à?§语??音°?//////////////////////////// var voiceBllTemp = EngineContext.Current.Resolve <IPBA_VOICE_TEMPLATE>(); List <string> strArr = new List <string>(); var voiceModel = voiceBllTemp.GetModelByType((int)enumTemplateType.MODEL_TYPE_VOICE, (int)recordInfo.SpeechType); if (null != voiceModel) { strArr.Add(CommHelper.VoiceContent(voiceModel.CUSTOM_MODEL, recordInfo)); Parking.Core.Common.CommHelper.Sound(recordInfo, strArr.ToArray()); } }