Commit 4433472b by lcx

修改返回signalr的方法

parent 7157d4fc
......@@ -24,35 +24,34 @@ namespace Performance.Api.Controllers
[Route("api/[controller]")]
public class AllotController : Controller
{
private AllotService _allotService;
private ResultComputeService _resultComputeService;
private ConfigService _configService;
private IHostingEnvironment _evn;
private ILogger<AllotController> _logger;
private ClaimService _claim;
private LogManageService _logManageService;
private IBackgroundTaskQueue _backgroundTaskQueue;
private IServiceScopeFactory _serviceScopeFactory;
public AllotController(AllotService allotService,
ResultComputeService resultComputeService,
ConfigService configService,
ILogger<AllotController> logger,
private readonly IHostingEnvironment _evn;
private readonly ClaimService _claim;
private readonly IBackgroundTaskQueue _backgroundTaskQueue;
private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly AllotService _allotService;
private readonly ConfigService _configService;
private readonly NotificationsService _notificationsService;
private readonly ResultComputeService _resultComputeService;
public AllotController(
IHostingEnvironment evn,
ClaimService claim,
IBackgroundTaskQueue backgroundTaskQueue,
IServiceScopeFactory serviceScopeFactory,
ClaimService claim,
LogManageService logManageService)
AllotService allotService,
ConfigService configService,
NotificationsService notificationsService,
ResultComputeService resultComputeService
)
{
_allotService = allotService;
_resultComputeService = resultComputeService;
_logger = logger;
_evn = evn;
_claim = claim;
_logManageService = logManageService;
_configService = configService;
_backgroundTaskQueue = backgroundTaskQueue;
_serviceScopeFactory = serviceScopeFactory;
_allotService = allotService;
_configService = configService;
_notificationsService = notificationsService;
_resultComputeService = resultComputeService;
}
/// <summary>
......@@ -177,7 +176,7 @@ public ApiResponse Import([FromForm] IFormCollection form)
/// <summary>
/// 上传文件
/// </summary>
/// <param name="form"></param>
/// <param name="allotId"></param>
/// <returns></returns>
[Route("ImportExtraction/{allotId}")]
[HttpPost]
......@@ -236,11 +235,13 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody] A
if (allot.States == (int)AllotStates.Wait)
return new ApiResponse(ResponseType.OK, "当前绩效正在等待生成");
_logManageService.WriteMsg("生成绩效准备中", $"准备生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效,请稍等!", 1, allot.ID, "ReceiveMessage", true);
int userId = _claim.GetUserId();
var uuid = Guid.NewGuid().ToString("N");
_notificationsService.SendGenerateMessage(userId, allot, uuid, $"准备生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效,请稍等!");
_allotService.UpdateAllotStates(allot.ID, (int)AllotStates.Wait, EnumHelper.GetDescription(AllotStates.Wait), allot.Generate);
if (_evn.IsEnvironment("Localhost"))
{
_allotService.Generate(allot, email);
_allotService.Generate(allot, email, uuid, userId);
}
else
{
......@@ -251,13 +252,13 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody] A
using (var scope = _serviceScopeFactory.CreateScope())
{
var scopedServices = scope.ServiceProvider.GetRequiredService<AllotService>();
scopedServices.Generate(allot, email);
scopedServices.Generate(allot, email, uuid, userId);
await Task.Delay(TimeSpan.FromSeconds(5), token);
}
});
}
_logManageService.WriteMsg("等待绩效生成", $"等待绩效生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效!", 1, allot.ID, "ReceiveMessage");
_notificationsService.SendGenerateMessage(userId, allot, uuid, $"等待绩效生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效,请稍等!");
//_allotService.Generate(allot, email);
////BackgroundJob.Enqueue(() => _allotService.Generate(allot, email));
return new ApiResponse(ResponseType.OK);
......
......@@ -110,6 +110,33 @@
<param name="userId">用户id</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.SelfInfos">
<summary>
查询用户信息
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.InsertUser(Performance.DtoModels.UserRequest)">
<summary>
新增用户
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.UpdateUser(Performance.DtoModels.UserRequest)">
<summary>
编辑用户
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.DeleteUser(Performance.DtoModels.UserRequest)">
<summary>
新增用户
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="T:Performance.Api.Controllers.AgainAllotController">
<summary>
科室二次分配
......@@ -177,6 +204,13 @@
<param name="form"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.ImportExtraction(System.Int32)">
<summary>
上传文件
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.Generate(Performance.DtoModels.AllotRequest)">
<summary>
绩效生成
......
......@@ -221,6 +221,71 @@
结果值
</summary>
</member>
<member name="F:Performance.DtoModels.Classify.Notification">
<summary>
通知
</summary>
</member>
<member name="F:Performance.DtoModels.Classify.Progress">
<summary>
进度条
</summary>
</member>
<member name="F:Performance.DtoModels.NoticeType.success">
<summary>
成功
</summary>
</member>
<member name="F:Performance.DtoModels.NoticeType.info">
<summary>
消息
</summary>
</member>
<member name="F:Performance.DtoModels.NoticeType.warning">
<summary>
警告
</summary>
</member>
<member name="F:Performance.DtoModels.NoticeType.error">
<summary>
错误
</summary>
</member>
<member name="F:Performance.DtoModels.NoticeType.exception">
<summary>
异常
</summary>
</member>
<member name="P:Performance.DtoModels.MessageInfo.Classify">
<summary>
分类
</summary>
</member>
<member name="P:Performance.DtoModels.MessageInfo.Type">
<summary>
类型
</summary>
</member>
<member name="P:Performance.DtoModels.MessageInfo.Title">
<summary>
标题
</summary>
</member>
<member name="P:Performance.DtoModels.MessageInfo.Message">
<summary>
消息
</summary>
</member>
<member name="P:Performance.DtoModels.MessageInfo.Percentage">
<summary>
百分比
</summary>
</member>
<member name="P:Performance.DtoModels.MessageInfo.TypeValue">
<summary>
类型值
</summary>
</member>
<member name="P:Performance.DtoModels.PerAgainData.RowNumber">
<summary>
行号
......@@ -2273,6 +2338,11 @@
角色
</summary>
</member>
<member name="P:Performance.DtoModels.UserRequest.RoleArr">
<summary>
角色Arr
</summary>
</member>
<member name="P:Performance.DtoModels.UserRequest.HosIDArray">
<summary>
用户医院ID
......
......@@ -151,6 +151,9 @@
<member name="P:Performance.EntityModels.PerformanceDbContext.log_dbug">
<summary> </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.log_signalr">
<summary> </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.mod_dic">
<summary> 部分公共数据抽取SQL </summary>
</member>
......@@ -2961,6 +2964,61 @@
1、绩效生成日志 2、绩效提取日志 3、绩效提取进度
</summary>
</member>
<member name="T:Performance.EntityModels.log_signalr">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.HospitalId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.AllotId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.Classify">
<summary>
分类
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.TypeValue">
<summary>
类型值
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.Type">
<summary>
类型
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.Title">
<summary>
标题
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.Message">
<summary>
消息
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.Percentage">
<summary>
百分比
</summary>
</member>
<member name="P:Performance.EntityModels.log_signalr.CreateTime">
<summary>
</summary>
</member>
<member name="T:Performance.EntityModels.mod_dic">
<summary>
部分公共数据抽取SQL
......@@ -5731,6 +5789,11 @@
删除状态 1可用 2删除
</summary>
</member>
<member name="P:Performance.EntityModels.sys_user.ParentID">
<summary>
父级ID
</summary>
</member>
<member name="T:Performance.EntityModels.sys_user_hospital">
<summary>
......
......@@ -236,6 +236,9 @@ public AutoMapperConfigs()
CreateMap<HistoryData, report_original_surgery>()
.ForMember(dest => dest.PersonTime, opt => opt.MapFrom(src => src.ResultData))
.ReverseMap();
CreateMap<log_signalr, MessageInfo>()
.ReverseMap();
}
public void xx()
......
......@@ -3,7 +3,7 @@
using System.ComponentModel;
using System.Text;
namespace Performance.Services
namespace Performance.DtoModels
{
public enum Classify
{
......
......@@ -3,19 +3,27 @@
using System.Collections.Generic;
using System.Text;
namespace Performance.Services
namespace Performance.DtoModels
{
public class MessageInfo
{
public MessageInfo(NoticeType typeValue)
public MessageInfo(NoticeType typeValue, string uuid = null, Classify classify = Classify.Notification)
{
TypeValue = typeValue;
Uuid = uuid;
Classify = classify;
}
public string Uuid { get; set; }
public int HospitalId { get; set; }
public int AllotId { get; set; }
/// <summary>
/// 分类
/// </summary>
public Classify Classify { get; set; } = Classify.Notification;
public Classify Classify { get; set; }
/// <summary>
/// 类型
......
......@@ -164,6 +164,9 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
/// <summary> </summary>
public virtual DbSet<log_dbug> log_dbug { get; set; }
/// <summary> </summary>
public virtual DbSet<log_signalr> log_signalr { get; set; }
/// <summary> 部分公共数据抽取SQL </summary>
public virtual DbSet<mod_dic> mod_dic { get; set; }
......
//-----------------------------------------------------------------------
// <copyright file=" log_signalr.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("log_signalr")]
public class log_signalr
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
///
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 分类
/// </summary>
public int Classify { get; set; }
/// <summary>
/// 类型值
/// </summary>
public int TypeValue { get; set; }
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 百分比
/// </summary>
public Nullable<decimal> Percentage { get; set; }
/// <summary>
///
/// </summary>
public Nullable<DateTime> CreateTime { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" log_signalr.cs">
// * FileName: log_signalr.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// log_signalr Repository
/// </summary>
public partial class PerforLogdsignalrRepository : PerforRepository<log_signalr>
{
public PerforLogdsignalrRepository(PerformanceDbContext context) : base(context)
{
}
}
}
......@@ -10,40 +10,48 @@
namespace Performance.Services
{
[Authorize]
public class AllotLogHub : Hub
{
private readonly IMemoryCache cache;
private readonly ILogger<AllotLogHub> logger;
private readonly NotificationsService service;
public AllotLogHub(
IMemoryCache cache,
ILogger<AllotLogHub> logger,
NotificationsService service
ILogger<AllotLogHub> logger
)
{
this.cache = cache;
this.logger = logger;
this.service = service;
}
private readonly MemoryCacheHelper helper = new MemoryCacheHelper();
public void LoginService(string userId)
public override Task OnConnectedAsync()
{
if (helper.Exists(userId))
helper.Remove(userId);
var dateTime = DateTime.Now;
var slidingtimespan = helper.ToUnixTimestampBySeconds(dateTime.AddMinutes(30));
var absolutetimespan = helper.ToUnixTimestampBySeconds(dateTime.AddHours(2));
helper.Set(userId, Context.ConnectionId, slidingtimespan, absolutetimespan);
string key = Context.User.Claims.FirstOrDefault(t => t.Type == "id")?.Value;
if (!string.IsNullOrEmpty(key))
{
if (cache.TryGetValue(key, out _))
{
cache.Remove(key);
}
cache.Set(key, Context.ConnectionId);
}
logger.LogInformation($"用户在{DateTime.Now.ToString("yyyy年MM月dd日 hh时mm分ss秒")}创建连接");
return base.OnConnectedAsync();
}
public void LogoutService(string userId)
public override Task OnDisconnectedAsync(Exception exception)
{
string key = Context.User.Claims.FirstOrDefault(t => t.Type == "id")?.Value;
if (!string.IsNullOrEmpty(key))
{
if (cache.TryGetValue(key, out _))
{
if (helper.Exists(userId))
helper.Remove(userId);
cache.Remove(key);
}
}
logger.LogInformation($"用户在{DateTime.Now.ToString("yyyy年MM月dd日 hh时mm分ss秒")}断开连接");
return base.OnDisconnectedAsync(exception);
}
}
}
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Text;
......@@ -11,23 +15,40 @@ namespace Performance.Services
public class NotificationsService : IAutoInjection
{
private readonly ILogger logger;
private readonly IMemoryCache cache;
private readonly IHubContext<AllotLogHub> hubContext;
private readonly PerforLogdsignalrRepository repository;
public NotificationsService(
ILogger<NotificationsService> logger,
IHubContext<AllotLogHub> hubContext
IMemoryCache cache,
IHubContext<AllotLogHub> hubContext,
PerforLogdsignalrRepository repository
)
{
this.logger = logger;
this.cache = cache;
this.hubContext = hubContext;
this.repository = repository;
}
public void SendGenerateMessage(int userId, per_allot allot, string uuid, string message, NoticeType typeValue = NoticeType.info)
{
var info = new MessageInfo(typeValue, uuid, Classify.Notification)
{
HospitalId = allot.HospitalId,
AllotId = allot.ID,
Title = "生成绩效",
Message = message
};
SendMessage(userId, info);
}
private readonly MemoryCacheHelper helper = new MemoryCacheHelper();
public void SendMessage(int userId, MessageInfo data)
{
string key = userId.ToString();
if (helper.Exists(key) && helper.Get(key) is string connectionId && !string.IsNullOrEmpty(connectionId))
if (cache.TryGetValue(key, out string connectionId) && !string.IsNullOrEmpty(connectionId))
{
SendMessageToClient(connectionId, data);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment