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<TN_AB_STOCKEntity> lstStock = JsonConvert.DeserializeObject<List<TN_AB_STOCKEntity>>(JsonConvert.DeserializeObject<OperateResult>(stockStr).Data.ToString());
|
|
string locationStr = HttpWMS_Get("api/LocationExt/GetLocationList");
|
List<TN_WM_LOCATION_EXTEntity> lstLocation = JsonConvert.DeserializeObject<List<TN_WM_LOCATION_EXTEntity>>(locationStr);
|
|
string trayStr = HttpWMS_Get("api/Tray/GetTrayList");
|
List<TN_WM_B_TRAY_INFOEntity> lstTray = JsonConvert.DeserializeObject<List<TN_WM_B_TRAY_INFOEntity>>(trayStr);
|
|
//string lotStr = HttpWMS_Get("api/LotInfo/GetLotInfoList");
|
//List<TN_WM_LOT_INFOEntity> lstLot = JsonConvert.DeserializeObject<List<TN_WM_LOT_INFOEntity>>(lotStr);
|
|
|
List<AutoBomItemEntity> lstItem = new List<AutoBomItemEntity>();
|
|
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<ImportOrderTemplate>();
|
var loginer = HH.AutoBom.Core.FormsAuth.GetUserData<HH.AutoBom.Core.LoginerBase>();
|
List<ImportTemplateEntity> iteList = new List<ImportTemplateEntity>();
|
List<ErrorRowData> errorDataList = new List<ErrorRowData>();
|
|
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<OperateResult>(jsonItem);
|
if (oresult.Success)
|
{
|
AutoBomItemEntity itemEntity = JsonConvert.DeserializeObject<AutoBomItemEntity>(oresult.Data.ToString());
|
|
List<AutoBomItemEntity> lstItemEntity = new List<AutoBomItemEntity>();
|
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 初始化功能
|
/// <summary>
|
/// 初始化功能
|
/// </summary>
|
/// <returns></returns>
|
public string ImportExcelData()
|
{
|
//XML文件流
|
var sr = new StreamReader(Request.InputStream);
|
var stream = sr.ReadToEnd();
|
|
var loginer = FormsAuth.GetUserData<LoginerBase>();
|
var TokenId = loginer.Extend1;//TokenId
|
|
var streamStr = new
|
{
|
PostData = stream,
|
TokenId = TokenId
|
};
|
return HttpWMS_Post("api/StockInit/SaveStockInit", JsonConvert.SerializeObject(streamStr));
|
}
|
|
#endregion
|
}
|
|
|
}
|