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 NcConcessionService : BaseService, INcConcessionService { private readonly INcConcessionRepository repository; private readonly IMoveOrderRepository moveOrderRepository; private readonly IStockRepository stockRepository; public NcConcessionService(INcConcessionRepository _repository, IMoveOrderRepository _moveOrderRepository, IStockRepository _stockRepository) : base(_repository) { this.repository = _repository; this.moveOrderRepository = _moveOrderRepository; this.stockRepository = _stockRepository; } /// /// 检查库位是否可操作 /// /// /// public string CheckLocateInfo(string locateName) { SysLocate locate = repository.GetLocateInfo(locateName); if (locate == null) { return "库位不存在,请检查!"; } if (locate.Enabled.Equals(Enabled.N)) { return "库位已禁用,不能使用!"; } if (locate.LocateType == (int)LocateType.BASICS_LOCATE || locate.LocateType == (int)LocateType.MANEUVER_LOCATE || locate.LocateType == (int)LocateType.COMBINATION_LOCATE) { return "SCAN_OK"; } else { return "库位类型不符合,请检查!"; } } /// /// 处理扫描的箱条码 /// /// /// /// /// public string DoCanton(string cartonNo, string locateName, string orderNo, string loginId) { SysStock cartonInfo = stockRepository.GetCartonInfo(cartonNo); if (cartonInfo == null) { return "包装条码不存在,请检查!"; } if (cartonInfo.Enabled.Equals(Enabled.N)) { return "包装条码已被冻结,不允许此操作!"; } if (cartonInfo.Status != (int)StockStatus.NC_INSTOCK) { return "包装条码状态不是NC状态,不允许此操作!"; } if (cartonInfo.Qty == 0) { return "包装条码数量为0,禁止操作!"; } SysLocate locateInfo = repository.GetLocateInfo(locateName); if (locateInfo.LocateType == (int)LocateType.BASICS_LOCATE) { SysLocatePart locatePart = repository.GetLocatePartInfo(locateName); if (locatePart == null) { return "库位为基础库位,未维护对应的零件!"; } else { if (cartonInfo.PartId != locatePart.PartId) { return "库位为基础库位,扫描的包装信息与库位对应的零件不符!"; } } } if (locateInfo.LocateType == (int)LocateType.MANEUVER_LOCATE) { List sysStocks = stockRepository.GetLocateStockInfo(locateName); if (sysStocks != null && sysStocks.FindIndex(a => a.PartId == cartonInfo.PartId) < 0) { return "库位为机动库位,扫描的包装信息与库位现有库存对应的零件不符!"; } } List moveDetails = moveOrderRepository.GetMoveDetailList(orderNo); WmsMoveDetail? moveDetail = moveDetails.SingleOrDefault(x => x.PartId == cartonInfo.PartId); if (moveDetail == null) { return "订单中不包含包装条码对应零件,不允许此操作!"; } if (moveDetail.Qty <= moveDetail.PickQty) { return "此零件对应的订单数量已满,无法再扫描!"; } if (moveDetail.Qty < moveDetail.PickQty + cartonInfo.Qty) { return "箱包装数量大于订单中此零件的剩余待处理数量!"; } List moveSns = moveOrderRepository.GetMoveSnList(orderNo); List moveSnCreates = moveSns.Where(x => x.Status == (int)MoveOrderSnStatus.CREATE).ToList(); WmsMoveSn? moveSn = null; if (moveSnCreates != null && moveSnCreates.Count > 0) { moveSn = moveSnCreates.SingleOrDefault(x => x.CartonNo.Equals(cartonInfo.CartonNo)); if (moveSn == null) { return "订单中不包含此包装条码,不允许此操作!"; } } string result = string.Empty; if (repository.DoCarton(cartonInfo, locateInfo, moveDetail, moveSn, loginId)) { result = this.SubmitOrder(orderNo, loginId); } else { result = "操作失败,请重新尝试!"; } return result; } /// /// 提交单据 /// /// /// /// public string SubmitOrder(string orderNo,string loginId) { string result = string.Empty; List moveDetails = moveOrderRepository.GetMoveDetailList(orderNo); var moveDetailsExist = moveDetails.Where(a => a.Qty > a.PickQty).ToList(); if (moveDetailsExist == null || moveDetailsExist.Count == 0) { // 完成单据并提交接口 if (moveOrderRepository.OrderComplete(orderNo, loginId)) { repository.InsertInterfaceByNCConcession(orderNo);//添加到接口表 result = "ORDER_COMPLETED"; } else { result = "操作失败,请重新尝试!"; } } else { result = "SCAN_OK"; //提交接口 } return result; } } }