using Dapper;
using Estsh.Core.Base;
using Estsh.Core.Model.EnumUtil;
using Estsh.Core.Models;
using Estsh.Core.Services;
using Estsh.Core.Wms.IRepositories;
using Estsh.Core.Wms.IServices;
using System.Text;
namespace Estsh.Core.Wms.Services
{
///
/// 推荐入库
///
public class RecommendedInStockService : BaseService, IRecommendedInStockService
{
private readonly IRecommendedInStockRepository repository;
public RecommendedInStockService(IRecommendedInStockRepository _repository) : base(_repository)
{
repository = _repository;
}
//根据条码验证条码信息
public SetObjectDetail GetStockByCarton(string cartonNo, string isGroup)
{
List sysStocks = repository.GetStockByCarton(cartonNo);
SetObjectDetail rfInfo = new SetObjectDetail();
if (sysStocks.Count == 0)
{
//提示 [M0090105]:该条码不存在,请检查!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:该条码不存在,请检查!";
return rfInfo;
}
else if (sysStocks[0].Status != (int)WmsEnumUtil.StockStatus.WAITING_INSTOCK)
{
//提示 [M0090105]:是**状态,请检查!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:是" + sysStocks[0].StockStatus + "状态,请检查!";
return rfInfo;
}
else if (sysStocks[0].Status == (int)WmsEnumUtil.StockStatus.INSTOCKED)
{
//提示 [M0090105]:该条码已入库,请勿重复扫描!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:该条码已入库,请勿重复扫描!";
return rfInfo;
}
else if (sysStocks[0].Enabled != "Y")
{
//提示 [M0090105]:箱条码已冻结,无法操作!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:箱条码已冻结,无法操作!";
return rfInfo;
}
string recommendedLocationName = "";//推荐库位
List sysstockByGroupNoCount = new List();
List sysZoneParts = new List();
if (isGroup == "1")
{
sysZoneParts = repository.GetZonePartByVendorId(sysStocks[0].VendorId);
if (!string.IsNullOrEmpty(sysStocks[0].GroupNo) && sysStocks[0].GroupNo != "NULL")
{
sysstockByGroupNoCount = repository.GetStockPartByGroupNo(sysStocks[0].GroupNo);
}
}
else
{
sysZoneParts = repository.GetZonePartByPartNo(sysStocks[0].PartNo);
if (sysZoneParts.Count == 0)
{
sysZoneParts = repository.GetZonePartByVendorId(sysStocks[0].VendorId);
}
}
if (sysZoneParts.Count > 0)
{
for (int i = 0; i < sysZoneParts.Count; i++)
{
List sysLocatePart = repository.GetLocateByZoneNameAndPartNo(sysZoneParts[i].ZoneName, sysStocks[0].PartNo);
if (sysLocatePart.Count > 0)
{
for (int k = 0; k < sysLocatePart.Count; k++)
{
SysStock sysStocksQtySum = repository.GetStockByLocateName(sysLocatePart[k].LocateName);//库位在库数
if (sysLocatePart[k].LocateType == (int)WmsEnumUtil.LocateType.BASICS_LOCATE)//基础库位
{
if (sysLocatePart[k].LocateCapacity >= sysStocksQtySum.Qty + sysStocks[0].Qty)
{
recommendedLocationName = sysLocatePart[k].LocateName;
break;
}
}
}
}
else if (sysLocatePart.Count == 0)
{
List sysLocates = repository.GetLocateByZoneName(sysZoneParts[i].ZoneName);
for (int j = 0; j < sysLocates.Count; j++)
{
SysStock sysStocksQtySum = repository.GetStockByLocateName(sysLocates[j].LocateName);//库位在库数
int locateType = sysLocates[j].LocateType;
if (sysstockByGroupNoCount.Count > 1)//多零件号只推荐动态组合库
{
if (sysLocates[j].LocateType == (int)WmsEnumUtil.LocateType.COMBINATION_LOCATE && sysLocates[j].LocateCapacity >= sysStocksQtySum.Qty + sysStocks[0].Qty)
{
recommendedLocationName = sysLocates[j].LocateName;
break;
}
}
else//单个零件号
{
if (locateType == (int)WmsEnumUtil.LocateType.MANEUVER_LOCATE)
{
List sysStocks1 = repository.GetStockByPartNoLocateName(sysLocates[j].LocateName);
if (sysStocks1.Count > 0)
{
for (int k = 0; k < sysStocks1.Count; k++)
{
if (sysStocks[0].PartNo == sysStocks1[k].PartNo && sysLocates[j].LocateCapacity >= sysStocksQtySum.Qty + sysStocks[0].Qty)
{
recommendedLocationName = sysLocates[j].LocateName;
break;
}
}
if (!recommendedLocationName.Equals(""))
{
break;
}
}
else
{
recommendedLocationName = sysLocates[j].LocateName;
break;
}
}
else if (locateType == (int)WmsEnumUtil.LocateType.COMBINATION_LOCATE)
{
if (sysLocates[j].LocateCapacity >= sysStocksQtySum.Qty + sysStocks[0].Qty)
{
recommendedLocationName = sysLocates[j].LocateName;
break;
}
}
}
}
}
if (!recommendedLocationName.Equals(""))
{
break;
}
}
}
List