Commit 413c1eae by ruyun.zhang@suvalue.com

Merge remote-tracking branch 'origin/develop' into develop

parents 6e965464 80a5d6f1
......@@ -297,7 +297,15 @@ public ApiResponse GenerateReport([CustomizeValidator(RuleSet = "Delete"), FromB
if (null == allot || !states.Contains(allot.States))
throw new PerformanceException("当前绩效暂未生成,无法统计报表数据。");
//_publishEndpoint.Publish(allot).Wait();
_backgroundTaskQueue.QueueBackgroundWorkItem(async token =>
{
using (var scope = _serviceScopeFactory.CreateScope())
{
var scopedServices = scope.ServiceProvider.GetRequiredService<AllotService>();
scopedServices.GenerateReport(allot);
await Task.Delay(TimeSpan.FromSeconds(5), token);
}
});
return new ApiResponse(ResponseType.OK, "统计报表数据任务开始");
}
......
......@@ -20,6 +20,7 @@ public class ModExtractController : Controller
private readonly AllotService _allotService;
private readonly CustomExtractService _extractService;
private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly IBackgroundTaskQueue _backgroundTaskQueue;
private readonly IHubNotificationQueue _notificationQueue;
public ModExtractController(
......@@ -27,12 +28,14 @@ public class ModExtractController : Controller
AllotService allotService,
CustomExtractService extractService,
IServiceScopeFactory serviceScopeFactory,
IBackgroundTaskQueue backgroundTaskQueue,
IHubNotificationQueue notificationQueue)
{
_claim = claim;
_allotService = allotService;
_extractService = extractService;
_serviceScopeFactory = serviceScopeFactory;
_backgroundTaskQueue = backgroundTaskQueue;
_notificationQueue = notificationQueue;
}
......@@ -43,27 +46,27 @@ public ApiResponse CustomExtract(int allotId)
if (!_extractService.CheckConfigScript(userId, allotId))
return new ApiResponse(ResponseType.Fail, "未配置自定义抽取,请联系绩效管理人员。");
//_backgroundTaskQueue.QueueBackgroundWorkItem(async token =>
//{
// using (var scope = _serviceScopeFactory.CreateScope())
// {
// var scopedServices = scope.ServiceProvider.GetRequiredService<CustomExtractService>();
// var scopedAllotService = scope.ServiceProvider.GetRequiredService<AllotService>();
// var scopedQueue = scope.ServiceProvider.GetRequiredService<IHubNotificationQueue>();
_backgroundTaskQueue.QueueBackgroundWorkItem(async token =>
{
using (var scope = _serviceScopeFactory.CreateScope())
{
var scopedServices = scope.ServiceProvider.GetRequiredService<CustomExtractService>();
var scopedAllotService = scope.ServiceProvider.GetRequiredService<AllotService>();
var scopedQueue = scope.ServiceProvider.GetRequiredService<IHubNotificationQueue>();
// if (scopedServices.ExtractData(userId, allotId, out string resultFilePath))
// {
// scopedAllotService.UpdateAllotCustomExtractPath(allotId, resultFilePath);
// scopedQueue.Send(new Notification(allotId, "CustomDowoload", new CustomDownloadContent("自定义数据提取数据成功,是否立即下载", allotId)));
// }
// else
// {
// scopedQueue.Send(new Notification(allotId, "Notification", new TextContent("自定义数据提取数据失败", NotificationLevel.ERR)));
// }
if (scopedServices.ExtractData(userId, allotId, out string resultFilePath))
{
scopedAllotService.UpdateAllotCustomExtractPath(allotId, resultFilePath);
scopedQueue.Send(new Notification(allotId, "CustomDowoload", new CustomDownloadContent("自定义数据提取数据成功,是否立即下载", allotId)));
}
else
{
scopedQueue.Send(new Notification(allotId, "Notification", new TextContent("自定义数据提取数据失败", NotificationLevel.ERR)));
}
// await Task.Delay(TimeSpan.FromSeconds(5), token);
// }
//});
await Task.Delay(TimeSpan.FromSeconds(5), token);
}
});
_notificationQueue.Send(new Notification(allotId, "Notification", new TextContent("自定义数据提取任务开始执行")));
......
......@@ -76,6 +76,7 @@ public int DeleteAllotData(int allotId)
"im_employee_logistics",
"im_header",
"im_specialunit",
"his_data",
"log_check",
"per_employee",
"per_sheet",
......
......@@ -123,10 +123,7 @@ public void ClearResultData(int allotid)
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string update = "update ex_result set isdelete = 1 where allotid = @allotid ";
connection.Execute(update, new { allotid }, commandTimeout: 60 * 60);
string clear = "delete from ex_result where allotid = @allotid and isdelete = 1 and createtime < (select min(createtime) from (select distinct createtime from ex_result where allotid = @allotid and isdelete = 1 order by createtime desc limit 4) t);";
string clear = "delete from ex_result where allotid = @allotid;";
connection.Execute(clear, new { allotid }, commandTimeout: 60 * 60);
}
catch (Exception)
......
......@@ -487,7 +487,14 @@ public void Generate(per_allot allot)
/// <param name="allot"></param>
public void GenerateReport(per_allot allot)
{
reportService.ExecProc("call proc_report_performance(@hospitalid, @year, @month);", new { allot.HospitalId, allot.Year, allot.Month });
try
{
reportService.ExecProc("call proc_report_performance(@hospitalid, @year, @month);", new { allot.HospitalId, allot.Year, allot.Month });
}
catch (Exception ex)
{
_logger.LogError($"{allot.Year}{allot.Month}月绩效报表生成失败。 allotid: {allot.ID}。" + ex.Message);
}
}
/// <summary>
......
......@@ -232,7 +232,8 @@ private void HisData(per_allot allot, sys_hospitalconfig config, his_script scri
var data = queryService.QueryData<HisData>(config, script.ExecScript, allot, isSingle);
if (data == null || !data.Any()) return;
var hisdata = hisdataRepository.GetEntities(t => t.AllotId == allot.ID && t.SourceType == script.SourceType && t.Category == script.Category);
var hisdata = hisdataRepository.GetEntities(t => t.HospitalId == allot.HospitalId && t.Year == allot.Year && t.Month == allot.Month
&& t.SourceType == script.SourceType && t.Category == script.Category);
if (hisdata != null && hisdata.Any())
{
hisdataRepository.RemoveRange(hisdata.ToArray());
......
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