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 sortingItemPanel = new List(); void LoadPickingBit() { List 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 扫物料 /// /// 扫物料 /// /// /// void frmPicking_ScanItemEvent(object sender, frmTemplet.ScanItemEventArgs e) { var dgvData = (List)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(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 sortingList = new List(); #region 扫托盘 /// /// 扫托盘 /// /// /// 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>(scanTrayResult); //当前托盘分拣的所有物料 List currentTrayItems = new List(); 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 扫周转箱 /// /// 扫周转箱 /// /// 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(resultStr); if (!scanTurnoverBoxResult.Success) { MessageBox.Show(scanTurnoverBoxResult.Msg); return; } MessageBox.Show("合箱成功"); } #endregion void ScanEnter() { string trayCode = lblItemTray.Text; } #region 加载右边分拣单物料数 /// /// 加载右边分拣单物料数 /// 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 加载左边托盘物料数 /// /// 加载左边托盘物料数 /// /// private void LoadTrayItemNum(List 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 } }