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

2262 lines
82 KiB
C#
Raw Normal View History

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