ldj/winform/出库/零货分拣/GoodsOutPartionPickForm.cs

2228 lines
78 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraBars;
using DevExpress.XtraGrid.Views.Base;
//using DeiNiu.wms.Logical;
using DeiNiu.wms.Data;
using DevExpress.XtraGrid.Columns;
using System.Threading;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraEditors.DXErrorProvider;
using DeiNiu.wms.Data.Model;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DeiNiu.Utils;
using DevExpress.XtraEditors.Repository;
// using DeiNiu.wms.win.ServiceReferenceOutRequest; //远程
using DeiNiu.wms.win.ServiceReferenceStockOutRequest;
using DeiNiu.wms.win.ServiceReferenceStockOutPickRequest;
using Deiniu.win.elelab;
using DeiNiu.wms.win.waveRuleService; //开发环境
// using DeiNiu.wms.win.ServiceReferenceOutRequestLocal;//本地
namespace DeiNiu.wms.win
{
public partial class GoodsOutPartionPickForm : BasicRibbonForm
{
private string lastQuery = "";
private DataTable dtPickOrders;
private int selectedRowIndex = -1;
private WmsOutPickRequest selectedRequest;
int preCnt = 0;
Thread threadPreProcess;
bool autoOrder, autoWave =true;
bool isManualRefreshPickList = false;
// string currentWaveOrder = "";
DataTable dtException;
DataTable dtBulks;
WmsOutPickDetail_tmp exceptionDetail;
int selectedLine = -1;
string selectedSales = "";
public GoodsOutPartionPickForm()
{
debug("start 出库。。。。。。");
lightPart.lightOffEvent += partFinished;
InitializeComponent();
initialControls();
initialBackGroundTasks();
isLoading = false;
debug("end 出库。。。。。。");
}
#region initialControls
bool isLoading = true;
private void initialControls()
{
initialComboBoxes();
initialPagerControls();
initialDataGrid();
initialQueryInput();
setValidationRule();
initialTimer();
// updateLightsStatus();
getPartFinishIds();
}
private void initialBackGroundTasks()
{
swAutoOrder.IsOn = WmsConstants.AUTO_SYNC_SALE_ORDER;
//lgOutReq.UpdateUIDelegate += updatePreOutStatus;
//lgOutReq.TaskCallBack += preOutFinished;
/*
if (autoOrder)
{
preErpOrders();
}
*/
checkEditAutoInterVal.Checked = true;
swAutoWave.IsOn = WmsConstants.AUTO_NEW_WAVE;
//lgt.UpdateUIDelegate += updatePickDetails;
//lgt.TaskCallBack += loadWaveDetails;// waveStart;
lightAllLabels();
if (autoWave)
{
newWave();
}
else
{
// lightLabelsCurrentWave();
}
Thread threadPreProcess = new Thread(searchLight);
threadPreProcess.IsBackground = true;
threadPreProcess.Start();
}
void lightAllLabels()
{
loadWaveDetails();
initLights();
// string result = lightPart.lightsUp(pickClient.getPartPickedData((int)enumPickState.未拣), enumLabelPickType.pick);
int[] parts = { 4 };
lightLables(parts);
closeClient();
}
private void initialComboBoxes()
{
Node[] nds = { };
DataTable dt = Park.getDictionary(false);
if (dt.Rows.Count == 0)
{
return;
}
DataRow[] drs = dt.Select("flag >0");
foreach (DataRow dr in drs)
{
int flag = Convert.ToInt32(dr["flag"].ToString());
int parentId = Convert.ToInt32(dr["id"].ToString());
DataRow[] drss = Park.getDictionary(false).Select("parentId =" + parentId);
switch (flag)
{
case 2007:
initialComboBoxs(this.comException, drss ,false);
break;
}
}
waveRuleService.WcfWaveRule[] rules = wrClient.getWaveRules(enumWaveRuleType.DPS灯光波次);
closeClient();
Dictionary<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.exfields.bigCount.ToString() };
GridColumn myCol7 = new GridColumn() { Caption = "剂型", Visible = true, FieldName = WmsGoods.exfields.type.ToString() };
GridColumn myCol8 = new GridColumn() { Caption = "商品类型", Visible = true, FieldName = WmsGoods.exfields.goodsTypeName.ToString() };
// GridColumn myCol9 = new GridColumn() { Caption = "大零", Visible = true, FieldName = WmsGoods.fields.bulkMax.ToString() };
// GridColumn myCol10 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsGoods.fields.batchMax1.ToString() };
// GridColumn myCol11 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsGoods.fields.batchMax2.ToString() };
GridColumn myCol12 = new GridColumn() { Caption = "国药准字", Visible = true, FieldName = WmsGoods.exfields.regeditCode.ToString() };
// GridColumn myCol100 = new GridColumn() { Caption = "数量", Visible = true, FieldName = WmsOutDetail.fields.count.ToString() };
GridColumn myCol100 = new GridColumn() { Caption = "数量", Visible = true, FieldName = "pdaOuting" };
// GridColumn myCol101 = new GridColumn() { Caption = "零货", Visible = true, FieldName = WmsOutDetail.fields.bulkCount.ToString() };
// GridColumn myCol102 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsOutDetail.fields.batch1Count.ToString() };
// GridColumn myCol103 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsOutDetail.fields.batch2Count.ToString() };
// GridColumn myCol104 = new GridColumn() { Caption = "箱", Visible = true, FieldName = WmsOutDetail.fields.boxcnt.ToString() };
GridColumn myCol14 = new GridColumn() { Caption = "批号", Visible = true, FieldName = WmsOutDetail.fields.batch.ToString() };
GridColumn myCol15 = new GridColumn() { Caption = "生产日期", Visible = true, FieldName = WmsOutDetail.fields.productDate.ToString() };
GridColumn myCol16 = new GridColumn() { Caption = "有效期", Visible = true, FieldName = WmsOutDetail.fields.validDate.ToString() };
// GridColumn myCol17 = new GridColumn() { Caption = "状态", Visible = true, FieldName = WmsOutDetail.fields.state.ToString() };
GridColumn myCol18 = new GridColumn() { Caption = "说明", Visible = true, FieldName = WmsOutDetail.fields.description.ToString() };
GridColumn myCo20 = new GridColumn() { Caption = "客户", Visible = true, FieldName = WmsOutPickRequest.fields.customerName.ToString() };
GridColumn myCol22 = new GridColumn() { Caption = "货位", Visible = true, FieldName = WmsOutPickLable.fields.locationId.ToString() };
gridview.Columns.Add(myCol01);
gridview.Columns.Add(myCol2);
gridview.Columns.Add(myCol22);
gridview.Columns.Add(myCol100);
gridview.Columns.Add(myCo20);
// gridview.Columns.Add(myCol101);
// gridview.Columns.Add(myCol102);
// gridview.Columns.Add(myCol103);
// gridview.Columns.Add(myCol104);
gridview.Columns.Add(myCol6);
gridview.Columns.Add(myCol5);
gridview.Columns.Add(myCol15);
gridview.Columns.Add(myCol16);
gridview.Columns.Add(myCol3);
gridview.Columns.Add(myCol14);
gridview.Columns.Add(myCol3);
gridview.Columns.Add(myCol8);
//gridview.Columns.Add(myCol9);
gridview.Columns.Add(myCol2);
// gridview.Columns.Add(myCol6);
gridview.Columns.Add(myCol4);
gridview.Columns.Add(myCol7);
gridview.Columns.Add(myCol12);
gridview.Columns.Add(myCol1);
// gridview.Columns.Add(myCol17);
gridview.Columns.Add(myCol18);
//to show bottom scroll bar
gridview.OptionsView.ColumnAutoWidth = false;
gridview.BestFitColumns();
// gridView2.Focus();
}
private void initialGridView3Columns(GridView gridview)
{
if (gridView4 == gridview)
{
setupGridView(gridview, true, false, false);
}
else
{
setupGridView(gridview, true, true, false);
}
gridview.FocusRectStyle = DrawFocusRectStyle.None;
// gridviewGoodsType.PopulateColumns();
gridview.Columns.Clear();
// gridviewGoodsType.Columns.Remove(gridviewGoodsType.Columns["DealerPrice"]);
GridColumn myCol0 = new GridColumn() { Caption = "ID", Visible = true, FieldName = "id" };
myCol0.Visible = false;
gridview.Columns.Add(myCol0);
GridColumn myCol011 = new GridColumn() { Caption = "分区", Visible = true, FieldName = "partName" };
gridview.Columns.Add(myCol011);
GridColumn myCol1 = new GridColumn() { Caption = "商品编码", Visible = true, FieldName = WmsGoods.fields.goodsId.ToString() };
GridColumn myCol2 = new GridColumn() { Caption = "商品名称", Visible = true, FieldName = WmsGoods.exfields.goodsName.ToString() };
GridColumn myCol3 = new GridColumn() { Caption = "厂家", Visible = true, FieldName = WmsGoods.exfields.manufacturer.ToString() };
GridColumn myCol4 = new GridColumn() { Caption = "规格", Visible = true, FieldName = WmsGoods.exfields.spec.ToString() };
GridColumn myCol5 = new GridColumn() { Caption = "单位", Visible = true, FieldName = WmsGoods.exfields.unit.ToString() };
// GridColumn myCol6 = new GridColumn() { Caption = "大包装数量", Visible = true, FieldName = WmsGoods.exfields.bigCount.ToString() };
GridColumn myCol7 = new GridColumn() { Caption = "剂型", Visible = true, FieldName = WmsGoods.exfields.type.ToString() };
GridColumn myCol8 = new GridColumn() { Caption = "商品类型", Visible = true, FieldName = WmsGoods.exfields.goodsTypeName.ToString() };
// GridColumn myCol9 = new GridColumn() { Caption = "大零", Visible = true, FieldName = WmsGoods.fields.bulkMax.ToString() };
// GridColumn myCol10 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsGoods.fields.batchMax1.ToString() };
// GridColumn myCol11 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsGoods.fields.batchMax2.ToString() };
GridColumn myCol12 = new GridColumn() { Caption = "国药准字", Visible = true, FieldName = WmsGoods.exfields.regeditCode.ToString() };
GridColumn myCol100 = new GridColumn() { Caption = "数量", Visible = true, FieldName = WmsOutDetail.fields.count.ToString() };
GridColumn myCol101 = new GridColumn() { Caption = "零货", Visible = true, FieldName = WmsOutDetail.fields.count.ToString() };
// GridColumn myCol102 = new GridColumn() { Caption = "整货", Visible = true, FieldName = WmsOutDetail.fields.batch1Count.ToString() };
// GridColumn myCol103 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsOutDetail.fields.batch2Count.ToString() };
// GridColumn myCol104 = new GridColumn() { Caption = "箱", Visible = true, FieldName = WmsOutDetail.fields.boxcnt.ToString() };
GridColumn myCol14 = new GridColumn() { Caption = "批号", Visible = true, FieldName = WmsOutDetail.fields.batch.ToString() };
GridColumn myCol15 = new GridColumn() { Caption = "生产日期", Visible = true, FieldName = WmsOutDetail.fields.productDate.ToString() };
GridColumn myCol16 = new GridColumn() { Caption = "有效期", Visible = true, FieldName = WmsOutDetail.fields.validDate.ToString() };
GridColumn myCol17 = new GridColumn() { Caption = "状态", Visible = true, FieldName = WmsOutDetail.fields.state.ToString() };
GridColumn myCol18 = new GridColumn() { Caption = "说明", Visible = true, FieldName = WmsOutDetail.fields.description.ToString() };
GridColumn myCol20 = new GridColumn() { Caption = "波次", Visible = true, FieldName = WmsOutPickLable.fields.dpsOrder.ToString() };
GridColumn myCol21 = new GridColumn() { Caption = "颜色", Visible = true, FieldName = "colorName" };
GridColumn myCol22 = new GridColumn() { Caption = "货位", Visible = true, FieldName = WmsOutPickLable.fields.locationId.ToString() };
GridColumn myCol23 = new GridColumn() { Caption = "标签", Visible = true, FieldName = WmsOutPickLable.fields.elabId.ToString() };
GridColumn myCol24 = new GridColumn() { Caption = "客户", Visible = true, FieldName = WmsOutPickRequest.fields.customerName.ToString() };
GridColumn myCol25 = new GridColumn() { Caption = "出库单", Visible = true, FieldName = WmsOutPickRequest.fields.pickOrderNo.ToString() };
GridColumn myCol26 = new GridColumn() { Caption = "复核异常", Visible = true, FieldName = "exception" };
GridColumn myCol27 = new GridColumn() { Caption = "复核数量", Visible = true, FieldName = WmsOutPickDetail.fields.confirmedCount.ToString() };
GridColumn myCol28 = new GridColumn() { Caption = "说明", Visible = true, FieldName = WmsOutPickDetail.fields.validRemark.ToString() };
GridColumn myCol281 = new GridColumn() { Caption = "复核台", Visible = true, FieldName = "desk" };
GridColumn myCol29 = new GridColumn() { Caption = "标签点亮", Visible = true, FieldName = "isLightUp" };
GridColumn myCol30 = new GridColumn() { Caption = "拣货状态", Visible = true, FieldName = "isPicked" };
GridColumn myCol31 = new GridColumn() { Caption = "输送口", Visible = true, FieldName = "desk" };
RepositoryItemImageComboBox repositoryImageComboBox2 = new RepositoryItemImageComboBox();//新建一个RepositoryItemImageComboBox
repositoryImageComboBox2.GlyphAlignment = DevExpress.Utils.HorzAlignment.Center;
repositoryImageComboBox2.SmallImages = imageList1; //指定一组图片
string[] s = new String[] {"1","0"};
for (int i = 0; i < s.Length; i++)
repositoryImageComboBox2.Items.Add(new ImageComboBoxItem(s[i], i + 1, i));//对应值绑定对应的图片
RepositoryItem ri = repositoryImageComboBox2 as RepositoryItem;
gridControl1.RepositoryItems.Add(ri);
myCol29.ColumnEdit = ri; //绑定到GridColumn
myCol30.ColumnEdit = ri;
if(gridview == gridView4){
gridview.Columns.Add(myCol281);
gridview.Columns.Add(myCol2);
gridview.Columns.Add(myCol14);
gridview.Columns.Add(myCol26);
gridview.Columns.Add(myCol100);
gridview.Columns.Add(myCol27);
gridview.Columns.Add(myCol20);
gridview.Columns.Add(myCol21);
gridview.Columns.Add(myCol22);
gridview.Columns.Add(myCol23);
gridview.Columns.Add(myCol28);
gridview.OptionsView.ColumnAutoWidth = false;
gridview.BestFitColumns();
return;
}
if (WmsConstants.OUT_LIGHT_ENABLE)
{
gridview.Columns.Add(myCol29);
gridview.Columns.Add(myCol30);
}
gridview.Columns.Add(myCol25);
gridview.Columns.Add(myCol21);
gridview.Columns.Add(myCol22);
gridview.Columns.Add(myCol23);
gridview.Columns.Add(myCol101);
gridview.Columns.Add(myCol5);
// gridview.Columns.Add(myCol17);
gridview.Columns.Add(myCol24);
gridview.Columns.Add(myCol31);
gridview.Columns.Add(myCol7);
gridview.Columns.Add(myCol14);
gridview.Columns.Add(myCol3);
gridview.Columns.Add(myCol15);
gridview.Columns.Add(myCol16);
gridview.Columns.Add(myCol3);
gridview.Columns.Add(myCol8);
//gridview.Columns.Add(myCol9);
gridview.Columns.Add(myCol2);
// gridview.Columns.Add(myCol6);
gridview.Columns.Add(myCol4);
gridview.Columns.Add(myCol12);
gridview.Columns.Add(myCol1);
gridview.Columns.Add(myCol18);
//to show bottom scroll bar
gridview.OptionsView.ColumnAutoWidth = false;
gridview.BestFitColumns();
// gridView2.Focus();
}
#endregion
/*
void setProgressbar()
{
progressBarControl1.Visible = true;
//设置一个最小值
progressBarControl1.Properties.Minimum = 0;
//设置一个最大值
progressBarControl1.Properties.Maximum = WmsConstants.PREPICKING_ORDERS_CNT ;
//设置步长,即每次增加的数
progressBarControl1.Properties.Step = 1;
//设置进度条的样式
progressBarControl1.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid;
//当前值
progressBarControl1.Position = 0;
//是否显示进度数据
progressBarControl1.Properties.ShowTitle = true;
//是否显示百分比
progressBarControl1.Properties.PercentView = true;
}
*/
/// <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);
private void updatePreOutStatus(int i)
{
if (InvokeRequired)
{
this.Invoke(new AsynUpdateUI(delegate(int s)
{
//progressBarControl1.Properties.Maximum = WmsConstants.PREPICKING_ORDERS_CNT;
//progressBarControl1.Position = i;
//this.prgbar. += s;
// this.prgbar.Text = i + "/" + preCnt;
}), i);
if (i == dtPickOrders.Rows.Count)
{
// loadData();//更新界面列表
}
}
else
{
//progressBarControl1.Properties.Maximum = WmsConstants.PREPICKING_ORDERS_CNT;
//progressBarControl1.Position += 1;
// this.prgbar.Text = i + "/" + preCnt;
if (i == dtPickOrders.Rows.Count)
{
// loadData();//更新界面列表
}
}
}
DateTime lastRefreshTime;
int refreshInterval = 15;
//完成任务时需要调用
delegate void loadNewPickOrders();
private void refreshOrderList()
{
//还可以进行其他的一些完任务完成之后的逻辑处理
//swAutoOrder.Enabled = true;
//btnPickOrders.Enabled = !autoOrder;
if (!autoOrder && !this.isManualRefreshPickList)
{
return;
}
TimeSpan ts = DateTime.Now - lastRefreshTime;
if (ts.TotalDays > 10)
{
// lastRefreshTime = DateTime.Now;
// return;
refreshInterval = 15;// 初次启动15秒后开始提取合并出库单
}
else
{
refreshInterval = 15 + Convert.ToInt32(spinOrder.Value * 60);
}
if (ts.TotalSeconds < refreshInterval)
{
return;
}
this.isManualRefreshPickList = false; //手动刷新 只单独自动刷一次
lastRefreshTime = DateTime.Now;
if (InvokeRequired)
{
this.Invoke(new loadNewPickOrders(delegate()
{
swAutoOrder.Enabled = true;
btnPickOrders.Enabled = !autoOrder;
// this.loadPickOrders();
if (autoOrder)
{
setPreOrderInterVal();
}
}));
}
else
{
swAutoOrder.Enabled = true;
btnPickOrders.Enabled = !autoOrder;
// this.loadPickOrders();
if (autoOrder)
{
setPreOrderInterVal();
}
}
if (autoOrder)
{
// setPreOrderInterVal();
// refreshInterval = 15+ Convert.ToInt32(spinOrder.Value * 60);
// Thread.CurrentThread.Join(refreshInterval);
//继续后台处理
preErpOrders();
}
}
private void setPreOrderInterVal()
{
if(checkEditAutoInterVal.Checked && dtPickOrders!=null){
decimal waitingOrders = dtPickOrders.Rows.Count * pager1.PageCount;
int pickOrdersPerWave =10;
int cacheWaves= 10;
if (waitingOrders <= pickOrdersPerWave * cacheWaves )
{
spinOrder.Value = 5;
return;
}
decimal minutesPerWave = WmsConstants.WAVE_SECONDS /60 ; //3 minues per wave
minutesPerWave = minutesPerWave > 0 ? minutesPerWave : 1;
decimal interval = (waitingOrders - pickOrdersPerWave * cacheWaves) / pickOrdersPerWave * minutesPerWave;
spinOrder.Value = interval >= 0 ? interval : spinOrder.Value;
// spinOrder.Value = 0;
}
}
/// <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 ;
}
}
void loadWaveDetails()
{
debug("start to loadWaveDetails.....");
if (InvokeRequired)
{
this.Invoke(new loadNewCurrentWave(delegate()
{
// swAutoWave.Enabled = true;
// btnNewWave.Enabled = !autoWave;
this.loadPickOrdersInWave();
// this.loadPickOrders();//更新等待订单列表
// btnEndWave.Enabled = true;
}));
}
else
{
// swAutoWave.Enabled = true;
// btnNewWave.Enabled = !autoWave;
this.loadPickOrdersInWave();
// btnEndWave.Enabled = true;
}
debug("end loadWaveDetails....");
}
// Thread threadNewWave;
private void newWave()
{
try
{
debug("start to create new wave .....");
Thread threadNewWave = new Thread(newPickWave);
threadNewWave.IsBackground = true;
threadNewWave.Start();
// loadWaveDetails();
// lgt.newPickWave();
debug(" create new wave in new thread.....");
}
catch (DeiNiuException de)
{
showErrorMsg(de.Message);
}
catch (Exception er)
{
showErrorMsg(er.Message);
}
}
private void loadPickOrdersInWave()
{
debug("start loadPickOrdersInWave.....");
//showWaitForm();
try
{
// dtBulks = lgt.getWmsOutPickRequest.getBulkDetailInCurrentWave().Tables[0];
dtBulks = pickClient.getPartionBulkDetailInCurrentWave();
closeClient();
gridControl2.DataSource = null;
updateLableStatus(dtBulks);
debug(string.Format("load bulk details in current wave,count {0} ", dtBulks.Rows.Count));
gridControl3.DataSource = dtBulks.DefaultView;
initialGridView3Columns(gridView3);
// btnRelight.Enabled = dtBulks.Rows.Count > 0;
WmsConstants.WAVE_CURRENT_ORDER = "";
// btnNewWave.Enabled = dtBulks.Rows.Count == 0;
if (dtBulks.Rows.Count > 0)
{
WmsConstants.WAVE_LAST_FREE_TIME = DateTime.MinValue;
//if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER))
{
string waveStarTime = dtBulks.Rows[0]["createtime"].ToString();
DateTime lastWaveTime = Convert.ToDateTime(waveStarTime);
string currentWaveOrder = dtBulks.Rows[0]["dpsOrder"].ToString();
WmsConstants.WAVE_LAST_TIME = lastWaveTime;
WmsConstants.WAVE_CURRENT_ORDER = currentWaveOrder; //只显示有零货的波次
}
debug("start getPickDetailByWaveOrder.....");
//DataTable dtBatch = lgt.getWmsOutPickRequest.getPickDetailByWaveOrder(WmsConstants.WAVE_CURRENT_ORDER).Tables[0];
/*
DataTable dtBatch = pickClient.getPickDetailByWaveOrder(WmsConstants.WAVE_CURRENT_ORDER);
closeClient();
debug("end getPickDetailByWaveOrder.....");
DataView dv = dtBatch.DefaultView;
dv.RowFilter = "volType >0";
gridControl2.DataSource = dv;
debug("end getPickDetailByWaveOrder.....");
* */
}
else
{
if (WmsConstants.WAVE_LAST_FREE_TIME == DateTime.MinValue)
{
WmsConstants.WAVE_LAST_FREE_TIME = DateTime.Now;
}
}
debug("initialGridView2Columns ");
// initialGridView2Columns(gridView2);
// lbWaveNo.Text = string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER) ? "空闲" : WmsConstants.WAVE_CURRENT_ORDER;
// btnEndWave.Enabled = !string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER);
//get validaiton exception list
debug("initialGridView2Columns ");
bindException();
//if (!string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER))
//{
// // timeCnt();
//}
}
catch (Exception er)
{
// setCurrentRequestDetail();
// showErrorMsg(er.Message);
}
closeWaitForm();
debug("end loadPickOrdersInWave.....");
}
void bindException()
{
debug(string.Format("begin to bindException " ));
// dtException = lgt.getWmsOutPickRequest.getBulkValidationException(enumOutStockPickStatus.复核异常).Tables[0];
dtException = pickClient.getBulkValidationException((int)enumOutStockPickStatus.) ;
closeClient();
DataView dv = dtException.DefaultView;
// dv.RowFilter = "state =" + (int)enumOutStockDetailStatus.validatedException;
exceptionRowIndex = -1;
gridControl4.DataSource = dv;
initialGridView3Columns(gridView4);
// debug(string.Format("end  bindException,count {0} ", dtException.Rows.Count));
// setCurrentValidationDetail();
}
/// <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 query = string.Format("{0} =# {1} ;", WmsOutPickRequest.fields.outStoreType.ToString(), (int)enumOutStoreType.)
+ string.Format("{0} ># {1} ;", WmsOutPickRequest.fields.bulkCnt.ToString(), 0)
+ string.Format("{0} is #{1};", WmsOutPickRequest.fields.waveOrder.ToString(), "null")
+(lgPriority.Expanded && this.txtCustname.Text.Trim().Length > 0 ? string.Format("{0} like #'%{1}%';", WmsOutPickRequest.fields.customerName.ToString(), filtRiskChar(this.txtCustname.Text.Trim())) : "");
bool isQueryNotChanged = lastQuery.Equals(query);
this.pager1.PageCurrent = isQueryNotChanged ? this.pager1.PageCurrent : 1; //根据查询条件的变化给pager赋值
this.pager1.PageCurrent = this.pager1.PageCurrent > 0 ? this.pager1.PageCurrent : 1;
int start = (pager1.PageSize * (pager1.PageCurrent - 1) + 1);
int end = (pager1.PageSize * pager1.PageCurrent);
lastQuery = query;
DataSet ds = pickClient.Query(query, start, end);
closeClient();
dtPickOrders = ds.Tables[0];
int cnt = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
//dt = lgt.Query(query, start, end); //string.IsNullOrEmpty(query) ? lgt.GetGoodType.getAllData(start, end) : lgt.g;
dtPickOrders.PrimaryKey = new DataColumn[] { dtPickOrders.Columns["ID"] };
bool firstLoad = !isQueryNotChanged || this.gridControl1.DataSource == null;
this.gridControl1.DataSource = dtPickOrders.DefaultView;
initialDataGridColumns();
//update selected row index to the last updated one.
if (selectedRequest !=null)
{
selectedRowIndex = -1;
DataRow dr = dtPickOrders.Rows.Find(selectedRequest.ID);
if (dr != null)
{
selectedRowIndex = dtPickOrders.Rows.IndexOf(dr);
}
if (selectedRowIndex >= 0 && dtPickOrders.Rows.Count > selectedRowIndex)
{
// gridView1.SelectRow(selectedRowIndex);
gridView1.FocusedRowHandle = selectedRowIndex;
// gridView1.MakeRowVisible(selectedRowIndex);
}
//gridView1.FocusedRowHandle = selectedRowIndex;
}else
// if (firstLoad)
{
gridView1.FocusedRowHandle = 0;
gridView1.SelectRow(0);
// setCurrentRequestDetail();
}
closeWaitForm();
return cnt;
}
catch (Exception e)
{
// showErrorMsg(e,e.Message);
}
//closeWaitForm();
return 0;// lgt.getRowCount(query);
// return lgt.GetGoodType.QueryCount();
//debug("end pagerQuery.....");
}
/// <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 (selectedRowIndex >= 0 && dtPickOrders.Rows.Count > exceptionRowIndex)
{
gridView4.FocusedRowHandle = exceptionRowIndex;
gridView4.MakeRowVisible(exceptionRowIndex);
}
}
void setCurrentValidationDetail()
{
if (gridView4.FocusedRowHandle == -1)
{
return;
}
resetExceptionDetails();
DataRow dr = dtException.Rows[gridView4.FocusedRowHandle];
exceptionDetail = new WmsOutPickDetail_tmp(dr);
if (dr == null)
{
return;
}
lbException.Text = dr["exception"].ToString();
lbGoodsName.Text = dr["goodsName"].ToString();
lbPickOrderNo.Text = dr["pickOrderNo"].ToString();
// lbWaveNo.Text = dr["dpsOrder"].ToString();
}
System.Timers.Timer timer = new System.Timers.Timer();//实例化Timer类
//private void timeCnt()
//{
// timer.Start(); ;
//}
private void initialTimer()
{
int intTime = 1000;
timer.Interval = intTime;//设置间隔时间,为毫秒;
timer.Elapsed += new System.Timers.ElapsedEventHandler(showWaveSpan);//到达时间的时候执行事件;
timer.AutoReset = true;//设置是执行一次false还是一直执行(true)
timer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件
timer.Start();
}
private void showWaveSpan(object source, System.Timers.ElapsedEventArgs e)
{
// debug(string.Format(" timer loop begin .... " ));
TimeSpan ts = DateTime.Now - WmsConstants.WAVE_LAST_TIME;// WmsConstants.WAVE_LAST_TIME;
try
{
if (InvokeRequired)
{
this.Invoke(new loadNewCurrentWave(delegate()
{
// lbLightsInfo.Text = (lights.Count > 0 ? "" : "未检测到通道灯");
//refreshOrderList();
updateLableStatus();
waveStart();
/*
if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //start new wave
{
lbWaveSpan.ForeColor = Color.Green;
TimeSpan ts1 = DateTime.Now - WmsConstants.WAVE_LAST_FREE_TIME;
lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts1.Hours, ts1.Minutes, ts1.Seconds);
// debug(string.Format(" timer loop to start new wave.... "));
// this.clearWaveData();
waveStart();// newWave();
}
else
{
lbWaveSpan.ForeColor = Color.Black;
lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds);
}
*/
}));
}
else
{
//lbLightsInfo.Text = (lights.Count > 0 ? "" : "未检测到通道灯");
updateLableStatus();
waveStart();
/*
if (string.IsNullOrEmpty(WmsConstants.WAVE_CURRENT_ORDER)) //start new wave
{
lbWaveSpan.ForeColor = Color.Green;
TimeSpan ts1 = DateTime.Now - WmsConstants.WAVE_LAST_FREE_TIME;
lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts1.Hours, ts1.Minutes, ts1.Seconds);
// this.clearWaveData();
waveStart();// newWave();
}
else
{
lbWaveSpan.ForeColor = Color.Black;
lbWaveSpan.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds);
}
* */
}
}
catch (Exception er)
{
LogHelper.WriteLog(typeof(GoodsOutForm), er);
}
// debug(string.Format(" timer loop end .... "));
}
void resetExceptionDetails()
{
exceptionDetail = null;
lbException.Text ="";
lbGoodsName.Text = "";
lbPickOrderNo.Text = "";
comException.SelectedIndex = -1;
textEditExRemark.Text = "";
// lbWaveNo.Text = "";
}
private void btnDelete_Click(object sender, EventArgs e)
{
}
protected void query()
{
pager1.Bind();
}
private void loadPickOrders()
{
// showWaitForm();
try
{
query();// loadData();
}
catch (Exception e)
{
showErrorMsg(e.Message);
}
finally
{
// WaitFormService.Close();
// closeWaitForm();
bbQuery.Enabled = true;
}
}
private void bbQuery_ItemClick_1(object sender, ItemClickEventArgs e)
{
this.bbQuery.Enabled = false;
loadPickOrders();
}
private void updateObjects(List<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 light.activeComports)
{
if (port == 0)
{
continue;
}
// unart_manage.com_manage[port].write_reset_device(); 复位各个硬件,通道灯,标签。。。
coms.com_manage[port].init_port.write_clear_comment(id);
if (!lights.ContainsKey(port))
{
continue;
}
foreach (int lt in lights[port])
{
Model.close_channel_led idx;
idx.channel_id = lt;
idx.state = 1;
coms.com_manage[port].init_port.write_close_channel_led(idx);
}
// a.write_clear_comment(id);
}
}
Dictionary<int, List<int>> lights = new Dictionary<int, List<int>>();
void searchLight()
{
Model.modify_id id;
// System.Threading.Thread.Sleep(50);
foreach (int port in light.activeComports)
{
if (port == 0)
{
continue;
}
for (int i = 5000; i <= 5100; i++)
{
id.order = 0;
id.new_ele_id = 0;
id.old_ele_id = i;
id.state = 1;
bool ret = coms.com_manage[port].init_port.search_light_id(id);
if (ret)
{
if (!lights.ContainsKey(port))
{
lights[port] = new List<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 light = new Thread(lgt.lightLables);
//light.IsBackground = true;
//light.Start();
closeWaitForm();
if (parts.Length == 0)
{
return;
}
//showWaitForm("正在点亮标签...");
if (InvokeRequired)
{
this.Invoke(new loadNewCurrentWave(delegate()
{ loadWaveDetails();
loadPickOrders();
}));
}
else
{
loadWaveDetails();
loadPickOrders();
}
try
{
lightLables(parts); // lgt.lightLables();
}
catch(Exception er)
{
closeWaitForm();
showErrorMsg(er,er.Message);
}
finally
{
closeWaitForm();
}
debug("end relightCurrentWave.....");
}
//private void checkAuto_CheckedChanged(object sender, EventArgs e)
//{
// spinOrder.Enabled = checkAuto.Checked;
//}
private void btnCorrect_Click(object sender, EventArgs e)
{
if (exceptionDetail == null)
{
return;
}
if (comException.SelectedItem == null)
{
showErrorMsg("请选择处理结果");
comException.Focus();
return;
}
exceptionDetail.validSolution = ((Node)comException.SelectedItem).ID;
exceptionDetail.solutionRemark = textEditExRemark.Text;
exceptionDetail.bulkPickState = (int)enumOutStockPickStatus.;
// exceptionDetail.Update();
try
{
bool b = this.pickClient.updateValidBulkPickExceptionStatus(exceptionDetail.ID, exceptionDetail.bulkPickState,
exceptionDetail.solutionRemark, exceptionDetail.validSolution);
closeClient();
resetExceptionDetails();
bindException();
}
catch (Exception ex)
{
showErrorMsg(ex,ex.Message);
}
}
private void checkEditAutoInterVal_CheckedChanged(object sender, EventArgs e)
{
spinOrder.Enabled = !checkEditAutoInterVal.Checked;
}
private void updateLableStatus(DataTable dt = null)
{
if (!WmsConstants.OUT_LIGHT_ENABLE)
{
return;
}
string key = "";
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
if (dr["state"].ToString().Equals("1"))
{
key = Util.getLightKey(Convert.ToInt16(dr["color"].ToString()), Convert.ToInt16(dr["elabId"].ToString()), Convert.ToInt16(dr["elabAddress"].ToString()));
WmsConstants.WAVE_CURRENT_PICK_STATUS[key] = true;
}
}
}
if (dtBulks == null || dtBulks.Rows.Count == 0)
{
return;
}
WmsOutPickLable label;
DataView dv = dtBulks.DefaultView;
dv.RowFilter = "isPicked =0";
dv.Sort = "isPicked";
if (dv.Count ==0)
{
//all picked, wave end
endWave();
return;
}
foreach (DataRow dr in dtBulks.Rows)
{
label = new WmsOutPickLable(dr);
key = Util.getLightKey(label.color, label.elabId, label.elabAddress);
if( WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.ContainsKey(key)){
dr["isLightUp"] = WmsConstants.WAVE_CURRENT_LIGHTS_STATUS[key] ? 1 : 0;
}
if (WmsConstants.WAVE_CURRENT_PICK_STATUS.ContainsKey(key))
{
dr["isPicked"] = WmsConstants.WAVE_CURRENT_PICK_STATUS[key] ? 1 : 0;
}
}
dv.RowFilter = ""; // 如果 dv.RowFilter ="isPicked =0"; 则已拣的不再显示
gridControl3.DataSource = dtBulks.DefaultView;
}
private void GoodsOutForm_FormClosing(object sender, FormClosingEventArgs e)
{
timer.Stop();
timer.Close();
// closeClient();
// closeClient();
autoWave = false;
turnOffLights();// elelab.pick.init_port(enumLabelPickType.pick);
}
//-------------below moved from logic layer
WmsOutPickRequest outRequest = new WmsOutPickRequest();
WmsStockRecord stkRecord = new WmsStockRecord();
WmsOutPickLable pickLabelDetail = new WmsOutPickLable();
/// <summary>
/// 点亮待拣选标签
/// </summary>
private void lightLablesInSvc()
{
pickClient.lightLables();
}
/// <summary>
/// 点亮待拣选标签
/// </summary>
private void lightLables(int[] parts)
{
// lightLablesInSvc();
//lightLabelsInWinformSvc();
if (!WmsConstants.OUT_LIGHT_ENABLE)
{
return;
}
if (parts.Length == 0)
{
return;
}
initLights();
// turnOffLights();
lastWave = DateTime.Now;
WmsConstants.WAVE_CURRENT_LIGHTS_STATUS.Clear();
bool exist = pickClient.getCurrentPickList((int)enumPickState.).Rows.Count > 0;
closeClient();
if (!exist)
{
return;
}
showWaitForm("正在点亮标签...");
string result = lightPart.lightsUp(pickClient.getPartsPickList( parts,(int)enumPickState.), enumLabelPickType.pick);
closeClient();
//#if DEBUG
closeWaitForm();
/*
if (!string.IsNullOrEmpty(result))
{
// lbLightsInfo.Text = result;
if (WmsConstants.OUT_SPEAK_WAVE)
{
speak(errorMsg);
}
// showErrorMsg(result);
}
else if ( light.activeComports.Count == 0)
{
if ( WmsConstants.OUT_SPEAK_WAVE)
{
speak(errorMsg);
}
}
else
{
//#endif
//speak(WmsConstants.WAVE_CURRENT_ORDER);
if (WmsConstants.WAVE_CURRENT_ORDER.Length > 0)
{
if (WmsConstants.OUT_SPEAK_WAVE)
{
speak(WmsConstants.WAVE_CURRENT_ORDER + " 开始捡货啦");
}
}
LogHelper.debug(typeof(GoodsOutForm), "开始拣货 :" + WmsConstants.WAVE_CURRENT_ORDER);
}
*/
// speak("Go! Go! Go!");
}
void initLights()
{
string errorMsg = "灯光设备连接错误";
if (InvokeRequired)
{
this.Invoke(new loadNewCurrentWave(delegate()
{
lbLightsInfo.Text = "设备连接正常";
lightPart.initPort(enumLabelPickType.pick);
if (lightPart.activeComports.Count == 0)
{
lbLightsInfo.Text = errorMsg;
// showErrorMsg("拣选设备连接错误,请检查设备连接");
return;
}
}));
}
else
{
lbLightsInfo.Text = "设备连接正常";
lightPart.initPort(enumLabelPickType.pick);
if (lightPart.activeComports.Count == 0)
{
lbLightsInfo.Text = errorMsg;
// showErrorMsg("拣选设备连接错误,请检查设备连接");
return;
}
}
}
private static bool _canNewWave = true;
//Int64 lastWave =0;
DateTime lastWave;
public bool canNewWave
{
get
{
// _canNewWave = _canNewWave && outRequest.canNewWave();
if (!autoWave)
{
return true;
}
if (_canNewWave)
{
lastWave = DateTime.Now;
}
else
{
TimeSpan ts = DateTime.Now - lastWave;
if (ts.TotalMilliseconds > WmsConstants.MAX_SECONDS_BETWEEN_WAVES) //强制开始新波次,有可能会有再次发送亮灯数据时
{
_canNewWave = true;
lastWave = DateTime.Now;
}
}
return _canNewWave;//|| outRequest.canNewWave() ;//|| true;
// return _canNewWave; // pickLabelDetail.getCurrentPickList(enumLabelPickState.notPicked).Tables[0].Rows.Count > 0;
}
}
public void newPickWave()
{
if (!canNewWave)
{
return;
}
int[] lstPartion ;
_canNewWave = false;
// bool exist = false;
try
{
showWaitForm("正在配置新波次");
lstPartion= pickClient.newPartPickWave();
closeClient();
// WmsConstants.WAVE_CURRENT_PICK_STATUS.Clear();
lightLabelsCurrentWave(lstPartion);
LogHelper.debug(typeof(GoodsOutForm), "开始新波次 :" + WmsConstants.WAVE_CURRENT_ORDER);
}
catch (Exception er)
{
LogHelper.WriteLog(this.GetType(), er);
#if debug
showErrorMsg(er.Message);
#endif
}
lastWaveRequestTime = DateTime.Now;
//_canNewWave = true;
}
private void label1_Click(object sender, EventArgs e)
{
}
// bool isPriorityQuery = false;
private void btnQuery_Click_1(object sender, EventArgs e)
{
// isPriorityQuery = true;
// isPriorityQuery = false;
showWaitForm();
try
{
this.query();
}
catch (Exception er)
{
showErrorMsg(er.Message);
}
closeWaitForm();
}
private void btnPriority_Click(object sender, EventArgs e)
{
if (dtPickOrders== null || dtPickOrders.Rows.Count == 0)
{
showErrorMsg("没有要处理的出库订单");
return;
}
List<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 partFinished(int eleId)
{
int partion = eleId;// -WmsConstants.PART_FINISH_LABLE_ID_PLUS;
// see if all lights data picked
int[] parts = {partion};
DataTable dt = pickClient.getPartsPickList(parts,(int)enumPickState.);
if (dt.Rows.Count > 0) //未完成,则重新点亮本区域任务
{
Thread.Sleep(2000);
// WmsConstants.partStatus[eleId] = true;
lightLables(parts);
return;
}
pickClient.finishPartWave(partion, false);
closeClient();
loadPickOrdersInWave();
newWave();
}
void getPartFinishIds()
{
WmsConstants.PART_FINISH_LABLE_IDS = pickClient.getPartsFinishIds();
closeClient();
}
private void btnRelight_Click_1(object sender, EventArgs e)
{
lightAllLabels();
}
private void btnSetWaveRule_Click(object sender, EventArgs e)
{
WcfWaveRule waveRule = new WcfWaveRule();
waveRule.ID = ((Colitem)comboWaveRule.SelectedItem).key;
waveRule.type = (int)enumWaveRuleType.DPS灯光波次;
waveRule.interval = (int)spinWave.Value;
if (waveRule.ID > 0)
{
bool rs = wrClient.setRule(waveRule);
bool a = rs;
}
else
{
showErrorMsg("请选择波次规则");
}
}
}
}