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);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
}
|
||
} |