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 MoveOrderService : BaseService, IMoveOrderService { private readonly IMoveOrderRepository repository; private readonly IStockRepository stockRepository; public MoveOrderService(IMoveOrderRepository _repository, IStockRepository _stockRepository) : base(_repository) { this.repository = _repository; this.stockRepository = _stockRepository; } /// /// 获取正在创建中的单据 /// /// public List GetCreateingList() { return repository.GetCreateingList(); } /// /// 处理扫描的箱条码 /// /// /// /// /// public WmsResponseResult DoCarton(string cartonNo, string orderNo, string remarks, int orderType, string loginId) { SysStock cartonInfo = stockRepository.GetCartonInfo(cartonNo); WmsResponseResult result = new WmsResponseResult(); if (cartonInfo == null) { result.Msg = "包装条码不存在,请检查!"; return result; } if (cartonInfo.Enabled.Equals(Enabled.N)) { result.Msg = "包装条码已被冻结,不允许此操作!"; return result; } if (cartonInfo.Qty <=0) { result.Msg = "包装条码数量为0,不允许此操作!"; return result; } if (cartonInfo.Status != (int)StockStatus.NC_INSTOCK && (orderType == (int)MoveOrderType.NC_SCRAP || orderType == (int)MoveOrderType.NC_CONCESSION || orderType == (int)MoveOrderType.SUPPLIER_RETURN || orderType == (int)MoveOrderType.NC_MOVE )) { result.Msg = "包装条码状态不是NC入库状态,不允许此操作!"; return result; } if (orderType == (int)MoveOrderType.SUPPLIER_RETURN) { if (cartonInfo.ErpWarehouse != "9002") { result.Msg = "包装条码不在退货库,不允许此操作!"; return result; } } if (cartonInfo.Status != (int)StockStatus.INSTOCKED && cartonInfo.Status != (int)StockStatus.ONLINED && orderType == (int)MoveOrderType.NC_IN_STOCK ) { result.Msg = "包装条码状态不是在库/上线状态,不允许此操作!"; return result; } WmsMoveDetail moveDetail = null; if (!string.IsNullOrEmpty(orderNo)) { moveDetail = repository.GetMoveDetail(orderNo, cartonInfo.PartNo); if (moveDetail != null && cartonInfo.ZoneId != moveDetail.SrcZoneId) { result.Msg = "包装条码对应的存储区与订单中此零件的源存储区不一致!"; return result; } WmsMoveSn moveSn = repository.GetMoveSn(orderNo, cartonInfo.CartonNo); if (moveSn != null) { result.Msg = "订单中包含此包装条码,不允许此操作!"; return result; } } string resOrderNo = repository.DoCarton(cartonInfo, orderNo, remarks, orderType, loginId, moveDetail); if (!string.IsNullOrEmpty(resOrderNo)) { //result = this.SubmitOrder(orderNo, loginId); result.Msg = "SCAN_OK"; result.Data = resOrderNo; } else { result.Msg = "操作失败,请重新尝试!"; } return result; } /// /// 提交单据 /// /// /// /// public WmsResponseResult SubmitOrder(string orderNo, string loginId) { WmsResponseResult result = new WmsResponseResult(); // 完成单据并提交接口 if (repository.OrderCreated(orderNo, loginId)) { result.Msg = "SCAN_OK"; result.Data = orderNo; } else { result.Msg = "操作失败,请重新尝试!"; } return result; } /// /// 根据单据类型获取此类型待处理的单据列表,如果单据类型为空,则获取全部类型 /// /// public List GetMoveOrderList(int? orderType) { return repository.GetMoveOrderList(orderType); } /// /// 根据单据号获取单据明细列表 /// /// /// public List GetMoveDetailList(string orderNo) { return repository.GetMoveDetailList(orderNo); } } }