/// <summary> /// 初始化车厅流程图界面 /// </summary> private void InitializeGbHall() { foreach (int nWareHouse in CStaticClass.ConfigLstWareHouse()) { foreach (int nHall in CStaticClass.ConfigLstHallDeviceID(nWareHouse)) { GroupBox GbWH = new GroupBox(); CUserFlowChartControl CuffccWHE1 = new CUserFlowChartControl(); CUserFlowChartControl CuffccWHE2 = new CUserFlowChartControl(); // // GbWH // GbWH.Controls.Add(CuffccWHE1); GbWH.Controls.Add(CuffccWHE2); GbWH.Name = "GbW" + nWareHouse + "Hall" + nHall; GbWH.Size = new Size(1040, 93); GbWH.TabStop = false; GbWH.Text = CStaticClass.ConvertWareHouse(nWareHouse) + CStaticClass.ConvertHallDescp(nWareHouse, nHall) + "流程图:"; // // CuffccWHE1 // CuffccWHE1.EnumFlowTaskType = EnmFlowTaskType.Init; CuffccWHE1.Font = new Font("宋体", 9F); CuffccWHE1.Name = "CuffccW" + nWareHouse + "Hall" + nHall + "E1"; CuffccWHE1.Size = new Size(80, 50); CuffccWHE1.Text = "cUserFlowChartControl1"; CuffccWHE1.CallbackResize += new RefreshCallback(CallBackOnResize); // // CuffccWHE2 // CuffccWHE2.EnumFlowTaskType = EnmFlowTaskType.Init; CuffccWHE2.Font = new Font("宋体", 9F); CuffccWHE2.Name = "CuffccW" + nWareHouse + "Hall" + nHall + "E2"; CuffccWHE2.Size = new Size(80, 50); CuffccWHE2.Visible = false; CuffccWHE2.Text = "cUserFlowChartControl1"; CuffccWHE2.CallbackResize += new RefreshCallback(CallBackOnResize); this.tabPage1.Controls.Add(GbWH); } } }
/// <summary> /// 设置某个车厅的流程图 /// </summary> /// <param name="dr"></param> /// <param name="cufccTempE1"></param> /// <param name="cufccTempE2"></param> private void SetHallFlowChart(CarLocationPanelLib.PushService.CDeviceStatusDto deviceStatus, CUserFlowChartControl cufccTempE1, CUserFlowChartControl cufccTempE2) { int nPrevNode = 0; int nCurrentNode = 0; int nQueuePrevNode = 0; int nQueueCurrentNode = 0; if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.prevnode)) { nPrevNode = (int)deviceStatus.prevnode; } if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.currentnode)) { nCurrentNode = (int)deviceStatus.currentnode; } if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.queueprevnode)) { nQueuePrevNode = (int)deviceStatus.queueprevnode; } if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.queuecurrentnode)) { nQueueCurrentNode = (int)deviceStatus.queuecurrentnode; } if (CBaseMethods.MyBase.IsEmpty(deviceStatus.tasktype)) { if (EnmFlowTaskType.Init != cufccTempE1.EnumFlowTaskType) { cufccTempE1.EnumFlowTaskType = EnmFlowTaskType.Init; } cufccTempE2.Visible = false; return; } EnmFlowTaskType enmFlow = EnmFlowTaskType.Init; bool IsTower = false;// 塔库标志 if (2 == deviceStatus.warehouse) {// 塔库 IsTower = true; } switch ((EnmTaskType)deviceStatus.tasktype) { case EnmTaskType.EntryTask: { if (IsTower) { enmFlow = EnmFlowTaskType.TowerEnter; } else { enmFlow = EnmFlowTaskType.NormEnter; } cufccTempE2.Visible = false; break; } case EnmTaskType.ExitTask: { if (IsTower) { enmFlow = EnmFlowTaskType.TowerExit; } else { enmFlow = EnmFlowTaskType.NormExit; } // 取车排队处理 if (0 == nQueuePrevNode && 0 == nQueueCurrentNode) { cufccTempE2.Visible = false; } else { cufccTempE2.Visible = true; if (cufccTempE2.EnumFlowTaskType == EnmFlowTaskType.QueueExit) { cufccTempE2.SetFlowChartRunStatus(nQueuePrevNode, nQueueCurrentNode); } else { cufccTempE2.EnumFlowTaskType = EnmFlowTaskType.QueueExit; cufccTempE2.SetFlowChartRunStatus(nQueuePrevNode, nQueueCurrentNode); } } break; } case EnmTaskType.TmpFetch: { enmFlow = EnmFlowTaskType.TmpFetch; cufccTempE2.Visible = false; break; } case EnmTaskType.MoveCarTask: { enmFlow = EnmFlowTaskType.MoveCar; cufccTempE2.Visible = false; break; } case EnmTaskType.MoveEquipTask: { enmFlow = EnmFlowTaskType.MoveEquip; cufccTempE2.Visible = false; break; } default: { cufccTempE2.Visible = false; break; } } if (enmFlow == cufccTempE1.EnumFlowTaskType) { if (EnmFlowTaskType.Init != enmFlow) { cufccTempE1.SetFlowChartRunStatus(nPrevNode, nCurrentNode); } } else { cufccTempE1.EnumFlowTaskType = enmFlow; cufccTempE1.SetFlowChartRunStatus(nPrevNode, nCurrentNode); } this.OnResize(null); }
/// <summary> /// 更新当前流程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void UpdateFlowChart(CarLocationPanelLib.PushService.CDeviceStatusDto deviceStatus) { try { if (null == deviceStatus || (int)EnmSMGType.Hall != deviceStatus.devicetype) { return; } string strKey = "GbW" + deviceStatus.warehouse + "Hall" + deviceStatus.devicecode; Control control = this.tabPage1.Controls[strKey];// GbW1Hall11 if (null == control) { return; } Control controlE1 = null; Control controlE2 = null; if (1 < control.Controls.Count) { controlE1 = control.Controls[1]; } if (0 < control.Controls.Count) { controlE2 = control.Controls[0]; } if (null == controlE1 || typeof(CUserFlowChartControl) != controlE1.GetType() || null == controlE2 || typeof(CUserFlowChartControl) != controlE2.GetType()) { return; } CUserFlowChartControl cufccTempE1 = (CUserFlowChartControl)controlE1; CUserFlowChartControl cufccTempE2 = (CUserFlowChartControl)controlE2; cufccTempE1.Visible = true; cufccTempE2.Visible = true; // InvokeRequired需要比较调用线程ID和创建线程ID // 如果它们不相同则返回true if (cufccTempE1.InvokeRequired || cufccTempE2.InvokeRequired) { CUserFlowChartControlCallback d = new CUserFlowChartControlCallback(SetHallFlowChart); this.Invoke(d, deviceStatus, cufccTempE1, cufccTempE2); } else { SetHallFlowChart(deviceStatus, cufccTempE1, cufccTempE2); } #region 流程处理 int nPrevNode = 0; int nCurrentNode = 0; int nQueuePrevNode = 0; int nQueueCurrentNode = 0; if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.prevnode)) { nPrevNode = (int)deviceStatus.prevnode; } if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.currentnode)) { nCurrentNode = (int)deviceStatus.currentnode; } if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.queueprevnode)) { nQueuePrevNode = (int)deviceStatus.queueprevnode; } if (!CBaseMethods.MyBase.IsEmpty(deviceStatus.queuecurrentnode)) { nQueueCurrentNode = (int)deviceStatus.queuecurrentnode; } if (CBaseMethods.MyBase.IsEmpty(deviceStatus.tasktype)) { if (EnmFlowTaskType.Init == cufccTempE1.EnumFlowTaskType) { cufccTempE1.SetFlowChartRunStatus(nPrevNode, nCurrentNode); } else { cufccTempE1.EnumFlowTaskType = EnmFlowTaskType.Init; } cufccTempE2.Visible = false; return; } EnmFlowTaskType enmFlow = EnmFlowTaskType.Init; bool IsTower = false;// 塔库标志 if (2 == deviceStatus.warehouse) {// 塔库 IsTower = true; } switch ((EnmTaskType)deviceStatus.tasktype) { case EnmTaskType.EntryTask: { if (IsTower) { enmFlow = EnmFlowTaskType.TowerEnter; } else { enmFlow = EnmFlowTaskType.NormEnter; } cufccTempE2.Visible = false; break; } case EnmTaskType.ExitTask: { if (IsTower) { enmFlow = EnmFlowTaskType.TowerExit; } else { enmFlow = EnmFlowTaskType.NormExit; } // 取车排队处理 if (0 == nQueuePrevNode && 0 == nQueueCurrentNode) { cufccTempE2.Visible = false; } else { cufccTempE2.Visible = true; if (cufccTempE2.EnumFlowTaskType == EnmFlowTaskType.QueueExit) { cufccTempE2.SetFlowChartRunStatus(nQueuePrevNode, nQueueCurrentNode); } else { cufccTempE2.EnumFlowTaskType = EnmFlowTaskType.QueueExit; } } break; } case EnmTaskType.TmpFetch: { enmFlow = EnmFlowTaskType.TmpFetch; cufccTempE2.Visible = false; break; } case EnmTaskType.MoveCarTask: { enmFlow = EnmFlowTaskType.MoveCar; cufccTempE2.Visible = false; break; } case EnmTaskType.MoveEquipTask: { enmFlow = EnmFlowTaskType.MoveEquip; cufccTempE2.Visible = false; break; } default: { cufccTempE2.Visible = false; break; } } if (enmFlow == cufccTempE1.EnumFlowTaskType) { cufccTempE1.SetFlowChartRunStatus(nPrevNode, nCurrentNode); } else { cufccTempE1.EnumFlowTaskType = enmFlow; } #endregion } catch (System.Exception exception) { MessageBox.Show(CStaticClass.GetExceptionInfo(exception), "应用程序异常", MessageBoxButtons.OK, MessageBoxIcon.Error); } }