using DevComponents.DotNetBar.Controls;
using HH.WMS.Entitys;
using HH.WMS.Client.bll;
using HH.WMS.Client.Common;
using Newtonsoft.Json;
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.Entitys.Entitys;
using DevComponents.DotNetBar;
using Newtonsoft.Json.Linq;
using HH.WMS.Common;
using HH.WMS.Entitys.Basic;
using HH.WMS.Client.CustomControl;
namespace HH.WMS.Client.frm
{
public partial class frmUpShelves : frmTemplet
{
///
/// 当前物料PAK码
///
private string currentPak;
///
/// 已扫唯一码(判断是否重复扫描)
///
private List haveAlreadyScan = new List();
///
/// 当前容器实体
///
private TN_WM_B_TRAY_INFOEntity trayInfoModel = new TN_WM_B_TRAY_INFOEntity();
///
/// 当前容器内原有物料实体
///
private List originalTrayItemList = new List();
///
/// 当前扫描物料实体
///
private AutoBomItemEntity itemTempModel = new AutoBomItemEntity();
///
/// 物料缓存实体
///
private List itemModelCacheList = new List();
///
/// 是否允许混放
///
private bool isAllowMixing = true;
///
/// 物料混放上限
///
private int limitQty = 0;
///
/// 等待入容器的重量
///
private decimal allAddInWeight = 0;
#region 等待容器
private List _waitTray = new List();
///
/// 等待容器
///
public List WaitTray
{
get { return _waitTray; }
set
{
_waitTray = value;
lblWaitTray.Text = string.Join(",", _waitTray.ToArray());
if (lblWaitTray.Text != "等待容器..........")
{
lblWaitTray.ForeColor = Color.Red;
}
}
}
#endregion
public CusTray tray = new CusTray(1, 1);
///
/// 已扫描未处理的物料(码盘物料/移除物料)
///
private List scanedWaitExecuteItems = new List();
public frmUpShelves()
{
InitializeComponent();
this.ScanTrayEvent += frmUpShelves_ScanTrayEvent;
this.ScanItemEvent += frmUpShelves_ScanItemEvent;
this.ScanEnterEvent += frmUpShelves_ScanEnterEvent;
this.ScanItemUniqueCodeEvent += frmUpShelves_ScanItemUniqueCodeEvent;
this.dgvData.DataError += delegate (object sender, DataGridViewDataErrorEventArgs e) { };
this.dgvThisUp.DataError += delegate (object sender, DataGridViewDataErrorEventArgs e) { };
this.dgvWaitUp.DataError += delegate (object sender, DataGridViewDataErrorEventArgs e) { };
this.KeyDown += frmTemplet_KeyDown;
this.dgvData.AutoGenerateColumns = false;
this.dgvThisUp.AutoGenerateColumns = false;
this.dgvWaitUp.AutoGenerateColumns = false;
}
///
/// 扫描唯一码
///
void frmUpShelves_ScanItemUniqueCodeEvent(object sender, frmTemplet.ScanItemUniqueCodeEventArgs e)
{
#region 是否重复扫码判断
var scanCode = e.itemInfo.CN_S_UNIQUE_CODE;
if (haveAlreadyScan != null && haveAlreadyScan.Contains(scanCode))
{
//该唯一码已被扫过,请勿重复扫码 ***********无法判断此编码是否已存在于原容器中
MessageBoxEx.Show("该唯一码已被扫过,请勿重复扫码!");
return;
}
#endregion
if (lblItemTray.Text.Trim() == "_______________")
{
//判断待上架区是否存在物料
List CheckWaitUpData = (List)dgvWaitUp.DataSource;
if (CheckWaitUpData != null)
{
//该物料不存在待上架的信息
MessageBoxEx.Show("待上架列表中已存在物料数据,请先指引!");
return;
}
//不存在容器码,指引物料
//获取待上架的所有物料
string str = WebApiManager.HttpWMS_Get("/api/Up/GetWaitUpShelvesItems?itemCode=" + e.itemInfo.CN_S_ITEM_CODE);
OperateResult or = JsonConvert.DeserializeObject(str);
if (or.Status == ResultStatus.Success)
{
List waitList = JsonConvert.DeserializeObject>(or.Data.ToString());
//绑定待上架的物料
if (waitList.Count > 0)
{
//dgvWaitUp.AutoGenerateColumns = false;
dgvWaitUp.DataSource = waitList;
btnEnter.Text = "确认指引";
}
else
{
//该物料不存在待上架的信息
MessageBoxEx.Show("暂存区未找到该物料待上架的信息!");
return;
}
}
}
else
{
//存储类别、物料毛重、最大承受重量判断
var endAreaCode = StaticUtil.WorkArea;
//获取物料实体
itemTempModel = GetItemEntity(e.itemInfo.CN_S_ITEM_CODE);
if (itemTempModel == null)
{
MessageBoxEx.Show("未获取到物料 " + e.itemInfo.CN_S_ITEM_CODE + " 的实体!");
return;
}
//当待上架区有物料时,需要用户扫描待上架物料,不准扫其他物料
List CheckWaitUpData = (List)dgvWaitUp.DataSource;
if (CheckWaitUpData.Count > 0)
{
var hasWaitData = CheckWaitUpData.Where(x => x.CN_S_ITEM_CODE == itemTempModel.CN_S_ITEM_CODE).ToList();
if (hasWaitData.Count == 0)
{
MessageBoxEx.Show("请扫描待上架区物料!");
return;
}
}
if (itemTempModel.CN_S_STORE_TYPE != endAreaCode)
{
MessageBoxEx.Show("物料存储类别与目的库区不符!");
return;
}
if (itemTempModel.CN_F_TW == 0)
{
MessageBoxEx.Show("物料" + e.itemInfo.CN_S_ITEM_CODE + "没维护毛重!");
return;
}
var packNum = e.itemInfo.CN_F_PACKING_QTY;
if (packNum * itemTempModel.CN_F_TW > trayInfoModel.CN_F_LOADBEARING)
{
MessageBoxEx.Show("物料" + e.itemInfo.CN_S_ITEM_CODE + "已超出容器最大承受重量!");
return;
}
#region 物料混放上限判断
if (trayInfoModel.CN_N_GOODUPLINE != 0)
{
//原始容器物料个数汇总
var haveOld = originalTrayItemList.GroupBy(x => x.CN_S_ITEM_CODE).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim()
}).ToList();
//刚扫物料集合内物料个数汇总
var haveNew = scanedWaitExecuteItems.GroupBy(x => x.CN_S_ITEM_CODE).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim()
}).ToList();
haveOld.AddRange(haveNew);
var distinctEntity = haveOld.Distinct().ToList();
if (distinctEntity.Where(x => x.CN_S_ITEM_CODE == e.itemInfo.CN_S_ITEM_CODE).ToList().Count == 0)
{
if (distinctEntity.Count + 1 > trayInfoModel.CN_N_GOODUPLINE)
{
MessageBoxEx.Show("已超出物料混放上限 " + trayInfoModel.CN_N_GOODUPLINE + " !");
return;
}
}
}
#endregion
//存放规格判断
OperateResult resultTrayInfo = new TrayBll().GetTrayCapacityInfo(e.itemInfo.CN_S_ITEM_CODE);
if (resultTrayInfo.Success)
{
TN_WM_B_TRAY_CAPACITYEntity itemCapacityModel = JsonConvert.DeserializeObject(resultTrayInfo.Data.ToString());
var trayGrid = trayInfoModel.CN_N_ROW_NUM * trayInfoModel.CN_N_COLUMN_NUM;
if (!(itemCapacityModel.CN_S_SPEC == trayInfoModel.CN_S_SPEC && (trayGrid != 1 ? itemCapacityModel.CN_S_STORE_UNIT == trayGrid.ToString() : true)))
{
MessageBoxEx.Show("物料" + e.itemInfo.CN_S_ITEM_CODE + "设置存放规格与当前容器规格不符!");
return;
}
}
int PutInGrid = DoPutItemInTray(e.itemInfo.CN_S_ITEM_CODE, e.itemInfo); //返回True或者False
if (PutInGrid != 0)
{
#region 表格联动
//如果待上架预分配有数据,那就是指引出来的容器补料上架
//联动待上架减物料
List waitUpData = (List)dgvWaitUp.DataSource;
if (waitUpData.Count > 0)
{
foreach (var item in waitUpData)
{
if (item.CN_S_ITEM_CODE == e.itemInfo.CN_S_ITEM_CODE)
{
item.CN_F_QUANTITY = item.CN_F_QUANTITY - e.itemInfo.CN_F_PACKING_QTY;
}
}
waitUpData = waitUpData.Where(x => x.CN_F_QUANTITY > 0).ToList();
dgvWaitUp.DataSource = waitUpData;
}
//联动已扫描加物料
List ThisUpData = (List)dgvThisUp.DataSource;
//如果已存在于已扫描物料区,则直接加数量
if (ThisUpData != null && ThisUpData.Where(x => x.CN_S_ITEM_CODE == e.itemInfo.CN_S_ITEM_CODE).ToList().Count > 0)
{
foreach (var item in ThisUpData)
{
if (item.CN_S_ITEM_CODE == e.itemInfo.CN_S_ITEM_CODE)
{
item.CN_F_QUANTITY = item.CN_F_QUANTITY + e.itemInfo.CN_F_PACKING_QTY;
}
}
dgvThisUp.DataSource = ThisUpData;
dgvThisUp.Refresh();
}
//如果不存在于已扫描物料区,则直接加一行
else
{
List newRowList = new List();
newRowList.Add(new TN_WM_B_TRAY_ITEM_MSTEntity()
{
TokenId = StaticUtil.TokenId,
CN_GUID = Guid.NewGuid().ToString(),
CN_S_TRAY_CODE = trayInfoModel.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = PutInGrid.ToString(),
CN_S_ITEM_CODE = e.itemInfo.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = e.itemInfo.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = e.itemInfo.CN_S_FIGURE_NO,
CN_F_QUANTITY = e.itemInfo.CN_F_PACKING_QTY,
CN_S_ITEM_STATE = Constants.ItemState_Qualified,//默认
CN_S_MEASURE_UNIT = e.itemInfo.CN_S_PACKING_UNIT,
CN_S_MODEL = e.itemInfo.CN_S_MODEL,
CN_S_OWNER = e.itemInfo.CN_S_OWNER
});
dgvThisUp.DataSource = newRowList;
}
#endregion
#region 容器样式联动
tray.SetNumByTrayGrid(PutInGrid, allAddInWeight, trayInfoModel.CN_F_LOADBEARING.HasValue ? trayInfoModel.CN_F_LOADBEARING.Value : 1);
//tray.Refresh();
#endregion
//存在容器码,扫描物料则是需要码盘
TN_WM_B_TRAY_ITEM_MSTEntity mst = new TN_WM_B_TRAY_ITEM_MSTEntity()
{
TokenId = StaticUtil.TokenId,
CN_GUID = Guid.NewGuid().ToString(),
CN_S_UNIQUE_CODE = e.itemInfo.CN_S_UNIQUE_CODE,
CN_S_TRAY_CODE = trayInfoModel.CN_S_TRAY_CODE,
CN_S_TRAY_GRID = PutInGrid.ToString(),
CN_S_ITEM_CODE = e.itemInfo.CN_S_ITEM_CODE,
CN_S_LOT_NO = e.itemInfo.CN_S_LOT_NO,
CN_S_ITEM_NAME = e.itemInfo.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = e.itemInfo.CN_S_FIGURE_NO,
CN_F_QUANTITY = e.itemInfo.CN_F_PACKING_QTY,
CN_S_ITEM_STATE = Constants.ItemState_Qualified,//默认
CN_S_MEASURE_UNIT = string.IsNullOrEmpty(e.itemInfo.CN_S_PACKING_UNIT) ? GetItemEntity(e.itemInfo.CN_S_ITEM_CODE.ToString()).CN_S_MEASURE_UNIT : e.itemInfo.CN_S_PACKING_UNIT,
CN_S_MODEL = e.itemInfo.CN_S_MODEL,
CN_S_OWNER = e.itemInfo.CN_S_OWNER
};
List trayitemrelDtl = new List();
trayitemrelDtl.Add(new TN_WM_B_TRAY_ITEM_DTLEntity()
{
CN_PARENT_GUID = mst.CN_GUID,
CN_S_PACKING_UNIT = e.itemInfo.CN_S_PACKING_UNIT,
CN_F_PACKING_QTY = e.itemInfo.CN_F_PACKING_QTY,
CN_S_LOT_NO = e.itemInfo.CN_S_LOT_NO,
CN_S_PRODUCTION_BATCH = e.itemInfo.CN_S_PRODUCTION_BATCH
});
mst.TrayItemDtlList = trayitemrelDtl;
scanedWaitExecuteItems.Add(mst);
haveAlreadyScan.Add(e.itemInfo.CN_S_UNIQUE_CODE);
}
else
{
MessageBoxEx.Show("未找到有效位置!");
return;
}
}
}
///
/// 判断物料是否可以放到容器上
///
/// 物料编码
/// 扫描物料唯一码返回的实体,如果扫描的是物料编码,则此值为null
///
private int DoPutItemInTray(string itemCode, MONGO_PRINT_BARCODE scanItemModel)
{
//循环容器分格
for (var a = 1; a <= trayInfoModel.CN_N_COLUMN_NUM * trayInfoModel.CN_N_ROW_NUM; a++)
{
#region 判断重量是否超标
var trayGrid = a;
var groupList_1 = originalTrayItemList.GroupBy(x => new
{
x.CN_S_TRAY_GRID,
x.CN_S_ITEM_CODE,
x.CN_S_WEIGHT
}).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_TRAY_GRID = g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
CN_S_WEIGHT = g.Sum(p => p.CN_F_QUANTITY) * (GetItemEntity(g.FirstOrDefault().CN_S_ITEM_CODE.Trim())).CN_F_TW
}).ToList();
var groupList_2 = groupList_1.GroupBy(x => new
{
x.CN_S_TRAY_GRID,
x.CN_S_WEIGHT
}).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_TRAY_GRID = g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
CN_S_WEIGHT = g.Sum(p => p.CN_S_WEIGHT)
}).ToList();
var selectItem = groupList_2.Where(x => x.CN_S_TRAY_GRID == trayGrid.ToString()).ToList();
decimal haveWeight = 0;//容器分格内原有物料重量(已汇总)
if (selectItem.Count != 0)
{
haveWeight = selectItem[0].CN_S_WEIGHT;
}
//**************************************************************
var groupList_3 = scanedWaitExecuteItems.GroupBy(x => new
{
x.CN_S_TRAY_GRID,
x.CN_S_ITEM_CODE,
x.CN_S_WEIGHT
}).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_TRAY_GRID = g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
CN_S_WEIGHT = g.Sum(p => p.CN_F_QUANTITY) * (GetItemEntity(g.FirstOrDefault().CN_S_ITEM_CODE.Trim())).CN_F_TW
}).ToList();
var groupList_4 = groupList_3.GroupBy(x => new
{
x.CN_S_TRAY_GRID,
x.CN_S_WEIGHT
}).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_TRAY_GRID = g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
CN_S_WEIGHT = g.Sum(p => p.CN_S_WEIGHT)
}).ToList();
var scanItem = groupList_4.Where(x => x.CN_S_TRAY_GRID == trayGrid.ToString()).ToList();
decimal scanWeight = 0;//容器分格本次已经放置物料重量(已汇总)
if (scanItem.Count != 0)
{
scanWeight = scanItem[0].CN_S_WEIGHT;
}
//**************************************************************
//准备入容器分格的重量
decimal PrepareWeight = (itemTempModel.CN_F_TW) * (scanItemModel == null ? itemTempModel.CN_F_MIN_PACK_QTY : scanItemModel.CN_F_PACKING_QTY);
//容器内原有重量+已扫描放置重量+本次待放置重量+实际重量
allAddInWeight = haveWeight + scanWeight + PrepareWeight + Convert.ToDecimal(trayInfoModel.CN_F_WEIGHT);
#endregion
if (allAddInWeight <= Convert.ToDecimal(trayInfoModel.CN_F_LOADBEARING))
{
//物料是否存在于原始容器中
var haveOld = originalTrayItemList.Where(x => x.CN_S_ITEM_CODE == itemCode).ToList();
//物料是否存在于刚扫物料集合内
var haveNew = scanedWaitExecuteItems.Where(x => x.CN_S_ITEM_CODE == itemCode).ToList();
if (haveOld.Count == 0 && haveNew.Count == 0)
{
//新物料,直接放
return trayGrid;
}
else
{
//判断批次是否允许混放
if (isAllowMixing)
{
//判断是否质保件
if (itemTempModel.CN_C_IS_WARRNTY_PARTS == "Y")
{
if (scanItemModel.CN_S_LOT_NO == originalTrayItemList[0].CN_S_LOT_NO)//批次相同
{
return trayGrid;
}
}
else
{
return trayGrid;
}
}
else
{
if (originalTrayItemList.Count > 0)
{
if (scanItemModel.CN_S_LOT_NO == originalTrayItemList[0].CN_S_LOT_NO)//批次相同
{
return trayGrid;
}
}
if (scanedWaitExecuteItems.Count > 0)
{
if (scanItemModel.CN_S_LOT_NO == scanedWaitExecuteItems[0].CN_S_LOT_NO)//批次相同
{
return trayGrid;
}
}
}
}
}
}
return 0;
}
///
/// 获取物料实体,并加页面缓存
///
/// 物料编码
///
public AutoBomItemEntity GetItemEntity(string itemCode)
{
AutoBomItemEntity itemMode = new AutoBomItemEntity();
if (itemModelCacheList != null)
{
foreach (var item in itemModelCacheList)
{
if (item.CN_S_ITEM_CODE == itemCode)
{
itemMode = item;
break;
}
}
}
if (string.IsNullOrEmpty(itemMode.CN_S_ITEM_CODE))
{
string itemStr = WebApiManager.HttpWMS_Get("/api/Item/GetItemModel?itemCode=" + itemCode);
OperateResult results = JsonConvert.DeserializeObject(itemStr);
if (results.Success)
{
itemTempModel = JsonConvert.DeserializeObject(results.Data.ToString());
itemMode = itemTempModel;
itemModelCacheList.Add(itemTempModel);
}
}
if (string.IsNullOrEmpty(itemMode.CN_S_ITEM_CODE))
{
MessageBoxEx.Show("物料 " + itemCode + " 不存在!");
}
return itemMode;
}
///
/// 扫描物料
///
void frmUpShelves_ScanItemEvent(object sender, frmTemplet.ScanItemEventArgs e)
{
if (lblItemTray.Text.Trim() == "_______________")
{
//不存在容器码,指引物料
//获取待上架的所有物料
string str = WebApiManager.HttpWMS_Get("/api/Up/GetWaitUpShelvesItems?itemCode=" + e.itemInfo.CN_S_ITEM_CODE);
OperateResult or = JsonConvert.DeserializeObject(str);
if (or.Status == ResultStatus.Success)
{
if (((JArray)or.Data).Count > 0)
{
//绑定待上架的物料
dgvWaitUp.AutoGenerateColumns = false;
dgvWaitUp.DataSource = or.Data;
btnEnter.Text = "确认指引";
}
else
{
MessageBoxEx.Show("无待上架的物料");
}
}
}
else
{
// 存在容器码,扫描物料则是需要码盘
TN_WM_B_TRAY_ITEM_MSTEntity mst = new TN_WM_B_TRAY_ITEM_MSTEntity()
{
TokenId = StaticUtil.TokenId,
CN_S_ITEM_CODE = e.itemInfo.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = e.itemInfo.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = e.itemInfo.CN_S_FIGURE_NO,
CN_S_MEASURE_UNIT = e.itemInfo.CN_S_MEASURE_UNIT,
CN_F_QUANTITY = e.itemInfo.CN_F_MIN_PACK_QTY,
CN_S_ITEM_STATE = Constants.ItemState_Qualified,//默认
CN_S_OWNER = Constants.DefaultOwner
};
mst.TrayItemDtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity()
{
CN_PARENT_GUID = mst.CN_GUID,
CN_S_PACKING_UNIT = e.itemInfo.CN_S_PACK_UNIT,
CN_F_PACKING_QTY = e.itemInfo.CN_F_MIN_PACK_QTY
});
scanedWaitExecuteItems.Add(mst);
}
txtCode.Clear();
}
///
/// 扫描容器号
///
///
///
void frmUpShelves_ScanTrayEvent(object sender, frmTemplet.ScanTrayEventArgs e)
{
if (lblItemTray.Text.Trim() != "_______________")
{
MessageBoxEx.Show("请把当前容器 " + lblItemTray.Text.Trim() + " 处理完成后再切换容器!");
return;
}
#region 判断:根据容器找所在货位信息
OperateResult resultLocation = new TrayBll().GetLocationByTray(e.trayInfo.CN_S_TRAY_CODE);
if (resultLocation.Success)
{
if (resultLocation.Data != null)
{
TN_WM_B_TRAY_LOCATIONEntity items = JsonConvert.DeserializeObject(resultLocation.Data.ToString());
if (!string.IsNullOrEmpty(items.CN_S_LOCATION_CODE))
{
MessageBoxEx.Show("容器 " + e.trayInfo.CN_S_TRAY_CODE + " 已在货位 " + items.CN_S_LOCATION_CODE + " 上,禁止扫码!");
return;
}
}
}
#endregion
#region 判断:根据容器找所在任务信息
OperateResult resultTask = new TrayBll().GetTaskByTray(e.trayInfo.CN_S_TRAY_CODE);
if (resultTask.Success)
{
List items = JsonConvert.DeserializeObject>(resultTask.Data.ToString());
if (items.Any())
{
MessageBoxEx.Show("容器 " + e.trayInfo.CN_S_TRAY_CODE + " 已在任务 " + items[0].CN_S_TASK_NO + " 中,禁止扫码!");
return;
}
}
#endregion
if (lblWaitTray.Text != "等待容器..........")
{
if (_waitTray.Contains(e.trayInfo.CN_S_TRAY_CODE))
{
lblWaitTray.Text = "容器 " + e.trayInfo.CN_S_TRAY_CODE + " 正在执行";
}
else
{
MessageBoxEx.Show("请扫描等待容器!");
return;
}
}
lblItemTray.Text = e.trayInfo.CN_S_TRAY_CODE;
txtCode.Clear();
//加载容器信息
OperateResult resultTrayInfo = new TrayBll().GetTrayInfo(e.trayInfo.CN_S_TRAY_CODE);
if (resultTrayInfo.Success)
{
trayInfoModel = JsonConvert.DeserializeObject(resultTrayInfo.Data.ToString());
tray = new CusTray(trayInfoModel.CN_N_ROW_NUM, trayInfoModel.CN_N_COLUMN_NUM);
tray.Dock = DockStyle.Fill;
panelCurrentTray.Controls.Add(tray);
}
//加载容器中的物料信息
OperateResult result = new TrayBll().GetItems(e.trayInfo.CN_S_TRAY_CODE);
if (result.Success)
{
List items = JsonConvert.DeserializeObject>(result.Data.ToString());
originalTrayItemList = items;
dgvData.DataSource = items;
}
//加载容器的预预分配信息
result = new TrayBll().GetTrayAlloc(e.trayInfo.CN_S_TRAY_CODE);
if (result.Status == ResultStatus.Success)
{
List allocs = JsonConvert.DeserializeObject>(result.Data.ToString());
List itemMstList = new List();
foreach (var item in allocs)
{
itemMstList.Add(new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_TRAY_GRID = item.CN_S_TRAY_GRID,
CN_S_TRAY_CODE = item.CN_S_TRAY_CODE,
CN_S_ITEM_CODE = item.CN_S_ITEM_CODE,
CN_S_ITEM_NAME = item.CN_S_ITEM_NAME,
CN_S_FIGURE_NO = item.CN_S_FIGURE_NO,
CN_F_QUANTITY = item.CN_F_QUANTITY.HasValue ? item.CN_F_QUANTITY.Value : 0,
CN_S_ITEM_STATE = Constants.ItemState_Qualified,//默认
CN_S_MEASURE_UNIT = GetItemEntity(item.CN_S_ITEM_CODE.ToString()).CN_S_MEASURE_UNIT,
CN_S_MODEL = item.CN_S_MODEL
});
}
dgvWaitUp.DataSource = itemMstList;
}
//扫描容器后,可以直接“回库”或“入库”
btnEnter.Text = "入库";
}
private void frmUpShelves_Load(object sender, EventArgs e)
{
this.txtCode.Focus();
//获取物料是否允许混放
GetAllowMixing();
}
#region 获取策略:物料不同批次是否允许混放
private void GetAllowMixing()
{
string str = WebApiManager.HttpWMS_Get("/api/TrayItemRel/GetStrategyListByAreaCode?areaCode=" + StaticUtil.WorkArea);
OperateResult or = JsonConvert.DeserializeObject(str);
if (or.Status == ResultStatus.Success)
{
List lstStrategy = JsonConvert.DeserializeObject>(or.Data.ToString());
var returnList = lstStrategy.Where(x => x.CN_S_CODE == StrategyKey.MixedBatchesOrNot).ToList();
if (returnList.Count > 0)
{
isAllowMixing = true;
}
else
{
isAllowMixing = false;
}
}
}
#endregion
void frmUpShelves_ScanEnterEvent(object sender, EventArgs e)
{
btnEnter_Click(sender, e);
}
//提交操作
private void btnEnter_Click(object sender, EventArgs e)
{
switch (btnEnter.Text)
{
case "入库":
#region 入库功能
List waitUpData = (List)dgvWaitUp.DataSource;
//是否继续指引
bool isContinueAlloc = false;
if (waitUpData.Count > 0)
{
DialogResult dr = MessageBoxEx.Show("待上架区剩余物料是否继续指引容器?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (dr == DialogResult.Yes)
{
//点确定的代码
// MessageBoxEx.Show("点确定");
isContinueAlloc = true;
}
else
{ //点取消的代码 //继续放物料
return;
}
}
TN_WM_TASKEntity task = new TN_WM_TASKEntity()
{
CN_N_PRIORITY = 1,
CN_S_END_AREA = StaticUtil.WorkArea,
CN_S_FROM_OP = "",
CN_S_FROM_NO = "",
CN_S_START_AREA = StaticUtil.WorkBench,
CN_S_START_BIT = StaticUtil.WorkBenchTrayBit,
CN_S_STOCK_CODE = StaticUtil.StockCode,
CN_S_TASK_TYPE = "上架",
CN_S_TRAY_CODE = lblItemTray.Text.Trim(),
TokenId = StaticUtil.TokenId
};
OperateResult orTrayItem = new OperateResult();
if (scanedWaitExecuteItems.Any())
{
#region 拼接最终提交数据
List mstNewList = new List();
//批量克隆
scanedWaitExecuteItems.ForEach(x =>
{
mstNewList.Add(TransExpV2.Trans(x));
});
var mstNewList_GroupList = mstNewList.GroupBy(x => new
{
x.CN_S_ITEM_CODE,
x.CN_S_ITEM_STATE,
x.CN_S_OWNER,
x.CN_S_TRAY_GRID
}).Select(g => new TN_WM_B_TRAY_ITEM_MSTEntity
{
CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(),
CN_S_TRAY_GRID = g.FirstOrDefault().CN_S_TRAY_GRID.Trim(),
CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(),
CN_S_ITEM_NAME = g.FirstOrDefault().CN_S_ITEM_NAME.Trim(),
CN_S_FIGURE_NO = g.FirstOrDefault().CN_S_FIGURE_NO.Trim(),
CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(),
CN_S_MEASURE_UNIT = g.FirstOrDefault().CN_S_MEASURE_UNIT.Trim(),
CN_S_MODEL = g.FirstOrDefault().CN_S_MODEL.Trim(),
CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(),
CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY)
}).ToList();
List _FinallyScanData = new List();
foreach (var item in mstNewList_GroupList)
{
var itemCode = item.CN_S_ITEM_CODE;
var trayGrid = item.CN_S_TRAY_GRID;
var itemState = item.CN_S_ITEM_STATE;
var owner = item.CN_S_OWNER;
TN_WM_B_TRAY_ITEM_MSTEntity mstData = new TN_WM_B_TRAY_ITEM_MSTEntity();
mstData = item;
mstData.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
mstData.TokenId = scanedWaitExecuteItems[0].TokenId;
List dtlList = new List();
var _findDtlList = mstNewList.Where(x => x.CN_S_ITEM_CODE == itemCode && x.CN_S_TRAY_GRID == trayGrid && x.CN_S_OWNER == owner && x.CN_S_ITEM_STATE == itemState).ToList();
if (_findDtlList.Count > 0)
{
foreach (var itemDtl in _findDtlList)
{
dtlList.AddRange(itemDtl.TrayItemDtlList);
}
}
List dtlResultList = new List();
dtlResultList = dtlList.GroupBy(x => new
{
x.CN_S_LOT_NO,
x.CN_S_PRODUCTION_BATCH,
x.CN_S_PACKING_UNIT
}).Select(g => new TN_WM_B_TRAY_ITEM_DTLEntity
{
CN_F_PURCHASE_PRICE = g.FirstOrDefault().CN_F_PURCHASE_PRICE,
CN_F_RETAIL_PRICE = g.FirstOrDefault().CN_F_PURCHASE_PRICE,
CN_GUID = System.Guid.NewGuid().ToString().ToUpper(),
CN_F_QUANTITY = g.FirstOrDefault().CN_F_QUANTITY,
CN_S_CREATOR = g.FirstOrDefault().CN_S_CREATOR,
CN_S_CREATOR_BY = g.FirstOrDefault().CN_S_CREATOR_BY,
CN_T_CREATE = g.FirstOrDefault().CN_T_CREATE,
CN_S_MODIFY = g.FirstOrDefault().CN_S_MODIFY,
CN_S_MODIFY_BY = g.FirstOrDefault().CN_S_MODIFY_BY,
CN_T_MODIFY = g.FirstOrDefault().CN_T_MODIFY,
CN_S_LOT_NO = g.FirstOrDefault().CN_S_LOT_NO,
CN_S_PRODUCTION_BATCH = g.FirstOrDefault().CN_S_PRODUCTION_BATCH,
CN_S_SERIAL_NO = g.FirstOrDefault().CN_S_SERIAL_NO,
CN_S_NOTE = g.FirstOrDefault().CN_S_NOTE,
CN_S_PACKING_UNIT = g.FirstOrDefault().CN_S_PACKING_UNIT,
CN_S_VENDOR_NO = g.FirstOrDefault().CN_S_VENDOR_NO,
CN_S_VENDOR_NAME = g.FirstOrDefault().CN_S_VENDOR_NAME,
CN_T_EXPIRATION = g.FirstOrDefault().CN_T_EXPIRATION,
CN_T_PRODUCTION = g.FirstOrDefault().CN_T_PRODUCTION,
CN_S_UNIQUE_CODE = g.FirstOrDefault().CN_S_UNIQUE_CODE,
CN_PARENT_GUID = mstData.CN_GUID,
CN_F_PACKING_QTY = g.Sum(p => p.CN_F_PACKING_QTY)
}).ToList();
mstData.TrayItemDtlList = dtlResultList;
_FinallyScanData.Add(mstData);
}
#endregion
string strTrayItem = WebApiManager.HttpWMS_Post("/api/Up/CommitTrayItem", JsonConvert.SerializeObject(_FinallyScanData));
orTrayItem = JsonConvert.DeserializeObject(strTrayItem);
if (orTrayItem.Status == ResultStatus.Success)
{
scanedWaitExecuteItems = new List();
}
else
{
MessageBoxEx.Show(orTrayItem.Msg);
}
}
else { orTrayItem.Success = true; }
if (orTrayItem.Success)
{
string strup = WebApiManager.HttpWMS_Post("/api/Up/CommitUp", JsonConvert.SerializeObject(task));
OperateResult orup = JsonConvert.DeserializeObject(strup);
if (orup.Status == ResultStatus.Success)
{
MessageBoxEx.Show("入库成功!");
//继续指引托盘出库
#region 指引托盘出库
if (isContinueAlloc)
{
List