From 904f6a11f6e5af978efd0dbaf639228f27a542dc Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Wed, 29 Nov 2023 16:47:23 +0800 Subject: [PATCH] =?UTF-8?q?erp=E7=89=A9=E6=96=99=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=9C=A8=E6=B2=A1=E6=9C=89=E6=89=BE=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E9=87=8D=E6=96=B0=E6=89=BE=E4=B8=80=E9=81=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 32 ++- .../IService/Public/IErpService.cs | 9 +- .../Public/ErpBasicDataExtendService.cs | 31 ++- .../Services/Public/ErpService.cs | 221 +++++++++++++----- 4 files changed, 225 insertions(+), 68 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 59396a1f..e4420d6b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2721,10 +2721,17 @@ - erp:单据查询-物料 + erp:单据查询-物料集合 + + + erp:基础数据-物料信息 + + + + @@ -4001,10 +4008,31 @@ - erp:单据查询-物料 + erp:单据查询-物料集合 + + + erp:基础数据-物料信息 + + + + + + + erp:基础数据-物料-分页查询 + + + + + + + erp:基础数据-物料-ids查询 + + + + erp:单据查询-组织数据 diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index 9de6d159..0f8d610d 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -92,11 +92,18 @@ namespace WMS.Web.Domain.IService.Public /// Task> BillQueryForMisDeliveryOutStock(List sourceBillNos = null, DateTime? beginTime = null); /// - /// erp:单据查询-物料 + /// erp:单据查询-物料集合 /// /// Task> BillQueryForMaterial(); + /// + /// erp:基础数据-物料信息 + /// + /// + /// + Task> BillQueryForMaterial(int id); + /// /// /// diff --git a/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs b/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs index 6fe9354a..216ce79b 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs @@ -18,13 +18,15 @@ namespace WMS.Web.Domain.Services.Public public class ErpBasicDataExtendService: IErpBasicDataExtendService { private readonly IMapper _mapper; + private readonly IErpService _erpService; private readonly ILoginService _loginService; private readonly IBasicsRepositories _basicsRepositories; - public ErpBasicDataExtendService(IMapper mapper, ILoginService loginService, + public ErpBasicDataExtendService(IMapper mapper, ILoginService loginService, IErpService erpService, IBasicsRepositories basicsRepositories) { _mapper = mapper; + _erpService = erpService; _loginService = loginService; _basicsRepositories = basicsRepositories; @@ -39,7 +41,14 @@ namespace WMS.Web.Domain.Services.Public public string GetMaterialName(List erpMaterials,int materialId) { var mat= erpMaterials.Where(x => x.MaterialId == materialId).FirstOrDefault(); - return mat == null ? "" : mat.MaterialName; + if (mat == null) + { + var result= _erpService.BillQueryForMaterial(materialId).Result; + if (!result.IsSuccess) + return ""; + return result.Data == null ? "" : result.Data.MaterialName; + } + return mat.MaterialName; } /// @@ -51,7 +60,14 @@ namespace WMS.Web.Domain.Services.Public public string GetMaterialNumber(List erpMaterials, int materialId) { var mat = erpMaterials.Where(x => x.MaterialId == materialId).FirstOrDefault(); - return mat == null ? "" : mat.MaterialNumber; + if (mat == null) + { + var result = _erpService.BillQueryForMaterial(materialId).Result; + if (!result.IsSuccess) + return ""; + return result.Data == null ? "" : result.Data.MaterialNumber; + } + return mat.MaterialNumber; } /// @@ -63,7 +79,14 @@ namespace WMS.Web.Domain.Services.Public public string GetMaterialSpecifications(List erpMaterials, int materialId) { var mat = erpMaterials.Where(x => x.MaterialId == materialId).FirstOrDefault(); - return mat == null ? "" : mat.Specifications; + if (mat == null) + { + var result = _erpService.BillQueryForMaterial(materialId).Result; + if (!result.IsSuccess) + return ""; + return result.Data == null ? "" : result.Data.Specifications; + } + return mat.Specifications; } /// diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index ca08a8d9..8dc107a5 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -763,7 +763,7 @@ namespace WMS.Web.Domain.Services.Public } /// - /// erp:单据查询-物料 + /// erp:单据查询-物料集合 /// /// public async Task> BillQueryForMaterial() @@ -775,65 +775,7 @@ namespace WMS.Web.Domain.Services.Public var materials = _memoryCache.Get>(cache_key); if (materials == null || materials.Count == 0) { - //2.先登录金蝶-拿到token - var token_result = await this.Init(); - if (!token_result.IsSuccess) - return ResultList.ReFailure(token_result); - - //3.获取金蝶物料:拼接参数和条件 - var query = new ErpBillQueryDto(token_result.Data); - var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString()); - param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName"; - param.Limit = 10000; - - //查询条件:备注其中的条件值以金蝶的值为准!!! - //1.审核状态:已审核 - //2.禁用状态:A否,B是 - //3.使用组织:只查询“深圳市元创时代科技有限公司”这个组织;组织ID=100008--固定值查询(测试端和正式是一样的) - param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008"; - param.OrderString = "FCreateDate ASC"; - - //4.循环拿金蝶数据 - bool isHave = true; - var erp_materials_list = new List(); - int skip = 0; - var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); - _logger.LogInformation($"物料拉取-开始时间:{beginTime}"); - while (isHave) - { - //4.1.页码:页码按照金蝶的要求从0开始 - param.StartRow = (Convert.ToInt32(skip) * param.Limit); - //4.2.参数json化 - query.Data = JsonConvert.SerializeObject(param); - var json = JsonConvert.SerializeObject(query); - - //4.3.请求查询接口并返回数据 - var result_json = await _client.ExecuteBillQueryAsync(json); - var result = JsonConvert.DeserializeObject>>(result_json); - //4.4.判断数据是否全部拉取完成:并停止循环的条件 - if (result == null || result.Count == 0) - isHave = false; - //4.5.拼装 - foreach (var item in result) - { - var lis = new ErpMaterialDto(); - lis.MaterialId = Convert.ToInt32(item[0]); - lis.MaterialName = item[1]; - lis.MaterialNumber = item[2]; - lis.Specifications = item[3]; - lis.BaseUnitId = Convert.ToInt32(item[4]); - lis.BaseUnitName = item[5]; - erp_materials_list.Add(lis); - } - //4.6页面的叠加 - skip++; - } - var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); - _logger.LogInformation($"物料拉取-结束时间:{endTime}"); - //5.物料集合进行缓存 - _memoryCache.Set(cache_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(12))); - _logger.LogInformation($"物料拉取-总条数:{erp_materials_list.Count}"); - return ResultList.ReSuccess(erp_materials_list); + return await this.BillQueryForMaterialPagedList(cache_key); } else { @@ -849,6 +791,163 @@ namespace WMS.Web.Domain.Services.Public } + /// + /// erp:基础数据-物料信息 + /// + /// + /// + public async Task> BillQueryForMaterial(int id) + { + //1.获取缓存中的物料数据; + var cache_key = "erp_materials_list"; + var materials = _memoryCache.Get>(cache_key); + if (materials == null || materials.Count == 0) + return Result.ReSuccess(null); + //2.通过ID取当前物料列表中的 + var mater = materials.Where(x => x.MaterialId == id).FirstOrDefault(); + if (mater == null) + { + //2.1没有的话:去金蝶取 + mater = await this.BillQueryForMaterialById(id); + if (mater != null) + { + //把取到的数据放集合中并重新给缓存 + materials.Add(mater); + _memoryCache.Set(cache_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(12))); + return Result.ReSuccess(mater); + } + else + return Result.ReSuccess(null); + } + return Result.ReSuccess(mater); + + } + + /// + /// erp:基础数据-物料-分页查询 + /// + /// + /// + private async Task> BillQueryForMaterialPagedList(string cache_key) + { + //2.先登录金蝶-拿到token + var token_result = await this.Init(); + if (!token_result.IsSuccess) + return ResultList.ReFailure(token_result); + + //3.获取金蝶物料:拼接参数和条件 + var query = new ErpBillQueryDto(token_result.Data); + var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString()); + param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName"; + param.Limit = 10000; + + //查询条件:备注其中的条件值以金蝶的值为准!!! + //1.审核状态:已审核 + //2.禁用状态:A否,B是 + //3.使用组织:只查询“深圳市元创时代科技有限公司”这个组织;组织ID=100008--固定值查询(测试端和正式是一样的) + param.FilterString = "FDocumentStatus='C' and FForbidStatus='A' and FUseOrgId=100008"; + param.OrderString = "FCreateDate ASC"; + + //4.循环拿金蝶数据 + bool isHave = true; + var erp_materials_list = new List(); + int skip = 0; + var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); + _logger.LogInformation($"物料拉取-开始时间:{beginTime}"); + while (isHave) + { + //4.1.页码:页码按照金蝶的要求从0开始 + param.StartRow = (Convert.ToInt32(skip) * param.Limit); + //4.2.参数json化 + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); + + //4.3.请求查询接口并返回数据 + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + //4.4.判断数据是否全部拉取完成:并停止循环的条件 + if (result == null || result.Count == 0) + isHave = false; + //4.5.拼装 + foreach (var item in result) + { + var lis = new ErpMaterialDto(); + lis.MaterialId = Convert.ToInt32(item[0]); + lis.MaterialName = item[1]; + lis.MaterialNumber = item[2]; + lis.Specifications = item[3]; + lis.BaseUnitId = Convert.ToInt32(item[4]); + lis.BaseUnitName = item[5]; + erp_materials_list.Add(lis); + } + //4.6页面的叠加 + skip++; + } + var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); + _logger.LogInformation($"物料拉取-结束时间:{endTime}"); + //5.物料集合进行缓存 + _memoryCache.Set(cache_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromHours(12))); + _logger.LogInformation($"物料拉取-总条数:{erp_materials_list.Count}"); + return ResultList.ReSuccess(erp_materials_list); + } + + /// + /// erp:基础数据-物料-ids查询 + /// + /// + /// + private async Task BillQueryForMaterialById(int id) + { + //2.先登录金蝶-拿到token + var token_result = await this.Init(); + if (!token_result.IsSuccess) + return null; + + //3.获取金蝶物料:拼接参数和条件 + var query = new ErpBillQueryDto(token_result.Data); + var param = new ErpBillQueryParamDto(FormIdParam.BD_MATERIAL.ToString()); + param.FieldKeys = "FMATERIALID,FName,FNumber,FSpecification,FBaseUnitId,FBaseUnitId.FName"; + param.Limit = 10000; + + //查询条件:备注其中的条件值以金蝶的值为准!!! + //1.审核状态:已审核 + //2.禁用状态:A否,B是 + //3.使用组织:只查询“深圳市元创时代科技有限公司”这个组织;组织ID=100008--固定值查询(测试端和正式是一样的)---按ID查询就不需要固定组织条件了 + param.FilterString = "FDocumentStatus='C' and FForbidStatus='A'"; + param.OrderString = "FCreateDate ASC"; + + //根据物料ID查询 + param.FilterString = param.FilterString + $" and FMATERIALID={id}"; + + //4.循环拿金蝶数据 + var erp_materials_list = new List(); + + //4.2.参数json化 + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); + + //4.3.请求查询接口并返回数据 + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + + //4.5.拼装 + foreach (var item in result) + { + var lis = new ErpMaterialDto(); + lis.MaterialId = Convert.ToInt32(item[0]); + lis.MaterialName = item[1]; + lis.MaterialNumber = item[2]; + lis.Specifications = item[3]; + lis.BaseUnitId = Convert.ToInt32(item[4]); + lis.BaseUnitName = item[5]; + erp_materials_list.Add(lis); + } + if (erp_materials_list.Count == 0) + return null; + else + return erp_materials_list.FirstOrDefault(); + } + /// /// erp:单据查询-组织数据 /// @@ -1131,7 +1230,7 @@ namespace WMS.Web.Domain.Services.Public /// /// /// - public async Task> BillQueryForSubStock(string code = null,string orgCode=null) + public async Task> BillQueryForSubStock(string code = null, string orgCode = null) { try {