接收公司人员变动消息推送

master
wanghaomei 2 years ago
parent e2bdac1ea8
commit 6b7c58f3f3

@ -62,4 +62,10 @@ public class SysTenant : DEntityBase
/// 租户类型
/// </summary>
public TenantTypeEnum TenantType { get; set; }
/// <summary>
/// 大简云公司ID
/// </summary>
[MaxLength(50)]
public string CompId { get; set; }
}

@ -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
{
/// <summary>
/// 接收公司、员工变动消息推送
/// </summary>
public class RecCompanyUserChangeService : BackgroundService
{
private readonly IServiceScopeFactory _scopeFactory;
private readonly IServiceScope _serviceScope;
private readonly ILogger<RecCompanyUserChangeService> _logger;
private readonly ISysTenantService _tenantService;
private readonly ISysUserService _userService;
private readonly SqlSugarRepository<SysUser> _sysUserRep;
private readonly SqlSugarRepository<SysTenant> _sysTenantRep;
private IConnection mqConn;
private IModel model;
public RecCompanyUserChangeService(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
//通过这个注入DBContext
_serviceScope = _scopeFactory.CreateScope();
_logger = _serviceScope.ServiceProvider.GetService<ILogger<RecCompanyUserChangeService>>();
_tenantService = _serviceScope.ServiceProvider.GetService<ISysTenantService>();
_userService = _serviceScope.ServiceProvider.GetService<ISysUserService>();
_sysUserRep = _serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysUser>>();
_sysTenantRep = _serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysTenant>>();
}
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<ISysCacheService>();
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}");
}
}
}

@ -54,6 +54,7 @@
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.8" />
<PackageReference Include="MiniExcel" Version="1.26.5" />
<PackageReference Include="NPOI" Version="2.6.0" />
<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.2.6" />
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.20" />

@ -2424,6 +2424,26 @@
是否可见
</summary>
</member>
<member name="P:Myshipping.Core.Entity.PingTai.PingTaiCompany.CustomsCode">
<summary>
海关登记号
</summary>
</member>
<member name="P:Myshipping.Core.Entity.PingTai.PingTaiCompany.EnName">
<summary>
英文名
</summary>
</member>
<member name="P:Myshipping.Core.Entity.PingTai.PingTaiCompany.CangdanCode">
<summary>
舱单传输人备案号
</summary>
</member>
<member name="P:Myshipping.Core.Entity.PingTai.PingTaiCompany.Slogan">
<summary>
宣传标语
</summary>
</member>
<member name="P:Myshipping.Core.Entity.PingTaiUser.GID">
<summary>
@ -5816,6 +5836,11 @@
邮箱
</summary>
</member>
<member name="T:Myshipping.Core.MQ.RecCompanyUserChangeService">
<summary>
接收公司、员工变动消息推送
</summary>
</member>
<member name="T:Myshipping.Core.TokenModel">
<summary>
AccessToken参数
@ -6111,6 +6136,13 @@
<param name="input"></param>
<returns></returns>
</member>
<member name="M:Myshipping.Core.Service.AuthService.LoginWithCode(System.String)">
<summary>
使用跳转code登录
</summary>
<param name="code"></param>
<returns></returns>
</member>
<member name="T:Myshipping.Core.Service.LoginInput">
<summary>
登录输入参数

@ -343,10 +343,21 @@ public class AuthService : IAuthService, IDynamicApiController, ITransient
{
jData = jRtn.GetJObjectValue("data");
var dic = new Dictionary<string, object>();
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);

@ -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<RequestActionFilter>()
.AddMvcFilter<ApiUserFilter>()
@ -113,6 +106,8 @@ public class Startup : AppStartup
//钉钉消息
builder.AddSubscriber<DingTalkSubscriber>();
});
services.AddHostedService<RecCompanyUserChangeService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

Loading…
Cancel
Save