You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

261 lines
9.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Estsh.Core.Base;
using Estsh.Core.Wms.IRepositories;
using Estsh.Core.Wms.IServices;
using Estsh.Core.Model.Result;
using Estsh.Core.Services;
using Estsh.Core.Repositories;
using Estsh.Core.Models;
using Newtonsoft.Json.Linq;
using static Estsh.Core.Model.EnumUtil.WmsEnumUtil;
using Estsh.Core.Model.EnumUtil;
namespace Estsh.Core.Wms.Services
{
public class MaterialService : BaseService<BaseEntity>, IMaterialService
{
private readonly IMaterialRepository repository;
public MaterialService(IMaterialRepository _repository) : base(_repository)
{
repository = _repository;
}
/// <summary>
/// 获取箱条码信息
/// </summary>
/// <param name="cartonNo"></param>
/// <returns></returns>
public SetObjectDetail GetMaterialInfo(string cartonNo)
{
SetObjectDetail det = new SetObjectDetail();
List<SysStock> MaterialInfo = repository.GetMaterialInfo(cartonNo);
if (MaterialInfo.Count == 0)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码不存在,请检查!";
return det;
}
if (MaterialInfo[0].Enabled.Equals("N"))
{
det.type = "NO";
det.message = "[" + cartonNo + "]:包装条码已被冻结,请检查!";
return det;
}
else if (MaterialInfo[0].Status != (int)WmsEnumUtil.StockStatus.INSTOCKED && MaterialInfo[0].Status != (int)WmsEnumUtil.StockStatus.ONLINED && MaterialInfo[0].Status != (int)WmsEnumUtil.StockStatus.NC_INSTOCK)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:该条码不是已上架/已上线状态,是" + MaterialInfo[0].StockStatus + "状态,请检查!";
return det;
}
if (MaterialInfo[0].Qty < 1)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码数量不足,无法拆分!";
return det;
}
det.type = "OK";
det.wmsObjectDetail = MaterialInfo.ConvertAll(s => (object)s);
return det;
}
/// <summary>
/// 扫描条码
/// </summary>
/// <param name="cartonNo"></param>
/// <returns></returns>
public SetObjectDetail ScanCode(string cartonNo)
{
SetObjectDetail det = new SetObjectDetail();
int MaterialInfo = repository.ScanCode(cartonNo);
det.type = "OK";
return det;
}
public SetObjectDetail SpellCode(string cartonNo)
{
SetObjectDetail det = new SetObjectDetail();
List<SysStock> MaterialInfo = repository.SpellCode(cartonNo);
det.type = "OK";
det.wmsObjectDetail = MaterialInfo.ConvertAll(s => (object)s);
return det;
}
public SetObjectDetail TailBox(string cartonNo)
{
SetObjectDetail det = new SetObjectDetail();
List<SysStock> MaterialInfo = new List<SysStock>() ;
List<SysStock> GetInfo = repository.GetMaterialInfo(cartonNo);//得到条码信息
if (GetInfo.Count > 0)
{
MaterialInfo = repository.TailBox(GetInfo[0].PartNo);
}
if (GetInfo.Count == 0)
{
MaterialInfo = repository.TailBox(cartonNo);
}
if (MaterialInfo.Count > 0)
{
det.type = "OK";
}
else
{
det.type = "NO";
}
det.wmsObjectDetail = MaterialInfo.ConvertAll(s => (object)s);
return det;
}
/// <summary>
/// 拆分 箱条码
/// </summary>
/// <param name="oldStock"></param>
/// <param name="splitNum"></param>
/// <param name="loginId"></param>
/// <param name="splitCount"></param>
/// <returns></returns>
public SetObjectDetail CheckMaterialSplit(string cartonNo, int splitNum, string loginId, int splitCount)
{
SetObjectDetail det = new SetObjectDetail();
//需要拆分的箱条码信息
List<SysStock> MaterialInfo = repository.GetMaterialInfo(cartonNo);
if (MaterialInfo.Count == 0)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码不存在,请检查!";
return det;
}
if (MaterialInfo[0].Enabled.Equals("N"))
{
det.type = "NO";
det.message = "[" + cartonNo + "]:包装条码已被冻结,请检查!";
return det;
}
//else if (MaterialInfo[0].Status != (int)WmsEnumUtil.StockStatus.INSTOCKED && MaterialInfo[0].Status != (int)WmsEnumUtil.StockStatus.ONLINED)
//{
// det.type = "NO";
// det.message = "[" + cartonNo + "]:是" + MaterialInfo[0].StockStatus + "状态,请检查!";
// return det;
//}
if (MaterialInfo[0].Qty < 1)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码数量不足,无法拆分!";
return det;
}
List<SysStock> NewStock = repository.CheckMaterialSplit(MaterialInfo, splitNum, loginId, splitCount);
if (NewStock == null || NewStock.Count == 0)
{
det.type = "NO";
det.message = "执行失败!请重试!";
}
else
{
det.type = "OK";
det.wmsObjectDetail = NewStock.ConvertAll(s => (object)s);
}
return det;
}
/// <summary>
/// 合并
/// </summary>
/// <param name="hostCartonNo"></param>
/// <param name="SecondaryCartonNo"></param>
/// <param name="loginId"></param>
/// <returns></returns>
public SetObjectDetail CheckMaterialConsolidation(string hostCartonNo, string SecondaryCartonNo, string loginId)
{
SetObjectDetail det = new SetObjectDetail();
//主箱条码信息
List<SysStock> host = repository.GetMaterialInfo(hostCartonNo);
if (host.Count == 0)
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:主箱条码不存在,请检查!";
return det;
}
if (host[0].Enabled.Equals("N"))
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:主箱条码已被冻结,请检查!";
return det;
}
else if (host[0].Status != (int)WmsEnumUtil.StockStatus.INSTOCKED)
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:是" + host[0].StockStatus + "状态,请检查!";
return det;
}
//副箱条码信息
List<SysStock> Secondary = repository.GetMaterialInfo(SecondaryCartonNo);
if (Secondary.Count == 0)
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:副箱条码不存在,请检查!";
return det;
}
if (Secondary[0].Enabled.Equals("N"))
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:副箱条码已被冻结,请检查!";
return det;
}
else if (Secondary[0].Status != (int)WmsEnumUtil.StockStatus.INSTOCKED)
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:是" + Secondary[0].StockStatus + "状态,请检查!";
return det;
}
//条码匹配检查
if (!host[0].LocateId.Equals(Secondary[0].LocateId) || !host[0].WarehouseId.Equals(Secondary[0].WarehouseId) || !host[0].ZoneId.Equals(Secondary[0].ZoneId))
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:合并条码库位不一致,请检查!";
return det;
}
if (!host[0].Status.Equals(Secondary[0].Status))
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:合并条码状态不一致,请检查!";
return det;
}
if (!host[0].LotNo.Equals(Secondary[0].LotNo))
{
det.type = "NO";
det.message = "[" + hostCartonNo + "]:合并条码批次不一致,请检查!";
return det;
}
List<SysStock> NewStock = repository.CheckMaterialConsolidation(host, Secondary, loginId);
if (NewStock == null || NewStock.Count == 0)
{
det.type = "NO";
det.message = "执行失败!请重试!";
}
else
{
det.type = "OK";
det.wmsObjectDetail = NewStock.ConvertAll(s => (object)s);
}
return det;
}
}
}