Commit 4433472b by lcx

修改返回signalr的方法

parent 7157d4fc
...@@ -24,35 +24,34 @@ namespace Performance.Api.Controllers ...@@ -24,35 +24,34 @@ namespace Performance.Api.Controllers
[Route("api/[controller]")] [Route("api/[controller]")]
public class AllotController : Controller public class AllotController : Controller
{ {
private AllotService _allotService; private readonly IHostingEnvironment _evn;
private ResultComputeService _resultComputeService; private readonly ClaimService _claim;
private ConfigService _configService; private readonly IBackgroundTaskQueue _backgroundTaskQueue;
private IHostingEnvironment _evn; private readonly IServiceScopeFactory _serviceScopeFactory;
private ILogger<AllotController> _logger; private readonly AllotService _allotService;
private ClaimService _claim; private readonly ConfigService _configService;
private LogManageService _logManageService; private readonly NotificationsService _notificationsService;
private IBackgroundTaskQueue _backgroundTaskQueue; private readonly ResultComputeService _resultComputeService;
private IServiceScopeFactory _serviceScopeFactory;
public AllotController(
public AllotController(AllotService allotService,
ResultComputeService resultComputeService,
ConfigService configService,
ILogger<AllotController> logger,
IHostingEnvironment evn, IHostingEnvironment evn,
ClaimService claim,
IBackgroundTaskQueue backgroundTaskQueue, IBackgroundTaskQueue backgroundTaskQueue,
IServiceScopeFactory serviceScopeFactory, IServiceScopeFactory serviceScopeFactory,
ClaimService claim, AllotService allotService,
LogManageService logManageService) ConfigService configService,
NotificationsService notificationsService,
ResultComputeService resultComputeService
)
{ {
_allotService = allotService;
_resultComputeService = resultComputeService;
_logger = logger;
_evn = evn; _evn = evn;
_claim = claim; _claim = claim;
_logManageService = logManageService;
_configService = configService;
_backgroundTaskQueue = backgroundTaskQueue; _backgroundTaskQueue = backgroundTaskQueue;
_serviceScopeFactory = serviceScopeFactory; _serviceScopeFactory = serviceScopeFactory;
_allotService = allotService;
_configService = configService;
_notificationsService = notificationsService;
_resultComputeService = resultComputeService;
} }
/// <summary> /// <summary>
...@@ -177,7 +176,7 @@ public ApiResponse Import([FromForm] IFormCollection form) ...@@ -177,7 +176,7 @@ public ApiResponse Import([FromForm] IFormCollection form)
/// <summary> /// <summary>
/// 上传文件 /// 上传文件
/// </summary> /// </summary>
/// <param name="form"></param> /// <param name="allotId"></param>
/// <returns></returns> /// <returns></returns>
[Route("ImportExtraction/{allotId}")] [Route("ImportExtraction/{allotId}")]
[HttpPost] [HttpPost]
...@@ -236,11 +235,13 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody] A ...@@ -236,11 +235,13 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody] A
if (allot.States == (int)AllotStates.Wait) if (allot.States == (int)AllotStates.Wait)
return new ApiResponse(ResponseType.OK, "当前绩效正在等待生成"); 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); _allotService.UpdateAllotStates(allot.ID, (int)AllotStates.Wait, EnumHelper.GetDescription(AllotStates.Wait), allot.Generate);
if (_evn.IsEnvironment("Localhost")) if (_evn.IsEnvironment("Localhost"))
{ {
_allotService.Generate(allot, email); _allotService.Generate(allot, email, uuid, userId);
} }
else else
{ {
...@@ -251,13 +252,13 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody] A ...@@ -251,13 +252,13 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody] A
using (var scope = _serviceScopeFactory.CreateScope()) using (var scope = _serviceScopeFactory.CreateScope())
{ {
var scopedServices = scope.ServiceProvider.GetRequiredService<AllotService>(); var scopedServices = scope.ServiceProvider.GetRequiredService<AllotService>();
scopedServices.Generate(allot, email); scopedServices.Generate(allot, email, uuid, userId);
await Task.Delay(TimeSpan.FromSeconds(5), token); 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); //_allotService.Generate(allot, email);
////BackgroundJob.Enqueue(() => _allotService.Generate(allot, email)); ////BackgroundJob.Enqueue(() => _allotService.Generate(allot, email));
return new ApiResponse(ResponseType.OK); return new ApiResponse(ResponseType.OK);
......
...@@ -110,6 +110,33 @@ ...@@ -110,6 +110,33 @@
<param name="userId">用户id</param> <param name="userId">用户id</param>
<returns></returns> <returns></returns>
</member> </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"> <member name="T:Performance.Api.Controllers.AgainAllotController">
<summary> <summary>
科室二次分配 科室二次分配
...@@ -177,6 +204,13 @@ ...@@ -177,6 +204,13 @@
<param name="form"></param> <param name="form"></param>
<returns></returns> <returns></returns>
</member> </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)"> <member name="M:Performance.Api.Controllers.AllotController.Generate(Performance.DtoModels.AllotRequest)">
<summary> <summary>
绩效生成 绩效生成
......
...@@ -221,6 +221,71 @@ ...@@ -221,6 +221,71 @@
结果值 结果值
</summary> </summary>
</member> </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"> <member name="P:Performance.DtoModels.PerAgainData.RowNumber">
<summary> <summary>
行号 行号
...@@ -2273,6 +2338,11 @@ ...@@ -2273,6 +2338,11 @@
角色 角色
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.UserRequest.RoleArr">
<summary>
角色Arr
</summary>
</member>
<member name="P:Performance.DtoModels.UserRequest.HosIDArray"> <member name="P:Performance.DtoModels.UserRequest.HosIDArray">
<summary> <summary>
用户医院ID 用户医院ID
......
...@@ -151,6 +151,9 @@ ...@@ -151,6 +151,9 @@
<member name="P:Performance.EntityModels.PerformanceDbContext.log_dbug"> <member name="P:Performance.EntityModels.PerformanceDbContext.log_dbug">
<summary> </summary> <summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.PerformanceDbContext.log_signalr">
<summary> </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.mod_dic"> <member name="P:Performance.EntityModels.PerformanceDbContext.mod_dic">
<summary> 部分公共数据抽取SQL </summary> <summary> 部分公共数据抽取SQL </summary>
</member> </member>
...@@ -2961,6 +2964,61 @@ ...@@ -2961,6 +2964,61 @@
1、绩效生成日志 2、绩效提取日志 3、绩效提取进度 1、绩效生成日志 2、绩效提取日志 3、绩效提取进度
</summary> </summary>
</member> </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"> <member name="T:Performance.EntityModels.mod_dic">
<summary> <summary>
部分公共数据抽取SQL 部分公共数据抽取SQL
...@@ -5731,6 +5789,11 @@ ...@@ -5731,6 +5789,11 @@
删除状态 1可用 2删除 删除状态 1可用 2删除
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.sys_user.ParentID">
<summary>
父级ID
</summary>
</member>
<member name="T:Performance.EntityModels.sys_user_hospital"> <member name="T:Performance.EntityModels.sys_user_hospital">
<summary> <summary>
......
...@@ -236,6 +236,9 @@ public AutoMapperConfigs() ...@@ -236,6 +236,9 @@ public AutoMapperConfigs()
CreateMap<HistoryData, report_original_surgery>() CreateMap<HistoryData, report_original_surgery>()
.ForMember(dest => dest.PersonTime, opt => opt.MapFrom(src => src.ResultData)) .ForMember(dest => dest.PersonTime, opt => opt.MapFrom(src => src.ResultData))
.ReverseMap(); .ReverseMap();
CreateMap<log_signalr, MessageInfo>()
.ReverseMap();
} }
public void xx() public void xx()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
using System.ComponentModel; using System.ComponentModel;
using System.Text; using System.Text;
namespace Performance.Services namespace Performance.DtoModels
{ {
public enum Classify public enum Classify
{ {
......
...@@ -3,19 +3,27 @@ ...@@ -3,19 +3,27 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
namespace Performance.Services namespace Performance.DtoModels
{ {
public class MessageInfo public class MessageInfo
{ {
public MessageInfo(NoticeType typeValue) public MessageInfo(NoticeType typeValue, string uuid = null, Classify classify = Classify.Notification)
{ {
TypeValue = typeValue; TypeValue = typeValue;
Uuid = uuid;
Classify = classify;
} }
public string Uuid { get; set; }
public int HospitalId { get; set; }
public int AllotId { get; set; }
/// <summary> /// <summary>
/// 分类 /// 分类
/// </summary> /// </summary>
public Classify Classify { get; set; } = Classify.Notification; public Classify Classify { get; set; }
/// <summary> /// <summary>
/// 类型 /// 类型
......
...@@ -164,6 +164,9 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options) ...@@ -164,6 +164,9 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
/// <summary> </summary> /// <summary> </summary>
public virtual DbSet<log_dbug> log_dbug { get; set; } public virtual DbSet<log_dbug> log_dbug { get; set; }
/// <summary> </summary>
public virtual DbSet<log_signalr> log_signalr { get; set; }
/// <summary> 部分公共数据抽取SQL </summary> /// <summary> 部分公共数据抽取SQL </summary>
public virtual DbSet<mod_dic> mod_dic { get; set; } 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 ...@@ -20,93 +20,95 @@ namespace Performance.Services
{ {
public class AllotService : IAutoInjection public class AllotService : IAutoInjection
{ {
private BaiscNormService baiscNormService; private readonly IHostingEnvironment _evn;
private CheckDataService checkDataService; private readonly ILogger<AllotService> _logger;
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 IOptions<Application> options; private readonly IOptions<Application> options;
private readonly ComputeDirector _computeDirector; private readonly ComputeDirector _computeDirector;
private readonly PerforRescomputeRepository _perforRescomputeRepository; private readonly PerforPeragainallotRepository _againallotRepository;
private readonly PerforPerallotRepository _allotRepository;
private readonly PerforImemployeeRepository _perforImEmployeeRepository; private readonly PerforImemployeeRepository _perforImEmployeeRepository;
private PerforPeragainallotRepository _againallotRepository; private readonly PerforRescomputeRepository _perforRescomputeRepository;
private PerforLogcheckRepository perforLogcheckRepository; private readonly PerforLogdbugRepository logdbug;
private readonly PerforresreservedRepository perforresreservedRepository;
private readonly PerforCofdirectorRepository perforCofdirectorRepository;
private readonly PerforHospitalRepository perforHospitalRepository; private readonly PerforHospitalRepository perforHospitalRepository;
private readonly PerforHospitalconfigRepository perforHospitalconfigRepository;
private readonly PerforLogcheckRepository perforLogcheckRepository;
private readonly PerforResbaiscnormRepository perforResbaiscnormRepository; 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 RoleService roleService;
private readonly UserService userService; 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, public AllotService(
BaiscNormService baiscNormService, IHostingEnvironment evn,
CheckDataService checkDataService, ILogger<AllotService> logger,
ImportDataService importDataService, IOptions<Application> options,
ProcessComputService processComputService, ComputeDirector computeDirector,
ResultComputeService resultComputeService, PerforPeragainallotRepository againallotRepository,
ConfigService configService, PerforPerallotRepository allotRepository,
PerforLogdbugRepository logdbug, PerforImemployeeRepository perforImEmployeeRepository,
PerforresreservedRepository perforresreservedRepository, PerforRescomputeRepository perforRescomputeRepository,
IHostingEnvironment evn, ILogger<AllotService> logger, PerforLogdbugRepository logdbug,
IEmailService emailService, PerforresreservedRepository perforresreservedRepository,
IOptions<Application> options, PerforCofdirectorRepository perforCofdirectorRepository,
ComputeDirector computeDirector, PerforHospitalRepository perforHospitalRepository,
PerforRescomputeRepository perforRescomputeRepository, PerforHospitalconfigRepository perforHospitalconfigRepository,
PerforImemployeeRepository perforImEmployeeRepository, PerforLogcheckRepository perforLogcheckRepository,
PerforPeragainallotRepository againallotRepository, PerforResbaiscnormRepository perforResbaiscnormRepository,
PerforLogcheckRepository perforLogcheckRepository, BaiscNormService baiscNormService,
PerforHospitalRepository perforHospitalRepository, CheckDataService checkDataService,
PerforResbaiscnormRepository perforResbaiscnormRepository, ConfigService configService,
PerforHospitalconfigRepository perforHospitalconfigRepository, IEmailService emailService,
//IHubContext<AllotLogHub> hubContext ImportDataService importDataService,
RoleService roleService, //LogManageService logManageService,
UserService userService, NotificationsService notificationsService,
LogManageService logManageService, ProcessComputService processComputService,
ReportService reportService, QueryDataService queryDataService,
PerforCofdirectorRepository perforCofdirectorRepository, ReportService reportService,
QueryDataService queryDataService) ResultComputeService resultComputeService,
RoleService roleService,
UserService userService
)
{ {
_allotRepository = allotRepository; this._evn = evn;
_againallotRepository = againallotRepository; this._logger = logger;
_logger = logger;
_evn = evn;
this.baiscNormService = baiscNormService;
this.checkDataService = checkDataService;
this.importDataService = importDataService;
this.processComputService = processComputService;
this.resultComputeService = resultComputeService;
this.emailService = emailService;
this.options = options; this.options = options;
_computeDirector = computeDirector; this._computeDirector = computeDirector;
_perforRescomputeRepository = perforRescomputeRepository; this._againallotRepository = againallotRepository;
_perforImEmployeeRepository = perforImEmployeeRepository; this._allotRepository = allotRepository;
this.configService = configService; this._perforImEmployeeRepository = perforImEmployeeRepository;
this._perforRescomputeRepository = perforRescomputeRepository;
this.logdbug = logdbug; this.logdbug = logdbug;
this.perforresreservedRepository = perforresreservedRepository; this.perforresreservedRepository = perforresreservedRepository;
this.perforLogcheckRepository = perforLogcheckRepository; this.perforCofdirectorRepository = perforCofdirectorRepository;
this.perforHospitalRepository = perforHospitalRepository; this.perforHospitalRepository = perforHospitalRepository;
this.perforResbaiscnormRepository = perforResbaiscnormRepository;
this.perforHospitalconfigRepository = perforHospitalconfigRepository; 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.roleService = roleService;
this.userService = userService; this.userService = userService;
//this.hubContext = hubContext;
this.logManageService = logManageService;
this.reportService = reportService;
this.perforCofdirectorRepository = perforCofdirectorRepository;
this.queryDataService = queryDataService;
} }
#region 基础功能 #region 基础功能
...@@ -303,25 +305,27 @@ public per_allot UpdateAllotShowFormula(int allotId) ...@@ -303,25 +305,27 @@ public per_allot UpdateAllotShowFormula(int allotId)
/// </summary> /// </summary>
/// <param name="allot"></param> /// <param name="allot"></param>
/// <param name="user"></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; DateTime time = DateTime.Now;
try 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(); var excel = new PerExcel();
int generate = allot.Generate; int generate = allot.Generate;
if (new int[] { (int)AllotGenerate.OriginalDataEdited, (int)AllotGenerate.PersonnelOffice }.Contains(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; generate = (int)AllotGenerate.Success;
configService.ClearResData(allot.ID); configService.ClearResData(allot.ID);
excel = queryDataService.QueryDataAndHeader(allot); excel = queryDataService.QueryDataAndHeader(allot);
} }
else else
{ {
logManageService.WriteMsg("绩效开始执行", $"数据来源:用户上传的Excel。", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "绩效开始生成,数据来源:用户上传的Excel。");
configService.Clear(allot.ID); configService.Clear(allot.ID);
// 关闭筛选功能 // 关闭筛选功能
...@@ -348,7 +352,7 @@ public void Generate(per_allot allot, string mail) ...@@ -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); var (list, mergeSheets) = processComputService.MergeCompute(excel, allot.ID);
processComputService.Save(list, allot.ID); processComputService.Save(list, allot.ID);
...@@ -404,11 +408,11 @@ public void Generate(per_allot allot, string mail) ...@@ -404,11 +408,11 @@ public void Generate(per_allot allot, string mail)
#endregion 注释 #endregion 注释
//重新计算科室业绩(含所有提供保底金额) //重新计算科室业绩(含所有提供保底金额)
logManageService.WriteMsg("正在生成绩效", "计算科室业绩分", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, $"计算科室业绩分值");
var sheetLast = processComputService.Compute(excel, mergeSheets, allot); var sheetLast = processComputService.Compute(excel, mergeSheets, allot);
//保存计算过程数据 //保存计算过程数据
logManageService.WriteMsg("正在生成绩效", "保存科室业绩结果及计算过程中产生的数据", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "保存科室业绩结果及计算过程中产生的数据");
processComputService.Save(sheetLast, allot.ID); processComputService.Save(sheetLast, allot.ID);
////业务中层行政中高层医院奖罚 ////业务中层行政中高层医院奖罚
...@@ -416,23 +420,23 @@ public void Generate(per_allot allot, string mail) ...@@ -416,23 +420,23 @@ public void Generate(per_allot allot, string mail)
//var employeeExtra = processComputService.GetEmployeeExtra(excel); //var employeeExtra = processComputService.GetEmployeeExtra(excel);
// 计算最总数据 // 计算最总数据
logManageService.WriteMsg("正在生成绩效", "计算最终绩效数据", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "计算并保存最终绩效数据");
var baiscnormList = resultComputeService.Compute(allot, sheetLast); var baiscnormList = resultComputeService.Compute(allot, sheetLast);
// 计算行政科室绩效 // 计算行政科室绩效
processComputService.ComputeOffice(allot, excel); processComputService.ComputeOffice(allot, excel);
// 计算特殊科室 // 计算特殊科室
logManageService.WriteMsg("正在生成绩效", "计算最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "计算最终特殊科室绩效数据");
resultComputeService.SpecialUnitCompute(excel, allot, baiscnormList); 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()); perforResbaiscnormRepository.AddRange(baiscnormList.ToArray());
// 保存预留绩效 // 保存预留绩效
logManageService.WriteMsg("正在生成绩效", "保存预留绩效金额", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "保存预留绩效金额");
resultComputeService.SaveReserved(allot); resultComputeService.SaveReserved(allot);
// 科室下发 // 科室下发
...@@ -441,20 +445,20 @@ public void Generate(per_allot allot, string mail) ...@@ -441,20 +445,20 @@ public void Generate(per_allot allot, string mail)
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish), generate); UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish), generate);
perforCofdirectorRepository.SupplementaryData(allot.ID); perforCofdirectorRepository.SupplementaryData(allot.ID);
logManageService.WriteMsg("正在生成报表数据", "正在生成报表数据", 1, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "正在生成报表数据");
var res = reportService.ImportData(allot); var res = reportService.ImportData(allot);
var flag = reportService.UpdateData(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); //logManageService.WriteMsg("正在发送邮件", "正在发送邮件", 1, allot.ID, "ReceiveMessage", true);
//SendEmail(allot, mail, 1, time); //SendEmail(allot, mail, 1, time);
//logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功"); //logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功");
logManageService.WriteMsg("绩效生成结束", "绩效生成成功", 5, allot.ID, "ReceiveMessage", true); notificationsService.SendGenerateMessage(userId, allot, uuid, "绩效生成成功", NoticeType.success);
} }
catch (Exception ex) 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); logdbug.Add(allot.ID, "绩效生成失败", ex.ToString(), 4, 1);
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateFail, EnumHelper.GetDescription(AllotStates.GenerateFail)); UpdateAllotStates(allot.ID, (int)AllotStates.GenerateFail, EnumHelper.GetDescription(AllotStates.GenerateFail));
//SendEmail(allot, mail, 2, time); //SendEmail(allot, mail, 2, time);
......
...@@ -10,40 +10,48 @@ ...@@ -10,40 +10,48 @@
namespace Performance.Services namespace Performance.Services
{ {
[Authorize]
public class AllotLogHub : Hub public class AllotLogHub : Hub
{ {
private readonly IMemoryCache cache; private readonly IMemoryCache cache;
private readonly ILogger<AllotLogHub> logger; private readonly ILogger<AllotLogHub> logger;
private readonly NotificationsService service;
public AllotLogHub( public AllotLogHub(
IMemoryCache cache, IMemoryCache cache,
ILogger<AllotLogHub> logger, ILogger<AllotLogHub> logger
NotificationsService service
) )
{ {
this.cache = cache; this.cache = cache;
this.logger = logger; this.logger = logger;
this.service = service;
} }
private readonly MemoryCacheHelper helper = new MemoryCacheHelper(); public override Task OnConnectedAsync()
public void LoginService(string userId)
{ {
if (helper.Exists(userId)) string key = Context.User.Claims.FirstOrDefault(t => t.Type == "id")?.Value;
helper.Remove(userId); if (!string.IsNullOrEmpty(key))
{
var dateTime = DateTime.Now; if (cache.TryGetValue(key, out _))
var slidingtimespan = helper.ToUnixTimestampBySeconds(dateTime.AddMinutes(30)); {
var absolutetimespan = helper.ToUnixTimestampBySeconds(dateTime.AddHours(2)); cache.Remove(key);
helper.Set(userId, Context.ConnectionId, slidingtimespan, absolutetimespan); }
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)) string key = Context.User.Claims.FirstOrDefault(t => t.Type == "id")?.Value;
helper.Remove(userId); 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.AspNetCore.SignalR;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Infrastructure; using Performance.Infrastructure;
using Performance.Repository;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
...@@ -11,23 +15,40 @@ namespace Performance.Services ...@@ -11,23 +15,40 @@ namespace Performance.Services
public class NotificationsService : IAutoInjection public class NotificationsService : IAutoInjection
{ {
private readonly ILogger logger; private readonly ILogger logger;
private readonly IMemoryCache cache;
private readonly IHubContext<AllotLogHub> hubContext; private readonly IHubContext<AllotLogHub> hubContext;
private readonly PerforLogdsignalrRepository repository;
public NotificationsService( public NotificationsService(
ILogger<NotificationsService> logger, ILogger<NotificationsService> logger,
IHubContext<AllotLogHub> hubContext IMemoryCache cache,
IHubContext<AllotLogHub> hubContext,
PerforLogdsignalrRepository repository
) )
{ {
this.logger = logger; this.logger = logger;
this.cache = cache;
this.hubContext = hubContext; 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) public void SendMessage(int userId, MessageInfo data)
{ {
string key = userId.ToString(); 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); 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