diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 8406d995..99a81e00 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -26,7 +26,8 @@ namespace WMS.Web.Api.Controllers [Route("hj")] public async Task TestHJ() { - var result= await this._erpService.BillQueryForPurchaseInStock(); + //var result= await this._erpService.BillQueryForPurchaseInStock(); + var result = await this._erpService.BillQueryForOrg(); if (!result.IsSuccess) return ""; return JsonConvert.SerializeObject(result.Data); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 5a4d5452..ec622b1b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -305,6 +305,11 @@ 表单所在的子系统内码,字符串类型(非必录) + + + Id + + erp-采购入库-返回数据源 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index aae25d2b..e94f83ca 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -899,6 +899,11 @@ + + + 公司Id + + 获取事务 用来处理即时库存 @@ -927,6 +932,12 @@ + + + + + + 登录服务接口 @@ -1390,6 +1401,12 @@ + + + erp:单据查询-组织数据 + + + Get方法 @@ -1779,6 +1796,16 @@ 组装拆卸单:里面包含出和入 + + + 组织 + + + + + 供应商 + + 入库状态 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpBillQueryParamDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpBillQueryParamDto.cs index 4d28234f..e2a5c0b4 100644 --- a/src/WMS.Web.Core/Dto/Erp/ErpBillQueryParamDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/ErpBillQueryParamDto.cs @@ -41,11 +41,11 @@ namespace WMS.Web.Core.Dto.Erp /// /// 开始行索引,整型(非必录) /// - public int StartRow { get; set; } = 1; + public int StartRow { get; set; } = 0; /// /// 最大行数,整型,不能超过10000(非必录) /// - public int Limit { get; set; } = 2; + public int Limit { get; set; } = 1; /// /// 表单所在的子系统内码,字符串类型(非必录) diff --git a/src/WMS.Web.Core/Dto/Erp/Org/ErpOrgDto.cs b/src/WMS.Web.Core/Dto/Erp/Org/ErpOrgDto.cs new file mode 100644 index 00000000..d80a8212 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Erp/Org/ErpOrgDto.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Erp.Org +{ + public class ErpOrgDto + { + /// + /// Id + /// + public int Id { get; set; } + + public string Name { get; set; } + } +} diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index 378a733f..13ee7789 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto.Erp.Org; using WMS.Web.Core.Dto.Erp.Purchase; using WMS.Web.Core.Internal.Results; @@ -14,5 +15,11 @@ namespace WMS.Web.Domain.IService.Public /// /// Task> BillQueryForPurchaseInStock(); + + /// + /// + /// + /// + Task> BillQueryForOrg(); } } diff --git a/src/WMS.Web.Domain/Infrastructure/ILoginRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ILoginRepositories.cs new file mode 100644 index 00000000..73540862 --- /dev/null +++ b/src/WMS.Web.Domain/Infrastructure/ILoginRepositories.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Domain.Infrastructure +{ + public interface ILoginRepositories + { + /// + /// 公司Id + /// + int CompanyId { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index 441fa017..1c599f86 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -1,5 +1,6 @@ using AutoMapper; using ERP; +using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; @@ -9,6 +10,7 @@ using System.ServiceModel; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Dto.Erp.Org; using WMS.Web.Core.Dto.Erp.Purchase; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.IService.Public; @@ -26,35 +28,50 @@ namespace WMS.Web.Domain.Services.Public private IMapper _mapper; private ErpOptions _erpOptions; private ILogger _logger; + private ERPGWSoapClient _client; + private readonly IMemoryCache _memoryCache; public ErpService( IMapper mapper, IOptions erpOptions, - ILogger logger) + ILogger logger, + IMemoryCache memoryCache) { this._erpOptions = erpOptions?.Value; this._mapper = mapper; this._logger = logger; + this._memoryCache = memoryCache; } /// /// 初始化ERP:登录到ERP /// /// - public async Task> Init() + public async Task> Init() { BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress address = new EndpointAddress(this._erpOptions.EndpointAddress); - ERPGWSoapClient client = new ERPGWSoapClient(binding, address); + this._client = new ERPGWSoapClient(binding, address); try { - var result = await client.ValidateSystemAsync(this._erpOptions.UserName, this._erpOptions.Password, this._erpOptions.ErpId, ""); - if (result == null) - return Result.ReFailure(ResultCodes.Erp_Login_Error); - return Result.ReSuccess(result); + var appId = "wms"; + var cache_key = "erp_accesstoken_"+ appId; + var cache_value = _memoryCache.Get(cache_key); + if (!string.IsNullOrEmpty(cache_value)) + return Result.ReSuccess(cache_value); + else + { + var result = await this._client.ValidateSystemAsync(this._erpOptions.UserName, this._erpOptions.Password, this._erpOptions.ErpId, appId); + if (result == null) + return Result.ReFailure(ResultCodes.Erp_Login_Error); + + _memoryCache.Set(cache_key, true, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(30))); + return Result.ReSuccess(result.AccessToken); + } + } catch (Exception ex) { - return Result.ReFailure(ResultCodes.Erp_Login_Error); + return Result.ReFailure(ResultCodes.Erp_Login_Error); } } @@ -66,17 +83,17 @@ namespace WMS.Web.Domain.Services.Public { try { - BasicHttpBinding binding = new BasicHttpBinding(); - EndpointAddress address = new EndpointAddress(this._erpOptions.EndpointAddress); - ERPGWSoapClient client = new ERPGWSoapClient(binding, address); - var token_result = await client.ValidateSystemAsync(this._erpOptions.UserName, this._erpOptions.Password, this._erpOptions.ErpId, ""); - var query = new ErpBillQueryDto(token_result.AccessToken); + var token_result = await this.Init(); + if(!token_result.IsSuccess) + return ResultList.ReFailure(token_result); + + var query = new ErpBillQueryDto(token_result.Data); var param = new ErpBillQueryParamDto(FormIdParam.STK_InStock.ToString()); param.FieldKeys = this._erpOptions.PurchaseInstockFieldKeys; query.Data = JsonConvert.SerializeObject(param); var json = JsonConvert.SerializeObject(query); - var result_json = await client.ExecuteBillQueryAsync(json); + var result_json = await _client.ExecuteBillQueryAsync(json); var result = JsonConvert.DeserializeObject>>(result_json); var list = new List(); @@ -97,10 +114,48 @@ namespace WMS.Web.Domain.Services.Public } catch (Exception) { - - return ResultList.ReFailure("错误",10001); + return ResultList.ReFailure("错误", 10001); } + } + /// + /// erp:单据查询-组织数据 + /// + /// + public async Task> BillQueryForOrg() + { + try + { + var token_result = await this.Init(); + if (!token_result.IsSuccess) + return ResultList.ReFailure(token_result); + var query = new ErpBillQueryDto(token_result.Data); + var param = new ErpBillQueryParamDto(FormIdParam.ORG_Organizations.ToString()); + param.FieldKeys = "FOrgID,FName"; + param.FilterString = "FOrgID=100008"; + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); + + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + + var list = new List(); + foreach (var item in result) + { + var lis = new ErpOrgDto(); + lis.Id = int.Parse(item[0]); + lis.Name = item[1]; + + list.Add(lis); + + } + return ResultList.ReSuccess(list); + + } + catch (Exception) + { + return ResultList.ReFailure("错误", 10002); + } } } } diff --git a/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs b/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs index d9d4ffb5..e04a2237 100644 --- a/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs +++ b/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs @@ -33,5 +33,13 @@ namespace WMS.Web.Domain.Values.Erp /// 组装拆卸单:里面包含出和入 /// STK_AssembledApp=6, + /// + /// 组织 + /// + ORG_Organizations=7, + /// + /// 供应商 + /// + BD_Supplier=8, } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs index cba3f3b9..ee6e1fbf 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs @@ -31,6 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection private static void AddRepositories(this IServiceCollection services) { services.AddHttpContextAccessor(); + services.AddScoped(); services.AddTransient(); diff --git a/src/WMS.Web.Repositories/InStockRepositories.cs b/src/WMS.Web.Repositories/InStockRepositories.cs index e0709a91..af3a5970 100644 --- a/src/WMS.Web.Repositories/InStockRepositories.cs +++ b/src/WMS.Web.Repositories/InStockRepositories.cs @@ -9,6 +9,8 @@ using WMS.Web.Core; using WMS.Web.Core.Dto; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values.Single; using WMS.Web.Repositories.Configuration; namespace WMS.Web.Repositories @@ -20,14 +22,18 @@ namespace WMS.Web.Repositories { private readonly IMapper _mapper; private readonly IServiceProvider _serviceProvider; + private readonly ILoginRepositories _loginRepositories; private readonly RepositoryDbContext _context; + private readonly ISingleDataService _singleDataService; - public InStockRepositories(RepositoryDbContext context, IMapper mapper, IServiceProvider serviceProvider) + public InStockRepositories(RepositoryDbContext context, IMapper mapper, ILoginRepositories loginRepositories, IServiceProvider serviceProvider, ISingleDataService singleDataService) { _context = context; _mapper = mapper; _serviceProvider = serviceProvider; + _loginRepositories = loginRepositories; + _singleDataService = singleDataService; } /// @@ -61,10 +67,10 @@ namespace WMS.Web.Repositories MaterialName="", MaterialNumber="", Specifications="", - Stock="", - Qty=s.detail.Qty, - Creator="", - CreateTime=s.order.CreateTime, + Stock= _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.detail.StockId), + Qty =s.detail.Qty, + Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.CreatorId), + CreateTime =s.order.CreateTime, SuccessSync=s.order.SuccessSync }).OrderByDescending(x => x.Id).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); diff --git a/src/WMS.Web.Repositories/LoginRepositories.cs b/src/WMS.Web.Repositories/LoginRepositories.cs new file mode 100644 index 00000000..b4c761d6 --- /dev/null +++ b/src/WMS.Web.Repositories/LoginRepositories.cs @@ -0,0 +1,44 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core.Dto.Login; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.Services.Public; + +namespace WMS.Web.Repositories +{ + /// + /// 登录仓储 + /// + public class LoginRepositories:ILoginRepositories + { + public int CompanyId { get; set; } = 0; + private readonly RedisClientService _redisClientService; + public LoginRepositories(ILogger logger, IHttpContextAccessor httpContextAccessor, RedisClientService redisClientService) + { + try + { + string authorization = httpContextAccessor?.HttpContext?.Request?.Headers["Authorization"] ?? ""; + if (string.IsNullOrEmpty(authorization)) return; + + string token = string.Empty; + if (authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) + token = authorization.Substring("Bearer ".Length).Trim(); + if (string.IsNullOrEmpty(token)) + { + this.CompanyId = 0; + return; + } + + _redisClientService = redisClientService; + var logininfo = _redisClientService.GetStringKey($"wms_login_{token}"); + this.CompanyId = logininfo == null ? 0 : logininfo.UserInfo.CompanyId; + } + catch (Exception) + { + } + } + } +}