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 Estsh.Core.Model.EnumUtil; using static Estsh.Core.Model.EnumUtil.WmsEnumUtil; namespace Estsh.Core.Wms.Services { public class OffLineProInStockService : BaseService, IOffLineProInStockService { private readonly IOffLineProInStockRepository repository; public OffLineProInStockService(IOffLineProInStockRepository _repository) : base(_repository) { repository = _repository; } /// /// 线外生产入库 /// /// /// /// /// public string CheckOffLineProInStock(string loginId, string cartonNo, string locateName,string groupNo,string orderNo) { //判断箱条码是否可用 SysStock cartonInfo = repository.CheckCartonNoStatus(cartonNo); if (cartonInfo == null) { return "[" + cartonNo + "]:该条码不可用,请检查!"; } if (cartonInfo.Enabled.Equals("N")) { return "[" + cartonNo + "]:箱条码已冻结,无法操作!"; } if (cartonInfo.Status != (int)StockStatus.WAITING_INSTOCK) { return "[" + cartonNo + "]:不是待入库状态,请检查!"; } //获取库位表库位与绑定零件信息 List sysLocates = repository.CheckLocateStatus(locateName); if (sysLocates.Count == 0) { return "[" + locateName + "]:该库位不存在,请检查!"; } if (cartonInfo.ErpWarehouse != sysLocates[0].ErpWarehouse) { return "入库不允许跨库存地!"; } List wmsInstockSns = repository.CheckCartonSNStatus(orderNo, cartonNo); if (wmsInstockSns.Count <= 0) { return "条码不在此订单内!"; } List UseStocks = repository.CheckUseStockCapacity(locateName); //当前库位已经使用库存列表 decimal QtySum = UseStocks.Sum(a => a.Qty);//已经使用库存总量 //入库 SysStock sysStock = repository.CheckCartonNoStatus(cartonNo); if (sysLocates[0].LocateCapacity > QtySum + sysStock.Qty) { //有库容 if (sysLocates[0].LocateType == (int)WmsEnumUtil.LocateType.BASICS_LOCATE) { // TODO 此处需要重新写逻辑 if (sysLocates.Where(a => a.PartId == cartonInfo.PartId).Count() > 0) { //基础库位正确 ,有库容,正常入库 List sysStocks = new List(); sysStocks.Add(sysStock); return repository.UpdateStockStatus(sysStocks, sysLocates, (int)WmsEnumUtil.StockStatus.INSTOCKED, (int)WmsEnumUtil.TransType.IN_STOCK_RACK_PACKAGE, loginId, groupNo); } else { return "库位[" + locateName + "]与条码零件[" + cartonInfo.PartNo + "]不匹配!"; } } if (sysLocates[0].LocateType == (int)WmsEnumUtil.LocateType.MANEUVER_LOCATE) { //机动库位正确 ,有库容,正常入库 if (UseStocks.Where(a => a.PartId == cartonInfo.PartId).Count() >= 0) { //基础库位正确 ,有库容,正常入库 List sysStocks = new List(); sysStocks.Add(sysStock); return repository.UpdateStockStatus(sysStocks, sysLocates, (int)WmsEnumUtil.StockStatus.INSTOCKED, (int)WmsEnumUtil.TransType.IN_STOCK_RACK_PACKAGE, loginId, groupNo); } else { return "库位[" + locateName + "]与条码零件[" + cartonInfo.PartNo + "]不匹配!"; } } if (sysLocates[0].LocateType == (int)WmsEnumUtil.LocateType.COMBINATION_LOCATE) { //动态组合库库位正确 ,有库容,正常入库 List sysStocks = new List(); sysStocks.Add(sysStock); return repository.UpdateStockStatus(sysStocks, sysLocates, (int)WmsEnumUtil.StockStatus.INSTOCKED, (int)WmsEnumUtil.TransType.IN_STOCK_RACK_PACKAGE, loginId, groupNo); } return "[" + locateName + "]:库位类型异常,请检查!"; } else { return "[" + locateName + "]:该库位容量不足,请检查!"; } } public List ShowOffLineProInStockList() { return repository.GetOffLineOrderList(); } public string CheckWmsInstockStatus(string loginId, string orderNo) { return repository.CheckWmsInstockStatus(loginId, orderNo); } public List GetInstock(string orderNo,string carton_no) { return repository.GetInstock(orderNo,carton_no); } } }