using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using HH.WMS.Client.Common;
|
using Newtonsoft.Json;
|
using HH.WMS.Entitys;
|
using HH.WMS.Client.CustomControl;
|
|
namespace HH.WMS.Client.frm
|
{
|
public partial class frmPicking : frmTemplet
|
{
|
public frmPicking()
|
{
|
InitializeComponent();
|
|
this.ScanTrayEvent += frmPicking_ScanTrayEvent;
|
this.ScanItemEvent += frmPicking_ScanItemEvent;
|
|
this.KeyDown += frmTemplet_KeyDown;
|
|
LoadPickingBit();
|
}
|
|
List<PickSorting> sortingItemPanel = new List<PickSorting>();
|
void LoadPickingBit()
|
{
|
List<string> uniPakbits = StaticUtil.UniPakBits;
|
if (uniPakbits == null || !uniPakbits.Any())
|
{
|
MessageBox.Show("请维护分拣货位");
|
return;
|
}
|
this.tlpPickSorting.ColumnCount = uniPakbits.Count;
|
for (int i = 0; i < uniPakbits.Count; i++)
|
{
|
if (i > 0)
|
{
|
this.tlpPickSorting.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
|
}
|
PickSorting ps = new PickSorting();
|
ps.lblPickBit.Text = uniPakbits[i];
|
ps.lblNextOpt.Visible = false;
|
ps.lblPickSortingNum.Text = string.Empty;
|
ps.lblSortingNo.Text = string.Empty;
|
|
ps.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
|
this.tlpPickSorting.Controls.Add(ps);
|
this.tlpPickSorting.SetColumn(ps, i);
|
}
|
}
|
|
#region 扫物料
|
/// <summary>
|
/// 扫物料
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
void frmPicking_ScanItemEvent(object sender, frmTemplet.ScanItemEventArgs e)
|
{
|
var dgvData = (List<TN_WM_SORTING_LOCATIONEntity>)dataGridViewX1.DataSource;
|
bool existsItem = false;
|
foreach (var d in dgvData)
|
{
|
if (e.itemInfo.CN_S_ITEM_CODE == d.CN_S_ITEM_CODE)
|
{
|
existsItem = true;
|
if (e.itemInfo.CN_F_MIN_PACK_QTY <= (d.CN_F_QUANTITY - d.CN_F_PICKED_QTY))
|
{
|
foreach (var s in sortingList)
|
{
|
foreach (var sl in s.SortingLocationList)
|
{
|
if (sl.CN_S_ITEM_CODE == d.CN_S_ITEM_CODE &&
|
e.itemInfo.CN_F_MIN_PACK_QTY <= (sl.CN_F_QUANTITY - sl.CN_F_PICKED_QTY))
|
{
|
sl.CN_F_PICKED_QTY += e.itemInfo.CN_F_MIN_PACK_QTY;
|
|
var currentSortingCtrl = panelEx3.ContainsFirst(s.CN_S_SORTING_NO);
|
if (currentSortingCtrl == null)
|
{
|
MessageBox.Show("未找到分拣单:" + s.CN_S_SORTING_NO + "的分拣工位");
|
return;
|
}
|
var currentBit = currentSortingCtrl.Parent.ContainsFirst("lblBit_");
|
|
TN_WM_SORTING_RESULTEntity sortingResultEntity = new TN_WM_SORTING_RESULTEntity()
|
{
|
CN_S_SORTING_NO = s.CN_S_SORTING_NO,
|
CN_S_ITEM_CODE = d.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = d.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = d.CN_S_ITEM_STATE,
|
CN_S_OWNER = d.CN_S_OWNER,
|
CN_S_LOT_NO = d.CN_S_LOT_NO,
|
CN_S_TRAY_CODE = lblItemTray.Text,
|
CN_F_QUANTITY = e.itemInfo.CN_F_MIN_PACK_QTY,
|
CN_S_PACKING_CODE = "",
|
CN_S_MODEL = e.itemInfo.CN_S_MODEL,
|
CN_S_FIGURE_NO = e.itemInfo.CN_S_FIGURE_NO,
|
CN_S_SATTION = currentBit.Text
|
};
|
var postEntity = new
|
{
|
TokenId = StaticUtil.TokenId,
|
PostData = sortingResultEntity
|
};
|
string resultStr = WebApiManager.HttpWMS_Post("/api/Sorting/ScanItem", JsonConvert.SerializeObject(postEntity));
|
OperateResult scanItemResult = JsonConvert.DeserializeObject<OperateResult>(resultStr);
|
if (!scanItemResult.Success)
|
{
|
MessageBox.Show(scanItemResult.Msg);
|
return;
|
}
|
sl.CN_F_PICKED_QTY += e.itemInfo.CN_F_MIN_PACK_QTY;
|
d.CN_F_PICKED_QTY += e.itemInfo.CN_F_MIN_PACK_QTY;
|
LoadSortingItemNum();
|
LoadTrayItemNum(dgvData);
|
dataGridViewX1.DataSource = dgvData;
|
break;
|
}
|
}
|
}
|
d.CN_F_PICKED_QTY += e.itemInfo.CN_F_MIN_PACK_QTY;
|
break;
|
}
|
else
|
{
|
MessageBox.Show("包装数大于分拣数");
|
return;
|
}
|
}
|
}
|
if (!existsItem)
|
{
|
MessageBox.Show("物料:" + e.itemInfo.CN_S_ITEM_CODE + "不是托盘中的物料");
|
}
|
}
|
#endregion
|
|
//托盘波次所有分拣单
|
List<TN_WM_SORTING_LISTEntity> sortingList = new List<TN_WM_SORTING_LISTEntity>();
|
|
#region 扫托盘
|
/// <summary>
|
/// 扫托盘
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
void frmPicking_ScanTrayEvent(object sender, frmTemplet.ScanTrayEventArgs e)
|
{
|
string trayCode = e.trayInfo.CN_S_TRAY_CODE;
|
string pickBit = StaticUtil.WorkBench;
|
string scanTrayResult = WebApiManager.HttpWMS_Get("/api/Picking/ScanTray?trayCode=" + trayCode + "&pickBit=" + pickBit);
|
sortingList = JsonConvert.DeserializeObject<List<TN_WM_SORTING_LISTEntity>>(scanTrayResult);
|
|
//当前托盘分拣的所有物料
|
List<TN_WM_SORTING_LOCATIONEntity> currentTrayItems = new List<TN_WM_SORTING_LOCATIONEntity>();
|
sortingList.ForEach(f =>
|
{
|
f.SortingLocationList.ForEach(l =>
|
{
|
if (l.CN_S_TRAY_CODE == trayCode)
|
currentTrayItems.Add(l);
|
});
|
});
|
if (!currentTrayItems.Any())
|
{
|
MessageBox.Show("未找到该托盘的分拣数据");
|
return;
|
}
|
lblItemTray.Text = trayCode;
|
dataGridViewX1.AutoGenerateColumns = false;
|
dataGridViewX1.DataSource = currentTrayItems;
|
|
}
|
#endregion
|
|
private static CurrentPickSorting currentPickSorting = null;
|
|
#region 扫周转箱
|
/// <summary>
|
/// 扫周转箱
|
/// </summary>
|
/// <param name="boxNo"></param>
|
void ScanTurnoverBox(string boxNo)
|
{
|
if (currentPickSorting == null)
|
{
|
MessageBox.Show("请先扫描分拣工位");
|
return;
|
}
|
string resultStr = WebApiManager.HttpWMS_Get("/api/Sorting/ScanTurnoverBox?sortingNo=" + currentPickSorting.SortingNo + "&boxNo=" + boxNo + "&location=" + currentPickSorting.Bit);
|
OperateResult scanTurnoverBoxResult = JsonConvert.DeserializeObject<OperateResult>(resultStr);
|
if (!scanTurnoverBoxResult.Success)
|
{
|
MessageBox.Show(scanTurnoverBoxResult.Msg);
|
return;
|
}
|
MessageBox.Show("合箱成功");
|
}
|
#endregion
|
|
void ScanEnter()
|
{
|
string trayCode = lblItemTray.Text;
|
|
}
|
|
#region 加载右边分拣单物料数
|
/// <summary>
|
/// 加载右边分拣单物料数
|
/// </summary>
|
private void LoadSortingItemNum()
|
{
|
foreach (var sortingEntity in sortingList)
|
{
|
var leftNum = sortingEntity.SortingLocationList.Sum(s => s.CN_F_PICKED_QTY);
|
var rightNum = sortingEntity.SortingLocationList.Sum(s => s.CN_F_QUANTITY);
|
|
bool hasBit = false;
|
foreach (var p in sortingItemPanel)
|
{
|
if (!string.IsNullOrEmpty(p.lblSortingNo.Text))
|
{
|
if (sortingEntity.CN_S_SORTING_NO == p.lblSortingNo.Text)
|
{
|
p.lblPickSortingNum.Text = leftNum + "/" + rightNum;
|
continue;
|
}
|
}
|
hasBit = true;
|
p.lblSortingNo.Text = sortingEntity.CN_S_SORTING_NO;
|
p.lblPickSortingNum.Text = leftNum + "/" + rightNum;
|
if (sortingList.Count == 1)
|
{
|
currentPickSorting = new CurrentPickSorting()
|
{
|
SortingNo = sortingList[0].CN_S_SORTING_NO,
|
Bit = p.lblPickBit.Text
|
};
|
if (leftNum == rightNum)
|
p.lblNextOpt.Visible = true;
|
}
|
break;
|
}
|
if (!hasBit)
|
{
|
MessageBox.Show("分拣单数大于分拣墙数");
|
return;
|
}
|
}
|
}
|
#endregion
|
|
#region 加载左边托盘物料数
|
/// <summary>
|
/// 加载左边托盘物料数
|
/// </summary>
|
/// <param name="trayItems"></param>
|
private void LoadTrayItemNum(List<TN_WM_SORTING_LOCATIONEntity> trayItems)
|
{
|
var leftNum = trayItems.Sum(s => s.CN_F_PICKED_QTY);
|
var rightNum = trayItems.Sum(s => s.CN_F_QUANTITY);
|
tlpPickTray.Visible = true;
|
pickTrayItem.lblPickTrayNum.Text = leftNum + "/" + rightNum;
|
if (leftNum == rightNum)
|
pickTrayItem.lblStayReturn.Visible = true;
|
else
|
pickTrayItem.lblStayReturn.Visible = false;
|
}
|
#endregion
|
|
}
|
}
|