计划任务修改临时提交1
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
ece98887da
commit
26652160df
|
@ -63,14 +63,6 @@ builder.Configuration.AddJsonFile(ConfigMapFileProvider.FromRelativePath(""), "a
|
||||||
builder.Host.UseSerilog();
|
builder.Host.UseSerilog();
|
||||||
|
|
||||||
|
|
||||||
#region Autofac 废弃
|
|
||||||
//builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
|
|
||||||
// .ConfigureContainer<ContainerBuilder>(containerBuilder =>
|
|
||||||
// {
|
|
||||||
// containerBuilder.RegisterModule<AutofacModuleSetup>();
|
|
||||||
// }).UseWindowsService();
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
using Hangfire;
|
using Hangfire;
|
||||||
using Hangfire.Storage;
|
using Hangfire.Storage;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
|
using IRaCIS.Core.Domain.Models;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
using MassTransit;
|
||||||
|
using MassTransit.Scheduling;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.BackGroundJob
|
namespace IRaCIS.Core.Application.Service.BackGroundJob
|
||||||
|
@ -14,7 +17,8 @@ namespace IRaCIS.Core.Application.Service.BackGroundJob
|
||||||
}
|
}
|
||||||
public class IRaCISCHangfireJob(ILogger<IRaCISCHangfireJob> _logger,
|
public class IRaCISCHangfireJob(ILogger<IRaCISCHangfireJob> _logger,
|
||||||
IRepository<Internationalization> _internationalizationRepository,
|
IRepository<Internationalization> _internationalizationRepository,
|
||||||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository
|
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
|
||||||
|
IMessageScheduler _IMessageScheduler
|
||||||
) : IIRaCISHangfireJob
|
) : IIRaCISHangfireJob
|
||||||
{
|
{
|
||||||
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
|
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
|
||||||
|
@ -49,15 +53,6 @@ namespace IRaCIS.Core.Application.Service.BackGroundJob
|
||||||
|
|
||||||
public async Task InitSysAndTrialCronJobAsync()
|
public async Task InitSysAndTrialCronJobAsync()
|
||||||
{
|
{
|
||||||
//var deleteJobIdList = await _trialEmailNoticeConfigRepository.Where(t => t.Trial.TrialStatusStr != StaticData.TrialState.TrialOngoing && t.EmailCron != string.Empty && t.IsAutoSend)
|
|
||||||
// .Select(t => t.TrialId + "_" + t.Id)
|
|
||||||
// .ToListAsync();
|
|
||||||
|
|
||||||
//foreach (var jobId in deleteJobIdList)
|
|
||||||
//{
|
|
||||||
// HangfireJobHelper.RemoveCronJob(jobId);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
var taskInfoList = await _trialEmailNoticeConfigRepository.Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing && t.EmailCron != string.Empty && t.IsAutoSend)
|
var taskInfoList = await _trialEmailNoticeConfigRepository.Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing && t.EmailCron != string.Empty && t.IsAutoSend)
|
||||||
.Select(t => new { t.Id, t.Code, t.EmailCron, t.BusinessScenarioEnum, t.TrialId })
|
.Select(t => new { t.Id, t.Code, t.EmailCron, t.BusinessScenarioEnum, t.TrialId })
|
||||||
|
@ -68,24 +63,29 @@ namespace IRaCIS.Core.Application.Service.BackGroundJob
|
||||||
//利用主键作为任务Id
|
//利用主键作为任务Id
|
||||||
var jobId = $"{task.TrialId}_{task.Id}";
|
var jobId = $"{task.TrialId}_{task.Id}";
|
||||||
|
|
||||||
|
switch (task.BusinessScenarioEnum)
|
||||||
|
{
|
||||||
|
|
||||||
|
case EmailBusinessScenario.QCTask:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EmailBusinessScenario.CRCToQCQuestion:
|
||||||
|
|
||||||
|
break;
|
||||||
|
case EmailBusinessScenario.QCToCRCImageQuestion:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, task.TrialId, task.BusinessScenarioEnum, task.EmailCron);
|
HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, task.TrialId, task.BusinessScenarioEnum, task.EmailCron);
|
||||||
}
|
}
|
||||||
|
|
||||||
var addOrUpdateJobIdList = taskInfoList.Select(t => $"{t.TrialId}_{t.Id}").ToList();
|
|
||||||
|
|
||||||
var list = JobStorage.Current.GetConnection().GetRecurringJobs().ToList();
|
|
||||||
|
|
||||||
//项目定时任务都在default 队列
|
|
||||||
//var dbJobIdList = JobStorage.Current.GetConnection().GetRecurringJobs().Where(t => t.Queue == "default").Select(t => t.Id).ToList();
|
|
||||||
|
|
||||||
//var deleteList= dbJobIdList.Except(addOrUpdateJobIdList).ToList();
|
|
||||||
|
|
||||||
// foreach (var jobId in deleteList)
|
|
||||||
// {
|
|
||||||
// HangfireJobHelper.RemoveCronJob(jobId);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,10 +64,10 @@ namespace IRaCIS.Core.Application.Helper
|
||||||
case EmailBusinessScenario.QCTask:
|
case EmailBusinessScenario.QCTask:
|
||||||
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialImageQCTaskEmailAsync(trialId), emailCron);
|
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialImageQCTaskEmailAsync(trialId), emailCron);
|
||||||
break;
|
break;
|
||||||
case EmailBusinessScenario.QCQuestion:
|
case EmailBusinessScenario.CRCToQCQuestion:
|
||||||
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialQCQuestionEmailAsync(trialId), emailCron);
|
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialQCQuestionEmailAsync(trialId), emailCron);
|
||||||
break;
|
break;
|
||||||
case EmailBusinessScenario.ImageQuestion:
|
case EmailBusinessScenario.QCToCRCImageQuestion:
|
||||||
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialImageQuestionAsync(trialId), emailCron);
|
HangfireJobHelper.AddOrUpdateCronJob<IEmailSendService>(jobId, t => t.SendTrialImageQuestionAsync(trialId), emailCron);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -12897,42 +12897,6 @@
|
||||||
构造函数注入
|
构造函数注入
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.AddSubjectTriggerConsumer">
|
|
||||||
<summary>
|
|
||||||
添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致
|
|
||||||
因为消费者这里的数据库上下文 和消息发送者上下文不是同一个,相当于两个独立的事务
|
|
||||||
</summary>
|
|
||||||
<param name="_subjectVisitRepository"></param>
|
|
||||||
<param name="_visitStageRepository"></param>
|
|
||||||
<param name="_trialRepository"></param>
|
|
||||||
<param name="_mapper"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.AddSubjectTriggerConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitStage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},AutoMapper.IMapper)">
|
|
||||||
<summary>
|
|
||||||
添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致
|
|
||||||
因为消费者这里的数据库上下文 和消息发送者上下文不是同一个,相当于两个独立的事务
|
|
||||||
</summary>
|
|
||||||
<param name="_subjectVisitRepository"></param>
|
|
||||||
<param name="_visitStageRepository"></param>
|
|
||||||
<param name="_trialRepository"></param>
|
|
||||||
<param name="_mapper"></param>
|
|
||||||
</member>
|
|
||||||
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.MasstransitTestConsumer">
|
|
||||||
<summary>
|
|
||||||
meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
|
|
||||||
publish 请求流不会先到消费者,发布后,直接执行后续代码
|
|
||||||
|
|
||||||
</summary>
|
|
||||||
<param name="_userRepository"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.MasstransitTestConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.User})">
|
|
||||||
<summary>
|
|
||||||
meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
|
|
||||||
publish 请求流不会先到消费者,发布后,直接执行后续代码
|
|
||||||
|
|
||||||
</summary>
|
|
||||||
<param name="_userRepository"></param>
|
|
||||||
</member>
|
|
||||||
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.UrgentMedicalReviewAddedEventConsumer">
|
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.UrgentMedicalReviewAddedEventConsumer">
|
||||||
<summary>
|
<summary>
|
||||||
加急的医学反馈任务 通知MIM
|
加急的医学反馈任务 通知MIM
|
||||||
|
@ -13021,11 +12985,42 @@
|
||||||
通知PM 进行一致性核查
|
通知PM 进行一致性核查
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.MasstransitTestConsumer">
|
||||||
|
<summary>
|
||||||
|
meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
|
||||||
|
publish 请求流不会先到消费者,发布后,直接执行后续代码
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
<param name="_userRepository"></param>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.MasstransitTestConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.User})">
|
||||||
|
<summary>
|
||||||
|
meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
|
||||||
|
publish 请求流不会先到消费者,发布后,直接执行后续代码
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
<param name="_userRepository"></param>
|
||||||
|
</member>
|
||||||
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.MediatorHttpContextScopeFilterExtensions">
|
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.MediatorHttpContextScopeFilterExtensions">
|
||||||
<summary>
|
<summary>
|
||||||
参考链接:https://github.com/MassTransit/MassTransit/discussions/2498
|
参考链接:https://github.com/MassTransit/MassTransit/discussions/2498
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.QCImageQuestionSchedule">
|
||||||
|
<summary>
|
||||||
|
QC 影像质疑待处理
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.CRCImageQuestionSchedule">
|
||||||
|
<summary>
|
||||||
|
CRC 影像质疑
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.ImageQCSchedule">
|
||||||
|
<summary>
|
||||||
|
影像质控
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:IRaCIS.Core.Application.ViewModel.TaskAllocationRuleView">
|
<member name="T:IRaCIS.Core.Application.ViewModel.TaskAllocationRuleView">
|
||||||
<summary> TaskAllocationRuleView 列表视图模型 </summary>
|
<summary> TaskAllocationRuleView 列表视图模型 </summary>
|
||||||
</member>
|
</member>
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
using AutoMapper;
|
|
||||||
using IRaCIS.Core.Domain;
|
|
||||||
using MassTransit;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.MassTransit.Consumer;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致
|
|
||||||
/// 因为消费者这里的数据库上下文 和消息发送者上下文不是同一个,相当于两个独立的事务
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="_subjectVisitRepository"></param>
|
|
||||||
/// <param name="_visitStageRepository"></param>
|
|
||||||
/// <param name="_trialRepository"></param>
|
|
||||||
/// <param name="_mapper"></param>
|
|
||||||
public class AddSubjectTriggerConsumer(IRepository<SubjectVisit> _subjectVisitRepository,
|
|
||||||
|
|
||||||
IRepository<VisitStage> _visitStageRepository,
|
|
||||||
IRepository<Trial> _trialRepository,
|
|
||||||
IMapper _mapper) : IConsumer<AddSubjectTriggerCommand>
|
|
||||||
{
|
|
||||||
public async Task Consume(ConsumeContext<AddSubjectTriggerCommand> context)
|
|
||||||
{
|
|
||||||
var addSubjectEvent = context.Message;
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
Console.WriteLine(_visitStageRepository._dbContext.GetHashCode());
|
|
||||||
|
|
||||||
Console.WriteLine("两个 DbContext 不是同一个实例");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//添加受试者的时候,获取访视计划列表,添加到受试者访视表。
|
|
||||||
var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == addSubjectEvent.TrialId && t.IsConfirmed).ToListAsync();
|
|
||||||
|
|
||||||
var svList = _mapper.Map<List<SubjectVisit>>(visitPlanList);
|
|
||||||
|
|
||||||
var IsEnrollementQualificationConfirm = await _trialRepository.Where(t => t.Id == addSubjectEvent.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
svList.ForEach(t =>
|
|
||||||
{
|
|
||||||
t.SubjectId = addSubjectEvent.SubjectId;
|
|
||||||
t.TrialId = addSubjectEvent.TrialId;
|
|
||||||
t.TrialSiteId = addSubjectEvent.TrialSiteId;
|
|
||||||
t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false;
|
|
||||||
t.Id = NewId.NextGuid();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
await _subjectVisitRepository.AddRangeAsync(svList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class AddSubjectTriggerConsumer2(IRepository<SubjectVisit> _subjectVisitRepository,
|
|
||||||
|
|
||||||
IRepository<VisitStage> _visitStageRepository,
|
|
||||||
IRepository<Trial> _trialRepository,
|
|
||||||
IMapper _mapper) : IConsumer<AddSubjectTriggerCommand2>
|
|
||||||
{
|
|
||||||
public async Task Consume(ConsumeContext<AddSubjectTriggerCommand2> context)
|
|
||||||
{
|
|
||||||
var addSubjectEvent = context.Message;
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
Console.WriteLine(_visitStageRepository._dbContext.GetHashCode());
|
|
||||||
|
|
||||||
Console.WriteLine("两个 DbContext 不是同一个实例");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//添加受试者的时候,获取访视计划列表,添加到受试者访视表。
|
|
||||||
var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == addSubjectEvent.TrialId && t.IsConfirmed).ToListAsync();
|
|
||||||
|
|
||||||
var svList = _mapper.Map<List<SubjectVisit>>(visitPlanList);
|
|
||||||
|
|
||||||
var IsEnrollementQualificationConfirm = await _trialRepository.Where(t => t.Id == addSubjectEvent.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
svList.ForEach(t =>
|
|
||||||
{
|
|
||||||
t.SubjectId = addSubjectEvent.SubjectId;
|
|
||||||
t.TrialId = addSubjectEvent.TrialId;
|
|
||||||
t.TrialSiteId = addSubjectEvent.TrialSiteId;
|
|
||||||
t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false;
|
|
||||||
t.Id = NewId.NextGuid();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
await _subjectVisitRepository.AddRangeAsync(svList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ public class TestMasstransitService : BaseService
|
||||||
{
|
{
|
||||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
|
|
||||||
Console.WriteLine(_testLengthRepository._dbContext.GetHashCode());
|
Console.WriteLine(_testLengthRepository._dbContext.GetHashCode());
|
||||||
|
|
||||||
//IScopedMediator 上下文一致, IMediator上下文不一致
|
//IScopedMediator 上下文一致, IMediator上下文不一致
|
|
@ -0,0 +1,56 @@
|
||||||
|
using MassTransit;
|
||||||
|
using MassTransit.Scheduling;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Application.MassTransit.Consumer;
|
||||||
|
public abstract class IRCRecurringSchedule :
|
||||||
|
RecurringSchedule
|
||||||
|
{
|
||||||
|
protected IRCRecurringSchedule()
|
||||||
|
{
|
||||||
|
ScheduleGroup = GetType().Name;
|
||||||
|
|
||||||
|
TimeZoneId = TimeZoneInfo.Local.Id;
|
||||||
|
StartTime = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MissedEventPolicy MisfirePolicy { get; protected set; }
|
||||||
|
public string TimeZoneId { get; protected set; }
|
||||||
|
public DateTimeOffset StartTime { get; protected set; }
|
||||||
|
public DateTimeOffset? EndTime { get; protected set; }
|
||||||
|
public string ScheduleId { get; private set; }
|
||||||
|
public string ScheduleGroup { get; private set; }
|
||||||
|
public string CronExpression { get; protected set; }
|
||||||
|
public string Description { get; protected set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// QC 影像质疑待处理
|
||||||
|
/// </summary>
|
||||||
|
public class QCImageQuestionSchedule : IRCRecurringSchedule
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CRC 影像质疑
|
||||||
|
/// </summary>
|
||||||
|
public class CRCImageQuestionSchedule : IRCRecurringSchedule
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 影像质控
|
||||||
|
/// </summary>
|
||||||
|
public class ImageQCSchedule : IRCRecurringSchedule
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -203,7 +203,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
return (topicStr, htmlBodyStr, false, userId);
|
return (topicStr, htmlBodyStr, false, userId);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(trialId, EmailBusinessScenario.QCQuestion, topicAndHtmlFunc);
|
await SendTrialEmailAsync(trialId, EmailBusinessScenario.CRCToQCQuestion, topicAndHtmlFunc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
return (topicStr, htmlBodyStr, isEn_us, userId);
|
return (topicStr, htmlBodyStr, isEn_us, userId);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(trialId, EmailBusinessScenario.ImageQuestion, topicAndHtmlFunc);
|
await SendTrialEmailAsync(trialId, EmailBusinessScenario.QCToCRCImageQuestion, topicAndHtmlFunc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -58,6 +59,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public IResponseOutput GetTest()
|
public IResponseOutput GetTest()
|
||||||
{
|
{
|
||||||
|
|
||||||
//throw new BusinessValidationFailedException("手动抛出的异常");
|
//throw new BusinessValidationFailedException("手动抛出的异常");
|
||||||
|
|
||||||
return ResponseOutput.Ok(_userInfo.IP);
|
return ResponseOutput.Ok(_userInfo.IP);
|
||||||
|
|
|
@ -46,11 +46,13 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
|
|
||||||
//Reviewer=4,
|
//Reviewer=4,
|
||||||
|
|
||||||
|
//QC影像质控任务
|
||||||
QCTask = 5,
|
QCTask = 5,
|
||||||
|
|
||||||
QCQuestion = 6,
|
|
||||||
|
|
||||||
ImageQuestion = 7,
|
CRCToQCQuestion = 6,
|
||||||
|
|
||||||
|
QCToCRCImageQuestion = 7,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue