2476 lines
		
	
	
		
			84 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			2476 lines
		
	
	
		
			84 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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 System.ServiceModel;
 | ||
| using DNLightSvr;
 | ||
| using System.ServiceModel.Description;  //开发环境
 | ||
| //  using DeiNiu.wms.win.ServiceReferenceOutRequestLocal;//本地
 | ||
| 
 | ||
| namespace DeiNiu.wms.win
 | ||
| {
 | ||
|     public partial class GoodsOutSeedsPickForm : 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 = "";
 | ||
|         Dictionary<int, bool> partionLighting = new Dictionary<int, bool>();
 | ||
|         public GoodsOutSeedsPickForm()
 | ||
|         {
 | ||
|          // debug("start 出库。。。。。。");
 | ||
|             lightPart.lightOffEvent += partFinished;
 | ||
|             InitializeComponent();
 | ||
|             initialControls();
 | ||
|             initialBackGroundTasks();
 | ||
|             isLoading = false;
 | ||
|           //  debug("end 出库。。。。。。");
 | ||
|             startHost();
 | ||
|             initLights();
 | ||
|         }
 | ||
|         #region initialControls
 | ||
|         bool isLoading = true;
 | ||
|         private void initialControls()
 | ||
|         {   
 | ||
|             initialComboBoxes();
 | ||
|            
 | ||
|             initialPagerControls();
 | ||
|             initialDataGrid();
 | ||
|             initialQueryInput(); 
 | ||
|             setValidationRule();
 | ||
|             initialTimer(); 
 | ||
|            // updateLightsStatus();
 | ||
|             getPartFinishIds();
 | ||
|             initialGridView3Columns(gridView3);
 | ||
|         }
 | ||
|         private void initialBackGroundTasks()
 | ||
|         {
 | ||
|             initLights();
 | ||
| 
 | ||
|             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<int, string> dic = new Dictionary<int, string>();
 | ||
| 
 | ||
|             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.fields.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(myCol100);
 | ||
|             gridview.Columns.Add(myCol22);
 | ||
|                  
 | ||
|             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 = "color" };
 | ||
|             GridColumn myCol32= new GridColumn() { Caption = "周转箱", Visible = true, FieldName = WmsOutPickLable.fields.plate.ToString() };
 | ||
|           
 | ||
|           
 | ||
|            
 | ||
|             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(myCol22);
 | ||
|                 gridview.Columns.Add(myCol100);
 | ||
|                 gridview.Columns.Add(myCol2); 
 | ||
|                 gridview.Columns.Add(myCol14);
 | ||
|                   gridview.Columns.Add(myCol281);
 | ||
|                 gridview.Columns.Add(myCol26);
 | ||
|                
 | ||
|                 gridview.Columns.Add(myCol27);
 | ||
|                 gridview.Columns.Add(myCol20);
 | ||
|                 gridview.Columns.Add(myCol32);
 | ||
|                 gridview.Columns.Add(myCol21);
 | ||
|                 
 | ||
| 
 | ||
|                 gridview.Columns.Add(myCol23);
 | ||
|                 gridview.Columns.Add(myCol28);
 | ||
|                
 | ||
|                 gridview.OptionsView.ColumnAutoWidth = false;
 | ||
|                 gridview.BestFitColumns();
 | ||
|                 return;
 | ||
|             }
 | ||
|             //if (WmsConstants.OUT_LIGHT_ENABLE)
 | ||
|             {               
 | ||
|               //  gridview.Columns.Add(myCol30);
 | ||
|             }
 | ||
|         
 | ||
|         
 | ||
|            
 | ||
|           gridview.Columns.Add(myCol2);
 | ||
|           gridview.Columns.Add(myCol22); 
 | ||
|            
 | ||
|               gridview.Columns.Add(myCol100); 
 | ||
|             gridview.Columns.Add(myCol23);
 | ||
|             if (WmsConstants.OUT_LIGHT_ENABLE)
 | ||
|             {
 | ||
|                 gridview.Columns.Add(myCol29);
 | ||
|                  
 | ||
|             }
 | ||
| 
 | ||
|               gridview.Columns.Add(myCol32);
 | ||
|            gridview.Columns.Add(myCol31); 
 | ||
|             gridview.Columns.Add(myCol21); 
 | ||
|             gridview.Columns.Add(myCol25); 
 | ||
|           
 | ||
|             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(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;
 | ||
| 
 | ||
|           
 | ||
| 
 | ||
|         }
 | ||
|         */
 | ||
|         /// <summary>
 | ||
|         /// 预处理,按客户分拆订单,生成分拣单,并出库
 | ||
|         /// </summary>
 | ||
|         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);
 | ||
|        
 | ||
|        
 | ||
|         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;
 | ||
|             }
 | ||
|         
 | ||
| 
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 更新拣选明细
 | ||
|         /// </summary>
 | ||
|         private void   updatePickDetails() {
 | ||
| 
 | ||
|         }
 | ||
|         DateTime lastWaveRequestTime;
 | ||
|         delegate void loadNewCurrentWave();
 | ||
|         /// <summary>
 | ||
|         /// start new wave
 | ||
|         /// </summary>
 | ||
|        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 ;
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
|  
 | ||
|         
 | ||
| 
 | ||
|         
 | ||
| 
 | ||
|        // Thread threadNewWave;
 | ||
|         private void newWave()
 | ||
|         {
 | ||
|             try
 | ||
|             {
 | ||
|                 debug("start to create new wave .....");
 | ||
|                  Thread threadNewWave = new Thread(newPickWave);
 | ||
|                  threadNewWave.IsBackground = true;
 | ||
|                  threadNewWave.Start();
 | ||
|                 //newPickWave();
 | ||
|                
 | ||
|                 debug(" create new wave in new thread.....");
 | ||
|             }
 | ||
|             catch (DeiNiuException de)
 | ||
|             {
 | ||
|                 showErrorMsg(de.Message);
 | ||
|             }
 | ||
|             catch (Exception er)
 | ||
|             {
 | ||
|                 showErrorMsg(er.Message);
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         private void loadPickOrdersInWave()
 | ||
|         {
 | ||
|             // showErrorMsg("开始加载波次明细");
 | ||
|             debug("start loadPickOrdersInWave.....");
 | ||
|             showWaitForm();
 | ||
|             try
 | ||
|             {
 | ||
|                 //  dtBulks  = lgt.getWmsOutPickRequest.getBulkDetailInCurrentWave().Tables[0];
 | ||
|                 dtBulks = pickClient.getPartionBulkDetailInCurrentWave();
 | ||
|                 closeClient();
 | ||
|                 gridControl3.DataSource = null;
 | ||
|                 // gridControl2.DataSource = null;
 | ||
|                 // updateLableStatus(dtBulks);
 | ||
|                 debug(string.Format("load bulk details in current wave,count {0} ", dtBulks.Rows.Count));
 | ||
|                 gridControl3.DataSource = dtBulks.DefaultView;
 | ||
|                 updateLableStatus(dtBulks);
 | ||
|                 //  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.....");
 | ||
| 
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     if (WmsConstants.WAVE_LAST_FREE_TIME == DateTime.MinValue)
 | ||
|                     {
 | ||
|                         WmsConstants.WAVE_LAST_FREE_TIME = DateTime.Now;
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
|                 // initialGridView3Columns(gridView3);
 | ||
|                 checkAndLightParts();
 | ||
|             }
 | ||
| 
 | ||
|             catch (Exception er)
 | ||
|             {
 | ||
|                 //  setCurrentRequestDetail();
 | ||
|                 showErrorMsg(er.Message);
 | ||
|             }
 | ||
| 
 | ||
|             try
 | ||
|             {
 | ||
|                 gridView3.BestFitColumns();
 | ||
|             } 
 | ||
|             catch (Exception er)
 | ||
|             { 
 | ||
|                // showErrorMsg(er.StackTrace);
 | ||
|             } 
 | ||
|             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();
 | ||
| 
 | ||
|         }
 | ||
|         /// <summary>  
 | ||
|         /// loading waiting pick orders
 | ||
|         /// </summary>  
 | ||
|         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.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.....");
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|    
 | ||
|        
 | ||
| 
 | ||
|         /// <summary>  
 | ||
|         /// 分页控件产生的事件  
 | ||
|         /// </summary>  
 | ||
|         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 (dtPickOrders!=null && 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 = 5000;
 | ||
|             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()
 | ||
|                     { 
 | ||
|                         updateLableStatus();
 | ||
|                         waveStart(); 
 | ||
|                      
 | ||
|                     }));
 | ||
|                 }
 | ||
|                 else
 | ||
|                 { 
 | ||
|                    updateLableStatus();
 | ||
|                    waveStart();
 | ||
|                      
 | ||
|                 }
 | ||
|             }
 | ||
|             catch (Exception er)
 | ||
|             {
 | ||
|               //  showErrorMsg(er.StackTrace);
 | ||
|                // 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<WmsGoods> 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 lightSeeds.activeComports)
 | ||
|             {
 | ||
|                 if (port == 0)
 | ||
|                 {
 | ||
|                     continue;
 | ||
|                 }
 | ||
|               //  unart_manage.com_manage[port].write_reset_device(); 复位各个硬件,通道灯,标签。。。
 | ||
|                  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<int, List<int>> lights = new Dictionary<int, List<int>>();
 | ||
|         void searchLight()
 | ||
|         {
 | ||
|             Model.modify_id id;
 | ||
| 
 | ||
|          //   System.Threading.Thread.Sleep(50);
 | ||
|             foreach (int port in lightSeeds.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<int>();
 | ||
|                         }
 | ||
|                         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 lightSeeds = new Thread(lgt.lightLables);
 | ||
|             //lightSeeds.IsBackground = true;
 | ||
|             //lightSeeds.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"))
 | ||
|                     {
 | ||
|                       // int color= lightSeeds.getMapColor(Convert.ToInt16(dr["partion"].ToString()), Convert.ToInt16(dr["color"].ToString()));
 | ||
|                        
 | ||
|                         int color = Convert.ToInt16(dr["color"].ToString());
 | ||
| 
 | ||
|                         key = Util.getLightKey(color, 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);
 | ||
|                // int color = lightSeeds.getMapColor(Convert.ToInt16(dr["partion"].ToString()), Convert.ToInt16(dr["color"].ToString()));
 | ||
|                 int color = Convert.ToInt16(dr["color"].ToString());
 | ||
|                 key = Util.getLightKey( 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)
 | ||
|         {
 | ||
|             if (host.State == CommunicationState.Opened)
 | ||
|             {
 | ||
|                 host.Close();
 | ||
|             }
 | ||
|             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();
 | ||
| 
 | ||
| 
 | ||
|          /// <summary>
 | ||
|         /// 点亮待拣选标签
 | ||
|         /// </summary>
 | ||
|         private void lightLablesInSvc()
 | ||
|         {
 | ||
|             pickClient.lightLables();
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 点亮待拣选标签
 | ||
|         /// 区域未亮灯的任务
 | ||
|         /// 按waveorder,deskid asc 排序,取前n个desk的亮灯任务
 | ||
|         /// </summary>
 | ||
|      
 | ||
|         private void lightLables(int partId)
 | ||
|         {
 | ||
| 
 | ||
|           //  lightLablesInSvc();
 | ||
| 
 | ||
|             //lightLabelsInWinformSvc();
 | ||
| 
 | ||
|             if (!WmsConstants.OUT_LIGHT_ENABLE)
 | ||
|             {
 | ||
|                 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;
 | ||
|             //}
 | ||
|             DataTable dt = pickClient.getSeedDesksPickList(partId, (int)enumPickState.未拣);
 | ||
|             
 | ||
|            
 | ||
| 
 | ||
|             showWaitForm("正在点亮标签...");
 | ||
|             string result = lightSeeds.lightsUp(dt, enumLabelPickType.seedPick);
 | ||
|             closeClient();  
 | ||
|  //#if DEBUG 
 | ||
|             closeWaitForm();
 | ||
|             partionLighting[partId] = true;
 | ||
| 
 | ||
| 
 | ||
|         }
 | ||
|         void initLights()
 | ||
|         {
 | ||
|             string errorMsg = "灯光设备连接错误";
 | ||
|             if (InvokeRequired)
 | ||
|             {
 | ||
|                 this.Invoke(new loadNewCurrentWave(delegate()
 | ||
|                 {
 | ||
|                     lbLightsInfo.Text = "设备连接正常";
 | ||
|                     lightSeeds.initPort(enumLabelPickType.pick);
 | ||
|                     if (lightSeeds.activeComports.Count == 0)
 | ||
|                     {
 | ||
|                         lbLightsInfo.Text = errorMsg;
 | ||
|                         // showErrorMsg("拣选设备连接错误,请检查设备连接");
 | ||
|                         return;
 | ||
|                     }
 | ||
|                     initComs();
 | ||
|                      
 | ||
|                 }));
 | ||
| 
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 lbLightsInfo.Text = "设备连接正常";
 | ||
|                 lightSeeds.initPort(enumLabelPickType.pick);
 | ||
|                 if (lightSeeds.activeComports.Count == 0)
 | ||
|                 {
 | ||
|                     lbLightsInfo.Text = errorMsg;
 | ||
|                     // showErrorMsg("拣选设备连接错误,请检查设备连接");
 | ||
|                     return;
 | ||
|                 }
 | ||
|                 initComs();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         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("正在配置新波次");
 | ||
| 
 | ||
| 
 | ||
|                 pickClient.newSeedsWave();
 | ||
|                 closeClient();
 | ||
|               //  WmsConstants.WAVE_CURRENT_PICK_STATUS.Clear();
 | ||
| 
 | ||
|                 if (InvokeRequired)
 | ||
|                 {
 | ||
|                     this.Invoke(new loadNewCurrentWave(delegate()
 | ||
|                     {
 | ||
|                         
 | ||
|                         loadPickOrdersInWave();
 | ||
|                         bindException();
 | ||
|                         pagerQuery();
 | ||
|                     }));
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     loadPickOrdersInWave();
 | ||
|                     bindException();
 | ||
|                     pagerQuery();
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|               
 | ||
|                 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;
 | ||
|             closeWaitForm();
 | ||
|             //_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<string> orders = new List<string>(); 
 | ||
|             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 getPartFinishIds()
 | ||
|         {
 | ||
|             WmsConstants.PART_FINISH_LABLE_IDS = pickClient.getPartsFinishIds();
 | ||
|             closeClient();
 | ||
|         }
 | ||
| 
 | ||
|         private void btnRelight_Click_1(object sender, EventArgs e)
 | ||
|         {
 | ||
| 
 | ||
|             startHost();
 | ||
|         }
 | ||
| 
 | ||
|         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("请选择波次规则");
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         //---------------------service
 | ||
| 
 | ||
|         private ServiceHost host = null;
 | ||
|        // public static List<ELabel> labelPool = new List<ELabel>();
 | ||
|         string svrUrl = "http://127.0.0.1:9998/DNLightSvc";//WmsConstants.LIGHT_SVR_ADDRESS;
 | ||
|         string wmsUrl = "";
 | ||
|         string postUrl = "";
 | ||
| 
 | ||
|         delegate void showStatus();
 | ||
|         void startHost()
 | ||
|         {
 | ||
|             //  lbStatus.Text = "服务启动失败";
 | ||
|             try
 | ||
|             {
 | ||
|                 //   svrUrl = System.Configuration.ConfigurationManager.AppSettings["BaseUri"];
 | ||
|                 wmsUrl = System.Configuration.ConfigurationManager.AppSettings["WMSuri"];
 | ||
|                 Uri baseAddress = new Uri(svrUrl);
 | ||
|                 LightService service = new LightService();
 | ||
|                 service.lightPl += this.lightByPlate; 
 | ||
|                 //  service.lightUp += this.lightUp;
 | ||
| 
 | ||
|                 host = new ServiceHost(service, baseAddress);
 | ||
|                 //  elelab.DNLights.lightOffEvent += testPicked;
 | ||
| 
 | ||
|                 WebHttpBinding binding = new WebHttpBinding();
 | ||
|                 ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(ILightService), binding, baseAddress);
 | ||
|                 WebHttpBehavior httpBehavior = new WebHttpBehavior();
 | ||
|                 endpoint.Behaviors.Add(httpBehavior);
 | ||
|                 List<string> lstIp = Util.GetLocalIpAddress("InterNetwork");
 | ||
|                // string showSvr = svrUrl;
 | ||
|                 if (lstIp.Count > 0)
 | ||
|                 {
 | ||
|                     svrUrl = svrUrl.Replace("127.0.0.1", lstIp[0]);
 | ||
|                 }
 | ||
| 
 | ||
|                 host.Opened += delegate
 | ||
|                 {
 | ||
|                     //   addLog("服务已启动");
 | ||
|                     if (InvokeRequired)
 | ||
|                     {
 | ||
|                         this.Invoke(new showStatus(delegate()
 | ||
|                         {
 | ||
|                             lbStatus.Text = "服务已启动";
 | ||
|                             lbUrl.Text = "亮灯服务地址:" + svrUrl; ;
 | ||
| 
 | ||
|                         }));
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         lbStatus.Text = "服务已启动";
 | ||
|                         lbUrl.Text = "亮灯服务地址:" + svrUrl;
 | ||
|                     }
 | ||
|                 };
 | ||
|                 host.Open();
 | ||
| 
 | ||
|                 
 | ||
| 
 | ||
|             }
 | ||
|             catch (Exception e)
 | ||
|             {
 | ||
|                 // addLog("启动服务失败:  " + e.Message);
 | ||
|                 MessageBox.Show("启动服务失败:  " + e.Message);
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         public string lightByPlate(string plateId, int part)
 | ||
|         {
 | ||
|             DataTable dt = pickClient.getPlatePickList(plateId, part);
 | ||
|             closeClient();
 | ||
|             addLog("------------------------------------->");
 | ||
|             addLog("开始亮灯:plateId: " + plateId +", partion: " + part);
 | ||
| #if DEBUG
 | ||
|             if (currentPort > 0)
 | ||
|             {
 | ||
|                 foreach (DataRow dr in dt.Rows)
 | ||
|                 {
 | ||
|                      
 | ||
| 
 | ||
|                 dr["port"] = currentPort; 
 | ||
| 
 | ||
|                 }
 | ||
|             }
 | ||
|             //addLog("label COUNT 1: " + dt.Rows.Count); 
 | ||
| 
 | ||
| #endif
 | ||
| 
 | ||
|            DataView dv = dtBulks.DefaultView;
 | ||
|            dv.RowFilter = "partion=" +part +" and plate='" +plateId +"'";
 | ||
|           // addLog("label COUNT 2: " + dt.Rows.Count);
 | ||
|            foreach (DataRowView drv in dv)
 | ||
|            {
 | ||
|                WmsOutPickLable_tmp wp = new WmsOutPickLable_tmp(drv.Row);
 | ||
|                string  json = String.Format("\"labelId\":{0},\"num1\":{1},\"num3\":{2},\"color\":{3},\"port\":{4}"
 | ||
|                , wp.elabId, wp.elabAddress, wp.count,  wp.color, wp.port );
 | ||
|               addLog("{" +json +"}");
 | ||
|            }
 | ||
| 
 | ||
|            dv.RowFilter = "";
 | ||
|             if (dt.Rows.Count > 0)
 | ||
|             {
 | ||
|                 showWaitForm("正在点亮标签...");
 | ||
|                
 | ||
|                 string result = lightSeeds.lightsUp(dt, enumLabelPickType.seedPick); 
 | ||
|                 closeWaitForm();
 | ||
|                 addLog( result);
 | ||
|                 addLog("<-------------------------------------");
 | ||
|                 return result;
 | ||
|             }
 | ||
|             addLog("无亮灯任务");
 | ||
|             addLog("<-------------------------------------");
 | ||
|             return "无亮灯任务";
 | ||
|         }
 | ||
| 
 | ||
|         private void btnInitialCom_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             initialCom();
 | ||
|         }
 | ||
|         void initComs()
 | ||
|         {
 | ||
|             String[] Portname = System.IO.Ports.SerialPort.GetPortNames();
 | ||
| 
 | ||
|             combComs.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;
 | ||
|             combComs.Properties.Items.Clear();
 | ||
|             ComboBoxItemCollection col = combComs.Properties.Items;
 | ||
|             col.BeginUpdate();
 | ||
| 
 | ||
|             oCom = System.Configuration.ConfigurationManager.AppSettings["Com"];
 | ||
|             int oldIndex = 0;
 | ||
|             try
 | ||
|             {
 | ||
| 
 | ||
|                 for (int i = 0; i < Portname.Length; i++)
 | ||
|                 {
 | ||
|                     //col.Add(i);
 | ||
|                     col.Add(Portname[i]);
 | ||
|                     if (!string.IsNullOrEmpty(oCom) && oCom == Portname[i])
 | ||
|                     {
 | ||
|                         oldIndex = i;
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
|             }
 | ||
|             finally
 | ||
|             {
 | ||
|                 col.EndUpdate();
 | ||
|             }
 | ||
| 
 | ||
|             combComs.SelectedIndex = oldIndex;
 | ||
| 
 | ||
|             if (combComs.Properties.Items.Count > 0)
 | ||
|             {
 | ||
|                 initialCom();
 | ||
|             }
 | ||
|         }
 | ||
|         Dictionary<int, dnwms> activeComs = new Dictionary<int, dnwms>();
 | ||
|         dnwms activePort;
 | ||
|         int currentPort = 0; 
 | ||
|         String oCom = "";
 | ||
|         void initialCom()
 | ||
|         {
 | ||
| 
 | ||
|             try
 | ||
|             {
 | ||
|                 int port = Convert.ToInt16(combComs.Text.Substring(3));
 | ||
|                 resetLights();
 | ||
|                 if (activeComs.Keys.Contains(port))
 | ||
|                 {
 | ||
|                     if (String.IsNullOrEmpty(oCom) || !oCom.Equals(combComs.Text))
 | ||
|                     {
 | ||
|                         writeConfig("Com", combComs.Text);
 | ||
|                         oCom = combComs.Text;
 | ||
|                     }
 | ||
| 
 | ||
|                     currentPort = port;
 | ||
|                     this.lbComstatus.Text = string.Format(combComs.Text + " 打开{0}", "成功");
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     this.lbComstatus.Text = string.Format(combComs.Text + " 打开{0}", "失败");
 | ||
|                 }
 | ||
| 
 | ||
|             }
 | ||
|             catch (Exception e)
 | ||
|             {
 | ||
|                 lbStatus.Text = string.Format(e.Message);
 | ||
|             }
 | ||
|             btnShowId.Enabled = currentPort > 0;
 | ||
|         }
 | ||
| 
 | ||
|         private void resetLights()
 | ||
|         {
 | ||
|             int port = Convert.ToInt16(combComs.Text.Substring(3));
 | ||
|             if (Deiniu.win.elelab.coms.com_manage[port] == null)
 | ||
|             {
 | ||
|                 return;
 | ||
|             }
 | ||
|             activePort = Deiniu.win.elelab.coms.com_manage[port].init_port;
 | ||
|             //activePort.check_state = true;
 | ||
|             if (lightSeeds.resetDevice(port))
 | ||
|             {
 | ||
|                 activeComs[port] = activePort;
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             
 | ||
|         }
 | ||
| 
 | ||
|         bool showId = true; 
 | ||
|         private void btnShowId_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             if (currentPort == 0)
 | ||
|             {
 | ||
|                 return;
 | ||
|             }
 | ||
|             if (showId)
 | ||
|             {
 | ||
|                 lightSeeds.displayLabels(currentPort);
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 lightSeeds.clearLabels(currentPort);
 | ||
|             }
 | ||
|             showId = !showId;
 | ||
|         }
 | ||
| 
 | ||
|         void addLog(string info)
 | ||
|         {
 | ||
|             if (InvokeRequired)
 | ||
|             {
 | ||
|                 this.Invoke(new showStatus(delegate()
 | ||
|                 {
 | ||
|                     doLogTxt(info);
 | ||
|                 }));
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 doLogTxt(info);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         void doLogTxt(string info)
 | ||
|         {
 | ||
|             if (this.textBoxLightLog.Lines.Length > 100)
 | ||
|             {
 | ||
|                 this.textBoxLightLog.Text = "";
 | ||
|             }
 | ||
| 
 | ||
|             while (info.Length < 100)
 | ||
|             {
 | ||
|                 info += " ";
 | ||
|             }
 | ||
|             //log.Debug(getMsg("ServiceForm", info));
 | ||
| 
 | ||
|             info = " " + System.DateTime.Now + "    " + info;
 | ||
|             this.textBoxLightLog.Text = info + "\r\n" + this.textBoxLightLog.Text;
 | ||
| 
 | ||
| 
 | ||
|             if (this.textBoxLightLog.Lines.Length > 100)
 | ||
|             {
 | ||
|                 this.textBoxLightLog.Text = "";
 | ||
|             }
 | ||
|           //  this.textBoxLightLog.Text = "\r\n" + info + "\r\n" + this.textBoxLightLog.Text;
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         void partFinished(int eleId) 
 | ||
|             // 上一批次完成,则对已完成的partion,desk的订单做状态处理,获取下一批任务
 | ||
|         {
 | ||
|             partionLighting[eleId] = false;
 | ||
|             newWave();
 | ||
|            
 | ||
|             //如果有拣货任务,则加载任务点亮标签 
 | ||
|            
 | ||
|             Thread.Sleep(2000);
 | ||
|       
 | ||
|             lightLables(eleId); 
 | ||
|         
 | ||
|             loadPickOrdersInWave();//加载点亮所有partion 新任务
 | ||
| 
 | ||
|            
 | ||
|          //   newWave();
 | ||
|         
 | ||
|         }
 | ||
| 
 | ||
|         void checkAndLightParts()
 | ||
|         {
 | ||
|             List<int> partions = new List<int>();
 | ||
|             List<int> partionsTasks = new List<int>();
 | ||
|             foreach (DataRow dr in dtBulks.Rows)
 | ||
|             {
 | ||
|                 WmsOutPickLable_tmp wt = new WmsOutPickLable_tmp(dr);
 | ||
|                 if (wt != null &&!partions.Contains(wt.partion))
 | ||
|                 {
 | ||
|                     partions.Add(wt.partion); 
 | ||
|                     
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
|             foreach (int partion in partions)
 | ||
|             {
 | ||
|                 if (!partionLighting.ContainsKey(partion)  //partion 从未点亮
 | ||
|                        || !partionLighting[(partion)]) //partion 有新任务
 | ||
|                 {
 | ||
|                     partionsTasks.Add(partion);
 | ||
| 
 | ||
|                 }
 | ||
|             } 
 | ||
| 
 | ||
| 
 | ||
|             foreach(int partion in partionsTasks)
 | ||
|             {
 | ||
|                 Thread.Sleep(500);
 | ||
|                 lightLables(partion);
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
|  
 | ||
|      
 | ||
| 
 | ||
|     }
 | ||
| } |