using HH.WMS.Entitys; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; using System.Xml; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using HH.WMS.Utils; using HH.WMS.WebUI.Controllers; using HH.WMS.Entitys.Algorithm; using HH.WMS.Entitys.Basic; using System.Text.RegularExpressions; using HH.AutoBom.Core; using HH.WMS.Entitys.Common; namespace HH.WMS.WebUI.Areas.Sys.Controllers { public class StockInitController : BaseController { // // GET: /Sys/StockInit/ public ActionResult Index() { return View(); } public string UnscrambleXls(HttpPostedFileBase file) { try { string stockStr = HttpWMS_Get("api/Common/StockList"); List lstStock = JsonConvert.DeserializeObject>(JsonConvert.DeserializeObject(stockStr).Data.ToString()); string locationStr = HttpWMS_Get("api/LocationExt/GetLocationList"); List lstLocation = JsonConvert.DeserializeObject>(locationStr); string trayStr = HttpWMS_Get("api/Tray/GetTrayList"); List lstTray = JsonConvert.DeserializeObject>(trayStr); //string lotStr = HttpWMS_Get("api/LotInfo/GetLotInfoList"); //List lstLot = JsonConvert.DeserializeObject>(lotStr); List lstItem = new List(); IWorkbook wk = null; var stream = file.InputStream; var buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); stream.Position = 0; if (file.FileName.ToLower().IndexOf(".xlsx") > 0) { wk = new XSSFWorkbook(stream); } else if (file.FileName.ToLower().IndexOf(".xls") > 0) { wk = new HSSFWorkbook(stream); } //importOrderList = new List(); var loginer = HH.AutoBom.Core.FormsAuth.GetUserData(); List iteList = new List(); List errorDataList = new List(); ISheet sheet = wk.GetSheetAt(0); //读取当前表数据 for (int j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数 { var excelRowIndex = (j + 1).ToString(); IRow row = sheet.GetRow(j); //读取当前行数据 if (string.IsNullOrEmpty(Util.ToString(row.Cells[3]))) continue; if (row != null) { try { ImportTemplateEntity ite = new ImportTemplateEntity(); ite.CN_S_STOCK_CODE = Util.ToString(Util.ToString(row.Cells[0]));//仓库编码 ite.CN_S_LOCATION_CODE = Util.ToString(row.Cells[1]);//货位编码 ite.CN_S_TRAY_CODE = Util.ToString(row.Cells[2]);//托盘编码 ite.CN_S_ITEM_CODE = Util.ToString(row.Cells[3]);//物料编码 ite.CN_F_QUANTITY = Convert.ToDecimal(row.Cells[4].ToString());//数量 ite.CN_S_PRODUCTION_BATCH = Util.ToString(row.Cells[5]);//生产批次 //ite.CN_S_LOT_CODE = Util.ToString(row.Cells[6]);//到货批次 ite.CN_S_ITEM_STATE = Util.ToString(row.Cells[6]);//物料状态 if (string.IsNullOrEmpty(ite.CN_S_ITEM_STATE)) { ite.CN_S_ITEM_STATE = HH.WMS.Common.Constants.ItemState_Qualified;//没传物料状态的情况下,默认合格 } if (!string.IsNullOrEmpty(ite.CN_S_STOCK_CODE)) { var checkStock = lstStock.Where(t => t.CN_S_STOCK_CODE == ite.CN_S_STOCK_CODE).ToList(); if (!checkStock.Any()) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "仓库号 " + ite.CN_S_STOCK_CODE + " 不存在!" }); } var checkStockIn = iteList.Where(t => t.CN_S_STOCK_CODE == ite.CN_S_STOCK_CODE).ToList(); if (iteList.Count > 0 && (!checkStockIn.Any())) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "仓库号 " + ite.CN_S_STOCK_CODE + " 错误,一个Excel只能初始化一个仓库!" }); } } else { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "仓库号不可为空!" }); } if (!string.IsNullOrEmpty(ite.CN_S_LOCATION_CODE)) { var checkLocation = lstLocation.Where(t => t.CN_S_LOCATION_CODE.Trim() == ite.CN_S_LOCATION_CODE).ToList(); if (!checkLocation.Any()) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "货位号 " + ite.CN_S_LOCATION_CODE + " 不存在!" }); } else { ite.CN_S_AREA_CODE = checkLocation[0].CN_S_AREA_CODE; } } else { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "货位号不可为空!" }); } if (!string.IsNullOrEmpty(ite.CN_S_TRAY_CODE)) { var checkTray = lstTray.Where(t => t.CN_S_TRAY_CODE == ite.CN_S_TRAY_CODE).ToList(); if (!checkTray.Any()) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "托盘号 " + ite.CN_S_TRAY_CODE + " 不存在!" }); } } if (!string.IsNullOrEmpty(ite.CN_S_ITEM_CODE)) { var checkTray = lstItem.Where(t => t.CN_S_ITEM_CODE == ite.CN_S_ITEM_CODE).ToList(); if (!checkTray.Any()) { string jsonItem = HttpWMS_Get("api/Item/GetItemModel?itemCode=" + ite.CN_S_ITEM_CODE); OperateResult oresult = JsonConvert.DeserializeObject(jsonItem); if (oresult.Success) { AutoBomItemEntity itemEntity = JsonConvert.DeserializeObject(oresult.Data.ToString()); List lstItemEntity = new List(); lstItemEntity.Add(itemEntity); if (!lstItemEntity.Any()) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "物料编码 " + ite.CN_S_ITEM_CODE + " 不存在!" }); } else { ite.CN_S_ITEM_NAME = lstItemEntity[0].CN_S_ITEM_NAME; ite.CN_S_MEASURE_UNIT = lstItemEntity[0].CN_S_MEASURE_UNIT; ite.CN_S_FIGURE_NO = lstItemEntity[0].CN_S_FIGURE_NO; ite.CN_S_MODEL = lstItemEntity[0].CN_S_MODEL; lstItem.AddRange(lstItemEntity); } } else { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "物料编码 " + ite.CN_S_ITEM_CODE + " 不存在!" }); } } else { ite.CN_S_ITEM_NAME = checkTray[0].CN_S_ITEM_NAME; ite.CN_S_MEASURE_UNIT = checkTray[0].CN_S_MEASURE_UNIT; ite.CN_S_FIGURE_NO = checkTray[0].CN_S_FIGURE_NO; ite.CN_S_MODEL = checkTray[0].CN_S_MODEL; } } else { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "物料编码不可为空!" }); } if (!(string.IsNullOrEmpty(ite.CN_F_QUANTITY.ToString()) || ite.CN_F_QUANTITY.ToString() == "0")) { var qtyCheck = Regex.IsMatch(ite.CN_F_QUANTITY.ToString(), @"^[0-9]+\.{0,1}[0-9]{0,2}$"); if (!qtyCheck) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "数量格式不正确!" }); } } else { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "数量不可为空或0!" }); } //if (!string.IsNullOrEmpty(ite.CN_S_LOT_CODE)) //{ // var checkLot = iteList.Where(t => t.CN_S_LOT_CODE == ite.CN_S_LOT_CODE).ToList(); // if (checkLot.Count > 1) // { // errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "到货批次 " + ite.CN_S_LOT_CODE + " 在Excel中有重复!" }); // } // var checkLotSys = lstLot.Where(t => t.CN_S_LOT_CODE == ite.CN_S_LOT_CODE).ToList(); // if (checkLotSys.Any()) // { // errorDataList.Add(new ErrorRowData { CN_S_RowIndex = excelRowIndex, CN_S_ErrorContent = "到货批次 " + ite.CN_S_LOT_CODE + " 在系统中已存在!" }); // } //} iteList.Add(ite); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error("内部抛出异常!" + ex.ToString())); } } } var Group_List = iteList.GroupBy(x => new { x.CN_S_LOCATION_CODE, x.CN_S_TRAY_CODE, x.CN_S_ITEM_CODE }).Select(g => new ImportTemplateEntity { CN_S_LOCATION_CODE = g.FirstOrDefault().CN_S_LOCATION_CODE.Trim(), CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_F_QUANTITY = g.Count() }).ToList(); foreach (var item in Group_List) { if (item.CN_F_QUANTITY > 1) { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = "0", CN_S_ErrorContent = "货位 " + item.CN_S_LOCATION_CODE + " ,托盘 " + item.CN_S_TRAY_CODE + " ,物料 " + item.CN_S_ITEM_CODE + " 存在重复!" }); } } var stockEntityList = lstStock.Where(x => x.CN_S_STOCK_CODE == iteList[0].CN_S_STOCK_CODE).ToList(); if (stockEntityList.Any()) { if (stockEntityList[0].CN_C_IS_INIT !="N") { errorDataList.Add(new ErrorRowData { CN_S_RowIndex = "0", CN_S_ErrorContent = stockEntityList[0].CN_S_STOCK_CODE + " 号仓库必须是未初始化状态!" }); } } return JsonConvert.SerializeObject(new { ImportData = iteList, ErrorData = errorDataList }); } catch (Exception ex) { return JsonConvert.SerializeObject(OperateResult.Error("外部抛出异常!" + ex.ToString())); } } #region 初始化功能 /// /// 初始化功能 /// /// public string ImportExcelData() { //XML文件流 var sr = new StreamReader(Request.InputStream); var stream = sr.ReadToEnd(); var loginer = FormsAuth.GetUserData(); var TokenId = loginer.Extend1;//TokenId var streamStr = new { PostData = stream, TokenId = TokenId }; return HttpWMS_Post("api/StockInit/SaveStockInit", JsonConvert.SerializeObject(streamStr)); } #endregion } }