using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Linq; using System.Windows.Forms; using DevExpress.XtraBars; using DevExpress.XtraGrid.Views.Base; //using DeiNiu.wms.Logical; using DeiNiu.wms.Data; using DevExpress.XtraGrid.Columns; using System.Threading; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraEditors.DXErrorProvider; using DeiNiu.wms.Data.Model; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DeiNiu.Utils; using DevExpress.XtraEditors.Repository; // using DeiNiu.wms.win.ServiceReferenceOutRequest; //远程 using DeiNiu.wms.win.ServiceReferenceStockOutRequest; using DeiNiu.wms.win.ServiceReferenceStockOutPickRequest; using Deiniu.win.elelab; using DeiNiu.wms.win.waveRuleService; //开发环境 // using DeiNiu.wms.win.ServiceReferenceOutRequestLocal;//本地 namespace DeiNiu.wms.win { public partial class GoodsOutForm : BasicRibbonForm { private string lastQuery = ""; private DataTable dtPickOrders; private int selectedRowIndex = -1; private WmsOutPickRequest selectedRequest; int preCnt = 0; Thread threadPreProcess; bool autoOrder, autoWave; bool isManualRefreshPickList = false; // string currentWaveOrder = ""; DataTable dtException; DataTable dtBulks; WmsOutPickDetail_tmp exceptionDetail; int selectedLine = -1; string selectedSales = ""; public GoodsOutForm() { debug("start 出库。。。。。。"); InitializeComponent(); initialControls(); initialBackGroundTasks(); isLoading = false; debug("end 出库。。。。。。"); } #region initialControls bool isLoading = true; private void initialControls() { btnRefresh.Width = btnQuery.Width = btnPriority.Width = btnNewWave.Width = btnPickOrders.Width = btnPrintPick.Width = btnCorrect.Width = btnEndWave.Width = 23; btnRefresh.Height = btnQuery.Height = btnPriority.Height = btnNewWave.Height = btnPickOrders.Height = btnPrintPick.Height = btnCorrect.Height = btnEndWave.Height = 78; initialComboBoxes(); initialPagerControls(); initialDataGrid(); initialQueryInput(); setValidationRule(); initialTimer(); updateLightsStatus(); #if debug layoutControlItem9.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; #endif } private void initialBackGroundTasks() { swAutoOrder.IsOn = WmsConstants.AUTO_SYNC_SALE_ORDER; //lgOutReq.UpdateUIDelegate += updatePreOutStatus; //lgOutReq.TaskCallBack += preOutFinished; /* if (autoOrder) { preErpOrders(); } */ checkEditAutoInterVal.Checked = true; swAutoWave.IsOn = WmsConstants.AUTO_NEW_WAVE; //lgt.UpdateUIDelegate += updatePickDetails; //lgt.TaskCallBack += loadWaveDetails;// waveStart; //lightLabelsCurrentWave(); /* if (autoWave) { newWave(); } else { // lightLabelsCurrentWave(); } Thread threadPreProcess = new Thread(searchLight); threadPreProcess.IsBackground = true; threadPreProcess.Start(); */ } private void initialComboBoxes() { Node[] nds = { }; DataTable dt = Park.getDictionary(false); if (dt.Rows.Count == 0) { return; } DataRow[] drs = dt.Select("flag >0"); foreach (DataRow dr in drs) { int flag = Convert.ToInt32(dr["flag"].ToString()); int parentId = Convert.ToInt32(dr["id"].ToString()); DataRow[] drss = Park.getDictionary(false).Select("parentId =" + parentId); switch (flag) { case 2007: initialComboBoxs(this.comException, drss, false); break; case 3001: initialComboBoxs(this.comboWaveRule, drss, true); break; } } this.initialComboBoxs(this.comPriority, this.pickPriority, false); waveRuleService.WcfWaveRule[] rules = wrClient.getWaveRules(enumWaveRuleType.DPS灯光波次); //pickClient.Close(); Dictionary dic = new Dictionary(); foreach (WcfWaveRule rule in rules) { dic.Add(rule.ID, rule.ruleName); } initialComboBoxs(comboWaveRule, dic); WcfWaveRule rulex = wrClient.getCurrentActiveRule(enumWaveRuleType.DPS灯光波次); //pickClient.Close(); if (rulex.ID > 0) { int i = 0; foreach (Object item in comboWaveRule.Properties.Items) { if (((Colitem)item).key == rulex.ID) { comboWaveRule.SelectedItem = item; // comboState.SelectedIndex = i; break; } i++; } this.spinWave.Value = rulex.interval; } } private void setValidationRule() { // dxValidationProvider.SetValidationRule(comWarehouse, ValidationRules.notEmptyValidationRule); //txtGoodType.Properties.MaxLength = 40; //txtGoodDesc.Properties.MaxLength = 250; //textEdit1.Properties.MaxLength = txtGoodType.Properties.MaxLength; } private void initialQueryInput() { } private void initialDataGridColumns() { setupGridView(gridView1, false); //setupGridView(gridView2, false,false); //setupGridView(gridView3, false,false); // gridviewGoodsType.PopulateColumns(); gridView1.Columns.Clear(); // gridviewGoodsType.Columns.Remove(gridviewGoodsType.Columns["DealerPrice"]); GridColumn myCol0 = new GridColumn() { Caption = "ID", Visible = true, FieldName = "id" }; myCol0.Visible = false; this.gridView1.Columns.Add(myCol0); GridColumn myCol1 = new GridColumn() { Caption = "单号", Visible = true, FieldName = WmsOutPickRequest.fields.pickOrderNo.ToString() }; // GridColumn myCol2 = new GridColumn() { Caption = "类别", Visible = true, FieldName = WmsOutPickRequest.fields.orderTypeName.ToString() }; GridColumn myCol3 = new GridColumn() { Caption = "状态", Visible = true, FieldName = WmsOutPickRequest.fields.state.ToString() }; GridColumn myCol4 = new GridColumn() { Caption = "客户", Visible = true, FieldName = WmsOutPickRequest.fields.customerName.ToString() }; GridColumn myCol5 = new GridColumn() { Caption = "补货情况", Visible = true, FieldName = WmsOutPickRequest.fields.description.ToString() }; //GridColumn myCol6 = new GridColumn() { Caption = "日期", Visible = true, FieldName = WmsOutPickRequest.fields.orderDate.ToString() }; GridColumn myCol7 = new GridColumn() { Caption = "优先级", Visible = true, FieldName = WmsOutPickRequest.fields.priority.ToString() }; this.gridView1.Columns.Add(myCol7); // this.gridView1.Columns.Add(myCol5); this.gridView1.Columns.Add(myCol4); this.gridView1.Columns.Add(myCol1); // this.gridView1.Columns.Add(myCol6); // this.gridView1.Columns.Add(myCol3); //to show bottom scroll bar gridView1.OptionsView.ColumnAutoWidth = false; gridView1.BestFitColumns(); gridView1.Focus(); // initialGridView2Columns(); //gridControl2.DataSource = null; } private void initialGridView2Columns(GridView gridview) { setupGridView(gridview, true, true, false); gridview.FocusRectStyle = DrawFocusRectStyle.None; // gridviewGoodsType.PopulateColumns(); gridview.Columns.Clear(); // gridviewGoodsType.Columns.Remove(gridviewGoodsType.Columns["DealerPrice"]); GridColumn myCol0 = new GridColumn() { Caption = "ID", Visible = true, FieldName = "id" }; myCol0.Visible = false; gridview.Columns.Add(myCol0); GridColumn myCol01 = new GridColumn() { Caption = "单号", Visible = true, FieldName = WmsOutPickRequest.fields.pickOrderNo.ToString() }; GridColumn myCol1 = new GridColumn() { Caption = "商品编码", Visible = true, FieldName = WmsGoods.fields.goodsId.ToString() }; GridColumn myCol2 = new GridColumn() { Caption = "商品名称", Visible = true, FieldName = WmsGoods.exfields.goodsName.ToString() }; GridColumn myCol3 = new GridColumn() { Caption = "厂家", Visible = true, FieldName = WmsGoods.exfields.manufacturer.ToString() }; GridColumn myCol4 = new GridColumn() { Caption = "规格", Visible = true, FieldName = WmsGoods.exfields.spec.ToString() }; GridColumn myCol5 = new GridColumn() { Caption = "单位", Visible = true, FieldName = WmsGoods.exfields.unit.ToString() }; GridColumn myCol6 = new GridColumn() { Caption = "大包装数量", Visible = true, FieldName = WmsGoods.exfields.bigCount.ToString() }; GridColumn myCol7 = new GridColumn() { Caption = "剂型", Visible = true, FieldName = WmsGoods.exfields.type.ToString() }; GridColumn myCol8 = new GridColumn() { Caption = "商品类型", Visible = true, FieldName = WmsGoods.exfields.goodsTypeName.ToString() }; // GridColumn myCol9 = new GridColumn() { Caption = "大零", Visible = true, FieldName = WmsGoods.fields.bulkMax.ToString() }; // GridColumn myCol10 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsGoods.fields.batchMax1.ToString() }; // GridColumn myCol11 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsGoods.fields.batchMax2.ToString() }; GridColumn myCol12 = new GridColumn() { Caption = "国药准字", Visible = true, FieldName = WmsGoods.exfields.regeditCode.ToString() }; // GridColumn myCol100 = new GridColumn() { Caption = "数量", Visible = true, FieldName = WmsOutDetail.fields.count.ToString() }; GridColumn myCol100 = new GridColumn() { Caption = "数量", Visible = true, FieldName = "pdaOuting" }; // GridColumn myCol101 = new GridColumn() { Caption = "零货", Visible = true, FieldName = WmsOutDetail.fields.bulkCount.ToString() }; // GridColumn myCol102 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsOutDetail.fields.batch1Count.ToString() }; // GridColumn myCol103 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsOutDetail.fields.batch2Count.ToString() }; // GridColumn myCol104 = new GridColumn() { Caption = "箱", Visible = true, FieldName = WmsOutDetail.fields.boxcnt.ToString() }; GridColumn myCol14 = new GridColumn() { Caption = "批号", Visible = true, FieldName = WmsOutDetail.fields.batch.ToString() }; GridColumn myCol15 = new GridColumn() { Caption = "生产日期", Visible = true, FieldName = WmsOutDetail.fields.productDate.ToString() }; GridColumn myCol16 = new GridColumn() { Caption = "有效期", Visible = true, FieldName = WmsOutDetail.fields.validDate.ToString() }; // GridColumn myCol17 = new GridColumn() { Caption = "状态", Visible = true, FieldName = WmsOutDetail.fields.state.ToString() }; GridColumn myCol18 = new GridColumn() { Caption = "说明", Visible = true, FieldName = WmsOutDetail.fields.description.ToString() }; GridColumn myCo20 = new GridColumn() { Caption = "客户", Visible = true, FieldName = WmsOutPickRequest.fields.customerName.ToString() }; GridColumn myCol22 = new GridColumn() { Caption = "货位", Visible = true, FieldName = WmsOutPickLable.fields.locationId.ToString() }; gridview.Columns.Add(myCol01); gridview.Columns.Add(myCol2); gridview.Columns.Add(myCol22); gridview.Columns.Add(myCol100); gridview.Columns.Add(myCo20); // gridview.Columns.Add(myCol101); // gridview.Columns.Add(myCol102); // gridview.Columns.Add(myCol103); // gridview.Columns.Add(myCol104); gridview.Columns.Add(myCol6); gridview.Columns.Add(myCol5); gridview.Columns.Add(myCol15); gridview.Columns.Add(myCol16); gridview.Columns.Add(myCol3); gridview.Columns.Add(myCol14); gridview.Columns.Add(myCol3); gridview.Columns.Add(myCol8); //gridview.Columns.Add(myCol9); gridview.Columns.Add(myCol2); // gridview.Columns.Add(myCol6); gridview.Columns.Add(myCol4); gridview.Columns.Add(myCol7); gridview.Columns.Add(myCol12); gridview.Columns.Add(myCol1); // gridview.Columns.Add(myCol17); gridview.Columns.Add(myCol18); //to show bottom scroll bar gridview.OptionsView.ColumnAutoWidth = false; gridview.BestFitColumns(); // gridView2.Focus(); } private void initialGridView3Columns(GridView gridview) { if (gridView4 == gridview) { setupGridView(gridview, true, false, false); } else { setupGridView(gridview, true, true, false); } gridview.FocusRectStyle = DrawFocusRectStyle.None; // gridviewGoodsType.PopulateColumns(); gridview.Columns.Clear(); // gridviewGoodsType.Columns.Remove(gridviewGoodsType.Columns["DealerPrice"]); GridColumn myCol0 = new GridColumn() { Caption = "ID", Visible = true, FieldName = "id" }; myCol0.Visible = false; gridview.Columns.Add(myCol0); GridColumn myCol1 = new GridColumn() { Caption = "商品编码", Visible = true, FieldName = WmsGoods.fields.goodsId.ToString() }; GridColumn myCol2 = new GridColumn() { Caption = "商品名称", Visible = true, FieldName = WmsGoods.exfields.goodsName.ToString() }; GridColumn myCol3 = new GridColumn() { Caption = "厂家", Visible = true, FieldName = WmsGoods.exfields.manufacturer.ToString() }; GridColumn myCol4 = new GridColumn() { Caption = "规格", Visible = true, FieldName = WmsGoods.exfields.spec.ToString() }; GridColumn myCol5 = new GridColumn() { Caption = "单位", Visible = true, FieldName = WmsGoods.exfields.unit.ToString() }; // GridColumn myCol6 = new GridColumn() { Caption = "大包装数量", Visible = true, FieldName = WmsGoods.exfields.bigCount.ToString() }; GridColumn myCol7 = new GridColumn() { Caption = "剂型", Visible = true, FieldName = WmsGoods.exfields.type.ToString() }; GridColumn myCol8 = new GridColumn() { Caption = "商品类型", Visible = true, FieldName = WmsGoods.exfields.goodsTypeName.ToString() }; // GridColumn myCol9 = new GridColumn() { Caption = "大零", Visible = true, FieldName = WmsGoods.fields.bulkMax.ToString() }; // GridColumn myCol10 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsGoods.fields.batchMax1.ToString() }; // GridColumn myCol11 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsGoods.fields.batchMax2.ToString() }; GridColumn myCol12 = new GridColumn() { Caption = "国药准字", Visible = true, FieldName = WmsGoods.exfields.regeditCode.ToString() }; GridColumn myCol100 = new GridColumn() { Caption = "数量", Visible = true, FieldName = WmsOutDetail.fields.count.ToString() }; GridColumn myCol101 = new GridColumn() { Caption = "零货", Visible = true, FieldName = WmsOutDetail.fields.count.ToString() }; // GridColumn myCol102 = new GridColumn() { Caption = "整货", Visible = true, FieldName = WmsOutDetail.fields.batch1Count.ToString() }; // GridColumn myCol103 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsOutDetail.fields.batch2Count.ToString() }; // GridColumn myCol104 = new GridColumn() { Caption = "箱", Visible = true, FieldName = WmsOutDetail.fields.boxcnt.ToString() }; GridColumn myCol14 = new GridColumn() { Caption = "批号", Visible = true, FieldName = WmsOutDetail.fields.batch.ToString() }; GridColumn myCol15 = new GridColumn() { Caption = "生产日期", Visible = true, FieldName = WmsOutDetail.fields.productDate.ToString() }; GridColumn myCol16 = new GridColumn() { Caption = "有效期", Visible = true, FieldName = WmsOutDetail.fields.validDate.ToString() }; GridColumn myCol17 = new GridColumn() { Caption = "状态", Visible = true, FieldName = WmsOutDetail.fields.state.ToString() }; GridColumn myCol18 = new GridColumn() { Caption = "说明", Visible = true, FieldName = WmsOutDetail.fields.description.ToString() }; GridColumn myCol20 = new GridColumn() { Caption = "波次", Visible = true, FieldName = WmsOutPickLable.fields.dpsOrder.ToString() }; GridColumn myCol21 = new GridColumn() { Caption = "颜色", Visible = true, FieldName = "colorName" }; GridColumn myCol22 = new GridColumn() { Caption = "货位", Visible = true, FieldName = WmsOutPickLable.fields.locationId.ToString() }; GridColumn myCol23 = new GridColumn() { Caption = "标签", Visible = true, FieldName = WmsOutPickLable.fields.elabId.ToString() }; GridColumn myCol24 = new GridColumn() { Caption = "客户", Visible = true, FieldName = WmsOutPickRequest.fields.customerName.ToString() }; GridColumn myCol25 = new GridColumn() { Caption = "出库单", Visible = true, FieldName = WmsOutPickRequest.fields.pickOrderNo.ToString() }; GridColumn myCol26 = new GridColumn() { Caption = "复核异常", Visible = true, FieldName = "exception" }; GridColumn myCol27 = new GridColumn() { Caption = "复核数量", Visible = true, FieldName = WmsOutPickDetail.fields.confirmedCount.ToString() }; GridColumn myCol28 = new GridColumn() { Caption = "说明", Visible = true, FieldName = WmsOutPickDetail.fields.validRemark.ToString() }; GridColumn myCol281 = new GridColumn() { Caption = "复核台", Visible = true, FieldName = "desk" }; GridColumn myCol29 = new GridColumn() { Caption = "标签点亮", Visible = true, FieldName = "isLightUp" }; GridColumn myCol30 = new GridColumn() { Caption = "拣货状态", Visible = true, FieldName = "isPicked" }; GridColumn myCol31 = new GridColumn() { Caption = "端口", Visible = true, FieldName = "port" }; RepositoryItemImageComboBox repositoryImageComboBox2 = new RepositoryItemImageComboBox();//新建一个RepositoryItemImageComboBox repositoryImageComboBox2.GlyphAlignment = DevExpress.Utils.HorzAlignment.Center; repositoryImageComboBox2.SmallImages = imageList1; //指定一组图片 string[] s = new String[] { "1", "0" }; for (int i = 0; i < s.Length; i++) repositoryImageComboBox2.Items.Add(new ImageComboBoxItem(s[i], i + 1, i));//对应值绑定对应的图片 RepositoryItem ri = repositoryImageComboBox2 as RepositoryItem; gridControl1.RepositoryItems.Add(ri); myCol29.ColumnEdit = ri; //绑定到GridColumn myCol30.ColumnEdit = ri; if (gridview == gridView4) { gridview.Columns.Add(myCol281); gridview.Columns.Add(myCol2); gridview.Columns.Add(myCol14); gridview.Columns.Add(myCol26); gridview.Columns.Add(myCol100); gridview.Columns.Add(myCol27); gridview.Columns.Add(myCol20); gridview.Columns.Add(myCol21); gridview.Columns.Add(myCol22); gridview.Columns.Add(myCol23); gridview.Columns.Add(myCol28); gridview.OptionsView.ColumnAutoWidth = false; gridview.BestFitColumns(); return; } if (WmsConstants.OUT_LIGHT_ENABLE) { gridview.Columns.Add(myCol29); gridview.Columns.Add(myCol30); } gridview.Columns.Add(myCol25); gridview.Columns.Add(myCol21); gridview.Columns.Add(myCol22); gridview.Columns.Add(myCol23); gridview.Columns.Add(myCol31); gridview.Columns.Add(myCol101); gridview.Columns.Add(myCol5); // gridview.Columns.Add(myCol17); gridview.Columns.Add(myCol24); gridview.Columns.Add(myCol7); gridview.Columns.Add(myCol14); gridview.Columns.Add(myCol3); gridview.Columns.Add(myCol15); gridview.Columns.Add(myCol16); gridview.Columns.Add(myCol3); gridview.Columns.Add(myCol8); //gridview.Columns.Add(myCol9); gridview.Columns.Add(myCol2); // gridview.Columns.Add(myCol6); gridview.Columns.Add(myCol4); gridview.Columns.Add(myCol12); gridview.Columns.Add(myCol1); gridview.Columns.Add(myCol18); //to show bottom scroll bar gridview.OptionsView.ColumnAutoWidth = false; gridview.BestFitColumns(); // gridView2.Focus(); } #endregion /* void setProgressbar() { progressBarControl1.Visible = true; //设置一个最小值 progressBarControl1.Properties.Minimum = 0; //设置一个最大值 progressBarControl1.Properties.Maximum = WmsConstants.PREPICKING_ORDERS_CNT ; //设置步长,即每次增加的数 progressBarControl1.Properties.Step = 1; //设置进度条的样式 progressBarControl1.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid; //当前值 progressBarControl1.Position = 0; //是否显示进度数据 progressBarControl1.Properties.ShowTitle = true; //是否显示百分比 progressBarControl1.Properties.PercentView = true; } */ /// /// 预处理,按客户分拆订单,生成分拣单,并出库 /// private void preErpOrders() { // swAutoWave.Enabled = false; // btnPickOrders.Enabled = false; // client.Open(); // client.syncOrders(); // showWaitForm(); // outClient.syncOrders(); // DataTable dt = outClient.getNewRequests().Tables[0];//.getWmsOutRequest.getNewRequests().Tables[0]; // preCnt = dt.Rows.Count; // if (preCnt >= 0) // { //threadPreProcess = new Thread(lgOutReq.preProcessOutOrders); //threadPreProcess.IsBackground = true; //threadPreProcess.Start(); // client.syncOrders(); //threadPreProcess = new Thread(preErpOrdersInWcf); //threadPreProcess.IsBackground = true; //threadPreProcess.Start(); // preErpOrdersInWcf(); // } if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { loadPickOrders(); })); } else { loadPickOrders(); } // this.loadPickOrders(); // preErpOrdersInWcf(); it is in windows service now. btnPickOrders.Enabled = true; // client.Close(); } /* void preErpOrdersInWcf() { try { outClient.preProcessOutOrders(); //pickClient.Close(); } catch (Exception e) { showErrorMsg(e,e.Message); } finally { closeWaitForm(); } } * */ delegate void AsynUpdateUI(int step); private void updatePreOutStatus(int i) { if (InvokeRequired) { this.Invoke(new AsynUpdateUI(delegate(int s) { //progressBarControl1.Properties.Maximum = WmsConstants.PREPICKING_ORDERS_CNT; //progressBarControl1.Position = i; //this.prgbar. += s; // this.prgbar.Text = i + "/" + preCnt; }), i); if (i == dtPickOrders.Rows.Count) { // loadData();//更新界面列表 } } else { //progressBarControl1.Properties.Maximum = WmsConstants.PREPICKING_ORDERS_CNT; //progressBarControl1.Position += 1; // this.prgbar.Text = i + "/" + preCnt; if (i == dtPickOrders.Rows.Count) { // loadData();//更新界面列表 } } } DateTime lastRefreshTime; int refreshInterval = 15; //完成任务时需要调用 delegate void loadNewPickOrders(); private void refreshOrderList() { //还可以进行其他的一些完任务完成之后的逻辑处理 //swAutoOrder.Enabled = true; //btnPickOrders.Enabled = !autoOrder; if (!autoOrder && !this.isManualRefreshPickList) { debug("refreshOrderList, return with reason..... !autoOrder && !this.isManualRefreshPickList"); return; } TimeSpan ts = DateTime.Now - lastRefreshTime; if (ts.TotalDays > 10) { // lastRefreshTime = DateTime.Now; // return; refreshInterval = 15;// 初次启动15秒后开始提取合并出库单 } else { refreshInterval = 15 + Convert.ToInt32(spinOrder.Value * 25); } if (ts.TotalSeconds < refreshInterval) { return; } this.isManualRefreshPickList = false; //手动刷新 只单独自动刷一次 lastRefreshTime = DateTime.Now; if (InvokeRequired) { this.Invoke(new loadNewPickOrders(delegate() { swAutoOrder.Enabled = true; btnPickOrders.Enabled = !autoOrder; // this.loadPickOrders(); if (autoOrder) { setPreOrderInterVal(); } })); } else { swAutoOrder.Enabled = true; btnPickOrders.Enabled = !autoOrder; // this.loadPickOrders(); if (autoOrder) { setPreOrderInterVal(); } } if (autoOrder) { // setPreOrderInterVal(); // refreshInterval = 15+ Convert.ToInt32(spinOrder.Value * 60); // Thread.CurrentThread.Join(refreshInterval); //继续后台处理 preErpOrders(); } } private void setPreOrderInterVal() { if (checkEditAutoInterVal.Checked && dtPickOrders != null) { decimal waitingOrders = dtPickOrders.Rows.Count * pager1.PageCount; int pickOrdersPerWave = 10; int cacheWaves = 10; if (waitingOrders <= pickOrdersPerWave * cacheWaves) { spinOrder.Value = 5; return; } decimal minutesPerWave = WmsConstants.WAVE_SECONDS / 60; //3 minues per wave minutesPerWave = minutesPerWave > 0 ? minutesPerWave : 1; decimal interval = (waitingOrders - pickOrdersPerWave * cacheWaves) / pickOrdersPerWave * minutesPerWave; spinOrder.Value = interval >= 0 ? interval : spinOrder.Value; // spinOrder.Value = 0; } } /// /// 更新拣选明细 /// private void updatePickDetails() { } DateTime lastWaveRequestTime; DateTime lastNoWaveRequestTime; delegate void loadNewCurrentWave(); /// /// start new wave /// public void waveStart() { //swAutoWave.Enabled = true; //btnNewWave.Enabled = !autoWave; // loadWaveDetails(); TimeSpan ts = DateTime.Now - lastWaveRequestTime; if (ts.TotalDays > 10) { LogHelper.debug(typeof(GoodsOutForm), string.Format(" ts.TotalDays...{0} ", ts.TotalDays)); lastWaveRequestTime = DateTime.Now; return; } else { int sleepTime = (int)spinWave.Value;//波次间隔 5s LogHelper.debug(typeof(GoodsOutForm), string.Format(" ts.TotalSeconds...{0} ,sleepTime {1} ", ts.TotalSeconds,sleepTime)); if (ts.TotalSeconds < sleepTime) { return; } } debug( string.Format(" canNewWave {0} ", canNewWave)); if (!canNewWave) // if (!lgt.canNewWave) { return; } if (autoWave) { // int sleepTime = (int) spinWave.Value * 1000;//波次间隔 5s //while (!lgt.canNewWave) //{ // Thread.CurrentThread.Join(1000); //} // Thread.CurrentThread.Join(sleepTime); newWave(); // this.clearWaveData(); lastWaveRequestTime = DateTime.Now; } else { btnNewWave.Enabled = dtBulks == null || dtBulks.Rows.Count == 0; } } void loadWaveDetails() { debug("start to loadWaveDetails....."); if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { swAutoWave.Enabled = true; btnNewWave.Enabled = !autoWave; this.loadPickOrdersInWave(); // this.loadPickOrders();//更新等待订单列表 // btnEndWave.Enabled = true; })); } else { swAutoWave.Enabled = true; // btnNewWave.Enabled = !autoWave; this.loadPickOrdersInWave(); // btnEndWave.Enabled = true; } debug("end loadWaveDetails...."); } // Thread threadNewWave; private void newWave() { try { debug("start to create new wave ....."); Thread threadNewWave = new Thread(newPickWave); threadNewWave.IsBackground = true; threadNewWave.Start(); // loadWaveDetails(); // lgt.newPickWave(); debug(" create new wave in new thread....."); } catch (DeiNiuException de) { showErrorMsg(de.Message); } catch (Exception er) { showErrorMsg(er.Message); } } private void loadPickOrdersInWave() { debug("start loadPickOrdersInWave....."); //showWaitForm(); try { // dtBulks = lgt.getWmsOutPickRequest.getBulkDetailInCurrentWave().Tables[0]; dtBulks = pickClient.getBulkDetailInCurrentWave(); //pickClient.Close(); // gridControl2.DataSource = null; updateLableStatus(dtBulks); debug(string.Format("load bulk details in current wave,count {0} ", dtBulks.Rows.Count)); gridControl3.DataSource = dtBulks.DefaultView; initialGridView3Columns(gridView3); btnRelight.Enabled = dtBulks.Rows.Count > 0; WmsConstants.WAVE_CURRENT_ORDER = ""; btnNewWave.Enabled = dtBulks.Rows.Count == 0; if (dtBulks.Rows.Count > 0) { WmsConstants.WAVE_LAST_FREE_TIME = DateTime.MinValue; //if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) { string waveStarTime = dtBulks.Rows[0]["createtime"].ToString(); DateTime lastWaveTime = Convert.ToDateTime(waveStarTime); string currentWaveOrder = dtBulks.Rows[0]["dpsOrder"].ToString(); WmsConstants.WAVE_LAST_TIME = lastWaveTime; WmsConstants.WAVE_CURRENT_ORDER = currentWaveOrder; //只显示有零货的波次 } debug("start getPickDetailByWaveOrder....."); //DataTable dtBatch = lgt.getWmsOutPickRequest.getPickDetailByWaveOrder(WmsConstants.WAVE_CURRENT_ORDER).Tables[0]; // DataTable dtBatch = pickClient.getPickDetailByWaveOrder(WmsConstants.WAVE_CURRENT_ORDER); //pickClient.Close(); // debug("end getPickDetailByWaveOrder.....1"); // DataView dv = dtBatch.DefaultView; // dv.RowFilter = "volType >0"; // gridControl2.DataSource = dv; debug("end getPickDetailByWaveOrder.....2"); } else { if (WmsConstants.WAVE_LAST_FREE_TIME == DateTime.MinValue) { WmsConstants.WAVE_LAST_FREE_TIME = DateTime.Now; } } // debug("initialGridView2Columns .....1"); // initialGridView2Columns(gridView2); lbWaveNo.Text = string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER) ? "空闲" : WmsConstants.WAVE_CURRENT_ORDER; btnEndWave.Enabled = !string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER); //get validaiton exception list debug("initialGridView2Columns .....2"); // bindException(); //if (!string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //{ // // timeCnt(); //} } catch (Exception er) { //pickClient.Close(); showErrorMsg(er.Message); } closeWaitForm(); debug("end loadPickOrdersInWave....."); } void bindException() { debug(string.Format("begin to bindException ")); // dtException = lgt.getWmsOutPickRequest.getBulkValidationException(enumOutStockPickStatus.复核异常).Tables[0]; dtException = pickClient.getBulkValidationException((int)enumOutStockPickStatus.复核异常); //pickClient.Close(); DataView dv = dtException.DefaultView; // dv.RowFilter = "state =" + (int)enumOutStockDetailStatus.validatedException; exceptionRowIndex = -1; gridControl4.DataSource = dv; initialGridView3Columns(gridView4); // debug(string.Format("end  bindException,count {0} ", dtException.Rows.Count)); // setCurrentValidationDetail(); } /// /// loading waiting pick orders /// private int pagerQuery() { // initialRequestOrders(); //this.gridviewGoodsType.DataSource = lgt.GetAllActiveData().Tables[0].DefaultView; // debug("start pagerQuery....."); //showWaitForm(); try { // this.splashScreenManager1.ShowWaitForm(); // string query = string.Format("{0} =#'{1}';", WmsOutPickRequest.fields.outStoreType.ToString(), (int)enumOutStoreType.拣货出库) // + string.Format("{0} =#'{1}';", WmsOutRequest.fields.state.ToString(), (int)enumOutStockRequestStatus.正在分拣) string query = string.Format("{0} =# {1} ;", WmsOutPickRequest.fields.outStoreType.ToString(), (int)enumOutStoreType.拣货出库) + string.Format("{0} ># {1} ;", WmsOutPickRequest.fields.bulkCnt.ToString(), 0) + string.Format("{0} is #{1};", WmsOutPickRequest.fields.waveOrder.ToString(), "null") + (lgPriority.Expanded && this.txtCustname.Text.Trim().Length > 0 ? string.Format("{0} like #'%{1}%';", WmsOutPickRequest.fields.customerName.ToString(), filtRiskChar(this.txtCustname.Text.Trim())) : ""); bool isQueryNotChanged = lastQuery.Equals(query); this.pager1.PageCurrent = isQueryNotChanged ? this.pager1.PageCurrent : 1; //根据查询条件的变化给pager赋值 this.pager1.PageCurrent = this.pager1.PageCurrent > 0 ? this.pager1.PageCurrent : 1; int start = (pager1.PageSize * (pager1.PageCurrent - 1) + 1); int end = (pager1.PageSize * pager1.PageCurrent); lastQuery = query; DataSet ds = pickClient.Query(query, start, end); //pickClient.Close(); dtPickOrders = ds.Tables[0]; int cnt = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString()); //dt = lgt.Query(query, start, end); //string.IsNullOrEmpty(query) ? lgt.GetGoodType.getAllData(start, end) : lgt.g; dtPickOrders.PrimaryKey = new DataColumn[] { dtPickOrders.Columns["ID"] }; bool firstLoad = !isQueryNotChanged || this.gridControl1.DataSource == null; this.gridControl1.DataSource = dtPickOrders.DefaultView; initialDataGridColumns(); //update selected row index to the last updated one. if (selectedRequest != null) { selectedRowIndex = -1; DataRow dr = dtPickOrders.Rows.Find(selectedRequest.ID); if (dr != null) { selectedRowIndex = dtPickOrders.Rows.IndexOf(dr); } if (selectedRowIndex >= 0 && dtPickOrders.Rows.Count > selectedRowIndex) { // gridView1.SelectRow(selectedRowIndex); gridView1.FocusedRowHandle = selectedRowIndex; // gridView1.MakeRowVisible(selectedRowIndex); } //gridView1.FocusedRowHandle = selectedRowIndex; } else // if (firstLoad) { gridView1.FocusedRowHandle = 0; gridView1.SelectRow(0); // setCurrentRequestDetail(); } closeWaitForm(); return cnt; } catch (Exception e) { //pickClient.Close(); showErrorMsg(e, e.Message); } //closeWaitForm(); return 0;// lgt.getRowCount(query); // return lgt.GetGoodType.QueryCount(); //debug("end pagerQuery....."); } /// /// 分页控件产生的事件 /// private int pager_EventPaging(DeiNiu.Controls.pager.EventPagingArg e) { selectedRowIndex = 0; //reset currentRowIndex return pagerQuery(); } private void initialPagerControls() { pager1.MaximumSize = new Size(0, 20); pager1.EventPaging += new DeiNiu.Controls.pager.EventPagingHandler(pager_EventPaging); #region DataGridView与Pager控件绑定 this.pager1.PageCurrent = 1;//当前页为第一页 pager1.PageSize = Utils.WmsConstants.PAGER_SIZE;//每页行数 this.pager1.Bind();//绑定 #endregion } private void gridView1_FocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e) { if (gridView1.FocusedRowHandle < 0 || gridView1.FocusedRowHandle == selectedRowIndex) { if (gridView1.IsGroupRow(e.RowHandle)) //set first row of group selected { selectedRowIndex = gridView1.GetChildRowHandle(e.RowHandle, 0); // setCurrentRequestDetail(); } return; ; } selectedRowIndex = gridView1.FocusedRowHandle; // showErrorMsg("selection:"+ selectedRowIndex); //setCurrentRequestDetail(); } private void clearInputs() { } private void gridView1_DataSourceChanged(object sender, EventArgs e) { if (selectedRowIndex >= 0 && dtPickOrders.Rows.Count > selectedRowIndex) { gridView1.FocusedRowHandle = selectedRowIndex; gridView1.MakeRowVisible(selectedRowIndex); } } int exceptionRowIndex = -1; private void gridView4_FocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e) { if (gridView4.FocusedRowHandle < 0 || gridView4.FocusedRowHandle == exceptionRowIndex) { if (gridView4.IsGroupRow(e.RowHandle)) //set first row of group selected { exceptionRowIndex = gridView4.GetChildRowHandle(e.RowHandle, 0); setCurrentValidationDetail(); } return; ; } exceptionRowIndex = gridView4.FocusedRowHandle; // showErrorMsg("selection:"+ selectedRowIndex); setCurrentValidationDetail(); } private void gridView4_DataSourceChanged(object sender, EventArgs e) { if (selectedRowIndex >= 0 && dtPickOrders.Rows.Count > exceptionRowIndex) { gridView4.FocusedRowHandle = exceptionRowIndex; gridView4.MakeRowVisible(exceptionRowIndex); } } void setCurrentValidationDetail() { if (gridView4.FocusedRowHandle == -1) { return; } resetExceptionDetails(); DataRow dr = dtException.Rows[gridView4.FocusedRowHandle]; exceptionDetail = new WmsOutPickDetail_tmp(dr); if (dr == null) { return; } lbException.Text = dr["exception"].ToString(); lbGoodsName.Text = dr["goodsName"].ToString(); lbPickOrderNo.Text = dr["pickOrderNo"].ToString(); // lbWaveNo.Text = dr["dpsOrder"].ToString(); } System.Timers.Timer timer = new System.Timers.Timer();//实例化Timer类 //private void timeCnt() //{ // timer.Start(); ; //} private void initialTimer() { int intTime = 1000; timer.Interval = intTime;//设置间隔时间,为毫秒; timer.Elapsed += new System.Timers.ElapsedEventHandler(showWaveSpan);//到达时间的时候执行事件; timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; timer.Start(); } private void showWaveSpan(object source, System.Timers.ElapsedEventArgs e) { // debug(string.Format(" timer loop begin .... " )); TimeSpan ts = DateTime.Now - WmsConstants.WAVE_LAST_TIME;// WmsConstants.WAVE_LAST_TIME; try { debug("WmsConstants.WAVE_CURRENT_ORDER :" + WmsConstants.WAVE_CURRENT_ORDER); if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { // lbLightsInfo.Text = (lights.Count > 0 ? "" : "未检测到通道灯"); refreshOrderList(); updateLableStatus(); if (dtBulks == null) { lightLabelsCurrentWave(); }else if ( string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //start new wave { lbWaveSpan.ForeColor = Color.Green; if(lastNoWaveRequestTime == DateTime.MinValue) { lastNoWaveRequestTime = DateTime.Now; } // TimeSpan ts1 = DateTime.Now - WmsConstants.WAVE_LAST_FREE_TIME; // lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts1.Hours, ts1.Minutes, ts1.Seconds); TimeSpan ts1 = DateTime.Now - lastNoWaveRequestTime; // lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", 0, 0, spinWave.Value -(int)ts1.TotalSeconds); // lbWaveSpan.Text = (spinWave.Value - (int)ts1.TotalSeconds)+"" ; // lbWaveSpan.Text = (int)ts1.TotalSeconds + ""; lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts1.Hours, ts1.Minutes, ts1.Seconds); // debug(string.Format(" timer loop to start new wave.... ")); // this.clearWaveData(); waveStart();// newWave(); } else { lastNoWaveRequestTime = DateTime.MinValue; lbWaveSpan.ForeColor = Color.Black; lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds); } })); } else { //lbLightsInfo.Text = (lights.Count > 0 ? "" : "未检测到通道灯"); updateLableStatus(); if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //start new wave { lbWaveSpan.ForeColor = Color.Green; if (lastNoWaveRequestTime == DateTime.MinValue) { lastNoWaveRequestTime = DateTime.Now; } // TimeSpan ts1 = DateTime.Now - WmsConstants.WAVE_LAST_FREE_TIME; // lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts1.Hours, ts1.Minutes, ts1.Seconds); TimeSpan ts1 = DateTime.Now - lastNoWaveRequestTime; // lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", 0, 0, spinWave.Value -(int)ts1.TotalSeconds); // lbWaveSpan.Text = (spinWave.Value - (int)ts1.TotalSeconds)+"" ; // lbWaveSpan.Text = (int)ts1.TotalSeconds + ""; lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts1.Hours, ts1.Minutes, ts1.Seconds); // debug(string.Format(" timer loop to start new wave.... ")); // this.clearWaveData(); waveStart();// newWave(); } else { lastNoWaveRequestTime = DateTime.MinValue; lbWaveSpan.ForeColor = Color.Black; lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds); } } } catch (Exception er) { //pickClient.Close(); LogHelper.WriteLog(typeof(GoodsOutForm), er); } // debug(string.Format(" timer loop end .... ")); } void resetExceptionDetails() { exceptionDetail = null; lbException.Text = ""; lbGoodsName.Text = ""; lbPickOrderNo.Text = ""; comException.SelectedIndex = -1; textEditExRemark.Text = ""; // lbWaveNo.Text = ""; } private void btnDelete_Click(object sender, EventArgs e) { } protected void query() { pager1.Bind(); } private void loadPickOrders() { // showWaitForm(); try { query();// loadData(); } catch (Exception e) { //pickClient.Close(); showErrorMsg(e.Message); } finally { // WaitFormService.Close(); // closeWaitForm(); bbQuery.Enabled = true; } } private void bbQuery_ItemClick_1(object sender, ItemClickEventArgs e) { this.bbQuery.Enabled = false; loadPickOrders(); } private void updateObjects(List goods) { showWaitForm(); //WaitFormService.Show(this); try { // lgt.update(goods); //get updated data query(); } catch (Exception e) { showErrorMsg(e.Message); } finally { // WaitFormService.Close(); closeWaitForm(); } } private bool getCurrentObject() { if (selectedRowIndex < 0 || selectedRowIndex >= dtPickOrders.Rows.Count) { return false; } //DataRow currentRow = dtPickOrders.Rows[selectedRowIndex]; //selectedRequest = new WmsOutPickRequest(currentRow); return true; } private void gridView1_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) { if (gridView1.FocusedRowHandle < 0 || gridView1.FocusedRowHandle == selectedRowIndex) { return; } selectedRowIndex = gridView1.FocusedRowHandle; // showErrorMsg("selection:"+ selectedRowIndex); // setCurrentRequestDetail(); } private void initialDataGrid() { gridControl4.Size = new Size(gridControl4.Size.Width, 105); gridView1.OptionsSelection.MultiSelect = true;//按shift / control 多选 this.gridView1.OptionsBehavior.AutoPopulateColumns = false; this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.CellFocus; this.gridView1.OptionsBehavior.Editable = false; // this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false; this.gridView1.FocusedRowObjectChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventHandler(this.gridView1_FocusedRowObjectChanged); this.gridView1.DataSourceChanged += new System.EventHandler(this.gridView1_DataSourceChanged); //show line number this.gridView1.IndicatorWidth = 40; this.gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView_CustomDrawRowIndicator); this.gridView2.IndicatorWidth = 40; this.gridView2.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView_CustomDrawRowIndicator); this.gridView3.IndicatorWidth = 40; this.gridView3.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView_CustomDrawRowIndicator); //this.gridView3.IndicatorWidth = 40; //this.gridView3.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView_CustomDrawRowIndicator); this.gridView4.IndicatorWidth = 40; this.gridView4.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView_CustomDrawRowIndicator); this.gridView4.FocusedRowObjectChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventHandler(this.gridView4_FocusedRowObjectChanged); this.gridView4.DataSourceChanged += new System.EventHandler(this.gridView4_DataSourceChanged); // gridView3.RowCellStyle += gridView_RowCellStyle; gridView1.RowCellStyle += gridView_RowCellStyle; gridView1.CustomColumnDisplayText += gridView1_CustomColumnDisplayText; } private void gridView2_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (sender == gridView2) { if (e.Column.FieldName == "state") { switch (e.DisplayText) { case "1": e.DisplayText = "已出货"; break; case "0": e.DisplayText = "待出货"; break; case "2": e.DisplayText = "出现错误"; break; case "": e.DisplayText = "待出货"; break; //default: // e.DisplayText = "未分配货位"; } } } } void gridView_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { var currentView = sender as GridView; if (currentView == null) { return; } string state = currentView.GetDataRow(e.RowHandle)["priority"].ToString().Trim(); if (state == "0") { // return; } bool isFocused = e.RowHandle == currentView.FocusedRowHandle; DevExpress.Utils.AppearanceDefault rowStyle = null; DevExpress.Utils.AppearanceDefault appBlueRed = new DevExpress.Utils.AppearanceDefault(Color.White, Color.Red, Color.Empty, Color.Blue, System.Drawing.Drawing2D.LinearGradientMode.Horizontal); DevExpress.Utils.AppearanceDefault appYB = new DevExpress.Utils.AppearanceDefault(Color.White, Color.Red, Color.Green); DevExpress.Utils.AppearanceDefault alertFocus = new DevExpress.Utils.AppearanceDefault(Color.White, Color.Red, Color.Green, Color.Yellow); DevExpress.Utils.AppearanceDefault alert = new DevExpress.Utils.AppearanceDefault(Color.Red, Color.White); DevExpress.Utils.AppearanceDefault highPriorityFocus = new DevExpress.Utils.AppearanceDefault(Color.White, Color.Green); DevExpress.Utils.AppearanceDefault highPriority = new DevExpress.Utils.AppearanceDefault(Color.Green, Color.White); if (state == "0") { rowStyle = isFocused ? highPriorityFocus : highPriority; } else if (state == "2") { // rowStyle = isFocused ? alertFocus : alert; } DevExpress.Utils.AppearanceHelper.Apply(e.Appearance, rowStyle); /* if (sender == this.gridView2) { if (this.gridView2.GetDataRow(e.RowHandle)["state"].ToString().Trim() == "2") { DevExpress.Utils.AppearanceHelper.Apply(e.Appearance, alert); } }else if(sender == this.gridView1){ if ( state == "2") { if (currentView != null && e.RowHandle == currentView.FocusedRowHandle) { DevExpress.Utils.AppearanceHelper.Apply(e.Appearance, alertFocus); } else { DevExpress.Utils.AppearanceHelper.Apply(e.Appearance, alert); } } else if (state == "1") { DevExpress.Utils.AppearanceHelper.Apply(e.Appearance, passed); } } */ } /* private void setCurrentRequestDetail() { if (!getCurrentObject() || selectedRequest == null ) { return; } showWaitForm(); try { } catch (Exception e) { showErrorMsg(e.Message); } closeWaitForm(); } */ private void btnNewWave_Click(object sender, EventArgs e) { clearWaveData(); btnNewWave.Enabled = false; newWave(); } private void btnPickOrders_Click(object sender, EventArgs e) { showWaitForm(); autoOrder = false; btnPickOrders.Enabled = false; try { preErpOrders(); } catch (Exception er) { showErrorMsg(er.Message); } closeWaitForm(); setPreOrderInterVal(); isManualRefreshPickList = true; lastRefreshTime = DateTime.Now; autoOrder = swAutoOrder.IsOn; } private void btnEndWave_Click(object sender, EventArgs e) { //if (pickClient.finishCurrentWave(true)) //{ // clearWaveData(); //} if (MessageBox.Show("确定确认货物已经拣选完毕,并强制结束本轮拣货吗?", "强制结束", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } endWave(true); } void turnOffLights() { if (lights.Count == 0) { //searchLight(); // return; } // Model.dis_id_comment id; Model.dis_id id; //id.ele_id = Convert.ToInt32(new_id.Text); id.order = 1; id.ele_id = 65535; id.state = 1; //id. foreach (int port in light.activeComports) { if (port == 0) { continue; } // coms.com_manage[port].write_reset_device();// 复位各个硬件,通道灯,标签。。。 coms.com_manage[port].init_port.write_clear_comment(id); /* if (!lights.ContainsKey(port)) { continue; } foreach (int lt in lights[port]) { Model.close_channel_led idx; idx.channel_id = lt; idx.state = 1; coms.com_manage[port].init_port.write_close_channel_led(idx); } */ // a.write_clear_comment(id); } } Dictionary> lights = new Dictionary>(); void searchLight() { Model.modify_id id; // System.Threading.Thread.Sleep(50); foreach (int port in light.activeComports) { if (port == 0) { continue; } for (int i = 5000; i <= 5100; i++) { id.order = 0; id.new_ele_id = 0; id.old_ele_id = i; id.state = 1; bool ret = coms.com_manage[port].init_port.search_light_id(id); if (ret) { if (!lights.ContainsKey(port)) { lights[port] = new List(); } lights[port].Add(i); } } } } void endWave(bool isForce = false) { showWaitForm(); if (isForce) { // pick.init_port(enumLabelPickType.pick); turnOffLights(); } try { pickClient.finishCurrentWave(WmsConstants.WAVE_CURRENT_ORDER, isForce); //pickClient.Close(); } catch (Exception e) { closeWaitForm(); showErrorMsg(e.Message); } lastWaveRequestTime = DateTime.Now; clearWaveData(); waveStart(); btnEndWave.Enabled = false; btnRelight.Enabled = false; _canNewWave = true; closeWaitForm(); } private void clearWaveData() { LogHelper.debug(this.GetType(),"clear wave data..............."); WmsConstants.WAVE_CURRENT_ORDER = ""; lbWaveNo.Text = "空闲"; // WmsConstants.WAVE_LAST_FREE_TIME = DateTime.Now; // timer.Stop(); //lbWaveSpan.Text = "00:00:00"; //lbWaveSpan.Text = string.Format(" "); // loadPickOrdersInWave(); //gridControl3.DataSource =null; if (dtBulks != null) { dtBulks.Clear(); } // gridControl3.DataSource = null; gridControl2.DataSource = null; WmsConstants.WAVE_CURRENT_PICK_STATUS.Clear(); WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Clear(); } private void swAutoOrder_Toggled(object sender, EventArgs e) { autoOrder = swAutoOrder.IsOn; btnPickOrders.Enabled = !autoOrder; if (autoOrder) { preErpOrders(); } } private void swAutoWave_Toggled(object sender, EventArgs e) { autoWave = swAutoWave.IsOn; btnNewWave.Enabled = !autoWave; if (autoWave) { newWave(); } } private void btnRefresh_Click(object sender, EventArgs e) { showWaitForm(); // elelab.pick.init_port(enumLabelPickType.pick); loadPickOrdersInWave(); closeWaitForm(); } private void btnRelight_Click(object sender, EventArgs e) { turnOffLights(); lightLabelsCurrentWave(); } private void lightLabelsCurrentWave() { if (!WmsConstants.OUT_LIGHT_ENABLE) { return; } debug("start relightCurrentWave....."); //Thread light = new Thread(lgt.lightLables); //light.IsBackground = true; //light.Start(); loadWaveDetails(); closeWaitForm(); //showWaitForm("正在点亮标签..."); if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { loadPickOrders(); })); } else { loadPickOrders(); } try { lightLables(); // lgt.lightLables(); } catch (Exception er) { closeWaitForm(); showErrorMsg(er, er.Message); } finally { closeWaitForm(); } debug("end relightCurrentWave....."); } //private void checkAuto_CheckedChanged(object sender, EventArgs e) //{ // spinOrder.Enabled = checkAuto.Checked; //} private void btnCorrect_Click(object sender, EventArgs e) { if (exceptionDetail == null) { return; } if (comException.SelectedItem == null) { showErrorMsg("请选择处理结果"); comException.Focus(); return; } exceptionDetail.validSolution = ((Node)comException.SelectedItem).ID; exceptionDetail.solutionRemark = textEditExRemark.Text; exceptionDetail.bulkPickState = (int)enumOutStockPickStatus.复核异常处理; // exceptionDetail.Update(); try { bool b = this.pickClient.updateValidBulkPickExceptionStatus(exceptionDetail.ID, exceptionDetail.bulkPickState, exceptionDetail.solutionRemark, exceptionDetail.validSolution); //pickClient.Close(); resetExceptionDetails(); bindException(); } catch (Exception ex) { showErrorMsg(ex, ex.Message); } } private void checkEditAutoInterVal_CheckedChanged(object sender, EventArgs e) { spinOrder.Enabled = !checkEditAutoInterVal.Checked; } private void updateLableStatus(DataTable dt = null) { if (!WmsConstants.OUT_LIGHT_ENABLE) { return; } string key = ""; if (dt != null) { foreach (DataRow dr in dt.Rows) { if (dr["state"].ToString().Equals("1")) { key = Util.getLightKey(Convert.ToInt32(dr["color"].ToString()), Convert.ToInt32(dr["elabId"].ToString()), Convert.ToInt32(dr["elabAddress"].ToString())); WmsConstants.WAVE_CURRENT_PICK_STATUS[key] = true; } } } if (dtBulks == null || dtBulks.Rows.Count == 0) { return; } WmsOutPickLable label; DataView dv = dtBulks.DefaultView; debug(String.Format("updateLableStatus ...dtBulks row count {0}", dv.Count)); /*foreach(DataRowView dvRow in dv) { debug(String.Format("dtBulks row isPicked value {0}", dvRow["isPicked"].ToString())); debug(String.Format("dtBulks row isLightUp value {0}", dvRow["isLightUp"].ToString())); }*/ dv.RowFilter = "isPicked =0"; dv.Sort = "isPicked"; if (dv.Count == 0) { //all picked, wave end debug(String.Format("updateLableStatus ...to end wave")); endWave(); return; } foreach (DataRow dr in dtBulks.Rows) { label = new WmsOutPickLable(dr); key = Util.getLightKey(label.color, label.elabId, label.elabAddress); if (WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.ContainsKey(key)) { dr["isLightUp"] = WmsConstants.WAVE_CURRENT_LIGHTS_STATUS[key] ? 1 : 0; } if (WmsConstants.WAVE_CURRENT_PICK_STATUS.ContainsKey(key)) { dr["isPicked"] = WmsConstants.WAVE_CURRENT_PICK_STATUS[key] ? 1 : 0; } } dv.RowFilter = ""; // 如果 dv.RowFilter ="isPicked =0"; 则已拣的不再显示 gridControl3.DataSource = dtBulks.DefaultView; } private void GoodsOutForm_FormClosing(object sender, FormClosingEventArgs e) { timer.Stop(); timer.Close(); //pickClient.Close(); autoWave = false; // timer.Enabled = false; turnOffLights();// elelab.pick.init_port(enumLabelPickType.pick); } //-------------below moved from logic layer WmsOutPickRequest outRequest = new WmsOutPickRequest(); WmsStockRecord stkRecord = new WmsStockRecord(); WmsOutPickLable pickLabelDetail = new WmsOutPickLable(); /// /// 点亮待拣选标签 /// private void lightLables() { // lightLablesInSvc(); //lightLabelsInWinformSvc(); if (!WmsConstants.OUT_LIGHT_ENABLE) { return; } string errorMsg = "灯光设备连接错误"; if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { lbLightsInfo.Text = "连接正常"; light.initPort(enumLabelPickType.pick); if (light.activeComports.Count == 0) { lbLightsInfo.Text = errorMsg; // showErrorMsg("拣选设备连接错误,请检查设备连接"); return; } })); } else { lbLightsInfo.Text = ""; light.initPort(enumLabelPickType.pick); if (light.activeComports.Count == 0) { lbLightsInfo.Text = errorMsg; // showErrorMsg("拣选设备连接错误,请检查设备连接"); return; } } // turnOffLights(); lastWave = DateTime.Now; WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Clear(); bool exist = pickClient.getCurrentPickList((int)enumPickState.未拣).Rows.Count > 0; //pickClient.Close(); if (!exist) { return; } showWaitForm("正在点亮标签..."); string result = light.lightsUp(pickClient.getPickedData((int)enumPickState.未拣), enumLabelPickType.pick); //pickClient.Close(); //#if DEBUG closeWaitForm(); if (!string.IsNullOrEmpty(result)) { // lbLightsInfo.Text = result; if (WmsConstants.OUT_SPEAK_WAVE) { speak(errorMsg); } // showErrorMsg(result); } else if (light.activeComports.Count == 0) { if (WmsConstants.OUT_SPEAK_WAVE) { speak(errorMsg); } } else { //#endif //speak(WmsConstants.WAVE_CURRENT_ORDER); if (WmsConstants.WAVE_CURRENT_ORDER.Length > 0) { if (WmsConstants.OUT_SPEAK_WAVE) { speak(WmsConstants.WAVE_CURRENT_ORDER + " 开始捡货啦"); } } LogHelper.debug(typeof(GoodsOutForm), "开始拣货 :" + WmsConstants.WAVE_CURRENT_ORDER); } // speak("Go! Go! Go!"); closeWaitForm(); } private static bool _canNewWave = true; //Int64 lastWave =0; DateTime lastWave; public bool canNewWave { get { // _canNewWave = _canNewWave && outRequest.canNewWave(); if (!autoWave) { return true; } if (_canNewWave) { lastWave = DateTime.Now; } else { TimeSpan ts = DateTime.Now - lastWave; if (ts.TotalMilliseconds > WmsConstants.MAX_SECONDS_BETWEEN_WAVES) //强制开始新波次,有可能会有再次发送亮灯数据时 { debug("ts.TotalMilliseconds > WmsConstants.MAX_SECONDS_BETWEEN_WAVES, canNewWave now"); _canNewWave = true; lastWave = DateTime.Now; } } return _canNewWave;//|| outRequest.canNewWave() ;//|| true; // return _canNewWave; // pickLabelDetail.getCurrentPickList(enumLabelPickState.notPicked).Tables[0].Rows.Count > 0; } } public void newPickWave() { if (!canNewWave) { return; } _canNewWave = false; bool exist = false; try { exist = pickClient.getCurrentPickList((int)enumPickState.未拣).Rows.Count > 0; //pickClient.Close(); debug(string.Format("newPickWave ... exist {0}",exist)); // bool exist = outRequest.getRequests(enumOutOrderType.pickOrder, enumOutStockRequestStatus.picking).Tables[0].Rows.Count >0; if (exist) { if (WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Count==0 || WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.ContainsValue(false)) { try { // lightLables(); // lgt.lightLables(); lightLabelsCurrentWave(); } catch (Exception er) { closeWaitForm(); showErrorMsg(er, er.Message); } finally { closeWaitForm(); } } // TaskCallBack(); return; // throw new DeiNiuException("当前波次还未处理完毕,不能开始新的波次。"); } // List requests = outRequest.getRequestObjects(enumOutOrderType.拣货单, enumOutStockRequestStatus.波次处理); /* int cnt = pickClient.getRequests4WaveCnt((int)enumOutOrderType.拣货单, (int)enumOutStockRequestStatus.等待波次); //pickClient.Close(); if (cnt == 0) { _canNewWave = true; // TaskCallBack(); return; //throw new DeiNiuException("没有待出库数据需要处理的。"); }*/ //string newWave = "开始新波次";// "New Wave is comming"; // speak(newWave); //to call client for new wave showWaitForm("正在配置新波次"); pickClient.newPickWave(); //pickClient.Close(); closeWaitForm(); LogHelper.debug(typeof(GoodsOutForm), "开始新波次 :" + WmsConstants.WAVE_CURRENT_ORDER); } catch (Exception er) { LogHelper.WriteLog(this.GetType(), er); //#if DEBUG showErrorMsg(er.Message); //#endif } lastWaveRequestTime = DateTime.Now; WmsConstants.WAVE_CURRENT_PICK_STATUS.Clear(); lightLabelsCurrentWave(); _canNewWave = true; } private void label1_Click(object sender, EventArgs e) { } // bool isPriorityQuery = false; private void btnQuery_Click_1(object sender, EventArgs e) { // isPriorityQuery = true; // isPriorityQuery = false; showWaitForm(); try { this.query(); } catch (Exception er) { showErrorMsg(er.Message); } closeWaitForm(); } private void btnPriority_Click(object sender, EventArgs e) { if (dtPickOrders == null || dtPickOrders.Rows.Count == 0) { showErrorMsg("没有要处理的出库订单"); return; } List orders = new List(); int[] selectedRows = gridView1.GetSelectedRows(); foreach (int i in selectedRows) { DataRowView row = (DataRowView)(GetGridViewFilteredAndSortedData(gridView1)[i]);// dt.Rows[i]; orders.Add(row[WmsOutPickRequest.fields.pickOrderNo.ToString()].ToString()); } if (orders.Count == 0) { showErrorMsg("请选择订单"); return; } int priority = comPriority.SelectedIndex; try { if (pickClient.updatePriority(orders.ToArray(), priority)) { MessageBox.Show("设置成功"); } lgPriority.Expanded = false; } catch { showErrorMsg("出错了"); } finally { //pickClient.Close(); } } private void lgPriority_CustomButtonChecked(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e) { lastQuery = ""; query(); } private void lgPriority_CustomButtonUnchecked(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e) { } private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (string.IsNullOrEmpty(e.DisplayText)) { return; } if (e.Column.FieldName == WmsOutPickRequest.fields.priority.ToString()) { if (!pickPriority.ContainsValue(e.DisplayText)) { int display = -100; string disTxt = e.DisplayText; try { display = Convert.ToInt32(e.DisplayText); e.DisplayText = this.pickPriority[display]; } catch { return; } } // e.DisplayText = pickDetailStatus.ContainsKey(display) ? pickDetailStatus[display] : display+""; } } private void lightSwitch_Toggled(object sender, EventArgs e) { if (isLoading) { return; } try { pickClient.switchLights(lightSwitch.IsOn); //pickClient.Close(); } catch (Exception er) { showErrorMsg(er, "出错了"); } finally { //pickClient.Close(); } WmsConstants.OUT_LIGHT_ENABLE = lightSwitch.IsOn; updateLightsStatus(); string msg = WmsConstants.OUT_LIGHT_ENABLE ? "灯光分拣模式已开启" : "灯光分拣模式已关闭"; showInfoMsg(msg); } void updateLightsStatus() { lightSwitch.IsOn = WmsConstants.OUT_LIGHT_ENABLE; btnPrintPick.Enabled = !WmsConstants.OUT_LIGHT_ENABLE; btnRelight.Enabled = WmsConstants.OUT_LIGHT_ENABLE; lbLightsInfo.Text = WmsConstants.OUT_LIGHT_ENABLE ? "灯光分拣模式已开启" : "灯光分拣模式已关闭"; } private void btnPrintPick_Click(object sender, EventArgs e) { } private void btnSetWaveRule_Click(object sender, EventArgs e) { WcfWaveRule waveRule = new WcfWaveRule(); waveRule.ID = ((Colitem)comboWaveRule.SelectedItem).key; waveRule.type = (int)enumWaveRuleType.DPS灯光波次; waveRule.interval = (int)spinWave.Value; if (waveRule.ID > 0) { bool rs = wrClient.setRule(waveRule); bool a = rs; } else { showErrorMsg("请选择波次规则"); } } } }