diff --git a/Myshipping.Core/Entity/SysTenant.cs b/Myshipping.Core/Entity/SysTenant.cs index d8cd157..a30e266 100644 --- a/Myshipping.Core/Entity/SysTenant.cs +++ b/Myshipping.Core/Entity/SysTenant.cs @@ -62,4 +62,10 @@ public class SysTenant : DEntityBase /// 租户类型 /// public TenantTypeEnum TenantType { get; set; } + + /// + /// 大简云公司ID + /// + [MaxLength(50)] + public string CompId { get; set; } } diff --git a/Myshipping.Core/MQ/RecCompanyUserChangeService.cs b/Myshipping.Core/MQ/RecCompanyUserChangeService.cs new file mode 100644 index 0000000..a14462f --- /dev/null +++ b/Myshipping.Core/MQ/RecCompanyUserChangeService.cs @@ -0,0 +1,140 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Myshipping.Core.Entity; +using Myshipping.Core.Service; +using Newtonsoft.Json.Linq; +using RabbitMQ.Client; +using RabbitMQ.Client.Events; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Yitter.IdGenerator; + +namespace Myshipping.Core.MQ +{ + /// + /// 接收公司、员工变动消息推送 + /// + public class RecCompanyUserChangeService : BackgroundService + { + private readonly IServiceScopeFactory _scopeFactory; + private readonly IServiceScope _serviceScope; + + private readonly ILogger _logger; + private readonly ISysTenantService _tenantService; + private readonly ISysUserService _userService; + private readonly SqlSugarRepository _sysUserRep; + private readonly SqlSugarRepository _sysTenantRep; + + private IConnection mqConn; + private IModel model; + + public RecCompanyUserChangeService(IServiceScopeFactory scopeFactory) + { + _scopeFactory = scopeFactory; + //通过这个注入DBContext + _serviceScope = _scopeFactory.CreateScope(); + + _logger = _serviceScope.ServiceProvider.GetService>(); + _tenantService = _serviceScope.ServiceProvider.GetService(); + _userService = _serviceScope.ServiceProvider.GetService(); + _sysUserRep = _serviceScope.ServiceProvider.GetService>(); + _sysTenantRep = _serviceScope.ServiceProvider.GetService>(); + } + + public override void Dispose() + { + base.Dispose(); + _serviceScope.Dispose(); + mqConn.Close(); + + _logger.LogInformation("RecCompanyUserChangeService Dispose"); + } + + protected override Task ExecuteAsync(CancellationToken stoppingToken) + { + _logger.LogInformation("RecCompanyUserChangeService ExecuteAsync"); + + return Task.Run(async () => + { + _logger.LogInformation("RecCompanyUserChangeService ExecuteAsync RunTask"); + + string ExchangeName = "djy.comp&user.change"; + string QueueName = $"djy.comp&user.change.{DateTime.Now.Ticks}"; + + ConnectionFactory factory = new ConnectionFactory(); + var cache = _serviceScope.ServiceProvider.GetService(); + var sysConfig = await cache.GetAllSysConfig(); + var mqUrl = sysConfig.First(x => x.Code == "CompanyUserChangeMqUrl").Value; + factory.Uri = new Uri(mqUrl); + mqConn = factory.CreateConnection("客户订舱平台"); + + model = mqConn.CreateModel(); + model.ExchangeDeclare(ExchangeName, ExchangeType.Fanout); + model.QueueDeclare(QueueName, false, false, true, null); + model.QueueBind(QueueName, ExchangeName, "", null); + + var consumer = new EventingBasicConsumer(model); + consumer.Received += Consumer_Received; + model.BasicConsume(QueueName, true, consumer); + + + }); + + } + + private void Consumer_Received(object ch, BasicDeliverEventArgs ea) + { + var body = ea.Body; + var strBody = Encoding.UTF8.GetString(body.ToArray()); + + var jobj = JObject.Parse(strBody); + var type = jobj.GetStringValue("type"); + if (type == "CompanyAudit") //新公司审核通过 + { + var comp = jobj.GetJObjectValue("company"); + var compid = comp.GetStringValue("CompId"); + var compname = comp.GetStringValue("CompName"); + var adminShowName = comp.GetStringValue("AdminShowName"); + + var findTenant = _sysTenantRep.FirstOrDefault(x => x.CompId == compid); //先根据关联ID查找 + if (findTenant == null) + { + findTenant = _sysTenantRep.FirstOrDefault(x => x.Name == compname); //再根据公司全称查找 + } + + if (findTenant == null) //找不到,新建 + { + var tenant = new SysTenant(); + tenant.Id = YitIdHelper.NextId(); + tenant.Name = compname; + tenant.AdminName = adminShowName; + tenant.Email = $"{tenant.Id}"; + tenant.TenantType = TenantTypeEnum.COMMON; + var newTenant = _sysTenantRep.InsertReturnEntity(tenant); + + _tenantService.InitNewTenant(tenant); + } + + } + else if (type == "UserJoin") //用户加入公司 + { + + } + else if (type == "UserLeave") //用户离职 + { + + } + else if (type == "CompanyUserSync") //公司及员工数据同步 + { + + } + + _logger.LogInformation($"收到消息:{strBody}"); + } + } +} diff --git a/Myshipping.Core/Myshipping.Core.csproj b/Myshipping.Core/Myshipping.Core.csproj index b02a9de..463bf24 100644 --- a/Myshipping.Core/Myshipping.Core.csproj +++ b/Myshipping.Core/Myshipping.Core.csproj @@ -54,6 +54,7 @@ + diff --git a/Myshipping.Core/Myshipping.Core.xml b/Myshipping.Core/Myshipping.Core.xml index cc3c7a7..6e66eeb 100644 --- a/Myshipping.Core/Myshipping.Core.xml +++ b/Myshipping.Core/Myshipping.Core.xml @@ -2424,6 +2424,26 @@ 是否可见 + + + 海关登记号 + + + + + 英文名 + + + + + 舱单传输人备案号 + + + + + 宣传标语 + + @@ -5816,6 +5836,11 @@ 邮箱 + + + 接收公司、员工变动消息推送 + + AccessToken参数 @@ -6111,6 +6136,13 @@ + + + 使用跳转code登录 + + + + 登录输入参数 diff --git a/Myshipping.Core/Service/Auth/AuthService.cs b/Myshipping.Core/Service/Auth/AuthService.cs index 6df3b57..f666a8d 100644 --- a/Myshipping.Core/Service/Auth/AuthService.cs +++ b/Myshipping.Core/Service/Auth/AuthService.cs @@ -343,10 +343,21 @@ public class AuthService : IAuthService, IDynamicApiController, ITransient { jData = jRtn.GetJObjectValue("data"); - var dic = new Dictionary(); - foreach (var prop in jData.Properties()) + var compId = jData.GetStringValue("compId"); + var comname = jData.GetStringValue("comname"); + var userId = jData.GetStringValue("gid"); + var showname = jData.GetStringValue("showname"); + + var tenant = _sysTenantRep.FirstOrDefault(x => x.CompId == compId); + if (tenant == null) + { + throw Oops.Bah($"{comname}不存在,请先完成公司认证!"); + } + + var user = _sysUserRep.FirstOrDefault(u => u.DjyUserId == userId); + if (tenant == null) { - dic.Add(prop.Name, jData[prop.Name]); + throw Oops.Bah($"{showname}不存在,请先加入公司{comname}!"); } var accessToken = JWTEncryption.Encrypt(dic); diff --git a/Myshipping.Web.Core/Startup.cs b/Myshipping.Web.Core/Startup.cs index 9cc2134..2c5077c 100644 --- a/Myshipping.Web.Core/Startup.cs +++ b/Myshipping.Web.Core/Startup.cs @@ -22,6 +22,7 @@ using System.Collections.Generic; using Newtonsoft.Json.Serialization; using Newtonsoft.Json; using Myshipping.Application.ConfigOption; +using Myshipping.Core.MQ; namespace Myshipping.Web.Core; @@ -69,15 +70,7 @@ public class Startup : AppStartup services.AddCorsAccessor(); // 配置远程请求 - services.AddRemoteRequest(option => - { - // 配置天气预报GZIP - option.AddHttpClient("wthrcdn", c => - { - c.BaseAddress = new Uri("http://wthrcdn.etouch.cn/"); - }).ConfigurePrimaryHttpMessageHandler(_ => - new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip }); - }); + services.AddRemoteRequest(); services.AddControllersWithViews() .AddMvcFilter() .AddMvcFilter() @@ -113,6 +106,8 @@ public class Startup : AppStartup //钉钉消息 builder.AddSubscriber(); }); + + services.AddHostedService(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env)