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,
IOptions<Application> options,
ComputeDirector computeDirector,
PerforRescomputeRepository perforRescomputeRepository,
PerforImemployeeRepository perforImEmployeeRepository,
PerforPeragainallotRepository againallotRepository,
PerforLogcheckRepository perforLogcheckRepository,
PerforHospitalRepository perforHospitalRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
PerforHospitalconfigRepository perforHospitalconfigRepository,
//IHubContext<AllotLogHub> hubContext
RoleService roleService,
UserService userService,
LogManageService logManageService,
ReportService reportService,
PerforCofdirectorRepository perforCofdirectorRepository,
QueryDataService queryDataService)
public AllotService(
IHostingEnvironment evn,
ILogger<AllotService> logger,
IOptions<Application> options,
ComputeDirector computeDirector,
PerforPeragainallotRepository againallotRepository,
PerforPerallotRepository allotRepository,
PerforImemployeeRepository perforImEmployeeRepository,
PerforRescomputeRepository perforRescomputeRepository,
PerforLogdbugRepository logdbug,
PerforresreservedRepository perforresreservedRepository,
PerforCofdirectorRepository perforCofdirectorRepository,
PerforHospitalRepository perforHospitalRepository,
PerforHospitalconfigRepository perforHospitalconfigRepository,
PerforLogcheckRepository perforLogcheckRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
BaiscNormService baiscNormService,
CheckDataService checkDataService,
ConfigService configService,
IEmailService emailService,
ImportDataService importDataService,
//LogManageService logManageService,
NotificationsService notificationsService,
ProcessComputService processComputService,
QueryDataService queryDataService,
ReportService reportService,
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)
{
if (helper.Exists(userId))
helper.Remove(userId);
string key = Context.User.Claims.FirstOrDefault(t => t.Type == "id")?.Value;
if (!string.IsNullOrEmpty(key))
{
if (cache.TryGetValue(key, out _))
{
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