using Microsoft.Extensions.Logging; using NXWMS.DataAccess.Entity; using NXWMS.Model.AppModels.Result.ERP; using NXWMS.Model.AppModels.Result.Instock; using NXWMS.Model.Common; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace NXWMS.Service.ERP { [AutoInject(typeof(IService.NXWMS.IERPServer), InjectType.Scope)] public class ERPServer : IService.NXWMS.IERPServer { private ErpHttpClient _client; public ERPServer(ErpHttpClient httpClient) { this._client = httpClient; } #region 基础信息 public async Task> GetERPCustomersAsync() { const string Url = "/api/Customer/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Customer()); return list.ConvertAll(m => { return new BAS_CUSTOMER() { CUSTOMER_CODE = m.CustomerCode, CUSTOMER_NAME = m.CustomerName, CONTRACT = m.Contract, CONTRACT_PHONE = m.ContractPhone, ADDRESS = m.Address, USED_FLAG = 1, DEL_FLAG = 0 }; }); } public async Task> GetERPERPpBinsAsync() { const string Url = "/api/Position/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Bin()); return list.ConvertAll(m => { return new BAS_BIN() { BIN_CODE = m.BinCode, BIN_NAME = m.BinName, WAREHOUSE_CODE = m.WarehouseCode, REGION_CODE = m.RegionCode, AREA_CODE = "0", SHELF_CODE = "-1", USED_FLAG = 1, DEL_FLAG = 0 }; }); } public async Task> GetERPMaterielsAsync() { const string Url = "/api/Material/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Material()); return list.ConvertAll(m => { return new BAS_MATERIEL() { MATERIEL_CODE = m.MaterialCode, MATERIEL_NAME = m.MaterialName, MAX_STOCK = m.MaxStock, MIN_STOCK = m.MinStock, UNIT_CODE = m.UnitCode, MATERIEL_TYPE = m.MaterialTypeCode, SPECS_MODEL=m.SpecsModel, USED_FLAG = 1, DEL_FLAG = 0 }; }); } public async Task> GetERPMaterielTypesAsync() { const string Url = "/api/MaterialType/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.MaterialType()); return list.ConvertAll(m => { return new BAS_MATERIEL_TYPE() { MATERIEL_TYPE_CODE = m.MaterialTypeCode, MATERIEL_TYPE_NAME = m.MaterialTypeName, USED_FLAG = 1, DEL_FLAG = 0 }; }); } public async Task> GetERPSuppliersAsync() { const string Url = "/api/Supplier/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Supplier()); return list.ConvertAll(m => { return new BAS_SUPPLIER() { SUPPLIER_CODE = m.SupplierCode, SUPPLIER_NAME = m.SupplierName, CONTRACT = m.Contract, CONTRACT_PHONE = m.ContractPhone, USED_FLAG = 1, DEL_FLAG = 0 }; }); } public async Task> GetERPUnitsAsync() { const string Url = "/api/Unit/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Unit()); return list.ConvertAll(m => { return new BAS_UNIT() { UNIT_CODE = m.UnitCode, UNIT_NAME = m.UnitName, USED_FLAG = 1, DEL_FLAG = 0 }; }); } public async Task> GetERPWareHousesAsync() { const string Url = "/api/WareHouse/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Warehouse()); return list.ConvertAll(m => { return new BAS_WAREHOUSE() { WAREHOUSE_CODE = m.WarehouseCode, WAREHOUSE_NAME = m.WarehouseName, USED_FLAG = 1, DEL_FLAG = 0 }; }); } #endregion #region 上游单据 public async Task)>> GetArrival(string Code = null) { const string Url = "/api/Arrival/Query"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.Arrival() { ArrivalNo = Code }); var result = new List<(WMS_IN_ARRIVAL, IEnumerable)>(); foreach (var item in list) { var arr = new WMS_IN_ARRIVAL() { ARRIVAL_NO = item.ArrivalNo, ARRIVAL_TYPE = "1", ARRIVAL_STATUS = 0, ERP_ID = item.ArrivalNo, }; var detail = item.ArrivalDtlLst.ToList().ConvertAll(m => { return new WMS_IN_ARRIVAL_DTL() { MATERIEL_CODE = m.MaterialCode, BATCH_NO = m.BatchNo, ARRIVAL_QTY = m.Qty, SUPPLIER_CODE = item.SupplierCode, RECEIPT_QTY = m.RealQuantity, ERP_DTL_ID = m.ArrivalDtlId }; }); result.Add((arr, detail)); } return result; } public async Task>> GetOutInvoice() { const string Url = "/api/ProductOrder/QueryDetails"; var list = await this._client.HttpPostAsync>(Url, new NX.ERP.Model.Request.MomOrder()); var result = new Dictionary>(); foreach (var item in list) { var arr = new WMS_OUT_INVOICE() { INVOICE_NO = item.ProductOrderNo, INVOICE_TYPE = "2", INVOICE_STATUS = 0, DATA_VERSION = 0, ERP_ID = item.ProductOrderNo, }; var detail = item.ProductAllocateOrderLst.ToList().ConvertAll(m => { return new WMS_OUT_INVOICE_DTL() { MATERIEL_CODE = m.MaterialCode, INVOICE_DEMAND_QTY = m.Qty, INVOICE_DTL_STATUS = 0, INSPECTION_RESULT = "OK", ERP_DTL_ID = m.AllocateId, }; }); result.Add(arr, detail); } return result; } #endregion #region 出库 #endregion #region 入库 public string MaterialStoreOut(NX.ERP.Model.Request.MaterialStoreOut materialStore) { return ""; } public async Task PuStockIn(Inbound inbound) { var _inbound = new NX.ERP.BLL.Model.Inbound() { InboundDate = inbound.InboundDate, InboundNo = inbound.InboundNo, InboundType = NX.ERP.BLL.Model.InboundType.PurchaseIn, SourceName = inbound.SourceName, SourceNo = inbound.SourceNo, WarehouseCode = inbound.WarehouseCode, InboundDtlLst = inbound.InboundDetail.ToList().ConvertAll(m => { return new NX.ERP.BLL.Model.InboundDetail() { BinCode = m.BinCode, MaterialCode = m.MaterialCode, Qty = m.Qty, SourceDtlId = m.SourceDtlId }; }) }; const string Url = "/api/Store/StoreIn"; var list = await this._client.HttpPostAsync(Url, _inbound); return list.ID; } //public Task PuStockIn(WmsInReceiptResult wmsInReceipt) //{ //var _storeIn = new NX.ERP.BLL.Model.Inbound(); //_storeIn.InboundNo = wmsInReceipt.RECEIPT_NO; //_storeIn.InboundDate = wmsInReceipt.RECEIPT_TIME; //_storeIn.InboundType =NX.ERP.BLL.Model.InboundType.productIn; //_storeIn.SourceName = "采购到货单"; //_storeIn.WarehouseCode = "2"; //_storeIn.SourceNo = wmsInReceipt.ARRIVAL_NO; //_storeIn.InboundDtlLst = wmsInReceipt.WmsInReceiptDtlList.ConvertAll(m => { // return new NX.ERP.BLL.Model.InboundDetail // { // BinCode=m.b // }; //}); //} #endregion } }