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)
{
}
}
}
......@@ -20,93 +20,95 @@ namespace Performance.Services
{
public class AllotService : IAutoInjection
{
private BaiscNormService baiscNormService;
private CheckDataService checkDataService;
private ImportDataService importDataService;
private ProcessComputService processComputService;
private ResultComputeService resultComputeService;
private PerforLogdbugRepository logdbug;
private readonly PerforresreservedRepository perforresreservedRepository;
private ConfigService configService;
private IHostingEnvironment _evn;
private ILogger<AllotService> _logger;
private PerforPerallotRepository _allotRepository;
private IEmailService emailService;
private readonly IHostingEnvironment _evn;
private readonly ILogger<AllotService> _logger;
private readonly IOptions<Application> options;
private readonly ComputeDirector _computeDirector;
private readonly PerforRescomputeRepository _perforRescomputeRepository;
private readonly PerforPeragainallotRepository _againallotRepository;
private readonly PerforPerallotRepository _allotRepository;
private readonly PerforImemployeeRepository _perforImEmployeeRepository;
private PerforPeragainallotRepository _againallotRepository;
private PerforLogcheckRepository perforLogcheckRepository;
private readonly PerforRescomputeRepository _perforRescomputeRepository;
private readonly PerforLogdbugRepository logdbug;
private readonly PerforresreservedRepository perforresreservedRepository;
private readonly PerforCofdirectorRepository perforCofdirectorRepository;
private readonly PerforHospitalRepository perforHospitalRepository;
private readonly PerforHospitalconfigRepository perforHospitalconfigRepository;
private readonly PerforLogcheckRepository perforLogcheckRepository;
private readonly PerforResbaiscnormRepository perforResbaiscnormRepository;
private PerforHospitalconfigRepository perforHospitalconfigRepository;
private readonly BaiscNormService baiscNormService;
private readonly CheckDataService checkDataService;
private readonly ConfigService configService;
private readonly IEmailService emailService;
private readonly ImportDataService importDataService;
//private readonly LogManageService logManageService;
private readonly NotificationsService notificationsService;
private readonly ProcessComputService processComputService;
private readonly QueryDataService queryDataService;
private readonly ReportService reportService;
private readonly ResultComputeService resultComputeService;
private readonly RoleService roleService;
private readonly UserService userService;
private PerforCofdirectorRepository perforCofdirectorRepository;
//private readonly IHubContext<AllotLogHub> hubContext;
private readonly LogManageService logManageService;
private readonly ReportService reportService;
private readonly QueryDataService queryDataService;
public AllotService(PerforPerallotRepository allotRepository,
BaiscNormService baiscNormService,
CheckDataService checkDataService,
ImportDataService importDataService,
ProcessComputService processComputService,
ResultComputeService resultComputeService,
ConfigService configService,
PerforLogdbugRepository logdbug,
PerforresreservedRepository perforresreservedRepository,
IHostingEnvironment evn, ILogger<AllotService> logger,
IEmailService emailService,
public AllotService(
IHostingEnvironment evn,
ILogger<AllotService> logger,
IOptions<Application> options,
ComputeDirector computeDirector,
PerforRescomputeRepository perforRescomputeRepository,
PerforImemployeeRepository perforImEmployeeRepository,
PerforPeragainallotRepository againallotRepository,
PerforLogcheckRepository perforLogcheckRepository,
PerforPerallotRepository allotRepository,
PerforImemployeeRepository perforImEmployeeRepository,
PerforRescomputeRepository perforRescomputeRepository,
PerforLogdbugRepository logdbug,
PerforresreservedRepository perforresreservedRepository,
PerforCofdirectorRepository perforCofdirectorRepository,
PerforHospitalRepository perforHospitalRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
PerforHospitalconfigRepository perforHospitalconfigRepository,
//IHubContext<AllotLogHub> hubContext
RoleService roleService,
UserService userService,
LogManageService logManageService,
PerforLogcheckRepository perforLogcheckRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
BaiscNormService baiscNormService,
CheckDataService checkDataService,
ConfigService configService,
IEmailService emailService,
ImportDataService importDataService,
//LogManageService logManageService,
NotificationsService notificationsService,
ProcessComputService processComputService,
QueryDataService queryDataService,
ReportService reportService,
PerforCofdirectorRepository perforCofdirectorRepository,
QueryDataService queryDataService)
ResultComputeService resultComputeService,
RoleService roleService,
UserService userService
)
{
_allotRepository = allotRepository;
_againallotRepository = againallotRepository;
_logger = logger;
_evn = evn;
this.baiscNormService = baiscNormService;
this.checkDataService = checkDataService;
this.importDataService = importDataService;
this.processComputService = processComputService;
this.resultComputeService = resultComputeService;
this.emailService = emailService;
this._evn = evn;
this._logger = logger;
this.options = options;
_computeDirector = computeDirector;
_perforRescomputeRepository = perforRescomputeRepository;
_perforImEmployeeRepository = perforImEmployeeRepository;
this.configService = configService;
this._computeDirector = computeDirector;
this._againallotRepository = againallotRepository;
this._allotRepository = allotRepository;
this._perforImEmployeeRepository = perforImEmployeeRepository;
this._perforRescomputeRepository = perforRescomputeRepository;
this.logdbug = logdbug;
this.perforresreservedRepository = perforresreservedRepository;
this.perforLogcheckRepository = perforLogcheckRepository;
this.perforCofdirectorRepository = perforCofdirectorRepository;
this.perforHospitalRepository = perforHospitalRepository;
this.perforResbaiscnormRepository = perforResbaiscnormRepository;
this.perforHospitalconfigRepository = perforHospitalconfigRepository;
this.perforLogcheckRepository = perforLogcheckRepository;
this.perforResbaiscnormRepository = perforResbaiscnormRepository;
this.baiscNormService = baiscNormService;
this.checkDataService = checkDataService;
this.configService = configService;
this.emailService = emailService;
this.importDataService = importDataService;
//this.logManageService = logManageService;
this.notificationsService = notificationsService;
this.processComputService = processComputService;
this.queryDataService = queryDataService;
this.reportService = reportService;
this.resultComputeService = resultComputeService;
this.roleService = roleService;
this.userService = userService;
//this.hubContext = hubContext;
this.logManageService = logManageService;
this.reportService = reportService;
this.perforCofdirectorRepository = perforCofdirectorRepository;
this.queryDataService = queryDataService;
}
#region 基础功能
......@@ -303,25 +305,27 @@ public per_allot UpdateAllotShowFormula(int allotId)
/// </summary>
/// <param name="allot"></param>
/// <param name="user"></param>
public void Generate(per_allot allot, string mail)
/// <param name="uuid"></param>
/// <param name="userId"></param>
public void Generate(per_allot allot, string mail, string uuid, int userId)
{
DateTime time = DateTime.Now;
try
{
logManageService.WriteMsg("绩效开始执行", $"正在生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效!", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, $"正在生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效!");
var excel = new PerExcel();
int generate = allot.Generate;
if (new int[] { (int)AllotGenerate.OriginalDataEdited, (int)AllotGenerate.PersonnelOffice }.Contains(allot.Generate))
{
logManageService.WriteMsg("绩效开始执行", $"数据来源:生成成功后被修改的原数据。", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "绩效开始生成,数据来源:生成成功后被修改的原数据。");
generate = (int)AllotGenerate.Success;
configService.ClearResData(allot.ID);
excel = queryDataService.QueryDataAndHeader(allot);
}
else
{
logManageService.WriteMsg("绩效开始执行", $"数据来源:用户上传的Excel。", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "绩效开始生成,数据来源:用户上传的Excel。");
configService.Clear(allot.ID);
// 关闭筛选功能
......@@ -348,7 +352,7 @@ public void Generate(per_allot allot, string mail)
//根据当前业绩绩效核算出最终绩效结果
//科室经济核算汇总、工作量汇总
logManageService.WriteMsg("科室业绩汇总", "正在生成科室收入支出汇总、工作量汇总", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "科室业绩汇总,正在生成科室收入支出汇总、工作量汇总");
var (list, mergeSheets) = processComputService.MergeCompute(excel, allot.ID);
processComputService.Save(list, allot.ID);
......@@ -404,11 +408,11 @@ public void Generate(per_allot allot, string mail)
#endregion 注释
//重新计算科室业绩(含所有提供保底金额)
logManageService.WriteMsg("正在生成绩效", "计算科室业绩分", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, $"计算科室业绩分值");
var sheetLast = processComputService.Compute(excel, mergeSheets, allot);
//保存计算过程数据
logManageService.WriteMsg("正在生成绩效", "保存科室业绩结果及计算过程中产生的数据", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "保存科室业绩结果及计算过程中产生的数据");
processComputService.Save(sheetLast, allot.ID);
////业务中层行政中高层医院奖罚
......@@ -416,23 +420,23 @@ public void Generate(per_allot allot, string mail)
//var employeeExtra = processComputService.GetEmployeeExtra(excel);
// 计算最总数据
logManageService.WriteMsg("正在生成绩效", "计算最终绩效数据", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "计算并保存最终绩效数据");
var baiscnormList = resultComputeService.Compute(allot, sheetLast);
// 计算行政科室绩效
processComputService.ComputeOffice(allot, excel);
// 计算特殊科室
logManageService.WriteMsg("正在生成绩效", "计算最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "计算最终特殊科室绩效数据");
resultComputeService.SpecialUnitCompute(excel, allot, baiscnormList);
logManageService.WriteMsg("正在生成绩效", "保存最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "保存最终特殊科室绩效数据");
//保存 绩效人均参考标准
logManageService.WriteMsg("正在生成绩效", "保存绩效人均参考标准", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "保存绩效人均参考标准");
perforResbaiscnormRepository.AddRange(baiscnormList.ToArray());
// 保存预留绩效
logManageService.WriteMsg("正在生成绩效", "保存预留绩效金额", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "保存预留绩效金额");
resultComputeService.SaveReserved(allot);
// 科室下发
......@@ -441,20 +445,20 @@ public void Generate(per_allot allot, string mail)
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish), generate);
perforCofdirectorRepository.SupplementaryData(allot.ID);
logManageService.WriteMsg("正在生成报表数据", "正在生成报表数据", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "正在生成报表数据");
var res = reportService.ImportData(allot);
var flag = reportService.UpdateData(allot);
logManageService.WriteMsg("正在生成报表数据", $"报表数据生成完成;受影响:{res}行", 1, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "报表数据生成完成,受影响:{res}行");
////发送邮件
//logManageService.WriteMsg("正在发送邮件", "正在发送邮件", 1, allot.ID, "ReceiveMessage", true);
//SendEmail(allot, mail, 1, time);
//logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功");
logManageService.WriteMsg("绩效生成结束", "绩效生成成功", 5, allot.ID, "ReceiveMessage", true);
notificationsService.SendGenerateMessage(userId, allot, uuid, "绩效生成成功", NoticeType.success);
}
catch (Exception ex)
{
logManageService.WriteMsg("绩效生成失败", ex.Message, 4, allot.ID, "ReceiveMessage");
notificationsService.SendGenerateMessage(userId, allot, uuid, "绩效生成失败", NoticeType.error);
logdbug.Add(allot.ID, "绩效生成失败", ex.ToString(), 4, 1);
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateFail, EnumHelper.GetDescription(AllotStates.GenerateFail));
//SendEmail(allot, mail, 2, time);
......
......@@ -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