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 GoodsOutPartionPickForm : BasicRibbonForm { private string lastQuery = ""; private DataTable dtPickOrders; private int selectedRowIndex = -1; private WmsOutPickRequest selectedRequest; int preCnt = 0; Thread threadPreProcess; bool autoOrder, autoWave =true; bool isManualRefreshPickList = false; // string currentWaveOrder = ""; DataTable dtException; DataTable dtBulks; WmsOutPickDetail_tmp exceptionDetail; int selectedLine = -1; string selectedSales = ""; public GoodsOutPartionPickForm() { debug("start 出库。。。。。。"); lightPart.lightOffEvent += partFinished; InitializeComponent(); initialControls(); initialBackGroundTasks(); isLoading = false; debug("end 出库。。。。。。"); } #region initialControls bool isLoading = true; private void initialControls() { initialComboBoxes(); initialPagerControls(); initialDataGrid(); initialQueryInput(); setValidationRule(); initialTimer(); // updateLightsStatus(); getPartFinishIds(); } 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; lightAllLabels(); if (autoWave) { newWave(); } else { // lightLabelsCurrentWave(); } Thread threadPreProcess = new Thread(searchLight); threadPreProcess.IsBackground = true; threadPreProcess.Start(); } void lightAllLabels() { loadWaveDetails(); initLights(); // string result = lightPart.lightsUp(pickClient.getPartPickedData((int)enumPickState.未拣), enumLabelPickType.pick); int[] parts = { 4 }; lightLables(parts); closeClient(); } 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; } } waveRuleService.WcfWaveRule[] rules = wrClient.getWaveRules(enumWaveRuleType.DPS灯光波次); closeClient(); Dictionary dic = new Dictionary(); foreach (WcfWaveRule rule in rules) { dic.Add(rule.ID, rule.ruleName); } initialComboBoxs(comboWaveRule, dic); WcfWaveRule rulex = wrClient.getCurrentActiveRule(enumWaveRuleType.DPS灯光波次); closeClient(); 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(myCol1); // this.gridView1.Columns.Add(myCol6); // this.gridView1.Columns.Add(myCol3); this.gridView1.Columns.Add(myCol4); this.gridView1.Columns.Add(myCol5); this.gridView1.Columns.Add(myCol7); //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 myCol011 = new GridColumn() { Caption = "分区", Visible = true, FieldName = "partName" }; gridview.Columns.Add(myCol011); 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 myCol011 = new GridColumn() { Caption = "分区", Visible = true, FieldName = "partName" }; gridview.Columns.Add(myCol011); 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 = "desk" }; 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(myCol101); gridview.Columns.Add(myCol5); // gridview.Columns.Add(myCol17); gridview.Columns.Add(myCol24); gridview.Columns.Add(myCol31); 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(); in windows service now btnPickOrders.Enabled = true; // client.Close(); } /* void preErpOrdersInWcf() { try { outClient.preProcessOutOrders(); closeClient(); } 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) { return; } TimeSpan ts = DateTime.Now - lastRefreshTime; if (ts.TotalDays > 10) { // lastRefreshTime = DateTime.Now; // return; refreshInterval = 15;// 初次启动15秒后开始提取合并出库单 } else { refreshInterval = 15 + Convert.ToInt32(spinOrder.Value * 60); } 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; 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) { lastWaveRequestTime = DateTime.Now; return; } else { int sleepTime = 5;// (int)spinWave.Value;//波次间隔 5s if (ts.TotalSeconds < sleepTime) { return; } } 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); this.clearWaveData(); newWave(); 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.getPartionBulkDetailInCurrentWave(); closeClient(); 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); closeClient(); 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) { // setCurrentRequestDetail(); // 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.复核异常) ; closeClient(); 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); closeClient(); 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) { // 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 { if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { // lbLightsInfo.Text = (lights.Count > 0 ? "" : "未检测到通道灯"); //refreshOrderList(); updateLableStatus(); waveStart(); /* if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //start new wave { lbWaveSpan.ForeColor = Color.Green; 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); // debug(string.Format(" timer loop to start new wave.... ")); // this.clearWaveData(); waveStart();// newWave(); } else { 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(); waveStart(); /* if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //start new wave { lbWaveSpan.ForeColor = Color.Green; 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); // this.clearWaveData(); waveStart();// newWave(); } else { lbWaveSpan.ForeColor = Color.Black; lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds); } * */ } } catch (Exception er) { 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) { 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 { 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 == "1") { 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.ToInt16(new_id.Text); id.order = 1; id.ele_id = 65535; id.state = 1; //id. foreach (int port in light.activeComports) { if (port == 0) { continue; } // unart_manage.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); closeClient(); } catch(Exception e) { closeWaitForm(); showErrorMsg(e.Message); } clearWaveData(); // waveStart(); // btnEndWave.Enabled = false; // btnRelight.Enabled = false; _canNewWave = true; closeWaitForm(); } private void clearWaveData() { 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; } 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; 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(int[] parts) { if (!WmsConstants.OUT_LIGHT_ENABLE) { return; } debug("start relightCurrentWave....."); //Thread light = new Thread(lgt.lightLables); //light.IsBackground = true; //light.Start(); closeWaitForm(); if (parts.Length == 0) { return; } //showWaitForm("正在点亮标签..."); if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { loadWaveDetails(); loadPickOrders(); })); } else { loadWaveDetails(); loadPickOrders(); } try { lightLables(parts); // 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); closeClient(); 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.ToInt16(dr["color"].ToString()), Convert.ToInt16(dr["elabId"].ToString()), Convert.ToInt16(dr["elabAddress"].ToString())); WmsConstants.WAVE_CURRENT_PICK_STATUS[key] = true; } } } if (dtBulks == null || dtBulks.Rows.Count == 0) { return; } WmsOutPickLable label; DataView dv = dtBulks.DefaultView; dv.RowFilter = "isPicked =0"; dv.Sort = "isPicked"; if (dv.Count ==0) { //all picked, wave end 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(); // closeClient(); // closeClient(); autoWave = 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 lightLablesInSvc() { pickClient.lightLables(); } /// /// 点亮待拣选标签 /// private void lightLables(int[] parts) { // lightLablesInSvc(); //lightLabelsInWinformSvc(); if (!WmsConstants.OUT_LIGHT_ENABLE) { return; } if (parts.Length == 0) { return; } initLights(); // turnOffLights(); lastWave = DateTime.Now; WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Clear(); bool exist = pickClient.getCurrentPickList((int)enumPickState.未拣).Rows.Count > 0; closeClient(); if (!exist) { return; } showWaitForm("正在点亮标签..."); string result = lightPart.lightsUp(pickClient.getPartsPickList( parts,(int)enumPickState.未拣), enumLabelPickType.pick); closeClient(); //#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!"); } void initLights() { string errorMsg = "灯光设备连接错误"; if (InvokeRequired) { this.Invoke(new loadNewCurrentWave(delegate() { lbLightsInfo.Text = "设备连接正常"; lightPart.initPort(enumLabelPickType.pick); if (lightPart.activeComports.Count == 0) { lbLightsInfo.Text = errorMsg; // showErrorMsg("拣选设备连接错误,请检查设备连接"); return; } })); } else { lbLightsInfo.Text = "设备连接正常"; lightPart.initPort(enumLabelPickType.pick); if (lightPart.activeComports.Count == 0) { lbLightsInfo.Text = errorMsg; // showErrorMsg("拣选设备连接错误,请检查设备连接"); return; } } } 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) //强制开始新波次,有可能会有再次发送亮灯数据时 { _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; } int[] lstPartion ; _canNewWave = false; // bool exist = false; try { showWaitForm("正在配置新波次"); lstPartion= pickClient.newPartPickWave(); closeClient(); // WmsConstants.WAVE_CURRENT_PICK_STATUS.Clear(); lightLabelsCurrentWave(lstPartion); 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; //_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 { closeClient(); } } 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 (!pickDetailStatus.ContainsValue(e.DisplayText)) { int display = -100; string disTxt = e.DisplayText; try { display = Convert.ToInt16(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); closeClient(); } catch (Exception er) { showErrorMsg(er, "出错了"); } finally { closeClient(); } 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) { } void partFinished(int eleId) { int partion = eleId;// -WmsConstants.PART_FINISH_LABLE_ID_PLUS; // see if all lights data picked int[] parts = {partion}; DataTable dt = pickClient.getPartsPickList(parts,(int)enumPickState.未拣); if (dt.Rows.Count > 0) //未完成,则重新点亮本区域任务 { Thread.Sleep(2000); // WmsConstants.partStatus[eleId] = true; lightLables(parts); return; } pickClient.finishPartWave(partion, false); closeClient(); loadPickOrdersInWave(); newWave(); } void getPartFinishIds() { WmsConstants.PART_FINISH_LABLE_IDS = pickClient.getPartsFinishIds(); closeClient(); } private void btnRelight_Click_1(object sender, EventArgs e) { lightAllLabels(); } 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("请选择波次规则"); } } } }