Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
8bd9f9a772
|
@ -26,7 +26,6 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
|
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
|
||||||
|
@ -51,9 +50,6 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
[MemberNotNull(nameof(_userInfo))]
|
[MemberNotNull(nameof(_userInfo))]
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
[MemberNotNull(nameof(_repository))]
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
[MemberNotNull(nameof(_localizer))]
|
[MemberNotNull(nameof(_localizer))]
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
|
||||||
|
@ -75,8 +71,7 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
[MemberNotNull(nameof(_userInfo))]
|
[MemberNotNull(nameof(_userInfo))]
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
[MemberNotNull(nameof(_repository))]
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
[MemberNotNull(nameof(_localizer))]
|
[MemberNotNull(nameof(_localizer))]
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
@ -93,8 +88,6 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
|
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
|
||||||
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
|
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
|
||||||
|
|
|
@ -301,7 +301,7 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.Dataset, _trialId, _trialSiteId, storeRelativePath, Association.CallingAE, Association.CalledAE);
|
var scpStudyId = await dicomArchiveService.ArchiveDicomFileAsync(request.Dataset, _trialId, _trialSiteId, storeRelativePath, Association.CallingAE, Association.CalledAE,fileSize);
|
||||||
|
|
||||||
if (!_SCPStudyIdList.Contains(scpStudyId))
|
if (!_SCPStudyIdList.Contains(scpStudyId))
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,6 +12,7 @@ using IRaCIS.Core.SCP.Service;
|
||||||
using IRaCIS.Core.Infra.EFCore;
|
using IRaCIS.Core.Infra.EFCore;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using System.Runtime.Intrinsics.X86;
|
using System.Runtime.Intrinsics.X86;
|
||||||
|
using Serilog.Sinks.File;
|
||||||
|
|
||||||
namespace IRaCIS.Core.SCP.Service
|
namespace IRaCIS.Core.SCP.Service
|
||||||
{
|
{
|
||||||
|
@ -51,7 +52,7 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
/// <param name="dataset"></param>
|
/// <param name="dataset"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="NotImplementedException"></exception>
|
/// <exception cref="NotImplementedException"></exception>
|
||||||
public async Task<Guid> ArchiveDicomFileAsync(DicomDataset dataset, Guid trialId, Guid trialSiteId, string fileRelativePath, string callingAE, string calledAE)
|
public async Task<Guid> ArchiveDicomFileAsync(DicomDataset dataset, Guid trialId, Guid trialSiteId, string fileRelativePath, string callingAE, string calledAE,long fileSize)
|
||||||
{
|
{
|
||||||
string studyInstanceUid = dataset.GetString(DicomTag.StudyInstanceUID);
|
string studyInstanceUid = dataset.GetString(DicomTag.StudyInstanceUID);
|
||||||
string seriesInstanceUid = dataset.GetString(DicomTag.SeriesInstanceUID);
|
string seriesInstanceUid = dataset.GetString(DicomTag.SeriesInstanceUID);
|
||||||
|
@ -270,7 +271,10 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
WindowCenter = dataset.GetSingleValueOrDefault(DicomTag.WindowCenter, string.Empty),
|
WindowCenter = dataset.GetSingleValueOrDefault(DicomTag.WindowCenter, string.Empty),
|
||||||
WindowWidth = dataset.GetSingleValueOrDefault(DicomTag.WindowWidth, string.Empty),
|
WindowWidth = dataset.GetSingleValueOrDefault(DicomTag.WindowWidth, string.Empty),
|
||||||
|
|
||||||
Path = fileRelativePath
|
Path = fileRelativePath,
|
||||||
|
|
||||||
|
FileSize= fileSize,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
++findStudy.InstanceCount;
|
++findStudy.InstanceCount;
|
||||||
|
@ -300,7 +304,7 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await _instanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == instanceId, u => new SCPInstance() { Path = fileRelativePath });
|
await _instanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == instanceId, u => new SCPInstance() { Path = fileRelativePath,FileSize=fileSize });
|
||||||
}
|
}
|
||||||
|
|
||||||
//await _studyRepository.SaveChangesAsync();
|
//await _studyRepository.SaveChangesAsync();
|
||||||
|
|
|
@ -5,7 +5,7 @@ namespace IRaCIS.Core.SCP.Service
|
||||||
{
|
{
|
||||||
public interface IDicomArchiveService
|
public interface IDicomArchiveService
|
||||||
{
|
{
|
||||||
Task<Guid> ArchiveDicomFileAsync(DicomDataset dicomDataset,Guid trialId,Guid trialSiteId, string fileRelativePath,string callingAE,string calledAE);
|
Task<Guid> ArchiveDicomFileAsync(DicomDataset dicomDataset,Guid trialId,Guid trialSiteId, string fileRelativePath,string callingAE,string calledAE,long fileSize);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,32 +31,18 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"RemoteNew": "Server=us-prod-mssql-service,1433;Database=US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
|
||||||
"Hangfire": "Server=us-prod-mssql-service,1433;Database=US_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
|
"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
|
||||||
},
|
},
|
||||||
|
|
||||||
"BasicSystemConfig": {
|
|
||||||
|
|
||||||
"OpenUserComplexPassword": true,
|
|
||||||
|
|
||||||
"OpenSignDocumentBeforeWork": true,
|
|
||||||
|
|
||||||
"OpenTrialRelationDelete": true,
|
"DicomSCPServiceConfig": {
|
||||||
|
"CalledAEList": [
|
||||||
"OpenLoginLimit": true,
|
"STORESCP"
|
||||||
"LoginMaxFailCount": 5,
|
],
|
||||||
|
"ServerPort": 11112
|
||||||
"LoginFailLockMinutes": 30
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
"SystemEmailSendConfig": {
|
|
||||||
"Port": 465,
|
|
||||||
"Host": "smtp.qiye.aliyun.com",
|
|
||||||
"FromEmail": "study@extimaging.com",
|
|
||||||
"FromName": "研究单位阅片系统",
|
|
||||||
"AuthorizationCode": "zhanying123",
|
|
||||||
"SiteUrl": "https://study.extimaging.com/login"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ using DocumentFormat.OpenXml.Spreadsheet;
|
||||||
using AutoMapper.QueryableExtensions;
|
using AutoMapper.QueryableExtensions;
|
||||||
using NetTopologySuite.Algorithm;
|
using NetTopologySuite.Algorithm;
|
||||||
using ZiggyCreatures.Caching.Fusion;
|
using ZiggyCreatures.Caching.Fusion;
|
||||||
|
using AlibabaCloud.SDK.Sts20150401;
|
||||||
|
|
||||||
namespace IRaCIS.Api.Controllers
|
namespace IRaCIS.Api.Controllers
|
||||||
{
|
{
|
||||||
|
@ -255,9 +256,9 @@ namespace IRaCIS.Api.Controllers
|
||||||
// 验证阅片休息时间
|
// 验证阅片休息时间
|
||||||
await readingImageTaskService.ResetReadingRestTime(returnModel.Data.BasicInfo.Id);
|
await readingImageTaskService.ResetReadingRestTime(returnModel.Data.BasicInfo.Id);
|
||||||
|
|
||||||
await _fusionCache.SetAsync(CacheKeys.UserToken(userId) , returnModel.Data.JWTStr, TimeSpan.FromDays(7));
|
await _fusionCache.SetAsync(CacheKeys.UserToken(userId), returnModel.Data.JWTStr, TimeSpan.FromDays(7));
|
||||||
|
|
||||||
await _fusionCache.SetAsync(CacheKeys.UserAutoLoginOut(userId) , DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(_verifyConfig.CurrentValue.AutoLoginOutMinutes));
|
await _fusionCache.SetAsync(CacheKeys.UserAutoLoginOut(userId), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(_verifyConfig.CurrentValue.AutoLoginOutMinutes));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -354,6 +355,44 @@ namespace IRaCIS.Api.Controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
[HttpGet("user/getUploadTempToken")]
|
||||||
|
public IResponseOutput GetUploadTempToken([FromServices] IOptionsMonitor<AliyunOSSOptions> options)
|
||||||
|
{
|
||||||
|
var ossOptions = options.CurrentValue;
|
||||||
|
|
||||||
|
var client = new Client(new AlibabaCloud.OpenApiClient.Models.Config()
|
||||||
|
{
|
||||||
|
AccessKeyId = ossOptions.accessKeyId,
|
||||||
|
AccessKeySecret = ossOptions.accessKeySecret,
|
||||||
|
Endpoint = "sts.cn-hangzhou.aliyuncs.com"
|
||||||
|
});
|
||||||
|
|
||||||
|
var assumeRoleRequest = new AlibabaCloud.SDK.Sts20150401.Models.AssumeRoleRequest();
|
||||||
|
// 将<YOUR_ROLE_SESSION_NAME>设置为自定义的会话名称,例如oss-role-session。
|
||||||
|
assumeRoleRequest.RoleSessionName = $"session-name-{NewId.NextGuid()}";
|
||||||
|
// 将<YOUR_ROLE_ARN>替换为拥有上传文件到指定OSS Bucket权限的RAM角色的ARN。
|
||||||
|
assumeRoleRequest.RoleArn = ossOptions.roleArn;
|
||||||
|
assumeRoleRequest.DurationSeconds = 3600;
|
||||||
|
var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
|
||||||
|
var response = client.AssumeRoleWithOptions(assumeRoleRequest, runtime);
|
||||||
|
var credentials = response.Body.Credentials;
|
||||||
|
|
||||||
|
return ResponseOutput.Ok(new
|
||||||
|
{
|
||||||
|
AccessKeyId = credentials.AccessKeyId,
|
||||||
|
AccessKeySecret = credentials.AccessKeySecret,
|
||||||
|
Expiration = credentials.Expiration,
|
||||||
|
SecurityToken = credentials.SecurityToken,
|
||||||
|
|
||||||
|
|
||||||
|
Region = ossOptions.region,
|
||||||
|
BucketName = ossOptions.bucketName,
|
||||||
|
ViewEndpoint = ossOptions.viewEndpoint,
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[HttpGet("user/GenerateSTS")]
|
[HttpGet("user/GenerateSTS")]
|
||||||
public IResponseOutput GenerateSTS([FromServices] IOptionsMonitor<AliyunOSSOptions> options)
|
public IResponseOutput GenerateSTS([FromServices] IOptionsMonitor<AliyunOSSOptions> options)
|
||||||
|
@ -428,7 +467,7 @@ namespace IRaCIS.Api.Controllers
|
||||||
|
|
||||||
[HttpGet, Route("ip")]
|
[HttpGet, Route("ip")]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public IResponseOutput Get([FromServices] IHttpContextAccessor _context/*, [FromServices] IUserService _userService*/)
|
public IResponseOutput Get([FromServices] IHttpContextAccessor _context)
|
||||||
{
|
{
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
@ -449,7 +488,7 @@ namespace IRaCIS.Api.Controllers
|
||||||
|
|
||||||
[HttpGet, Route("ip2")]
|
[HttpGet, Route("ip2")]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public IResponseOutput Get2([FromServices] IHttpContextAccessor _context, [FromServices] IRepository _userService)
|
public IResponseOutput Get2([FromServices] IHttpContextAccessor _context)
|
||||||
{
|
{
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
|
@ -19,18 +19,12 @@ namespace IRaCIS.Core.API.Controllers.Special
|
||||||
//谨慎修改 涉及到财务模块
|
//谨慎修改 涉及到财务模块
|
||||||
|
|
||||||
[ApiController, Authorize, ApiExplorerSettings(GroupName = "Financial")]
|
[ApiController, Authorize, ApiExplorerSettings(GroupName = "Financial")]
|
||||||
public class FinancialChangeController : ControllerBase
|
public class FinancialChangeController(
|
||||||
|
ITrialService _trialService,
|
||||||
|
ICalculateService _calculateService,
|
||||||
|
IStringLocalizer _localizer) : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly ITrialService _trialService;
|
|
||||||
private readonly ICalculateService _calculateService;
|
|
||||||
private IStringLocalizer _localizer { get; set; }
|
|
||||||
public FinancialChangeController(ITrialService trialService, ICalculateService calculateService, IStringLocalizer localizer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
_localizer = localizer;
|
|
||||||
_trialService = trialService;
|
|
||||||
_calculateService = calculateService;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//[TrialAudit(AuditType.TrialAudit, AuditOptType.AddOrUpdateTrial)]
|
//[TrialAudit(AuditType.TrialAudit, AuditOptType.AddOrUpdateTrial)]
|
||||||
|
|
|
@ -26,77 +26,18 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
[ApiController, ApiExplorerSettings(GroupName = "Reviewer")]
|
[ApiController, ApiExplorerSettings(GroupName = "Reviewer")]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public class InspectionController : ControllerBase
|
public class InspectionController(
|
||||||
{
|
ITrialDocumentService _trialDocumentService,
|
||||||
private readonly IRepository _repository;
|
|
||||||
private readonly IMapper _mapper;
|
|
||||||
private readonly IUserInfo _userInfo;
|
|
||||||
private readonly ITrialDocumentService _trialDocumentService;
|
|
||||||
private readonly IQCListService _qCListService;
|
|
||||||
private readonly IReadingImageTaskService _iReadingImageTaskService;
|
|
||||||
private readonly IHttpContextAccessor _httpContext;
|
|
||||||
private readonly ITrialConfigService _trialConfigService;
|
|
||||||
private readonly INoneDicomStudyService _noneDicomStudyService;
|
|
||||||
private readonly IClinicalAnswerService _clinicalAnswerService;
|
|
||||||
private readonly ISubjectService _subjectService;
|
|
||||||
private readonly IReadingClinicalDataService _readingClinicalDataService;
|
|
||||||
private readonly ISubjectVisitService _subjectVisitService;
|
|
||||||
private readonly IQCOperationService _qCOperationService;
|
|
||||||
private readonly IClinicalDataService _clinicalDataService;
|
|
||||||
private readonly IVisitPlanService _visitPlanService;
|
|
||||||
|
|
||||||
private readonly IInspectionService _inspectionService;
|
|
||||||
private readonly IReadingMedicalReviewService _readingMedicalReviewService;
|
|
||||||
private readonly IReadingMedicineQuestionService _readingMedicineQuestionService;
|
|
||||||
private readonly IRepository<DataInspection> _dataInspectionRepository;
|
|
||||||
private delegate Task<IResponseOutput> executionFun(dynamic data);
|
|
||||||
|
|
||||||
public InspectionController(IRepository repository,
|
|
||||||
IRepository<DataInspection> _repositoryDataInspection,
|
|
||||||
IMapper mapper, IUserInfo userInfo,
|
|
||||||
ITrialDocumentService trialDocumentService,
|
|
||||||
IRepository<DataInspection> dataInspectionRepository,
|
|
||||||
IQCListService _qCListService,
|
|
||||||
IReadingImageTaskService _iReadingImageTaskService,
|
IReadingImageTaskService _iReadingImageTaskService,
|
||||||
IHttpContextAccessor httpContext,
|
|
||||||
IInspectionService sinspectionService,
|
|
||||||
IReadingMedicalReviewService readingMedicalReviewService,
|
|
||||||
IReadingMedicineQuestionService readingMedicineQuestionService,
|
|
||||||
ITrialConfigService _trialConfigService,
|
ITrialConfigService _trialConfigService,
|
||||||
INoneDicomStudyService noneDicomStudyService,
|
IClinicalAnswerService _clinicalAnswerService,
|
||||||
IClinicalAnswerService clinicalAnswerService,
|
|
||||||
ISubjectService _subjectService,
|
|
||||||
IReadingClinicalDataService _readingClinicalDataService,
|
IReadingClinicalDataService _readingClinicalDataService,
|
||||||
ISubjectVisitService subjectVisitService,
|
IQCOperationService _qCOperationService,
|
||||||
IQCOperationService qCOperationService,
|
IInspectionService _inspectionService,
|
||||||
IClinicalDataService clinicalDataService,
|
IReadingMedicalReviewService _readingMedicalReviewService,
|
||||||
IVisitPlanService visitPlanService
|
IReadingMedicineQuestionService _readingMedicineQuestionService
|
||||||
)
|
) : ControllerBase
|
||||||
{
|
{
|
||||||
this._repository = repository;
|
|
||||||
this._mapper = mapper;
|
|
||||||
this._userInfo = userInfo;
|
|
||||||
this._inspectionService = sinspectionService;
|
|
||||||
this._readingMedicalReviewService = readingMedicalReviewService;
|
|
||||||
this._readingMedicineQuestionService = readingMedicineQuestionService;
|
|
||||||
this._trialDocumentService = trialDocumentService;
|
|
||||||
this._qCListService = _qCListService;
|
|
||||||
this._iReadingImageTaskService = _iReadingImageTaskService;
|
|
||||||
this._httpContext = httpContext;
|
|
||||||
this._trialConfigService = _trialConfigService;
|
|
||||||
this._noneDicomStudyService = noneDicomStudyService;
|
|
||||||
this._clinicalAnswerService = clinicalAnswerService;
|
|
||||||
this._subjectService = _subjectService;
|
|
||||||
this._readingClinicalDataService = _readingClinicalDataService;
|
|
||||||
this._subjectVisitService = subjectVisitService;
|
|
||||||
this._qCOperationService = qCOperationService;
|
|
||||||
this._clinicalDataService = clinicalDataService;
|
|
||||||
this._visitPlanService = visitPlanService;
|
|
||||||
this._dataInspectionRepository = dataInspectionRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 获取稽查数据
|
#region 获取稽查数据
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -228,37 +228,15 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
[ApiExplorerSettings(GroupName = "Image")]
|
[ApiExplorerSettings(GroupName = "Image")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class StudyController : UploadBaseController
|
public class StudyController(
|
||||||
|
IMediator _mediator,
|
||||||
|
QCCommon _qCCommon,
|
||||||
|
IUserInfo _userInfo,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IStringLocalizer _localizer) : UploadBaseController
|
||||||
{
|
{
|
||||||
public IMapper _mapper { get; set; }
|
|
||||||
public IUserInfo _userInfo { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
private readonly IMediator _mediator;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public IStringLocalizer _localizer { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
private readonly IWebHostEnvironment _hostEnvironment;
|
|
||||||
|
|
||||||
private readonly IRepository _repository;
|
|
||||||
|
|
||||||
private readonly QCCommon _qCCommon;
|
|
||||||
public StudyController(IMapper mapper, IStringLocalizer localizer, IUserInfo userInfo, IWebHostEnvironment hostEnvironment, IMediator mediator,
|
|
||||||
QCCommon qCCommon,
|
|
||||||
IRepository repository)
|
|
||||||
{
|
|
||||||
_qCCommon = qCCommon;
|
|
||||||
_hostEnvironment = hostEnvironment;
|
|
||||||
_mediator = mediator;
|
|
||||||
_localizer = localizer;
|
|
||||||
_mapper = mapper;
|
|
||||||
_userInfo = userInfo;
|
|
||||||
_repository = repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[HttpPost, Route("Study/PreArchiveStudy")]
|
[HttpPost, Route("Study/PreArchiveStudy")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
|
@ -390,7 +368,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_RequestError"]);
|
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_RequestError"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
studyMonitor.FileSize = (decimal)HttpContext.Request.ContentLength;
|
studyMonitor.FileSize = (long)HttpContext.Request.ContentLength;
|
||||||
studyMonitor.FileCount = archiveResult.ReceivedFileCount;
|
studyMonitor.FileCount = archiveResult.ReceivedFileCount;
|
||||||
studyMonitor.FailedFileCount = archiveResult.ErrorFiles.Count;
|
studyMonitor.FailedFileCount = archiveResult.ErrorFiles.Count;
|
||||||
studyMonitor.IsDicomReUpload = archiveStudyCommand.AbandonStudyId != null;
|
studyMonitor.IsDicomReUpload = archiveStudyCommand.AbandonStudyId != null;
|
||||||
|
@ -467,12 +445,15 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
/// <param name="incommand"></param>
|
/// <param name="incommand"></param>
|
||||||
/// <param name="_noneDicomStudyRepository"></param>
|
/// <param name="_noneDicomStudyRepository"></param>
|
||||||
/// <param name="_studyMonitorRepository"></param>
|
/// <param name="_studyMonitorRepository"></param>
|
||||||
|
/// <param name="_noneDicomStudyFileRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
|
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
|
|
||||||
public async Task<IResponseOutput> UploadNoneDicomFile(UploadNoneDicomFileCommand incommand,
|
public async Task<IResponseOutput> UploadNoneDicomFile(UploadNoneDicomFileCommand incommand,
|
||||||
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository, [FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
|
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
|
[FromServices] IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
|
[FromServices] IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
var subjectVisitId = incommand.SubjectVisitId;
|
var subjectVisitId = incommand.SubjectVisitId;
|
||||||
|
@ -480,9 +461,9 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
var noneDicomStudyId = incommand.NoneDicomStudyId;
|
var noneDicomStudyId = incommand.NoneDicomStudyId;
|
||||||
|
|
||||||
|
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
var sv = (await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
|
var sv = (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
|
||||||
|
|
||||||
var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == studyMonitorId);
|
var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == studyMonitorId);
|
||||||
|
|
||||||
|
@ -490,7 +471,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
foreach (var item in incommand.UploadedFileList)
|
foreach (var item in incommand.UploadedFileList)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId,FileType=item.FileType });
|
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId,FileType=item.FileType,FileSize=item.FileFize });
|
||||||
|
|
||||||
}
|
}
|
||||||
var uploadFinishedTime = DateTime.Now;
|
var uploadFinishedTime = DateTime.Now;
|
||||||
|
@ -509,7 +490,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
studyMonitor.IP = _userInfo.IP;
|
studyMonitor.IP = _userInfo.IP;
|
||||||
studyMonitor.IsSuccess = true;
|
studyMonitor.IsSuccess = true;
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _noneDicomStudyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -523,12 +504,13 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="trialId"></param>
|
/// <param name="trialId"></param>
|
||||||
/// <param name="oSSService"></param>
|
/// <param name="oSSService"></param>
|
||||||
|
/// <param name="_inspectionFileRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
[HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")]
|
[HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
|
|
||||||
public async Task<IResponseOutput> UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService)
|
public async Task<IResponseOutput> UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService, [FromServices] IRepository<InspectionFile> _inspectionFileRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
var fileName = string.Empty;
|
var fileName = string.Empty;
|
||||||
|
@ -550,7 +532,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/Check", realFileName);
|
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/Check", realFileName);
|
||||||
|
|
||||||
await _repository.AddAsync(new InspectionFile() { FileName = realFileName, RelativePath = ossRelativePath, TrialId = trialId });
|
await _inspectionFileRepository.AddAsync(new InspectionFile() { FileName = realFileName, RelativePath = ossRelativePath, TrialId = trialId });
|
||||||
|
|
||||||
return ossRelativePath;
|
return ossRelativePath;
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="AlibabaCloud.SDK.Sts20150401" Version="1.1.4" />
|
||||||
<PackageReference Include="aliyun-net-sdk-sts" Version="3.1.2" />
|
<PackageReference Include="aliyun-net-sdk-sts" Version="3.1.2" />
|
||||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
|
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
|
||||||
|
|
|
@ -20,18 +20,20 @@ namespace IRaCIS.Core.API
|
||||||
// Set all the common properties available for every request
|
// Set all the common properties available for every request
|
||||||
diagnosticContext.Set("Host", request.Host);
|
diagnosticContext.Set("Host", request.Host);
|
||||||
|
|
||||||
|
diagnosticContext.Set("Protocol", request.Protocol);
|
||||||
|
diagnosticContext.Set("Scheme", request.Scheme);
|
||||||
|
|
||||||
|
#region old 未用
|
||||||
//这种获取的Ip不准 配置服务才行
|
//这种获取的Ip不准 配置服务才行
|
||||||
//diagnosticContext.Set("RequestIP", httpContext.Connection.RemoteIpAddress.ToString());
|
//diagnosticContext.Set("RequestIP", httpContext.Connection.RemoteIpAddress.ToString());
|
||||||
|
|
||||||
//这种方式可以,但是serilog提供了 就不用了
|
//这种方式可以,但是serilog提供了 就不用了
|
||||||
//diagnosticContext.Set("TestIP", httpContext.GetUserIp());
|
//diagnosticContext.Set("TestIP", httpContext.GetUserIp());
|
||||||
|
|
||||||
diagnosticContext.Set("Protocol", request.Protocol);
|
|
||||||
diagnosticContext.Set("Scheme", request.Scheme);
|
|
||||||
|
|
||||||
//这种方式不行 读取的body为空字符串 必须在中间件中读取
|
//这种方式不行 读取的body为空字符串 必须在中间件中读取
|
||||||
//diagnosticContext.Set("RequestBody", await ReadRequestBody(httpContext.Request));
|
//diagnosticContext.Set("RequestBody", await ReadRequestBody(httpContext.Request));
|
||||||
//diagnosticContext.Set("RequestBody", RequestPayload);
|
//diagnosticContext.Set("RequestBody", RequestPayload);
|
||||||
|
#endregion
|
||||||
|
|
||||||
// Only set it if available. You're not sending sensitive data in a querystring right?!
|
// Only set it if available. You're not sending sensitive data in a querystring right?!
|
||||||
if (request.QueryString.HasValue)
|
if (request.QueryString.HasValue)
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.API
|
||||||
{
|
{
|
||||||
services.AddHttpContextAccessor();
|
services.AddHttpContextAccessor();
|
||||||
services.AddScoped<JSONTimeZoneConverter>();
|
services.AddScoped<JSONTimeZoneConverter>();
|
||||||
services.AddScoped<CustomStringConverter>();
|
services.AddScoped<ObjectStorePathConvert>();
|
||||||
services.AddScoped<IOSSService,OSSService>();
|
services.AddScoped<IOSSService,OSSService>();
|
||||||
|
|
||||||
builder.AddNewtonsoftJson(options =>
|
builder.AddNewtonsoftJson(options =>
|
||||||
|
@ -31,11 +31,9 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
|
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
|
||||||
|
|
||||||
//options.SerializerSettings.Converters.Add(new JSONCustomDateConverter()) ;
|
|
||||||
|
|
||||||
options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<JSONTimeZoneConverter>());
|
options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<JSONTimeZoneConverter>());
|
||||||
|
|
||||||
//options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService<CustomStringConverter>());
|
|
||||||
|
|
||||||
|
|
||||||
//IsoDateTimeConverter
|
//IsoDateTimeConverter
|
||||||
|
|
|
@ -9,15 +9,13 @@ using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||||
{
|
{
|
||||||
public class CustomStringConverter : JsonConverter<string>
|
public class ObjectStorePathConvert : JsonConverter<string>
|
||||||
{
|
{
|
||||||
//private readonly IHttpContextAccessor _httpContextAccessor;
|
|
||||||
private readonly IOSSService _oSSService;
|
private readonly IOSSService _oSSService;
|
||||||
|
|
||||||
// 构造函数
|
// 构造函数
|
||||||
public CustomStringConverter(/*IHttpContextAccessor httpContextAccessor*/ IOSSService oSSService)
|
public ObjectStorePathConvert( IOSSService oSSService)
|
||||||
{
|
{
|
||||||
//_httpContextAccessor = httpContextAccessor;
|
|
||||||
_oSSService = oSSService;
|
_oSSService = oSSService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,13 +31,13 @@ namespace IRaCIS.Core.API
|
||||||
|
|
||||||
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("LocalIP", httpContext.Connection.LocalIpAddress.MapToIPv4().ToString()));
|
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("LocalIP", httpContext.Connection.LocalIpAddress.MapToIPv4().ToString()));
|
||||||
|
|
||||||
|
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("TokenUserRealName", httpContext?.User?.FindFirst(ClaimAttributes.RealName)?.Value));
|
||||||
|
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("TokenUserType", httpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeShortName)?.Value));
|
||||||
|
|
||||||
|
|
||||||
//这样读取没用
|
//这样读取没用
|
||||||
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("RequestBody", await ReadRequestBody(httpContext.Request)));
|
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("RequestBody", await ReadRequestBody(httpContext.Request)));
|
||||||
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("RequestIP", IPHelper.GetIP(httpContext.Request) ));
|
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("RequestIP", IPHelper.GetIP(httpContext.Request) ));
|
||||||
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("TokenUserRealName", httpContext?.User?.FindFirst(ClaimAttributes.RealName)?.Value));
|
|
||||||
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("TokenUserType", httpContext?.User?.FindFirst(JwtIRaCISClaimType.UserTypeShortName)?.Value));
|
|
||||||
|
|
||||||
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("Referer", httpContext.Request.Headers["Referer"].ToString()));
|
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("Referer", httpContext.Request.Headers["Referer"].ToString()));
|
||||||
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("request_path", httpContext.Request.Path));
|
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("request_path", httpContext.Request.Path));
|
||||||
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("request_method", httpContext.Request.Method));
|
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("request_method", httpContext.Request.Method));
|
||||||
|
|
|
@ -68,5 +68,10 @@
|
||||||
"CompanyNameCN": "上海展影医疗科技有限公司",
|
"CompanyNameCN": "上海展影医疗科技有限公司",
|
||||||
"CompanyShortName": "Extensive Imaging",
|
"CompanyShortName": "Extensive Imaging",
|
||||||
"CompanyShortNameCN": "展影医疗"
|
"CompanyShortNameCN": "展影医疗"
|
||||||
|
},
|
||||||
|
"SystemPacsConfig": {
|
||||||
|
"Port": "11113",
|
||||||
|
"IP": "101.132.193.237"
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
|
||||||
|
@ -52,8 +52,6 @@ namespace IRaCIS.Core.Application
|
||||||
[MemberNotNull(nameof(_userInfo))]
|
[MemberNotNull(nameof(_userInfo))]
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
[MemberNotNull(nameof(_repository))]
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
[MemberNotNull(nameof(_localizer))]
|
[MemberNotNull(nameof(_localizer))]
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
@ -79,9 +77,6 @@ namespace IRaCIS.Core.Application
|
||||||
[MemberNotNull(nameof(_userInfo))]
|
[MemberNotNull(nameof(_userInfo))]
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
[MemberNotNull(nameof(_repository))]
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
[MemberNotNull(nameof(_localizer))]
|
[MemberNotNull(nameof(_localizer))]
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
|
||||||
|
@ -98,8 +93,6 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
public IUserInfo _userInfo { get; set; }
|
public IUserInfo _userInfo { get; set; }
|
||||||
|
|
||||||
public IRepository _repository { get; set; }
|
|
||||||
|
|
||||||
public IStringLocalizer _localizer { get; set; }
|
public IStringLocalizer _localizer { get; set; }
|
||||||
|
|
||||||
public IFusionCache _fusionCache { get; set; }
|
public IFusionCache _fusionCache { get; set; }
|
||||||
|
|
|
@ -69,10 +69,14 @@ namespace IRaCIS.Application.Services.BusinessFilter
|
||||||
{
|
{
|
||||||
var result = objectResult.Value as IResponseOutput;
|
var result = objectResult.Value as IResponseOutput;
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(result.LocalizedInfo))
|
||||||
|
{
|
||||||
//统一在这里记录国际化的日志信息
|
//统一在这里记录国际化的日志信息
|
||||||
_logger.LogWarning($"{result.LocalizedInfo}");
|
_logger.LogWarning($"{result.LocalizedInfo}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
else if (statusCode != 200 && !(objectResult.Value is IResponseOutput))
|
else if (statusCode != 200 && !(objectResult.Value is IResponseOutput))
|
||||||
{
|
{
|
||||||
//---程序错误,请联系开发人员。
|
//---程序错误,请联系开发人员。
|
||||||
|
|
|
@ -42,9 +42,9 @@ namespace IRaCIS.Core.Application.Helper
|
||||||
return statusStr;
|
return statusStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<List<SystemAnonymization>> GetSystemAnonymizationListAsync(IRepository _repository)
|
public static async Task<List<SystemAnonymization>> GetSystemAnonymizationListAsync(IRepository<SystemAnonymization> _systemAnonymizationRepository)
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<SystemAnonymization>(t => t.IsEnable).ToListAsync();
|
var list = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync();
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ using DocumentFormat.OpenXml.Spreadsheet;
|
||||||
using DocumentFormat.OpenXml.Wordprocessing;
|
using DocumentFormat.OpenXml.Wordprocessing;
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
using IRaCIS.Application.Interfaces;
|
using IRaCIS.Application.Interfaces;
|
||||||
|
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
@ -14,6 +15,8 @@ using Newtonsoft.Json.Linq;
|
||||||
using NPOI.HSSF.UserModel;
|
using NPOI.HSSF.UserModel;
|
||||||
using NPOI.XSSF.UserModel;
|
using NPOI.XSSF.UserModel;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service;
|
namespace IRaCIS.Core.Application.Service;
|
||||||
|
@ -23,19 +26,13 @@ public static class ExcelExportHelper
|
||||||
//MiniExcel_Export
|
//MiniExcel_Export
|
||||||
public static async Task<IActionResult> DataExportAsync(string code, ExcelExportInfo data, string exportFileNamePrefix, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
|
public static async Task<IActionResult> DataExportAsync(string code, ExcelExportInfo data, string exportFileNamePrefix, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
|
||||||
{
|
{
|
||||||
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
//判断是否有字典翻译
|
//判断是否有字典翻译
|
||||||
|
|
||||||
object translateData = data;
|
object translateData = data;
|
||||||
|
|
||||||
if (_dictionaryService != null && translateType != null)
|
if (_dictionaryService != null && translateType != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
////只标注单个的时候
|
|
||||||
//var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
|
|
||||||
// .Select(c => new { c.Name, DicParentCode = ((DictionaryTranslateAttribute?)c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false)[0])?.DicParentCode }).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
//一个值 对应不同的字典翻译
|
//一个值 对应不同的字典翻译
|
||||||
var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
|
var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
|
||||||
.SelectMany(c =>
|
.SelectMany(c =>
|
||||||
|
@ -62,12 +59,18 @@ public static class ExcelExportHelper
|
||||||
var newObjList = new List<object>();
|
var newObjList = new List<object>();
|
||||||
var no = 1;
|
var no = 1;
|
||||||
|
|
||||||
foreach (var item in dic[key] as IList )
|
foreach (var item in dic[key] as IList)
|
||||||
{
|
{
|
||||||
//var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
|
|
||||||
|
|
||||||
var itemDic = item.ConvertToDictionary();
|
var itemDic = item.ConvertToDictionary();
|
||||||
|
|
||||||
|
//处理集合里面时间类型,根据当前语言将时间转变为字符串
|
||||||
|
foreach (var itemValuePair in itemDic)
|
||||||
|
{
|
||||||
|
if (DateTime.TryParse(itemValuePair.Value?.ToString(), out DateTime result))
|
||||||
|
{
|
||||||
|
itemDic[itemValuePair.Key] = ExportExcelConverterDate.DateTimeInternationalToString(result );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
foreach (var needTranslateProperty in needTranslatePropertyList)
|
foreach (var needTranslateProperty in needTranslatePropertyList)
|
||||||
|
@ -79,7 +82,7 @@ public static class ExcelExportHelper
|
||||||
{
|
{
|
||||||
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
||||||
|
|
||||||
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t=>data.IsEn_US?t.Value:t.ValueCN).FirstOrDefault() ?? String.Empty;
|
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//普通翻译 或者某一标准翻译
|
//普通翻译 或者某一标准翻译
|
||||||
|
@ -88,7 +91,7 @@ public static class ExcelExportHelper
|
||||||
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
||||||
|
|
||||||
|
|
||||||
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => data.IsEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,6 +107,7 @@ public static class ExcelExportHelper
|
||||||
dic[key] = newObjList;
|
dic[key] = newObjList;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,7 +143,7 @@ public static class ExcelExportHelper
|
||||||
|
|
||||||
if (sheetCount == 2)
|
if (sheetCount == 2)
|
||||||
{
|
{
|
||||||
if (data.IsEn_US)
|
if (isEn_US)
|
||||||
{
|
{
|
||||||
workbook.RemoveSheetAt(0);
|
workbook.RemoveSheetAt(0);
|
||||||
}
|
}
|
||||||
|
@ -149,7 +153,7 @@ public static class ExcelExportHelper
|
||||||
}
|
}
|
||||||
|
|
||||||
var memoryStream2 = new MemoryStream();
|
var memoryStream2 = new MemoryStream();
|
||||||
workbook.Write(memoryStream2,true);
|
workbook.Write(memoryStream2, true);
|
||||||
|
|
||||||
memoryStream2.Seek(0, SeekOrigin.Begin);
|
memoryStream2.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
@ -160,11 +164,6 @@ public static class ExcelExportHelper
|
||||||
//fileNmae = workbook.GetSheetName(0);
|
//fileNmae = workbook.GetSheetName(0);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region MiniExcel
|
#region MiniExcel
|
||||||
|
|
||||||
var memoryStream = new MemoryStream();
|
var memoryStream = new MemoryStream();
|
||||||
|
@ -181,29 +180,18 @@ public static class ExcelExportHelper
|
||||||
|
|
||||||
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
||||||
{
|
{
|
||||||
FileDownloadName = $"{(string.IsNullOrEmpty(exportFileNamePrefix) ? "" : exportFileNamePrefix+ "_") }{Path.GetFileNameWithoutExtension(fileName) }_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
|
FileDownloadName = $"{(string.IsNullOrEmpty(exportFileNamePrefix) ? "" : exportFileNamePrefix + "_")}{Path.GetFileNameWithoutExtension(fileName)}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
|
||||||
};
|
};
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Magicodes 模板规则不一样
|
|
||||||
|
|
||||||
////创建Excel导出对象
|
|
||||||
//IExportFileByTemplate exporter = new ExcelExporter();
|
|
||||||
|
|
||||||
////根据模板导出
|
|
||||||
//var result = await exporter.ExportBytesByTemplate(exportInfo, tplPath);
|
|
||||||
|
|
||||||
|
|
||||||
//return new XlsxFileResult(bytes: result, fileDownloadName: $"{doc.Name}_{DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")}.xlsx");
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static async Task<(MemoryStream, string)> DataExport_NpoiTestAsync(string code, ExcelExportInfo data, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
|
public static async Task<(MemoryStream, string)> DataExport_NpoiTestAsync(string code, ExcelExportInfo data, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
|
||||||
{
|
{
|
||||||
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
//判断是否有字典翻译
|
//判断是否有字典翻译
|
||||||
|
|
||||||
object translateData = data;
|
object translateData = data;
|
||||||
|
@ -211,11 +199,6 @@ public static class ExcelExportHelper
|
||||||
if (_dictionaryService != null && translateType != null)
|
if (_dictionaryService != null && translateType != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
////只标注单个的时候
|
|
||||||
//var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
|
|
||||||
// .Select(c => new { c.Name, DicParentCode = ((DictionaryTranslateAttribute?)c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false)[0])?.DicParentCode }).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
//一个值 对应不同的字典翻译
|
//一个值 对应不同的字典翻译
|
||||||
var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
|
var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
|
||||||
.SelectMany(c =>
|
.SelectMany(c =>
|
||||||
|
@ -247,6 +230,15 @@ public static class ExcelExportHelper
|
||||||
//var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
|
//var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
|
||||||
var itemDic = item.ConvertToDictionary();
|
var itemDic = item.ConvertToDictionary();
|
||||||
|
|
||||||
|
//处理集合里面时间类型,根据当前语言将时间转变为字符串
|
||||||
|
foreach (var itemValuePair in itemDic)
|
||||||
|
{
|
||||||
|
if (DateTime.TryParse(itemValuePair.Value?.ToString(), out DateTime result))
|
||||||
|
{
|
||||||
|
itemDic[itemValuePair.Key] = ExportExcelConverterDate.DateTimeInternationalToString(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var needTranslateProperty in needTranslatePropertyList)
|
foreach (var needTranslateProperty in needTranslatePropertyList)
|
||||||
{
|
{
|
||||||
//翻译的属性依赖其他属性
|
//翻译的属性依赖其他属性
|
||||||
|
@ -256,7 +248,7 @@ public static class ExcelExportHelper
|
||||||
{
|
{
|
||||||
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
||||||
|
|
||||||
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => data.IsEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//普通翻译 或者某一标准翻译
|
//普通翻译 或者某一标准翻译
|
||||||
|
@ -265,7 +257,7 @@ public static class ExcelExportHelper
|
||||||
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
|
||||||
|
|
||||||
|
|
||||||
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => data.IsEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -310,7 +302,7 @@ public static class ExcelExportHelper
|
||||||
|
|
||||||
if (sheetCount == 2)
|
if (sheetCount == 2)
|
||||||
{
|
{
|
||||||
if (data.IsEn_US)
|
if (isEn_US)
|
||||||
{
|
{
|
||||||
workbook.RemoveSheetAt(0);
|
workbook.RemoveSheetAt(0);
|
||||||
}
|
}
|
||||||
|
@ -320,7 +312,7 @@ public static class ExcelExportHelper
|
||||||
}
|
}
|
||||||
|
|
||||||
var memoryStream2 = new MemoryStream();
|
var memoryStream2 = new MemoryStream();
|
||||||
workbook.Write(memoryStream2,true);
|
workbook.Write(memoryStream2, true);
|
||||||
|
|
||||||
memoryStream2.Seek(0, SeekOrigin.Begin);
|
memoryStream2.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
@ -355,4 +347,7 @@ public static class ExcelExportHelper
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -136,7 +136,7 @@ public static class FileStoreHelper
|
||||||
{
|
{
|
||||||
var doc = await _commonDocumentRepository.FirstOrDefaultAsync(t => t.Code == code);
|
var doc = await _commonDocumentRepository.FirstOrDefaultAsync(t => t.Code == code);
|
||||||
|
|
||||||
var isEn_US = CultureInfo.CurrentCulture.Name!= "zh-CN";
|
var isEn_US = CultureInfo.CurrentCulture.Name!= StaticData.CultureInfo.zh_CN;
|
||||||
if (doc == null)
|
if (doc == null)
|
||||||
{
|
{
|
||||||
//---数据库没有找到对应的数据模板文件,请联系系统运维人员。
|
//---数据库没有找到对应的数据模板文件,请联系系统运维人员。
|
||||||
|
|
|
@ -21,6 +21,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
public class TaskAllocationRuleService(
|
public class TaskAllocationRuleService(
|
||||||
IRepository<TaskAllocationRule> _taskAllocationRuleRepository,
|
IRepository<TaskAllocationRule> _taskAllocationRuleRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<Enroll> _enrollRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IRepository<SubjectCanceDoctor> _subjectCanceDoctorRepository) : BaseService, ITaskAllocationRuleService
|
IRepository<SubjectCanceDoctor> _subjectCanceDoctorRepository) : BaseService, ITaskAllocationRuleService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -37,7 +39,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var list = await _taskAllocationRuleRepository.Where(t => t.TrialId == trialId).ProjectTo<TaskAllocationRuleDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
var list = await _taskAllocationRuleRepository.Where(t => t.TrialId == trialId).ProjectTo<TaskAllocationRuleDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
//所有标准都是一样 后台只返回任意一个标准的就好了
|
//所有标准都是一样 后台只返回任意一个标准的就好了
|
||||||
var trialTaskConfig = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm).ProjectTo<TrialTaskConfigView>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
var trialTaskConfig = await _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ProjectTo<TrialTaskConfigView>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||||
|
|
||||||
return (list, trialTaskConfig);
|
return (list, trialTaskConfig);
|
||||||
}
|
}
|
||||||
|
@ -53,7 +55,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
//冗余 存
|
//冗余 存
|
||||||
|
|
||||||
var enrollId = _repository.Where<Enroll>(t => t.TrialId == addOrEditTaskAllocationRule.TrialId && t.DoctorUserId == addOrEditTaskAllocationRule.DoctorUserId).Select(t => t.Id).FirstOrDefault();
|
var enrollId = _enrollRepository.Where(t => t.TrialId == addOrEditTaskAllocationRule.TrialId && t.DoctorUserId == addOrEditTaskAllocationRule.DoctorUserId).Select(t => t.Id).FirstOrDefault();
|
||||||
|
|
||||||
if (enrollId == Guid.Empty)
|
if (enrollId == Guid.Empty)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<TrialSite> _trialSiteRepository,
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
|
IRepository<Enroll> _enrollRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
IRepository<TrialVirtualSiteCodeUpdate> _trialVirtualSiteCodeUpdateRepository,
|
IRepository<TrialVirtualSiteCodeUpdate> _trialVirtualSiteCodeUpdateRepository,
|
||||||
IVisitTaskHelpeService _visitTaskCommonService) : BaseService, ITaskConsistentRuleService
|
IVisitTaskHelpeService _visitTaskCommonService) : BaseService, ITaskConsistentRuleService
|
||||||
{
|
{
|
||||||
|
@ -112,7 +114,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var trialTaskConfig = _repository.Where<Trial>(t => t.Id == inQuery.TrialId).Select(t => new { IsHaveDoubleReadCriterion = t.TrialReadingCriterionList.Any(t => t.IsSigned && t.IsConfirm && t.ReadingType == ReadingMethod.Double), t.VitrualSiteCode }).FirstOrDefault();
|
var trialTaskConfig = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new { IsHaveDoubleReadCriterion = t.TrialReadingCriterionList.Any(t => t.IsSigned && t.IsConfirm && t.ReadingType == ReadingMethod.Double), t.VitrualSiteCode }).FirstOrDefault();
|
||||||
|
|
||||||
return ResponseOutput.Ok(pageList, trialTaskConfig);
|
return ResponseOutput.Ok(pageList, trialTaskConfig);
|
||||||
}
|
}
|
||||||
|
@ -373,9 +375,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var subjectList = query.ToList();
|
var subjectList = query.ToList();
|
||||||
|
|
||||||
var doctorUserIdQuery = from enroll in _repository.Where<Enroll>(t => t.TrialId == trialId).Where(t => t.EnrollReadingCategoryList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(c => c.ReadingCategory == ReadingCategory.Global || c.ReadingCategory == ReadingCategory.Visit))
|
var doctorUserIdQuery = from enroll in _enrollRepository.Where(t => t.TrialId == trialId).Where(t => t.EnrollReadingCategoryList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(c => c.ReadingCategory == ReadingCategory.Global || c.ReadingCategory == ReadingCategory.Visit))
|
||||||
.Where(t => t.EnrollReadingCriteriaList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsJoinAnalysis == true))
|
.Where(t => t.EnrollReadingCriteriaList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsJoinAnalysis == true))
|
||||||
join user in _repository.Where<User>() on enroll.DoctorId equals user.DoctorId
|
join user in _userRepository.Where() on enroll.DoctorId equals user.DoctorId
|
||||||
select user.Id;
|
select user.Id;
|
||||||
|
|
||||||
var configDoctorUserIdList = await doctorUserIdQuery.ToListAsync();
|
var configDoctorUserIdList = await doctorUserIdQuery.ToListAsync();
|
||||||
|
@ -788,10 +790,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit);
|
Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit);
|
||||||
|
|
||||||
|
|
||||||
var taskConsistentRuleQueryable = from enroll in _repository.Where<Enroll>(t => t.TrialId == trialId && t.EnrollStatus == EnrollStatus.ConfirmIntoGroup
|
var taskConsistentRuleQueryable = from enroll in _enrollRepository.Where(t => t.TrialId == trialId && t.EnrollStatus == EnrollStatus.ConfirmIntoGroup
|
||||||
&& t.EnrollReadingCriteriaList.Any(c => c.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && c.IsJoinAnalysis))
|
&& t.EnrollReadingCriteriaList.Any(c => c.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && c.IsJoinAnalysis))
|
||||||
join user in _repository.Where<User>() on enroll.DoctorUserId equals user.Id
|
join user in _userRepository.Where() on enroll.DoctorUserId equals user.Id
|
||||||
join taskConsistentRule in _repository.Where<TaskConsistentRule>(t => t.TrialId == trialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.IsSelfAnalysis) on enroll.TrialId equals taskConsistentRule.TrialId
|
join taskConsistentRule in _taskConsistentRuleRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.IsSelfAnalysis) on enroll.TrialId equals taskConsistentRule.TrialId
|
||||||
select new TaskConsistentRuleView()
|
select new TaskConsistentRuleView()
|
||||||
{
|
{
|
||||||
Id = taskConsistentRule.Id,
|
Id = taskConsistentRule.Id,
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class TaskMedicalReviewRuleService(
|
public class TaskMedicalReviewRuleService(
|
||||||
IRepository<TaskMedicalReviewRule> _taskMedicalReviewRuleRepository) : BaseService, ITaskMedicalReviewRuleService
|
IRepository<TaskMedicalReviewRule> _taskMedicalReviewRuleRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository) : BaseService, ITaskMedicalReviewRuleService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var taskTaskMedicalReviewRuleQueryable = _taskMedicalReviewRuleRepository.Where(t => t.TrialId == inQuery.TrialId)
|
var taskTaskMedicalReviewRuleQueryable = _taskMedicalReviewRuleRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.ProjectTo<TaskMedicalReviewRuleView>(_mapper.ConfigurationProvider);
|
.ProjectTo<TaskMedicalReviewRuleView>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
var isHaveMIM = await _repository.AnyAsync<TrialUser>(t => t.User.UserTypeEnum == Domain.Share.UserTypeEnum.MIM && t.TrialId==inQuery.TrialId);
|
var isHaveMIM = await _trialUserRepository.AnyAsync(t => t.User.UserTypeEnum == Domain.Share.UserTypeEnum.MIM && t.TrialId==inQuery.TrialId);
|
||||||
|
|
||||||
return (await taskTaskMedicalReviewRuleQueryable.ToListAsync(),new {IsHaveMIM=isHaveMIM});
|
return (await taskTaskMedicalReviewRuleQueryable.ToListAsync(),new {IsHaveMIM=isHaveMIM});
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,16 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository,
|
IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository,
|
||||||
IRepository<SubjectCriteriaEvaluationVisitFilter> _subjectCriteriaEvaluationVisitFilterRepository,
|
IRepository<SubjectCriteriaEvaluationVisitFilter> _subjectCriteriaEvaluationVisitFilterRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
|
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
|
IRepository<SubjectCanceDoctor> _subjectCanceDoctorRepository,
|
||||||
|
IRepository<ReadingTaskQuestionMark> _readingTaskQuestionMarkRepository,
|
||||||
|
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||||
|
IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
||||||
|
IRepository<TaskInfluence> _taskInfluenceRepository,
|
||||||
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository) : BaseService, IVisitTaskService
|
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository) : BaseService, IVisitTaskService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -69,7 +79,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
public async Task<List<TrialReadingCriterionDto>> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true, bool? isAutoCreate = null)
|
public async Task<List<TrialReadingCriterionDto>> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true, bool? isAutoCreate = null)
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm)
|
var list = await _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsConfirm)
|
||||||
|
|
||||||
.OrderBy(t => t.ShowOrder)
|
.OrderBy(t => t.ShowOrder)
|
||||||
.Select(t => new TrialReadingCriterionDto()
|
.Select(t => new TrialReadingCriterionDto()
|
||||||
|
@ -275,7 +285,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
var subjectId = cancelCommand.CancelList.First().SubjectId;
|
var subjectId = cancelCommand.CancelList.First().SubjectId;
|
||||||
|
|
||||||
await _repository.AddAsync(new SubjectCanceDoctor() { SubjectId = subjectId, Note = cancelCommand.Note, TrialReadingCriterionId = cancelCommand.TrialReadingCriterionId });
|
await _subjectCanceDoctorRepository.AddAsync(new SubjectCanceDoctor() { SubjectId = subjectId, Note = cancelCommand.Note, TrialReadingCriterionId = cancelCommand.TrialReadingCriterionId });
|
||||||
|
|
||||||
await _visitTaskRepository.SaveChangesAsync();
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -1553,9 +1563,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task PMReReadingConfirmOrBackInfluenceAnalysisAsync(Guid subjectId)
|
private async Task PMReReadingConfirmOrBackInfluenceAnalysisAsync(Guid subjectId)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<VisitTask>(t => t.IsAnalysisCreate && t.SubjectId == subjectId))
|
if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.SubjectId == subjectId))
|
||||||
{
|
{
|
||||||
await _repository.UpdatePartialFromQueryAsync<Subject>(t => t.Id == subjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = true });
|
await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = true });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2150,7 +2160,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
{
|
{
|
||||||
|
|
||||||
//自定义
|
//自定义
|
||||||
var readingCustomTagList = _repository.Where<ReadingCustomTag>(t => t.VisitTaskId == origenalTask.Id).ToList();
|
var readingCustomTagList = _readingCustomTagRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
|
||||||
|
|
||||||
foreach (var item in readingCustomTagList)
|
foreach (var item in readingCustomTagList)
|
||||||
{
|
{
|
||||||
|
@ -2158,10 +2168,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
item.VisitTaskId = newTask.Id;
|
item.VisitTaskId = newTask.Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = _repository.AddRangeAsync(readingCustomTagList).Result;
|
_ = _readingCustomTagRepository.AddRangeAsync(readingCustomTagList).Result;
|
||||||
|
|
||||||
|
|
||||||
var readingTaskQuestionMarkList = _repository.Where<ReadingTaskQuestionMark>(t => t.VisitTaskId == origenalTask.Id).ToList();
|
var readingTaskQuestionMarkList = _readingTaskQuestionMarkRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
|
||||||
|
|
||||||
foreach (var item in readingTaskQuestionMarkList)
|
foreach (var item in readingTaskQuestionMarkList)
|
||||||
{
|
{
|
||||||
|
@ -2169,21 +2179,21 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
item.VisitTaskId = newTask.Id;
|
item.VisitTaskId = newTask.Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = _repository.AddRangeAsync(readingTaskQuestionMarkList).Result;
|
_ = _readingTaskQuestionMarkRepository.AddRangeAsync(readingTaskQuestionMarkList).Result;
|
||||||
|
|
||||||
var readingTaskQuestionAnswerList = _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == origenalTask.Id).ToList();
|
var readingTaskQuestionAnswerList = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
|
||||||
|
|
||||||
foreach (var item in readingTaskQuestionAnswerList)
|
foreach (var item in readingTaskQuestionAnswerList)
|
||||||
{
|
{
|
||||||
item.Id = Guid.Empty;
|
item.Id = Guid.Empty;
|
||||||
item.VisitTaskId = newTask.Id;
|
item.VisitTaskId = newTask.Id;
|
||||||
}
|
}
|
||||||
_ = _repository.AddRangeAsync(readingTaskQuestionAnswerList).Result;
|
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(readingTaskQuestionAnswerList).Result;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//ReadingTableAnswerRowInfo ReadingTableQuestionAnswer 一起加
|
//ReadingTableAnswerRowInfo ReadingTableQuestionAnswer 一起加
|
||||||
var readingTableAnswerRowInfoList = _repository.Where<ReadingTableAnswerRowInfo>(t => t.VisitTaskId == origenalTask.Id).Include(t => t.LesionAnswerList).ToList();
|
var readingTableAnswerRowInfoList = _readingTableAnswerRowInfoRepository.Where(t => t.VisitTaskId == origenalTask.Id).Include(t => t.LesionAnswerList).ToList();
|
||||||
|
|
||||||
foreach (var item in readingTableAnswerRowInfoList)
|
foreach (var item in readingTableAnswerRowInfoList)
|
||||||
{
|
{
|
||||||
|
@ -2206,7 +2216,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = _repository.AddRangeAsync(readingTableAnswerRowInfoList).Result;
|
_ = _readingTableAnswerRowInfoRepository.AddRangeAsync(readingTableAnswerRowInfoList).Result;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2535,9 +2545,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
//await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = "PM/APM同意一致性核查回退。", UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
//await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = "PM/APM同意一致性核查回退。", UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.DicomSerie.IsDeleted);
|
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.DicomSerie.IsDeleted);
|
||||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.IsDeleted);
|
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted);
|
||||||
|
|
||||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -2870,7 +2880,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<List<InfluenceTaskInfo>> GetInfluencedTaskList(Guid taskId)
|
public async Task<List<InfluenceTaskInfo>> GetInfluencedTaskList(Guid taskId)
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<TaskInfluence>(t => t.OriginalTaskId == taskId)/*.Select(t => t.InfluenceTask)*/.ProjectTo<InfluenceTaskInfo>(_mapper.ConfigurationProvider).ToListAsync();
|
var list = await _taskInfluenceRepository.Where(t => t.OriginalTaskId == taskId)/*.Select(t => t.InfluenceTask)*/.ProjectTo<InfluenceTaskInfo>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,20 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
[ApiExplorerSettings(GroupName = "Common")]
|
[ApiExplorerSettings(GroupName = "Common")]
|
||||||
public class ExcelExportService : BaseService
|
public class ExcelExportService(IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
|
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<QCChallenge> _qcChallengeRepository,
|
||||||
|
IRepository<ReadModule> _readModuleRepository,
|
||||||
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
|
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
|
IRepository<CommonDocument> _commonDocumentRepository,
|
||||||
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||||
|
IRepository<TrialDocNeedConfirmedUserType> _trialDocNeedConfirmedUserTypeRepository,
|
||||||
|
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
|
||||||
|
IRepository<Subject> _subjectRepository) : BaseService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,8 +86,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
.ProjectTo<TrialMaintenanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<TrialMaintenanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialUserList_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialMaintenanceDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialUserList_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialMaintenanceDTO));
|
||||||
|
@ -119,8 +132,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
.ProjectTo<SiteUserExportDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<SiteUserExportDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -174,8 +187,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var exportInfo = data;
|
var exportInfo = data;
|
||||||
|
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSiteUserSummary_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialSiteUserSummaryDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSiteUserSummary_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialSiteUserSummaryDto));
|
||||||
|
|
||||||
|
@ -300,8 +313,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = new ExcelExportInfo();
|
var exportInfo = new ExcelExportInfo();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialList_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialToBeDoneDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialList_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialToBeDoneDto));
|
||||||
|
@ -335,15 +348,15 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
[FromServices] IRepository<Trial> _trialRepository
|
[FromServices] IRepository<Trial> _trialRepository
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var trialInfo = (await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync());
|
var trialInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync());
|
||||||
|
|
||||||
var trialDocQuery = from trialDocumentNeedConfirmedUserType in _repository.Where<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == inQuery.TrialId)
|
var trialDocQuery = from trialDocumentNeedConfirmedUserType in _trialDocNeedConfirmedUserTypeRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId)
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||||
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
||||||
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
|
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new TrainingRecordExportDTO()
|
select new TrainingRecordExportDTO()
|
||||||
|
@ -375,12 +388,12 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var systemDocQuery = from needConfirmEdUserType in _repository.WhereIf<SystemDocNeedConfirmedUserType>(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
var systemDocQuery = from needConfirmEdUserType in _systemDocNeedConfirmedUserTypeRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
||||||
|
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||||
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new TrainingRecordExportDTO()
|
select new TrainingRecordExportDTO()
|
||||||
{
|
{
|
||||||
|
@ -420,9 +433,10 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
exportInfo.List=list;
|
||||||
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialTrainingRecordList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrainingRecordExportDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialTrainingRecordList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrainingRecordExportDTO));
|
||||||
|
@ -476,8 +490,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
|
||||||
|
@ -535,8 +549,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCVisitImageList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCVisitImageList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
|
||||||
|
@ -563,7 +577,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
var svExpression = QCCommon.GetQCChallengeFilter(inQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetQCChallengeFilter(inQuery.VisitPlanArray);
|
||||||
|
|
||||||
var query = _repository.Where<QCChallenge>(x => x.TrialId == inQuery.TrialId)
|
var query = _qcChallengeRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||||
//.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
|
//.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
|
||||||
.WhereIf(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
.WhereIf(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
||||||
.WhereIf(inQuery.IsClosed != null, t => t.IsClosed == inQuery.IsClosed)
|
.WhereIf(inQuery.IsClosed != null, t => t.IsClosed == inQuery.IsClosed)
|
||||||
|
@ -585,8 +599,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
|
||||||
}
|
}
|
||||||
|
@ -629,8 +643,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
|
||||||
|
|
||||||
|
@ -657,8 +671,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var query = from subject in _repository.Where<Subject>(u => u.TrialId == dto.TrialId)
|
var query = from subject in _subjectRepository.Where(u => u.TrialId == dto.TrialId)
|
||||||
join trialReadingCriterion in _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId) on subject.TrialId equals trialReadingCriterion.TrialId
|
join trialReadingCriterion in _readingQuestionCriterionTrialRepository.Where(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId) on subject.TrialId equals trialReadingCriterion.TrialId
|
||||||
|
|
||||||
select new SubjectProgressDto()
|
select new SubjectProgressDto()
|
||||||
{
|
{
|
||||||
|
@ -702,11 +716,11 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == dto.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == dto.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
|
exportInfo.CriterionName = await _readingQuestionCriterionTrialRepository.Where(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.TrialSubjectProgressList_Export, exportInfo, /*"", */_commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectProgressDto));
|
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.TrialSubjectProgressList_Export, exportInfo, /*"", */_commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectProgressDto));
|
||||||
|
|
||||||
|
@ -798,7 +812,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
var svExpression = QCCommon.GetStudyMonitorSubjectVisitFilter(inQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetStudyMonitorSubjectVisitFilter(inQuery.VisitPlanArray);
|
||||||
var StudyMonitorQuery = _repository.Where<StudyMonitor>(t => t.TrialId == inQuery.TrialId, ignoreQueryFilters: true)
|
var StudyMonitorQuery = _studyMonitorRepository.Where(t => t.TrialId == inQuery.TrialId, ignoreQueryFilters: true)
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
||||||
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||||
|
@ -851,8 +865,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyUploadMonitor_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyMonitorExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyUploadMonitor_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyMonitorExportDto));
|
||||||
|
@ -879,7 +893,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
[FromServices] IRepository<Trial> _trialRepository)
|
[FromServices] IRepository<Trial> _trialRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
var list = await _repository.Where<ReadModule>(u => u.TrialId == param.TrialId)
|
var list = await _readModuleRepository.Where(u => u.TrialId == param.TrialId)
|
||||||
|
|
||||||
.ProjectTo<ReadPeriodExportDto>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<ReadPeriodExportDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
@ -888,8 +902,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectReadingPeriodList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectReadingPeriodList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto));
|
||||||
|
|
||||||
|
@ -913,7 +927,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var svExpression = QCCommon.GetDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
|
||||||
|
|
||||||
var dicomStudyQuery = _repository.Where<DicomStudy>(t => t.TrialId == studyQuery.TrialId)
|
var dicomStudyQuery = _dicomStudyRepository.Where(t => t.TrialId == studyQuery.TrialId)
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
.WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression)
|
.WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
|
.WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
|
||||||
|
@ -941,7 +955,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var svExpression2 = QCCommon.GetNoneDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
|
var svExpression2 = QCCommon.GetNoneDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
|
||||||
|
|
||||||
|
|
||||||
var nodeDicomStudyQuery = _repository.Where<NoneDicomStudy>(t => t.TrialId == studyQuery.TrialId)
|
var nodeDicomStudyQuery = _noneDicomStudyRepository.Where(t => t.TrialId == studyQuery.TrialId)
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
.WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression2)
|
.WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression2)
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
|
.WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
|
||||||
|
@ -978,8 +992,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == studyQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == studyQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyExportDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyExportDTO));
|
||||||
}
|
}
|
||||||
|
@ -1019,8 +1033,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO));
|
||||||
}
|
}
|
||||||
|
@ -1042,7 +1056,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
[FromServices] IDictionaryService _dictionaryService,
|
[FromServices] IDictionaryService _dictionaryService,
|
||||||
[FromServices] IRepository<Trial> _trialRepository)
|
[FromServices] IRepository<Trial> _trialRepository)
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
|
var list = await _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
|
||||||
//.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
|
//.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
|
||||||
|
|
||||||
.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||||
|
@ -1072,8 +1086,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReadingTaskList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadingTaskExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReadingTaskList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadingTaskExportDto));
|
||||||
}
|
}
|
||||||
|
@ -1138,8 +1152,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReReadingTaskList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReReadingTaskExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReReadingTaskList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReReadingTaskExportDto));
|
||||||
}
|
}
|
||||||
|
@ -1198,8 +1212,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
|
||||||
}
|
}
|
||||||
|
@ -1221,7 +1235,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
[FromServices] IRepository<Trial> _trialRepository)
|
[FromServices] IRepository<Trial> _trialRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstNotNullAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstNotNullAsync();
|
||||||
|
|
||||||
if (criterion.CriterionType != CriterionType.RECIST1Point1)
|
if (criterion.CriterionType != CriterionType.RECIST1Point1)
|
||||||
{
|
{
|
||||||
|
@ -1230,9 +1244,9 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
}
|
}
|
||||||
//产生一致性分析的Subject
|
//产生一致性分析的Subject
|
||||||
|
|
||||||
var subjectQuerybal = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct();
|
var subjectQuerybal = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct();
|
||||||
|
|
||||||
var allList = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
|
var allList = await _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
|
||||||
.Where(t => (t.IsSelfAnalysis == true || t.IsSelfAnalysis == null) && t.VisitTaskNum > 0) //一致性分析的结果 + 正常任务的结果 + 仅仅访视的结果 +去除基线
|
.Where(t => (t.IsSelfAnalysis == true || t.IsSelfAnalysis == null) && t.VisitTaskNum > 0) //一致性分析的结果 + 正常任务的结果 + 仅仅访视的结果 +去除基线
|
||||||
|
|
||||||
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
||||||
|
@ -1281,10 +1295,10 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
|
exportInfo.CriterionName = await _readingQuestionCriterionTrialRepository.Where(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSelfAnalysisList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SelftAnalysisExport));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSelfAnalysisList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SelftAnalysisExport));
|
||||||
}
|
}
|
||||||
|
@ -1304,7 +1318,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
[FromServices] IDictionaryService _dictionaryService,
|
[FromServices] IDictionaryService _dictionaryService,
|
||||||
[FromServices] IRepository<Trial> _trialRepository)
|
[FromServices] IRepository<Trial> _trialRepository)
|
||||||
{
|
{
|
||||||
var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstNotNullAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstNotNullAsync();
|
||||||
|
|
||||||
if (criterion.CriterionType != CriterionType.RECIST1Point1)
|
if (criterion.CriterionType != CriterionType.RECIST1Point1)
|
||||||
{
|
{
|
||||||
|
@ -1314,9 +1328,9 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
//产生组间一致性分析的Subject
|
//产生组间一致性分析的Subject
|
||||||
|
|
||||||
var subjectQuerybal = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == false).Select(t => t.SubjectId).Distinct();
|
var subjectQuerybal = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == false).Select(t => t.SubjectId).Distinct();
|
||||||
|
|
||||||
var allList = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
|
var allList = await _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
|
||||||
.Where(t => (t.IsSelfAnalysis == false || t.IsSelfAnalysis == null) && t.VisitTaskNum > 0) //一致性分析的结果 + 正常任务的结果 +仅仅访视的结果
|
.Where(t => (t.IsSelfAnalysis == false || t.IsSelfAnalysis == null) && t.VisitTaskNum > 0) //一致性分析的结果 + 正常任务的结果 +仅仅访视的结果
|
||||||
|
|
||||||
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
||||||
|
@ -1385,10 +1399,10 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
|
exportInfo.CriterionName = await _readingQuestionCriterionTrialRepository.Where(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(newList, _userInfo.TimeZoneId); ;
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(newList, _userInfo.TimeZoneId); ;
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialGroupAnalysisList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(GroupAnalysisExport));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialGroupAnalysisList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(GroupAnalysisExport));
|
||||||
}
|
}
|
||||||
|
@ -1427,7 +1441,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
var list = new List<ExportDocumentDes>();
|
var list = new List<ExportDocumentDes>();
|
||||||
var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == trialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstNotNullAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstNotNullAsync();
|
||||||
|
|
||||||
if (criterion.CriterionType == CriterionType.RECIST1Point1)
|
if (criterion.CriterionType == CriterionType.RECIST1Point1)
|
||||||
{
|
{
|
||||||
|
@ -1442,7 +1456,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = _repository.Where<CommonDocument>(t => list.Select(c => c.Code).Contains(t.Code)).Select(c => new ExportDocumentDes() { Code = c.Code, FileName = _userInfo.IsEn_Us ? c.Name : c.NameCN }).ToList();
|
var result = _commonDocumentRepository.Where(t => list.Select(c => c.Code).Contains(t.Code)).Select(c => new ExportDocumentDes() { Code = c.Code, FileName = _userInfo.IsEn_Us ? c.Name : c.NameCN }).ToList();
|
||||||
|
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
|
@ -1624,7 +1638,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
|
|
||||||
//每次查询必须是单标准的
|
//每次查询必须是单标准的
|
||||||
var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
|
||||||
|
|
||||||
if (criterion.CriterionType != CriterionType.RECIST1Point1 && criterion.CriterionType != CriterionType.PCWG3)
|
if (criterion.CriterionType != CriterionType.RECIST1Point1 && criterion.CriterionType != CriterionType.PCWG3)
|
||||||
{
|
{
|
||||||
|
@ -1632,7 +1646,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
throw new Exception(_localizer["ExcelExport_UnsupportedExport"]);
|
throw new Exception(_localizer["ExcelExport_UnsupportedExport"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var list = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect)
|
var list = await _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect)
|
||||||
|
|
||||||
//访视和全局查询已签名完成的,裁判可以是未签名,未完成的
|
//访视和全局查询已签名完成的,裁判可以是未签名,未完成的
|
||||||
.Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || (t.ReadingCategory == ReadingCategory.Judge))
|
.Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || (t.ReadingCategory == ReadingCategory.Judge))
|
||||||
|
@ -1665,8 +1679,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.OverallTumorEvaluation_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterion.CriterionType);
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.OverallTumorEvaluation_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterion.CriterionType);
|
||||||
|
@ -1689,9 +1703,9 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
//每次查询必须是单标准的
|
//每次查询必须是单标准的
|
||||||
var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstOrDefaultAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
var query = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
var query = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
|
|
||||||
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
||||||
//.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
//.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||||
|
@ -1725,8 +1739,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1EvaluationOfTumorEfficacyExport), criterion.CriterionType);
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1EvaluationOfTumorEfficacyExport), criterion.CriterionType);
|
||||||
|
@ -1758,9 +1772,9 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
//每次查询必须是单标准的
|
//每次查询必须是单标准的
|
||||||
var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstOrDefaultAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
var query = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
var query = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
|
|
||||||
.WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
|
.WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
|
||||||
.WhereIf(queryVisitTask.TrialSiteId != null, t => t.Subject.TrialSiteId == queryVisitTask.TrialSiteId)
|
.WhereIf(queryVisitTask.TrialSiteId != null, t => t.Subject.TrialSiteId == queryVisitTask.TrialSiteId)
|
||||||
|
@ -1814,8 +1828,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
//处理裁判标记
|
//处理裁判标记
|
||||||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId);
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
||||||
|
|
||||||
|
@ -1849,8 +1863,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId); ;
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId); ;
|
||||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PCWG3DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PCWG3DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
||||||
|
|
||||||
|
|
|
@ -56,11 +56,16 @@ namespace IRaCIS.Application.Services
|
||||||
public class MailVerificationService(
|
public class MailVerificationService(
|
||||||
IRepository<VerificationCode> _verificationCodeRepository,
|
IRepository<VerificationCode> _verificationCodeRepository,
|
||||||
IRepository<SystemBasicData> _systemBasicDatarepository,
|
IRepository<SystemBasicData> _systemBasicDatarepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<UserFeedBack> _userFeedBackRepository,
|
||||||
ITokenService _tokenService,
|
ITokenService _tokenService,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<UserType> _userTypeRepository,
|
IRepository<UserType> _userTypeRepository,
|
||||||
IRepository<Doctor> _doctorTypeRepository,
|
IRepository<Doctor> _doctorTypeRepository,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
|
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IMailVerificationService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, IMailVerificationService
|
||||||
|
@ -351,9 +356,9 @@ namespace IRaCIS.Application.Services
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
|
||||||
|
|
||||||
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == trialSiteSurvey.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurvey.TrialId);
|
||||||
|
|
||||||
var siteInfo = await _repository.FirstOrDefaultAsync<TrialSite>(t => t.TrialId == trialSiteSurvey.TrialId && t.Id == trialSiteSurvey.TrialSiteId, true);
|
var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialSiteSurvey.TrialId && t.Id == trialSiteSurvey.TrialSiteId, true);
|
||||||
|
|
||||||
|
|
||||||
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
@ -718,7 +723,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
public async Task UserFeedBackMail(Guid feedBackId)
|
public async Task UserFeedBackMail(Guid feedBackId)
|
||||||
{
|
{
|
||||||
var feedBack = await _repository.Where<UserFeedBack>(t => t.Id == feedBackId).Include(t => t.CreateUser).ThenInclude(t => t.UserTypeRole).FirstNotNullAsync();
|
var feedBack = await _userFeedBackRepository.Where(t => t.Id == feedBackId).Include(t => t.CreateUser).ThenInclude(t => t.UserTypeRole).FirstNotNullAsync();
|
||||||
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
//发件地址
|
//发件地址
|
||||||
|
@ -734,7 +739,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
|
var userTypeEnumList = emailConfigInfo.EmailNoticeUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList();
|
||||||
|
|
||||||
var emailList = await _repository.Where<User>(t => userTypeEnumList.Contains(t.UserTypeEnum) &&
|
var emailList = await _userRepository.Where(t => userTypeEnumList.Contains(t.UserTypeEnum) &&
|
||||||
(isHaveTrialId ? t.UserTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.EMail, t.UserTypeEnum, t.FullName }).ToListAsync();
|
(isHaveTrialId ? t.UserTrials.Any(t => t.TrialId == feedBack.TrialId) : true)).Select(t => new { t.EMail, t.UserTypeEnum, t.FullName }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
@ -749,10 +754,10 @@ namespace IRaCIS.Application.Services
|
||||||
if (feedBack.VisitTaskId != null)
|
if (feedBack.VisitTaskId != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.IRImageError).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
|
var emailType = await _dictionaryRepository.Where(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.IRImageError).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
var info = await _repository.Where<VisitTask>(t => t.Id == feedBack.VisitTaskId).Select(t => new { t.Trial.ResearchProgramNo, t.Trial.TrialCode, SubejctCode = t.Subject.Code, t.SourceSubjectVisit.VisitName }).FirstNotNullAsync();
|
var info = await _visitTaskRepository.Where(t => t.Id == feedBack.VisitTaskId).Select(t => new { t.Trial.ResearchProgramNo, t.Trial.TrialCode, SubejctCode = t.Subject.Code, t.SourceSubjectVisit.VisitName }).FirstNotNullAsync();
|
||||||
|
|
||||||
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
||||||
{
|
{
|
||||||
|
@ -779,10 +784,10 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
else if (feedBack.SubjectVisitId != null)
|
else if (feedBack.SubjectVisitId != null)
|
||||||
{
|
{
|
||||||
var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialSubjectVisitFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
|
var emailType = await _dictionaryRepository.Where(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialSubjectVisitFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
var info = await _repository.Where<SubjectVisit>(t => t.Id == feedBack.SubjectVisitId).Select(t => new { t.Trial.ResearchProgramNo, t.Trial.TrialCode, SubejctCode = t.Subject.Code, t.VisitName }).FirstNotNullAsync();
|
var info = await _subjectVisitRepository.Where(t => t.Id == feedBack.SubjectVisitId).Select(t => new { t.Trial.ResearchProgramNo, t.Trial.TrialCode, SubejctCode = t.Subject.Code, t.VisitName }).FirstNotNullAsync();
|
||||||
|
|
||||||
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
||||||
{
|
{
|
||||||
|
@ -810,10 +815,10 @@ namespace IRaCIS.Application.Services
|
||||||
else if (feedBack.TrialId != null)
|
else if (feedBack.TrialId != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
var emailType = await _repository.Where<Dictionary>(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
|
var emailType = await _dictionaryRepository.Where(t => t.Parent.Code == "Email_BusinessScenario" && t.ParentId != null && t.Code == ((int)EmailBusinessScenario.TrialFeedBack).ToString()).Select(t => _userInfo.IsEn_Us ? t.Value : t.ValueCN).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
var info = await _repository.Where<Trial>(t => t.Id == feedBack.TrialId).Select(t => new { t.ResearchProgramNo, t.TrialCode }).FirstNotNullAsync();
|
var info = await _trialRepository.Where(t => t.Id == feedBack.TrialId).Select(t => new { t.ResearchProgramNo, t.TrialCode }).FirstNotNullAsync();
|
||||||
|
|
||||||
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpGet("{code}")]
|
[HttpGet("{code}")]
|
||||||
public async Task<SystemBasicDataView> GetSystemBasicData(string code)
|
public async Task<SystemBasicDataView> GetSystemBasicData(string code)
|
||||||
{
|
{
|
||||||
return (await _repository.Where<SystemBasicData>(t => t.Code == code).ProjectTo<SystemBasicDataView>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
return (await _systemBasicDataRepository.Where(t => t.Code == code).ProjectTo<SystemBasicDataView>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -159,8 +159,8 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var newAttachment = attachments.Where(t => t.Id == Guid.Empty);
|
var newAttachment = attachments.Where(t => t.Id == Guid.Empty);
|
||||||
|
|
||||||
await _repository.AddRangeAsync(newAttachment);
|
await _attachmentrepository.AddRangeAsync(newAttachment);
|
||||||
await _repository.SaveChangesAsync();
|
await _attachmentrepository.SaveChangesAsync();
|
||||||
|
|
||||||
//_doctorAttachmentRepository.AddRange(newAttachment);
|
//_doctorAttachmentRepository.AddRange(newAttachment);
|
||||||
//_doctorAttachmentRepository.SaveChanges();
|
//_doctorAttachmentRepository.SaveChanges();
|
||||||
|
@ -184,8 +184,8 @@ namespace IRaCIS.Application.Services
|
||||||
attachment.IsOfficial = true;
|
attachment.IsOfficial = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.AddAsync(newAttachment);
|
await _attachmentrepository.AddAsync(newAttachment);
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _attachmentrepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(success, attachment);
|
return ResponseOutput.Result(success, attachment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,15 +214,14 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost("{doctorId:guid}/{attachmentId:guid}/{language}")]
|
[HttpPost("{doctorId:guid}/{attachmentId:guid}/{language}")]
|
||||||
public async Task<IResponseOutput> SetOfficial(Guid doctorId, Guid attachmentId, int language)
|
public async Task<IResponseOutput> SetOfficial(Guid doctorId, Guid attachmentId, int language)
|
||||||
{
|
{
|
||||||
var resumeList = await _attachmentrepository.Where(t => t.DoctorId == doctorId && t.Type == "Resume" && t.Language == language).ToListAsync();
|
var resumeList = await _attachmentrepository.Where(t => t.DoctorId == doctorId && t.Type == "Resume" && t.Language == language,true).ToListAsync();
|
||||||
foreach (var item in resumeList)
|
foreach (var item in resumeList)
|
||||||
{
|
{
|
||||||
if (item.Id == attachmentId) item.IsOfficial = true;
|
if (item.Id == attachmentId) item.IsOfficial = true;
|
||||||
else item.IsOfficial = false;
|
else item.IsOfficial = false;
|
||||||
await _repository.UpdateAsync(item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
return ResponseOutput.Result(await _attachmentrepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -8,7 +8,11 @@ using Microsoft.AspNetCore.Mvc;
|
||||||
namespace IRaCIS.Application.Services
|
namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
[ApiExplorerSettings(GroupName = "Reviewer")]
|
[ApiExplorerSettings(GroupName = "Reviewer")]
|
||||||
public class DoctorListService (IRepository<Doctor> _doctorRepository) : BaseService, IDoctorListQueryService
|
public class DoctorListService (
|
||||||
|
IRepository<Doctor> _doctorRepository,
|
||||||
|
IRepository<Enroll> _enrollRepository,
|
||||||
|
IRepository<EnrollDetail> _enrollDetailRepository,
|
||||||
|
IRepository<Trial> _trialRepository) : BaseService, IDoctorListQueryService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +66,7 @@ namespace IRaCIS.Application.Services
|
||||||
ReviewerSelectionQueryDTO inQuery)
|
ReviewerSelectionQueryDTO inQuery)
|
||||||
{
|
{
|
||||||
//项目配置需要的医生过滤 2表示混合
|
//项目配置需要的医生过滤 2表示混合
|
||||||
var trialConfig = await _repository.Where<Trial>(s => s.Id == inQuery.TrialId).Select(t=>new { t.AttendedReviewerTypeEnumList ,t.TrialType} ).FirstOrDefaultAsync().IfNullThrowException();
|
var trialConfig = await _trialRepository.Where(s => s.Id == inQuery.TrialId).Select(t=>new { t.AttendedReviewerTypeEnumList ,t.TrialType} ).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
//var nation = trialConfig.AttendedReviewerType;
|
//var nation = trialConfig.AttendedReviewerType;
|
||||||
// 临床项目经验 多选
|
// 临床项目经验 多选
|
||||||
|
@ -97,7 +101,7 @@ namespace IRaCIS.Application.Services
|
||||||
var result = await query.ToPagedListAsync(inQuery);
|
var result = await query.ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
//是否已申请 申请时间 申请人
|
//是否已申请 申请时间 申请人
|
||||||
var doctorStateList = await _repository.Where<EnrollDetail>(x => x.TrialId == inQuery.TrialId && x.EnrollStatus == EnrollStatus.HasApplyDownloadResume)
|
var doctorStateList = await _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus == EnrollStatus.HasApplyDownloadResume)
|
||||||
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
result.CurrentPageData.ToList().ForEach(doctor =>
|
result.CurrentPageData.ToList().ForEach(doctor =>
|
||||||
|
@ -128,7 +132,7 @@ namespace IRaCIS.Application.Services
|
||||||
ReviewerSubmissionQueryDTO inQuery)
|
ReviewerSubmissionQueryDTO inQuery)
|
||||||
{
|
{
|
||||||
|
|
||||||
var doctorQuery = _repository.Where<Enroll>(x => x.TrialId == inQuery.TrialId)
|
var doctorQuery = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||||
//提交CRO 以及下载简历列表
|
//提交CRO 以及下载简历列表
|
||||||
.WhereIf(inQuery.IntoGroupSearchState == 1, t => t.EnrollStatus >= EnrollStatus.HasApplyDownloadResume)
|
.WhereIf(inQuery.IntoGroupSearchState == 1, t => t.EnrollStatus >= EnrollStatus.HasApplyDownloadResume)
|
||||||
//CRO确认列表 状态为 已提交CRO
|
//CRO确认列表 状态为 已提交CRO
|
||||||
|
@ -138,7 +142,7 @@ namespace IRaCIS.Application.Services
|
||||||
var doctorPageList = await doctorQuery.ToPagedListAsync(inQuery);
|
var doctorPageList = await doctorQuery.ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
|
|
||||||
var enrollStateList = await _repository.Where<EnrollDetail>(x => x.TrialId == inQuery.TrialId)
|
var enrollStateList = await _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||||
//提交CRO 以及下载简历列表
|
//提交CRO 以及下载简历列表
|
||||||
.WhereIf(inQuery.IntoGroupSearchState == 1, t => t.EnrollStatus == EnrollStatus.HasCommittedToCRO)
|
.WhereIf(inQuery.IntoGroupSearchState == 1, t => t.EnrollStatus == EnrollStatus.HasCommittedToCRO)
|
||||||
//CRO确认列表 状态为 已提交CRO
|
//CRO确认列表 状态为 已提交CRO
|
||||||
|
@ -166,7 +170,7 @@ namespace IRaCIS.Application.Services
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM)
|
||||||
{
|
{
|
||||||
//SPM 要看到提交的时间 提交人
|
//SPM 要看到提交的时间 提交人
|
||||||
var enrollCommitList = await _repository.Where<EnrollDetail>(x => x.TrialId == inQuery.TrialId)
|
var enrollCommitList = await _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||||
//提交CRO 以及下载简历列表
|
//提交CRO 以及下载简历列表
|
||||||
.WhereIf(inQuery.IntoGroupSearchState == 4, t => t.EnrollStatus == EnrollStatus.HasCommittedToCRO)
|
.WhereIf(inQuery.IntoGroupSearchState == 4, t => t.EnrollStatus == EnrollStatus.HasCommittedToCRO)
|
||||||
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
@ -195,7 +199,7 @@ namespace IRaCIS.Application.Services
|
||||||
//public async Task<PageOutput<ConfirmationReviewerDTO>> GetSPMSubmissionOrApprovalReviewerList(
|
//public async Task<PageOutput<ConfirmationReviewerDTO>> GetSPMSubmissionOrApprovalReviewerList(
|
||||||
// ReviewerSubmissionQueryDTO param)
|
// ReviewerSubmissionQueryDTO param)
|
||||||
//{
|
//{
|
||||||
// var doctorQuery = _repository.Where<Enroll>(x => x.TrialId == param.TrialId)
|
// var doctorQuery = _enrollRepository(x => x.TrialId == param.TrialId)
|
||||||
// //提交CRO 以及下载简历列表
|
// //提交CRO 以及下载简历列表
|
||||||
// .WhereIf(param.IntoGroupSearchState == 1, t => t.EnrollStatus >= (int)EnrollStatus.HasApplyDownloadResume)
|
// .WhereIf(param.IntoGroupSearchState == 1, t => t.EnrollStatus >= (int)EnrollStatus.HasApplyDownloadResume)
|
||||||
// //CRO确认列表 状态为 已提交CRO
|
// //CRO确认列表 状态为 已提交CRO
|
||||||
|
@ -205,7 +209,7 @@ namespace IRaCIS.Application.Services
|
||||||
// var doctorPageList = await doctorQuery.ToPagedListAsync(param.PageIndex, param.PageSize, param.SortField == "" ? "Code" : param.SortField, param.Asc);
|
// var doctorPageList = await doctorQuery.ToPagedListAsync(param.PageIndex, param.PageSize, param.SortField == "" ? "Code" : param.SortField, param.Asc);
|
||||||
|
|
||||||
|
|
||||||
// var enrollStateList = await _repository.Where<EnrollDetail>(x => x.TrialId == param.TrialId)
|
// var enrollStateList = await _enrollDetailRepository.Where(x => x.TrialId == param.TrialId)
|
||||||
// //提交CRO 以及下载简历列表
|
// //提交CRO 以及下载简历列表
|
||||||
// .WhereIf(param.IntoGroupSearchState == 1, t => t.EnrollStatus == (int)EnrollStatus.HasCommittedToCRO)
|
// .WhereIf(param.IntoGroupSearchState == 1, t => t.EnrollStatus == (int)EnrollStatus.HasCommittedToCRO)
|
||||||
// //CRO确认列表 状态为 已提交CRO
|
// //CRO确认列表 状态为 已提交CRO
|
||||||
|
@ -236,12 +240,12 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var doctorQuery = _repository.Where<Enroll>(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup)
|
var doctorQuery = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus >= EnrollStatus.InviteIntoGroup)
|
||||||
.ProjectTo<ConfirmationReviewerDTO>(_mapper.ConfigurationProvider);
|
.ProjectTo<ConfirmationReviewerDTO>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
var doctorPageList = await doctorQuery.ToPagedListAsync(inQuery);
|
var doctorPageList = await doctorQuery.ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
var enrollStateList = await _repository.Where<EnrollDetail>(x => x.TrialId == inQuery.TrialId && x.EnrollStatus > EnrollStatus.InviteIntoGroup)
|
var enrollStateList = await _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId && x.EnrollStatus > EnrollStatus.InviteIntoGroup)
|
||||||
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,12 @@ namespace IRaCIS.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Reviewer")]
|
[ApiExplorerSettings(GroupName = "Reviewer")]
|
||||||
public class DoctorService(
|
public class DoctorService(
|
||||||
IRepository<Doctor> _doctorRepository,
|
IRepository<Doctor> _doctorRepository,
|
||||||
|
IRepository<DoctorDictionary> _doctorDictionaryRepository,
|
||||||
IRepository<Enroll> _enrollRepository,
|
IRepository<Enroll> _enrollRepository,
|
||||||
IRepository<Attachment> _attachmentRepository,
|
IRepository<Attachment> _attachmentRepository,
|
||||||
IRepository<DoctorCriterionFile> _doctorCriterionFileRepository,
|
IRepository<DoctorCriterionFile> _doctorCriterionFileRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<Vacation> _vacationRepository,
|
||||||
IRepository<TrialPaymentPrice> _trialExtRepository
|
IRepository<TrialPaymentPrice> _trialExtRepository
|
||||||
) : BaseService, IDoctorService
|
) : BaseService, IDoctorService
|
||||||
{
|
{
|
||||||
|
@ -71,7 +73,7 @@ namespace IRaCIS.Application.Services
|
||||||
//await _repository.AddAsync(new UserDoctor() { DoctorId = doctor.Id, UserId = _userInfo.Id });
|
//await _repository.AddAsync(new UserDoctor() { DoctorId = doctor.Id, UserId = _userInfo.Id });
|
||||||
//_userDoctorRepository.Add(new UserDoctor() { DoctorId = doctor.Id, UserId = _userInfo.Id });
|
//_userDoctorRepository.Add(new UserDoctor() { DoctorId = doctor.Id, UserId = _userInfo.Id });
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _doctorDictionaryRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(success, _mapper.Map<DoctorBasicInfoCommand>(doctor));
|
return ResponseOutput.Result(success, _mapper.Map<DoctorBasicInfoCommand>(doctor));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -95,18 +97,18 @@ namespace IRaCIS.Application.Services
|
||||||
var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException();
|
var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException();
|
||||||
|
|
||||||
//删除中间表 Title对应的记录
|
//删除中间表 Title对应的记录
|
||||||
await _repository.BatchDeleteAsync<DoctorDictionary>(t => t.DoctorId == updateModel.Id && t.KeyName == StaticData.Title);
|
await _doctorDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.DoctorId == updateModel.Id && t.KeyName == StaticData.Title);
|
||||||
|
|
||||||
|
|
||||||
var adddata = new List<DoctorDictionary>();
|
var adddata = new List<DoctorDictionary>();
|
||||||
//重新插入新的 Title记录
|
//重新插入新的 Title记录
|
||||||
updateModel.TitleIds.ForEach(titleId => adddata.Add(new DoctorDictionary() { DoctorId = updateModel.Id.Value, KeyName = StaticData.Title, DictionaryId = titleId }));
|
updateModel.TitleIds.ForEach(titleId => adddata.Add(new DoctorDictionary() { DoctorId = updateModel.Id.Value, KeyName = StaticData.Title, DictionaryId = titleId }));
|
||||||
|
|
||||||
await _repository.AddRangeAsync(adddata);
|
await _doctorDictionaryRepository.AddRangeAsync(adddata);
|
||||||
|
|
||||||
_mapper.Map(basicInfoModel, doctor);
|
_mapper.Map(basicInfoModel, doctor);
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _doctorDictionaryRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success, basicInfoModel);
|
return ResponseOutput.Result(success, basicInfoModel);
|
||||||
|
|
||||||
|
@ -295,7 +297,7 @@ namespace IRaCIS.Application.Services
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
var entity = await _repository.InsertOrUpdateAsync<Doctor, EmploymentCommand>(doctorWorkInfoModel, true);
|
var entity = await _doctorRepository.InsertOrUpdateAsync(doctorWorkInfoModel, true);
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
@ -364,7 +366,7 @@ namespace IRaCIS.Application.Services
|
||||||
//_doctorDictionaryRepository.Delete(t =>
|
//_doctorDictionaryRepository.Delete(t =>
|
||||||
// t.DoctorId == specialtyUpdateModel.Id && t.KeyName == StaticData.ReadingType);
|
// t.DoctorId == specialtyUpdateModel.Id && t.KeyName == StaticData.ReadingType);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<DoctorDictionary>(t =>
|
await _doctorDictionaryRepository.BatchDeleteNoTrackingAsync(t =>
|
||||||
t.DoctorId == specialtyUpdateModel.Id && (t.KeyName == StaticData.Subspeciality || t.KeyName == StaticData.ReadingType));
|
t.DoctorId == specialtyUpdateModel.Id && (t.KeyName == StaticData.Subspeciality || t.KeyName == StaticData.ReadingType));
|
||||||
|
|
||||||
|
|
||||||
|
@ -388,11 +390,11 @@ namespace IRaCIS.Application.Services
|
||||||
DictionaryId = subspecialityId
|
DictionaryId = subspecialityId
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await _repository.AddRangeAsync(adddata);
|
await _doctorDictionaryRepository.AddRangeAsync(adddata);
|
||||||
|
|
||||||
_mapper.Map(specialtyUpdateModel, doctor);
|
_mapper.Map(specialtyUpdateModel, doctor);
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _doctorDictionaryRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
|
|
||||||
|
|
||||||
|
@ -518,7 +520,7 @@ namespace IRaCIS.Application.Services
|
||||||
var doctor = (await _doctorRepository
|
var doctor = (await _doctorRepository
|
||||||
.ProjectTo<ResumeConfirmDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync(t => t.Id == doctorId)).IfNullThrowException();
|
.ProjectTo<ResumeConfirmDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync(t => t.Id == doctorId)).IfNullThrowException();
|
||||||
|
|
||||||
doctor.InHoliday = (await _repository.CountAsync<Vacation>(x => x.DoctorId == doctorId && x.EndDate <= appDateTimeNow && x.StartDate <= appDateTimeNow)) > 0;
|
doctor.InHoliday = (await _vacationRepository.CountAsync(x => x.DoctorId == doctorId && x.EndDate <= appDateTimeNow && x.StartDate <= appDateTimeNow)) > 0;
|
||||||
|
|
||||||
return doctor;
|
return doctor;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace IRaCIS.Application.Services
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
await _educationRepository.AddAsync(doctorEducationInfo);
|
await _educationRepository.AddAsync(doctorEducationInfo);
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _educationRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success, doctorEducationInfo.Id.ToString());
|
return ResponseOutput.Result(success, doctorEducationInfo.Id.ToString());
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
_mapper.Map(educationInfoViewModel, needUpdate);
|
_mapper.Map(educationInfoViewModel, needUpdate);
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _educationRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(success);
|
return ResponseOutput.Ok(success);
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ namespace IRaCIS.Application.Services
|
||||||
//}
|
//}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var entity = await _repository.InsertOrUpdateAsync<Postgraduate, PostgraduateCommand>(postgraduateViewModel, true);
|
var entity = await _postgraduateRepository.InsertOrUpdateAsync(postgraduateViewModel, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -126,7 +126,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpDelete("{doctorId:guid}")]
|
[HttpDelete("{doctorId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePostgraduateInfo(Guid doctorId)
|
public async Task<IResponseOutput> DeletePostgraduateInfo(Guid doctorId)
|
||||||
{
|
{
|
||||||
var success = await _repository.BatchDeleteAsync<Postgraduate>(o => o.Id == doctorId);
|
var success = await _postgraduateRepository.BatchDeleteNoTrackingAsync(o => o.Id == doctorId);
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||||
namespace IRaCIS.Application.Services
|
namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
[ApiExplorerSettings(GroupName = "Reviewer")]
|
[ApiExplorerSettings(GroupName = "Reviewer")]
|
||||||
public class ResearchPublicationService(IRepository<ResearchPublication> researchPublicationRepository) : BaseService, IResearchPublicationService
|
public class ResearchPublicationService(IRepository<ResearchPublication> _researchPublicationRepository) : BaseService, IResearchPublicationService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpGet("{doctorId:guid}")]
|
[HttpGet("{doctorId:guid}")]
|
||||||
public async Task<ResearchPublicationDTO> GetResearchPublication(Guid doctorId)
|
public async Task<ResearchPublicationDTO> GetResearchPublication(Guid doctorId)
|
||||||
{
|
{
|
||||||
var doctorScientificResearchInfo = await researchPublicationRepository.Where(o => o.DoctorId == doctorId)
|
var doctorScientificResearchInfo = await _researchPublicationRepository.Where(o => o.DoctorId == doctorId)
|
||||||
.ProjectTo<ResearchPublicationDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
.ProjectTo<ResearchPublicationDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||||
|
|
||||||
return doctorScientificResearchInfo!;
|
return doctorScientificResearchInfo!;
|
||||||
|
@ -28,7 +28,7 @@ namespace IRaCIS.Application.Services
|
||||||
public async Task<IResponseOutput> AddOrUpdateResearchPublication(ResearchPublicationDTO param)
|
public async Task<IResponseOutput> AddOrUpdateResearchPublication(ResearchPublicationDTO param)
|
||||||
{
|
{
|
||||||
|
|
||||||
var entity = await _repository.InsertOrUpdateAsync<ResearchPublication, ResearchPublicationDTO>(param, true);
|
var entity = await _researchPublicationRepository.InsertOrUpdateAsync(param, true);
|
||||||
|
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ namespace IRaCIS.Application.Services
|
||||||
public class TrialExperienceService(
|
public class TrialExperienceService(
|
||||||
IRepository<TrialExperience> _trialExperienceRepository,
|
IRepository<TrialExperience> _trialExperienceRepository,
|
||||||
IRepository<Doctor> _doctorRepository,
|
IRepository<Doctor> _doctorRepository,
|
||||||
|
IRepository<TrialExperienceCriteria> _trialExperienceCriteriaRepository,
|
||||||
IRepository<Attachment> _attachmentRepository
|
IRepository<Attachment> _attachmentRepository
|
||||||
) : BaseService, ITrialExperienceService
|
) : BaseService, ITrialExperienceService
|
||||||
{
|
{
|
||||||
|
@ -67,7 +68,7 @@ namespace IRaCIS.Application.Services
|
||||||
var trialExperience =
|
var trialExperience =
|
||||||
_mapper.Map<TrialExperience>(trialExperienceViewModel);
|
_mapper.Map<TrialExperience>(trialExperienceViewModel);
|
||||||
|
|
||||||
trialExperience = await _repository.AddAsync(trialExperience);
|
trialExperience = await _trialExperienceRepository.AddAsync(trialExperience);
|
||||||
|
|
||||||
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
||||||
trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria()
|
trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria()
|
||||||
|
@ -78,22 +79,20 @@ namespace IRaCIS.Application.Services
|
||||||
TrialExperienceId = trialExperience.Id
|
TrialExperienceId = trialExperience.Id
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await _repository.AddRangeAsync(criteriaList);
|
await _trialExperienceCriteriaRepository.AddRangeAsync(criteriaList);
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialExperienceCriteriaRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(success, trialExperience.Id);
|
return ResponseOutput.Result(success, trialExperience.Id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var needUpdate = await _trialExperienceRepository.FirstOrDefaultAsync(t => t.Id == trialExperienceViewModel.Id);
|
var needUpdate = trialExperienceViewModel;
|
||||||
|
|
||||||
if (needUpdate == null) return Null404NotFound(needUpdate);
|
|
||||||
|
|
||||||
_mapper.Map(trialExperienceViewModel, needUpdate);
|
await _trialExperienceRepository.UpdateFromDTOAsync(trialExperienceViewModel);
|
||||||
await _repository.UpdateAsync(needUpdate);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialExperienceCriteria>(t => t.TrialExperienceId == needUpdate.Id);
|
await _trialExperienceCriteriaRepository.BatchDeleteNoTrackingAsync(t => t.TrialExperienceId == needUpdate.Id);
|
||||||
|
|
||||||
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
||||||
|
|
||||||
|
@ -101,13 +100,13 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
DoctorId = trialExperienceViewModel.DoctorId,
|
DoctorId = trialExperienceViewModel.DoctorId,
|
||||||
EvaluationCriteriaId = t,
|
EvaluationCriteriaId = t,
|
||||||
TrialExperienceId = needUpdate.Id
|
TrialExperienceId = needUpdate.Id.Value
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await _repository.AddRangeAsync<TrialExperienceCriteria>(criteriaList);
|
await _trialExperienceCriteriaRepository.AddRangeAsync(criteriaList);
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialExperienceCriteriaRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(success, trialExperienceViewModel.Id);
|
return ResponseOutput.Result(success, trialExperienceViewModel.Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,7 +118,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpDelete, Route("{doctorId:guid}")]
|
[HttpDelete, Route("{doctorId:guid}")]
|
||||||
public async Task<IResponseOutput> DeleteTrialExperience(Guid doctorId)
|
public async Task<IResponseOutput> DeleteTrialExperience(Guid doctorId)
|
||||||
{
|
{
|
||||||
var success = await _repository.BatchDeleteAsync<TrialExperience>(o => o.Id == doctorId);
|
var success = await _trialExperienceRepository.BatchDeleteNoTrackingAsync(o => o.Id == doctorId);
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -133,7 +132,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
//_attachmentRepository.Delete(t => t.DoctorId == updateGCPExperienceParam.Id && t.Type == StaticData.GCP);
|
//_attachmentRepository.Delete(t => t.DoctorId == updateGCPExperienceParam.Id && t.Type == StaticData.GCP);
|
||||||
|
|
||||||
var successs = await _repository.BatchUpdateAsync<Doctor>(o => o.Id == updateGCPExperienceParam.Id, u => new Doctor()
|
var successs = await _doctorRepository.BatchUpdateNoTrackingAsync(o => o.Id == updateGCPExperienceParam.Id, u => new Doctor()
|
||||||
{
|
{
|
||||||
GCP = updateGCPExperienceParam.GCP,
|
GCP = updateGCPExperienceParam.GCP,
|
||||||
GCPId = (updateGCPExperienceParam.GCP==0||updateGCPExperienceParam.GCPId==null)?Guid.Empty: updateGCPExperienceParam.GCPId!.Value
|
GCPId = (updateGCPExperienceParam.GCP==0||updateGCPExperienceParam.GCPId==null)?Guid.Empty: updateGCPExperienceParam.GCPId!.Value
|
||||||
|
@ -141,7 +140,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (updateGCPExperienceParam.GCP == 0 )
|
if (updateGCPExperienceParam.GCP == 0 )
|
||||||
{
|
{
|
||||||
await _repository.BatchDeleteAsync<Attachment>(a => a.DoctorId == updateGCPExperienceParam.Id && a.Type=="GCP");
|
await _attachmentRepository.BatchDeleteNoTrackingAsync(a => a.DoctorId == updateGCPExperienceParam.Id && a.Type=="GCP");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseOutput.Result(successs, updateGCPExperienceParam.GCPId.ToString());
|
return ResponseOutput.Result(successs, updateGCPExperienceParam.GCPId.ToString());
|
||||||
|
@ -155,7 +154,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> UpdateOtherExperience(ClinicalExperienceCommand updateOtherClinicalExperience)
|
public async Task<IResponseOutput> UpdateOtherExperience(ClinicalExperienceCommand updateOtherClinicalExperience)
|
||||||
{
|
{
|
||||||
var success = await _repository.BatchUpdateAsync<Doctor>(o => o.Id == updateOtherClinicalExperience.DoctorId, u => new Doctor()
|
var success = await _doctorRepository.BatchUpdateNoTrackingAsync(o => o.Id == updateOtherClinicalExperience.DoctorId, u => new Doctor()
|
||||||
{
|
{
|
||||||
OtherClinicalExperience = updateOtherClinicalExperience.OtherClinicalExperience ?? string.Empty,
|
OtherClinicalExperience = updateOtherClinicalExperience.OtherClinicalExperience ?? string.Empty,
|
||||||
OtherClinicalExperienceCN = updateOtherClinicalExperience.OtherClinicalExperienceCN ?? string.Empty
|
OtherClinicalExperienceCN = updateOtherClinicalExperience.OtherClinicalExperienceCN ?? string.Empty
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
var result = await _vacationRepository.AddAsync(_mapper.Map<Vacation>(param));
|
var result = await _vacationRepository.AddAsync(_mapper.Map<Vacation>(param));
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _vacationRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success, result.Id);
|
return ResponseOutput.Result(success, result.Id);
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
public class EmailSendService(
|
public class EmailSendService(
|
||||||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
|
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : BaseService, IEmailSendService
|
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : BaseService, IEmailSendService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -66,7 +69,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
result = isPDConfirm;
|
result = isPDConfirm;
|
||||||
}
|
}
|
||||||
|
|
||||||
var taskInfo = await _repository.Where<VisitTask>(t => t.Id == visitTaskId).Select(t => new
|
var taskInfo = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => new
|
||||||
{
|
{
|
||||||
t.Subject.TrialSiteId,
|
t.Subject.TrialSiteId,
|
||||||
t.Trial.ResearchProgramNo,
|
t.Trial.ResearchProgramNo,
|
||||||
|
@ -124,10 +127,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
public async Task SendTrialImageQCTaskEmailAsync(Guid trialId)
|
public async Task SendTrialImageQCTaskEmailAsync(Guid trialId)
|
||||||
{
|
{
|
||||||
var isEn_us = false;
|
var isEn_us = false;
|
||||||
var trialInfo = await _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstNotNullAsync();
|
var trialInfo = await _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstNotNullAsync();
|
||||||
|
|
||||||
//找到 该项目的IQC 用户Id
|
//找到 该项目的IQC 用户Id
|
||||||
var userList = await _repository.Where<TrialUser>(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
|
var userList = await _trialUserRepository.Where(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
|
||||||
|
|
||||||
//判断是否任务可以领取 ,可以的话 发送邮件
|
//判断是否任务可以领取 ,可以的话 发送邮件
|
||||||
var userIdList = userList.Select(t => t.UserId).ToList();
|
var userIdList = userList.Select(t => t.UserId).ToList();
|
||||||
|
@ -177,10 +180,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
public async Task SendTrialQCQuestionEmailAsync(Guid trialId)
|
public async Task SendTrialQCQuestionEmailAsync(Guid trialId)
|
||||||
{
|
{
|
||||||
var isEn_us = false;
|
var isEn_us = false;
|
||||||
var trialInfo =await _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr, t.DeclarationTypeEnumList }).FirstNotNullAsync();
|
var trialInfo =await _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr, t.DeclarationTypeEnumList }).FirstNotNullAsync();
|
||||||
|
|
||||||
//找到 该项目的IQC 用户Id
|
//找到 该项目的IQC 用户Id
|
||||||
var userList = await _repository.Where<TrialUser>(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
|
var userList = await _trialUserRepository.Where(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
|
||||||
|
|
||||||
//判断是否任务可以领取 ,可以的话 发送邮件
|
//判断是否任务可以领取 ,可以的话 发送邮件
|
||||||
|
|
||||||
|
@ -232,10 +235,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var isEn_us = false;
|
var isEn_us = false;
|
||||||
|
|
||||||
var trialInfo = await _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstNotNullAsync();
|
var trialInfo = await _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstNotNullAsync();
|
||||||
|
|
||||||
//找到 该项目的CRC 用户Id
|
//找到 该项目的CRC 用户Id
|
||||||
var userList = await _repository.Where<TrialUser>(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
|
var userList = await _trialUserRepository.Where(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Select(t => new { t.UserId, t.User.FullName }).ToListAsync();
|
||||||
|
|
||||||
//判断是否任务可以领取 ,可以的话 发送邮件
|
//判断是否任务可以领取 ,可以的话 发送邮件
|
||||||
|
|
||||||
|
@ -319,7 +322,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var allUserTypeEnumList = toUserTypeEnumList.Union(copyUserTypeEnumList).Distinct().ToList();
|
var allUserTypeEnumList = toUserTypeEnumList.Union(copyUserTypeEnumList).Distinct().ToList();
|
||||||
|
|
||||||
var allUserList = await _repository.Where<TrialUser>(t => t.TrialId == trialId && allUserTypeEnumList.Contains(t.User.UserTypeEnum)).Select(t => new { t.UserId, t.User.EMail, t.User.FullName, t.User.UserTypeEnum }).ToListAsync();
|
var allUserList = await _trialUserRepository.Where(t => t.TrialId == trialId && allUserTypeEnumList.Contains(t.User.UserTypeEnum)).Select(t => new { t.UserId, t.User.EMail, t.User.FullName, t.User.UserTypeEnum }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
var toUserList = allUserList.Where(t => toUserTypeEnumList.Contains(t.UserTypeEnum))
|
var toUserList = allUserList.Where(t => toUserTypeEnumList.Contains(t.UserTypeEnum))
|
||||||
|
@ -332,7 +335,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
if (trialSiteId != null && toUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
|
if (trialSiteId != null && toUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
|
||||||
{
|
{
|
||||||
var curentSiteUserIdList = _repository.Where<TrialSiteUser>(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
|
var curentSiteUserIdList = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
|
||||||
|
|
||||||
toUserList = toUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
|
toUserList = toUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
|
||||||
}
|
}
|
||||||
|
@ -346,7 +349,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (trialSiteId != null && copyUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
|
if (trialSiteId != null && copyUserTypeEnumList.Any(t => t == UserTypeEnum.ClinicalResearchCoordinator || t == UserTypeEnum.CRA))
|
||||||
{
|
{
|
||||||
var curentSiteUserIdList = _repository.Where<TrialSiteUser>(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
|
var curentSiteUserIdList = _trialSiteUserRepository.Where(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId).Select(t => t.UserId).ToList();
|
||||||
|
|
||||||
copyUserList = copyUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
|
copyUserList = copyUserList.Where(t => (t.UserTypeEnum != UserTypeEnum.CRA && t.UserTypeEnum != UserTypeEnum.ClinicalResearchCoordinator) || curentSiteUserIdList.Contains(t.UserId)).ToList();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class SystemDocumentService(
|
public class SystemDocumentService(
|
||||||
IRepository<SystemDocument> _systemDocumentRepository,
|
IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository) : BaseService, ISystemDocumentService
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository) : BaseService, ISystemDocumentService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -124,7 +125,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
public async Task<IResponseOutput> DeleteSystemDocumentAsync(Guid systemDocumentId)
|
public async Task<IResponseOutput> DeleteSystemDocumentAsync(Guid systemDocumentId)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (await _repository.Where<SystemDocument>(t => t.Id == systemDocumentId).AnyAsync(u => u.SystemDocConfirmedUserList.Any()))
|
if (await _systemDocumentRepository.Where(t => t.Id == systemDocumentId).AnyAsync(u => u.SystemDocConfirmedUserList.Any()))
|
||||||
{
|
{
|
||||||
//---已有用户阅读该文档,并签名,不允许删除。
|
//---已有用户阅读该文档,并签名,不允许删除。
|
||||||
return ResponseOutput.NotOk(_localizer["SystemD_CannotDeleteSignedFile"]);
|
return ResponseOutput.NotOk(_localizer["SystemD_CannotDeleteSignedFile"]);
|
||||||
|
@ -146,10 +147,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var query = from sysDoc in _systemDocumentRepository.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
var query = from sysDoc in _systemDocumentRepository.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
||||||
.WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId)
|
.WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId)
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = _userInfo.Id, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = _userInfo.Id, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
|
|
||||||
join user in _repository.GetQueryable<User>() on _userInfo.Id equals user.Id
|
join user in _userRepository.Where() on _userInfo.Id equals user.Id
|
||||||
|
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,11 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
ISystemDocumentService _systemDocumentService,
|
ISystemDocumentService _systemDocumentService,
|
||||||
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||||
|
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
||||||
|
IRepository<TrialDocNeedConfirmedUserType> _trialDocNeedConfirmedUserTypeRepository,
|
||||||
IRepository<SystemDocument> _systemDocumentRepository,
|
IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository) : BaseService, ITrialDocumentService
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository) : BaseService, ITrialDocumentService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -58,8 +62,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.WhereIf(inQuery.TrialId != null, t => t.TrialId == inQuery.TrialId)
|
.WhereIf(inQuery.TrialId != null, t => t.TrialId == inQuery.TrialId)
|
||||||
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
|
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
join trialUser in _trialUserRepository.Where(t => t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>() on
|
join confirm in _trialDocConfirmedUserRepository.Where() on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
|
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
|
@ -217,17 +221,17 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var trialId = inQuery.TrialId;
|
var trialId = inQuery.TrialId;
|
||||||
|
|
||||||
var trialInfo = await (_repository.Where<Trial>(t => t.Id == inQuery.TrialId, ignoreQueryFilters: true).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync());
|
var trialInfo = await ( _trialRepository.Where(t => t.Id == inQuery.TrialId, ignoreQueryFilters: true).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync());
|
||||||
|
|
||||||
//系统文档查询
|
//系统文档查询
|
||||||
var systemDocumentQueryable = from needConfirmedUserType in _repository.Where<SystemDocNeedConfirmedUserType>(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
|
var systemDocumentQueryable = from needConfirmedUserType in _systemDocNeedConfirmedUserTypeRepository.Where(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)
|
||||||
//.Where(u => u.UserTypeRole.UserList.SelectMany(cc => cc.UserTrials.Where(t => t.TrialId == querySystemDocument.TrialId)).Any(e => e.Trial.TrialFinishedTime < u.SystemDocument.CreateTime))
|
//.Where(u => u.UserTypeRole.UserList.SelectMany(cc => cc.UserTrials.Where(t => t.TrialId == querySystemDocument.TrialId)).Any(e => e.Trial.TrialFinishedTime < u.SystemDocument.CreateTime))
|
||||||
.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
||||||
.WhereIf(!_userInfo.IsAdmin, t => t.SystemDocument.IsDeleted == false || (t.SystemDocument.IsDeleted == true && t.SystemDocument.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
|
.WhereIf(!_userInfo.IsAdmin, t => t.SystemDocument.IsDeleted == false || (t.SystemDocument.IsDeleted == true && t.SystemDocument.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
|
||||||
|
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id)
|
||||||
on needConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on needConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmedUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmedUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
@ -259,8 +263,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.WhereIf(!_userInfo.IsAdmin, t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
.WhereIf(!_userInfo.IsAdmin, t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
.WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
|
.WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
|
||||||
|
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
|
@ -389,15 +393,15 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var trialInfo = (await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync());
|
var trialInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync());
|
||||||
|
|
||||||
var trialDocQuery = from trialDocumentNeedConfirmedUserType in _repository.Where<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == inQuery.TrialId)
|
var trialDocQuery = from trialDocumentNeedConfirmedUserType in _trialDocNeedConfirmedUserTypeRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId)
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||||
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
||||||
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
|
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
|
@ -429,12 +433,12 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var systemDocQuery = from needConfirmEdUserType in _repository.WhereIf<SystemDocNeedConfirmedUserType>(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
var systemDocQuery = from needConfirmEdUserType in _systemDocNeedConfirmedUserTypeRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
||||||
|
|
||||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||||
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
@ -494,7 +498,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpGet("{trialId:guid}")]
|
[HttpGet("{trialId:guid}")]
|
||||||
public async Task<List<TrialUserDto>> GetTrialUserSelect(Guid trialId)
|
public async Task<List<TrialUserDto>> GetTrialUserSelect(Guid trialId)
|
||||||
{
|
{
|
||||||
return await _repository.Where<TrialUser>(t => t.TrialId == trialId)
|
return await _trialUserRepository.Where(t => t.TrialId == trialId)
|
||||||
.Select(t => new TrialUserDto() { UserId = t.UserId, RealName = t.User.FullName, UserName = t.User.UserName })
|
.Select(t => new TrialUserDto() { UserId = t.UserId, RealName = t.User.FullName, UserName = t.User.UserName })
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
}
|
}
|
||||||
|
@ -618,7 +622,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,14 +633,14 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
success = await _repository.SaveChangesAsync();
|
success = await _systemDocConfirmedUserRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(success);
|
return ResponseOutput.Ok(success);
|
||||||
}
|
}
|
||||||
|
@ -646,11 +650,11 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _systemDocConfirmedUserRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(success);
|
return ResponseOutput.Ok(success);
|
||||||
}
|
}
|
||||||
|
@ -661,10 +665,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialDocConfirmedUserRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(success);
|
return ResponseOutput.Ok(success);
|
||||||
}
|
}
|
||||||
|
@ -776,7 +780,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
public List<TrialUserUnionDocumentView> GetTrialUserDocumentList(Guid trialId)
|
public List<TrialUserUnionDocumentView> GetTrialUserDocumentList(Guid trialId)
|
||||||
{
|
{
|
||||||
var query = _repository.Where<TrialUser>(t => t.TrialId == trialId)
|
var query = _trialUserRepository.Where(t => t.TrialId == trialId)
|
||||||
.Select(t => new TrialUserUnionDocumentView()
|
.Select(t => new TrialUserUnionDocumentView()
|
||||||
{
|
{
|
||||||
UserId = t.UserId,
|
UserId = t.UserId,
|
||||||
|
@ -805,8 +809,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
public async Task<PageOutput<DocumentUnionWithUserStatView>> GetTrialSystemDocumentList(DocumentTrialUnionQuery inQuery)
|
public async Task<PageOutput<DocumentUnionWithUserStatView>> GetTrialSystemDocumentList(DocumentTrialUnionQuery inQuery)
|
||||||
{
|
{
|
||||||
var systemDocumentQueryable = _repository
|
var systemDocumentQueryable = _systemDocumentRepository
|
||||||
.WhereIf<SystemDocument>(!_userInfo.IsAdmin, t => t.IsDeleted == false)
|
.WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false)
|
||||||
.Select(t => new DocumentUnionWithUserStatView()
|
.Select(t => new DocumentUnionWithUserStatView()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
|
|
|
@ -40,10 +40,16 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<EmailNoticeConfig> _emailNoticeConfigRepository,
|
IRepository<EmailNoticeConfig> _emailNoticeConfigRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||||||
|
IRepository<ReadingGlobalTaskInfo> _readingGlobalTaskInfoRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<TrialEmailNoticeUser> _trialEmailNoticeUserRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<ReadModule> _readModuleRepository,
|
||||||
|
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IEmailSendService _emailSendService) : BaseService, ITrialEmailNoticeConfigService
|
IEmailSendService _emailSendService) : BaseService, ITrialEmailNoticeConfigService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -308,7 +314,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//入组确认 根据每个标准配置的是否自动发送,发送邮件与否
|
//入组确认 根据每个标准配置的是否自动发送,发送邮件与否
|
||||||
if (businessScenarioEnum == EmailBusinessScenario.EnrollConfirmed)
|
if (businessScenarioEnum == EmailBusinessScenario.EnrollConfirmed)
|
||||||
{
|
{
|
||||||
if (await _repository.Where<ReadingTableQuestionAnswer>().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
|
if (await _readingTableQuestionAnswerRepository.Where().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
|
||||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
|
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
|
||||||
{
|
{
|
||||||
answer = "是";
|
answer = "是";
|
||||||
|
@ -335,7 +341,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (answer == "是")
|
if (answer == "是")
|
||||||
{
|
{
|
||||||
//把另外一个人的任务设置为不加急(如果项目加急是否 subject 加急是否)
|
//把另外一个人的任务设置为不加急(如果项目加急是否 subject 加急是否)
|
||||||
var urgent = _repository.Where<SubjectVisit>(t => t.Id == taskInfo.SourceSubjectVisitId).Select(t => new { IsSubjectUrgent = t.Subject.IsUrgent, t.Trial.IsUrgent }).FirstOrDefault();
|
var urgent = _subjectVisitRepository.Where(t => t.Id == taskInfo.SourceSubjectVisitId).Select(t => new { IsSubjectUrgent = t.Subject.IsUrgent, t.Trial.IsUrgent }).FirstOrDefault();
|
||||||
|
|
||||||
if (urgent?.IsUrgent == false || urgent?.IsSubjectUrgent == false)
|
if (urgent?.IsUrgent == false || urgent?.IsSubjectUrgent == false)
|
||||||
{
|
{
|
||||||
|
@ -487,7 +493,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
// if (taskInfo.ReadingCategory == ReadingCategory.Visit)
|
// if (taskInfo.ReadingCategory == ReadingCategory.Visit)
|
||||||
// {
|
// {
|
||||||
// //存在阅片期 那么就是截止访视
|
// //存在阅片期 那么就是截止访视
|
||||||
// if (await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
|
// if (await _readModuleRepository.Where(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
|
||||||
// {
|
// {
|
||||||
// isNeedSend = false;
|
// isNeedSend = false;
|
||||||
// }
|
// }
|
||||||
|
@ -856,7 +862,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var currentLatestPdVisitId = pdSubjectVisitIdList.Last();
|
var currentLatestPdVisitId = pdSubjectVisitIdList.Last();
|
||||||
//标准配置
|
//标准配置
|
||||||
var trialReadingCriterionConfig = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == trialReadingCriterionId).Select(t => new
|
var trialReadingCriterionConfig = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCriterionId).Select(t => new
|
||||||
{ TrialReadingCriterionId = t.Id, t.ReadingType, t.IsReadingTaskViewInOrder, t.CriterionType, t.ArbitrationRule }).FirstNotNullAsync();
|
{ TrialReadingCriterionId = t.Id, t.ReadingType, t.IsReadingTaskViewInOrder, t.CriterionType, t.ArbitrationRule }).FirstNotNullAsync();
|
||||||
|
|
||||||
// 项目双重
|
// 项目双重
|
||||||
|
@ -902,7 +908,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//仲裁在阅片期上
|
//仲裁在阅片期上
|
||||||
else if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Reading)
|
else if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Reading)
|
||||||
{
|
{
|
||||||
var existReadModule = await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
|
var existReadModule = await _readModuleRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (existReadModule == null)
|
if (existReadModule == null)
|
||||||
|
@ -975,7 +981,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
// {
|
// {
|
||||||
// //存在阅片期 那么就是截止访视
|
// //存在阅片期 那么就是截止访视
|
||||||
|
|
||||||
// var existReadModule = await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
|
// var existReadModule = await _readModuleRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
|
||||||
// .FirstOrDefaultAsync();
|
// .FirstOrDefaultAsync();
|
||||||
// if (existReadModule != null)
|
// if (existReadModule != null)
|
||||||
// {
|
// {
|
||||||
|
@ -1071,20 +1077,20 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (readingCategory == ReadingCategory.Visit)
|
if (readingCategory == ReadingCategory.Visit)
|
||||||
{
|
{
|
||||||
|
|
||||||
visitQuestionAnswer = await _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
visitQuestionAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
answer = visitQuestionAnswer.Answer;
|
answer = visitQuestionAnswer.Answer;
|
||||||
}
|
}
|
||||||
else if (readingCategory == ReadingCategory.Global)
|
else if (readingCategory == ReadingCategory.Global)
|
||||||
{
|
{
|
||||||
var questionAnsewer = await _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.Tumor).OrderByDescending(c => c.VisitTask.VisitTaskNum).FirstNotNullAsync();
|
var questionAnsewer = await _readingGlobalTaskInfoRepository.Where(t => t.GlobalTaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.Tumor).OrderByDescending(c => c.VisitTask.VisitTaskNum).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
answer = questionAnsewer.Answer;
|
answer = questionAnsewer.Answer;
|
||||||
if (string.IsNullOrEmpty(questionAnsewer.Answer))
|
if (string.IsNullOrEmpty(questionAnsewer.Answer))
|
||||||
{
|
{
|
||||||
answer = await _repository.Where<ReadingTaskQuestionAnswer>(t => questionAnsewer.TaskId == t.VisitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor)
|
answer = await _readingTaskQuestionAnswerRepository.Where(t => questionAnsewer.TaskId == t.VisitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor)
|
||||||
.Select(t => t.Answer).FirstOrDefaultAsync();
|
.Select(t => t.Answer).FirstOrDefaultAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1093,7 +1099,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//{
|
//{
|
||||||
// var judgeResultTaskId = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.JudgeResultTaskId).FirstNotNullAsync();
|
// var judgeResultTaskId = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.JudgeResultTaskId).FirstNotNullAsync();
|
||||||
|
|
||||||
// var questionAnsewer = await _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == judgeResultTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
// var questionAnsewer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == judgeResultTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
// answer = questionAnsewer.Answer;
|
// answer = questionAnsewer.Answer;
|
||||||
|
@ -1119,14 +1125,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (readingCategory == ReadingCategory.Visit)
|
if (readingCategory == ReadingCategory.Visit)
|
||||||
{
|
{
|
||||||
|
|
||||||
visitQuestionAnswer = await _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync();
|
visitQuestionAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
answer = visitQuestionAnswer.Answer;
|
answer = visitQuestionAnswer.Answer;
|
||||||
}
|
}
|
||||||
else if (readingCategory == ReadingCategory.Global)
|
else if (readingCategory == ReadingCategory.Global)
|
||||||
{
|
{
|
||||||
var questionAnsewer = await _repository.Where<ReadingGlobalTaskInfo>(t => t.TaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync();
|
var questionAnsewer = await _readingGlobalTaskInfoRepository.Where(t => t.TaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync();
|
||||||
|
|
||||||
answer = questionAnsewer.Answer;
|
answer = questionAnsewer.Answer;
|
||||||
}
|
}
|
||||||
|
@ -1134,7 +1140,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//{
|
//{
|
||||||
// //var judgeResultTaskId = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.JudgeResultTaskId).FirstNotNullAsync();
|
// //var judgeResultTaskId = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.JudgeResultTaskId).FirstNotNullAsync();
|
||||||
|
|
||||||
// var questionAnsewer = await _repository.Where<ReadingTaskQuestionAnswer>(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync();
|
// var questionAnsewer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTaskId && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync();
|
||||||
|
|
||||||
// answer = questionAnsewer.Answer;
|
// answer = questionAnsewer.Answer;
|
||||||
//}
|
//}
|
||||||
|
@ -1278,7 +1284,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
}).FirstNotNullAsync();
|
}).FirstNotNullAsync();
|
||||||
|
|
||||||
var list = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm).Select(t => new { t.CriterionType, TrialReadingCriterionId = t.Id }).ToListAsync();
|
var list = await _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Select(t => new { t.CriterionType, TrialReadingCriterionId = t.Id }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
var addList = _mapper.Map<List<TrialEmailNoticeConfig>>(batchAddList);
|
var addList = _mapper.Map<List<TrialEmailNoticeConfig>>(batchAddList);
|
||||||
|
@ -1374,8 +1380,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var id = (Guid)addOrEditTrialEmailNoticeConfig.Id;
|
var id = (Guid)addOrEditTrialEmailNoticeConfig.Id;
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||||
await _repository.BatchDeleteAsync<TrialEmailBlackUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
await _trialEmailBlackUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||||
|
|
||||||
|
|
||||||
List<TrialEmailNoticeUser> trialEmailNoticeUsers = new List<TrialEmailNoticeUser>();
|
List<TrialEmailNoticeUser> trialEmailNoticeUsers = new List<TrialEmailNoticeUser>();
|
||||||
|
@ -1392,7 +1398,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserType = item, TrialEmailNoticeConfigId = id });
|
trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserType = item, TrialEmailNoticeConfigId = id });
|
||||||
|
|
||||||
}
|
}
|
||||||
await _repository.AddRangeAsync(trialEmailNoticeUsers);
|
await _trialEmailNoticeUserRepository.AddRangeAsync(trialEmailNoticeUsers);
|
||||||
|
|
||||||
foreach (var userid in addOrEditTrialEmailNoticeConfig.BlackUserIdList)
|
foreach (var userid in addOrEditTrialEmailNoticeConfig.BlackUserIdList)
|
||||||
{
|
{
|
||||||
|
@ -1459,7 +1465,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
#region 人员还未加入,可以先配置邮件 历史废弃
|
#region 人员还未加入,可以先配置邮件 历史废弃
|
||||||
|
|
||||||
//var toUserList = await _repository.Where<TrialUser>(t => t.TrialId == config.TrialId)
|
//var toUserList = await _trialUserRepository.Where(t => t.TrialId == config.TrialId)
|
||||||
// .WhereIf(config.ToUserTypeList != null, t => config.ToUserTypeList.Contains(t.User.UserTypeEnum))
|
// .WhereIf(config.ToUserTypeList != null, t => config.ToUserTypeList.Contains(t.User.UserTypeEnum))
|
||||||
// .Select(t => new { t.User.EMail, t.User.FullName }).ToListAsync();
|
// .Select(t => new { t.User.EMail, t.User.FullName }).ToListAsync();
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
|
||||||
public decimal FileSize { get; set; }
|
public long FileSize { get; set; }
|
||||||
|
|
||||||
public bool IsDicomReUpload { get; set; }
|
public bool IsDicomReUpload { get; set; }
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public decimal FileSize { get; set; }
|
public long FileSize { get; set; }
|
||||||
|
|
||||||
public bool IsDicomReUpload { get; set; }
|
public bool IsDicomReUpload { get; set; }
|
||||||
|
|
||||||
|
@ -360,5 +360,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string Path { get; set; } = string.Empty;
|
public string Path { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string HtmlPath { get; set; } = string.Empty;
|
public string HtmlPath { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public decimal FileFize { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<DicomSeries> _seriesRepository,
|
IRepository<DicomSeries> _seriesRepository,
|
||||||
IRepository<DicomInstance> _instanceRepository,
|
IRepository<DicomInstance> _instanceRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<SystemAnonymization> _systemAnonymizationRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IDicomArchiveService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, IDicomArchiveService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -59,7 +60,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var anonymizeList = await _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_repository), TimeSpan.FromDays(7));
|
var anonymizeList = await _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7));
|
||||||
|
|
||||||
var fixedFiledList = anonymizeList.Where(t => t.IsFixed).ToList();
|
var fixedFiledList = anonymizeList.Where(t => t.IsFixed).ToList();
|
||||||
var ircFiledList = anonymizeList.Where(t => t.IsFixed == false).ToList();
|
var ircFiledList = anonymizeList.Where(t => t.IsFixed == false).ToList();
|
||||||
|
|
|
@ -36,7 +36,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IOSSService _oSSService,
|
IOSSService _oSSService,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<StudyMonitor> _studyMonitorRepository,
|
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
|
IRepository<TaskStudy> _taskStudyRepository,
|
||||||
|
IRepository<TaskSeries> _taskSeriesRepository,
|
||||||
|
IRepository<TaskInstance> _taskInstanceRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -99,7 +105,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
await SubejctRandomReadingTaskNameDeal(subjectId, trialReadingCriterionId);
|
await SubejctRandomReadingTaskNameDeal(subjectId, trialReadingCriterionId);
|
||||||
|
|
||||||
var query = _repository.Where<VisitTask>(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.SourceSubjectVisitId != null
|
var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.SourceSubjectVisitId != null
|
||||||
&& t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect)
|
&& t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect)
|
||||||
.Select(u => new SubjectImageUploadDTO()
|
.Select(u => new SubjectImageUploadDTO()
|
||||||
{
|
{
|
||||||
|
@ -174,7 +180,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
study.PatientBirthDate = $"{study.PatientBirthDate[0]}{study.PatientBirthDate[1]}{study.PatientBirthDate[2]}{study.PatientBirthDate[3]}-{study.PatientBirthDate[4]}{study.PatientBirthDate[5]}-{study.PatientBirthDate[6]}{study.PatientBirthDate[7]}";
|
study.PatientBirthDate = $"{study.PatientBirthDate[0]}{study.PatientBirthDate[1]}{study.PatientBirthDate[2]}{study.PatientBirthDate[3]}-{study.PatientBirthDate[4]}{study.PatientBirthDate[5]}-{study.PatientBirthDate[6]}{study.PatientBirthDate[7]}";
|
||||||
}
|
}
|
||||||
|
|
||||||
var dicModalityList = _repository.Where<Dictionary>(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
|
var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
|
||||||
|
|
||||||
|
|
||||||
var modality = study.Modalities;
|
var modality = study.Modalities;
|
||||||
|
@ -237,7 +243,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
#region 获取该subject 已生成任务的访视的检查
|
#region 获取该subject 已生成任务的访视的检查
|
||||||
|
|
||||||
var queryStudy = _repository.Where<VisitTask>(t => t.SubjectId == incommand.SubjectId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id).Select(u => new
|
var queryStudy = _visitTaskRepository.Where(t => t.SubjectId == incommand.SubjectId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id).Select(u => new
|
||||||
{
|
{
|
||||||
VisitTaskId = u.Id,
|
VisitTaskId = u.Id,
|
||||||
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
||||||
|
@ -286,7 +292,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
using (await @lock.AcquireAsync())
|
using (await @lock.AcquireAsync())
|
||||||
{
|
{
|
||||||
//查询数据库获取最大的Code 没有记录则为0
|
//查询数据库获取最大的Code 没有记录则为0
|
||||||
var dbStudyCodeIntMax = _repository.Where<TaskStudy>(s => s.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max();
|
var dbStudyCodeIntMax = _taskStudyRepository.Where(s => s.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max();
|
||||||
|
|
||||||
//获取缓存中的值 并发的时候,需要记录,已被占用的值 这样其他线程在此占用的最大的值上递增
|
//获取缓存中的值 并发的时候,需要记录,已被占用的值 这样其他线程在此占用的最大的值上递增
|
||||||
var cacheMaxCodeInt = await _fusionCache.GetOrDefaultAsync<int>(CacheKeys.TrialStudyMaxCode(trialId));
|
var cacheMaxCodeInt = await _fusionCache.GetOrDefaultAsync<int>(CacheKeys.TrialStudyMaxCode(trialId));
|
||||||
|
@ -313,7 +319,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
SpecialArchiveStudyDeal(study);
|
SpecialArchiveStudyDeal(study);
|
||||||
modalitys = study.Modalities;
|
modalitys = study.Modalities;
|
||||||
|
|
||||||
await _repository.AddAsync(study);
|
await _taskStudyRepository.AddAsync(study);
|
||||||
|
|
||||||
|
|
||||||
studyMonitor.StudyId = study.Id;
|
studyMonitor.StudyId = study.Id;
|
||||||
|
@ -335,7 +341,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
||||||
series.InstanceCount = seriesItem.InstanceList.Count;
|
series.InstanceCount = seriesItem.InstanceList.Count;
|
||||||
|
|
||||||
await _repository.AddAsync(series);
|
await _taskSeriesRepository.AddAsync(series);
|
||||||
|
|
||||||
foreach (var instanceItem in seriesItem.InstanceList)
|
foreach (var instanceItem in seriesItem.InstanceList)
|
||||||
{
|
{
|
||||||
|
@ -352,7 +358,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
isntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
isntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
||||||
|
|
||||||
await _repository.AddAsync(isntance);
|
await _taskInstanceRepository.AddAsync(isntance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,7 +371,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString(), findOriginStudy.VisitTaskId.ToString());
|
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString(), findOriginStudy.VisitTaskId.ToString());
|
||||||
|
|
||||||
var study = await _repository.FirstOrDefaultAsync<TaskStudy>(t => t.Id == studyId);
|
var study = await _taskStudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
|
||||||
|
|
||||||
//重传的时候也要赋值检查Id
|
//重传的时候也要赋值检查Id
|
||||||
studyMonitor.StudyId = study.Id;
|
studyMonitor.StudyId = study.Id;
|
||||||
|
@ -384,7 +390,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
var seriesId = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, trialId.ToString(), findOriginStudy.VisitTaskId.ToString());
|
var seriesId = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, trialId.ToString(), findOriginStudy.VisitTaskId.ToString());
|
||||||
|
|
||||||
TaskSeries dicomSeries = await _repository.FirstOrDefaultAsync<TaskSeries>(t => t.Id == seriesId);
|
TaskSeries dicomSeries = await _taskSeriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId);
|
||||||
|
|
||||||
//判断重复
|
//判断重复
|
||||||
if (dicomSeries == null)
|
if (dicomSeries == null)
|
||||||
|
@ -400,7 +406,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//series.SubjectVisitId = incommand.SubjectVisitId;
|
//series.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
|
|
||||||
|
|
||||||
dicomSeries = await _repository.AddAsync(series);
|
dicomSeries = await _taskSeriesRepository.AddAsync(series);
|
||||||
|
|
||||||
//新的序列 那么 检查的序列数量+1
|
//新的序列 那么 检查的序列数量+1
|
||||||
study.SeriesCount += 1;
|
study.SeriesCount += 1;
|
||||||
|
@ -422,7 +428,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
insntance.SubjectId = incommand.SubjectId;
|
insntance.SubjectId = incommand.SubjectId;
|
||||||
insntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
insntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
||||||
|
|
||||||
await _repository.AddAsync(insntance);
|
await _taskInstanceRepository.AddAsync(insntance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -438,7 +444,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
using (await @lock2.AcquireAsync())
|
using (await @lock2.AcquireAsync())
|
||||||
{
|
{
|
||||||
await _repository.SaveChangesAsync();
|
await _taskStudyRepository.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -465,9 +471,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
public async Task<IResponseOutput> DeleteTaskStudy(Guid visitTaskId)
|
public async Task<IResponseOutput> DeleteTaskStudy(Guid visitTaskId)
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TaskStudy>(t => t.VisitTaskId == visitTaskId);
|
await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||||
await _repository.BatchDeleteAsync<TaskSeries>(t => t.VisitTaskId == visitTaskId);
|
await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||||
await _repository.BatchDeleteAsync<TaskInstance>(t => t.VisitTaskId == visitTaskId);
|
await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -484,7 +490,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var extralConfig = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty;
|
var extralConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty;
|
||||||
|
|
||||||
var config = JsonConvert.DeserializeObject<TrialExtraConfig>(extralConfig) ?? new TrialExtraConfig();
|
var config = JsonConvert.DeserializeObject<TrialExtraConfig>(extralConfig) ?? new TrialExtraConfig();
|
||||||
|
|
||||||
|
@ -542,7 +548,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
if (inQuery.TrialReadingCriterionId != null)
|
if (inQuery.TrialReadingCriterionId != null)
|
||||||
{
|
{
|
||||||
var criterionInfo = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.IsImageFilter, t.CriterionModalitys }).FirstOrDefaultAsync();
|
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.IsImageFilter, t.CriterionModalitys }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (criterionInfo != null)
|
if (criterionInfo != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,7 +19,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public class NoneDicomStudyService(
|
public class NoneDicomStudyService(
|
||||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
QCCommon _qCCommon) : BaseService, INoneDicomStudyService
|
QCCommon _qCCommon) : BaseService, INoneDicomStudyService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -42,11 +44,11 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public async Task<IResponseOutput<NoneDicomStudyAddReturnDto>> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy)
|
public async Task<IResponseOutput<NoneDicomStudyAddReturnDto>> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy)
|
||||||
{
|
{
|
||||||
|
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditNoneDicomStudy.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditNoneDicomStudy.SubjectVisitId);
|
||||||
|
|
||||||
if (_repository.Where<Trial>(t => t.Id == addOrEditNoneDicomStudy.TrialId).Any(t => t.IsVerifyVisitImageDate==true))
|
if ( _trialRepository.Where(t => t.Id == addOrEditNoneDicomStudy.TrialId).Any(t => t.IsVerifyVisitImageDate==true))
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyStudyImageDataAsync(_repository, addOrEditNoneDicomStudy.SubjectId, addOrEditNoneDicomStudy.SubjectVisitId, addOrEditNoneDicomStudy.ImageDate);
|
await _qCCommon.VerifyStudyImageDataAsync(_subjectVisitRepository, addOrEditNoneDicomStudy.SubjectId, addOrEditNoneDicomStudy.SubjectVisitId, addOrEditNoneDicomStudy.ImageDate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +94,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
||||||
|
|
||||||
|
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
await _noneDicomStudyRepository.DeleteFromQueryAsync(noneDicomStudyId);
|
await _noneDicomStudyRepository.DeleteFromQueryAsync(noneDicomStudyId);
|
||||||
|
|
||||||
|
@ -112,7 +114,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
var noneDicomStudyFile = await _noneDicomStudyFileRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyFileId);
|
var noneDicomStudyFile = await _noneDicomStudyFileRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyFileId);
|
||||||
|
|
||||||
|
@ -141,7 +143,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpGet("{subjectVisitId:guid}")]
|
[HttpGet("{subjectVisitId:guid}")]
|
||||||
public async Task<List<NoneDicomStudyFileView>> GetVisitNoneDicomStudyFileList(Guid subjectVisitId)
|
public async Task<List<NoneDicomStudyFileView>> GetVisitNoneDicomStudyFileList(Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
return await _repository.Where<NoneDicomStudyFile>(t => t.NoneDicomStudy.SubjectVisitId == subjectVisitId)
|
return await _noneDicomStudyFileRepository.Where(t => t.NoneDicomStudy.SubjectVisitId == subjectVisitId)
|
||||||
.ProjectTo<NoneDicomStudyFileView>(_mapper.ConfigurationProvider, new { token = _userInfo.UserToken }).ToListAsync();
|
.ProjectTo<NoneDicomStudyFileView>(_mapper.ConfigurationProvider, new { token = _userInfo.UserToken }).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ using Microsoft.AspNetCore.Http;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
using System.Reactive.Subjects;
|
|
||||||
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
||||||
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
||||||
using ZiggyCreatures.Caching.Fusion;
|
using ZiggyCreatures.Caching.Fusion;
|
||||||
|
@ -28,7 +27,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<DicomStudy> _dicomstudyRepository,
|
IRepository<DicomStudy> _dicomstudyRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
IRepository<StudyMonitor> _studyMonitorRepository,
|
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
|
IRepository<SystemAnonymization> _systemAnonymizationRepository,
|
||||||
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IStudyService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, IStudyService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -345,7 +350,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var svExpression = QCCommon.GetDicomStudySubjectVisitFilter(inQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetDicomStudySubjectVisitFilter(inQuery.VisitPlanArray);
|
||||||
|
|
||||||
var dicomStudyQuery = _repository.Where<DicomStudy>(t => t.TrialId == inQuery.TrialId)
|
var dicomStudyQuery = _dicomStudyRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
||||||
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||||
|
@ -394,7 +399,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
var svExpression2 = QCCommon.GetNoneDicomStudySubjectVisitFilter(inQuery.VisitPlanArray);
|
var svExpression2 = QCCommon.GetNoneDicomStudySubjectVisitFilter(inQuery.VisitPlanArray);
|
||||||
|
|
||||||
|
|
||||||
var nodeDicomStudyQuery = _repository.Where<NoneDicomStudy>(t => t.TrialId == inQuery.TrialId)
|
var nodeDicomStudyQuery = _noneDicomStudyRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
||||||
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression2)
|
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression2)
|
||||||
|
@ -456,7 +461,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
public async Task<PageOutput<UnionStudyMonitorModel>> GetDicomAndNoneDicomStudyMonitorList(StudyQuery inQuery)
|
public async Task<PageOutput<UnionStudyMonitorModel>> GetDicomAndNoneDicomStudyMonitorList(StudyQuery inQuery)
|
||||||
{
|
{
|
||||||
var svExpression = QCCommon.GetStudyMonitorSubjectVisitFilter(inQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetStudyMonitorSubjectVisitFilter(inQuery.VisitPlanArray);
|
||||||
var StudyMonitorQuery = _repository.Where<StudyMonitor>(t => t.TrialId == inQuery.TrialId, ignoreQueryFilters: true)
|
var StudyMonitorQuery = _studyMonitorRepository.Where(t => t.TrialId == inQuery.TrialId, ignoreQueryFilters: true)
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.Subject.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
//.WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo))
|
||||||
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||||
|
@ -576,9 +581,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
// };
|
// };
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var studyInfo = _repository.Where<DicomStudy>(u => u.SubjectVisitId == subjectVisitId).Select(t => new { t.SubjectId, t.TrialId }).FirstOrDefault().IfNullThrowException();
|
var studyInfo = _dicomStudyRepository.Where(u => u.SubjectVisitId == subjectVisitId).Select(t => new { t.SubjectId, t.TrialId }).FirstOrDefault().IfNullThrowException();
|
||||||
|
|
||||||
var query = _repository.Where<DicomStudy>(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId)
|
var query = _dicomStudyRepository.Where(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId)
|
||||||
.ProjectTo<RelationStudyDTO>(_mapper.ConfigurationProvider).ToList();
|
.ProjectTo<RelationStudyDTO>(_mapper.ConfigurationProvider).ToList();
|
||||||
|
|
||||||
var list = query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList();
|
var list = query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList();
|
||||||
|
@ -593,7 +598,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public IResponseOutput<DicomStudyDTO> Item(Guid studyId)
|
public IResponseOutput<DicomStudyDTO> Item(Guid studyId)
|
||||||
{
|
{
|
||||||
return ResponseOutput.Ok(_mapper.Map<DicomStudyDTO>(_repository.Where<DicomStudy>().FirstOrDefault(s => s.Id == studyId)));
|
return ResponseOutput.Ok(_mapper.Map<DicomStudyDTO>(_dicomStudyRepository.Where().FirstOrDefault(s => s.Id == studyId)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -602,7 +607,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
public async Task<IResponseOutput<List<VerifyStudyUploadResult>>> VerifyTaskStudyAllowUploadAsync(VerifyTaskUploadOrReupload verifyInfo)
|
public async Task<IResponseOutput<List<VerifyStudyUploadResult>>> VerifyTaskStudyAllowUploadAsync(VerifyTaskUploadOrReupload verifyInfo)
|
||||||
{
|
{
|
||||||
|
|
||||||
var queryStudy = _repository.Where<VisitTask>(t => t.SubjectId == verifyInfo.SubjectId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id).Select(u => new
|
var queryStudy = _visitTaskRepository.Where(t => t.SubjectId == verifyInfo.SubjectId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id).Select(u => new
|
||||||
{
|
{
|
||||||
VisitTaskId = u.Id,
|
VisitTaskId = u.Id,
|
||||||
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
||||||
|
@ -632,7 +637,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var subjectId = verifyInfo.SubjectId;
|
var subjectId = verifyInfo.SubjectId;
|
||||||
|
|
||||||
var visitList = _repository.Where<SubjectVisit>(t => t.SubjectId == verifyInfo.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
|
var visitList = _subjectVisitRepository.Where(t => t.SubjectId == verifyInfo.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
|
||||||
|
|
||||||
foreach (var waitUploadItem in verifyInfo.StudyInstanceUidList)
|
foreach (var waitUploadItem in verifyInfo.StudyInstanceUidList)
|
||||||
{
|
{
|
||||||
|
@ -641,7 +646,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var result = new VerifyStudyUploadResult();
|
var result = new VerifyStudyUploadResult();
|
||||||
|
|
||||||
if ( _fusionCache.GetOrDefault<Guid>($"StudyUid_{trialId}_{studyInstanceUid}") != _userInfo.Id)
|
if (_fusionCache.GetOrDefault<Guid>($"StudyUid_{trialId}_{studyInstanceUid}") != _userInfo.Id)
|
||||||
{
|
{
|
||||||
|
|
||||||
result.AllowUpload = false;
|
result.AllowUpload = false;
|
||||||
|
@ -707,7 +712,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var systemAnonymizationList = _repository.Where<SystemAnonymization>(t => t.IsEnable).ToList();
|
var systemAnonymizationList = _systemAnonymizationRepository.Where(t => t.IsEnable).ToList();
|
||||||
|
|
||||||
return ResponseOutput.Ok<List<VerifyStudyUploadResult>>(resultList, new
|
return ResponseOutput.Ok<List<VerifyStudyUploadResult>>(resultList, new
|
||||||
{
|
{
|
||||||
|
@ -724,11 +729,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public IResponseOutput<List<VerifyStudyUploadResult>> VerifyStudyAllowUpload(VerifyUploadOrReupload verifyInfo)
|
public IResponseOutput<List<VerifyStudyUploadResult>> VerifyStudyAllowUpload(VerifyUploadOrReupload verifyInfo)
|
||||||
{
|
{
|
||||||
var trialInfo = _repository.Where<Trial>().FirstOrDefault(t => t.Id == verifyInfo.TrialId).IfNullThrowException();
|
var trialInfo = _trialRepository.Where().FirstOrDefault(t => t.Id == verifyInfo.TrialId).IfNullThrowException();
|
||||||
|
|
||||||
var result = new List<VerifyStudyUploadResult>();
|
var result = new List<VerifyStudyUploadResult>();
|
||||||
|
|
||||||
var visitList = _repository.Where<SubjectVisit>(t => t.SubjectId == verifyInfo.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
|
var visitList = _subjectVisitRepository.Where(t => t.SubjectId == verifyInfo.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
|
||||||
|
|
||||||
|
|
||||||
verifyInfo.StudyInstanceUidList.ForEach(waitUploadItem =>
|
verifyInfo.StudyInstanceUidList.ForEach(waitUploadItem =>
|
||||||
|
@ -768,7 +773,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
// 写入dicom 固定的信息,以及组织路径的信息 以及匿名化的信息
|
// 写入dicom 固定的信息,以及组织路径的信息 以及匿名化的信息
|
||||||
var otherData = GetSaveToDicomInfo(verifyInfo.SubjectVisitId);
|
var otherData = GetSaveToDicomInfo(verifyInfo.SubjectVisitId);
|
||||||
|
|
||||||
var anonymizeList = _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_repository), TimeSpan.FromDays(7)).Result;
|
var anonymizeList = _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7)).Result;
|
||||||
|
|
||||||
return ResponseOutput.Ok<List<VerifyStudyUploadResult>>(result, new
|
return ResponseOutput.Ok<List<VerifyStudyUploadResult>>(result, new
|
||||||
{
|
{
|
||||||
|
@ -782,9 +787,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
private VerifyStudyUploadResult VerifyStudyUpload(string studyInstanceUid, Guid trialId, Guid currentSubjectVisitId, Guid SubjectId)
|
private VerifyStudyUploadResult VerifyStudyUpload(string studyInstanceUid, Guid trialId, Guid currentSubjectVisitId, Guid SubjectId)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
var cacheUserId = _fusionCache.TryGet<Guid>(CacheKeys.TrialStudyUidUploading(trialId, studyInstanceUid));
|
||||||
|
|
||||||
var result = new VerifyStudyUploadResult();
|
var result = new VerifyStudyUploadResult();
|
||||||
|
|
||||||
if (_fusionCache.GetOrDefault<Guid>(CacheKeys.TrialStudyUidUploading(trialId, studyInstanceUid)) != _userInfo.Id)
|
if (cacheUserId.GetValueOrDefault() != _userInfo.Id && cacheUserId.HasValue)
|
||||||
{
|
{
|
||||||
|
|
||||||
result.AllowUpload = false;
|
result.AllowUpload = false;
|
||||||
|
@ -797,7 +804,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_repository.Where<Domain.Models.Subject>(t => t.Id == SubjectId).Select(t => t.Status).FirstOrDefault() == SubjectStatus.EndOfVisit)
|
if (_subjectRepository.Where(t => t.Id == SubjectId).Select(t => t.Status).FirstOrDefault() == SubjectStatus.EndOfVisit)
|
||||||
{
|
{
|
||||||
result.AllowUpload = false;
|
result.AllowUpload = false;
|
||||||
|
|
||||||
|
@ -813,7 +820,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var verifyStudyInfo = _repository.Where<DicomStudy>(t => t.TrialId == trialId && t.Id == expectStudyId).ProjectTo<VerifyStudyDto>(_mapper.ConfigurationProvider).FirstOrDefault();
|
var verifyStudyInfo = _dicomStudyRepository.Where(t => t.TrialId == trialId && t.Id == expectStudyId).ProjectTo<VerifyStudyDto>(_mapper.ConfigurationProvider).FirstOrDefault();
|
||||||
result.StudyInfo = verifyStudyInfo;
|
result.StudyInfo = verifyStudyInfo;
|
||||||
|
|
||||||
|
|
||||||
|
@ -830,7 +837,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
result.AllowReUpload = true;
|
result.AllowReUpload = true;
|
||||||
|
|
||||||
result.UploadedSeriesList = _repository.Where<DicomSeries>(t => t.StudyId == verifyStudyInfo.Id).Select(t => new UploadedSeries()
|
result.UploadedSeriesList = _dicomSeriesRepository.Where(t => t.StudyId == verifyStudyInfo.Id).Select(t => new UploadedSeries()
|
||||||
{ SeriesId = t.Id, SeriesInstanceUid = t.SeriesInstanceUid, SOPInstanceUIDList = t.DicomInstanceList.Select(c => c.SopInstanceUid).ToList() }).ToList();
|
{ SeriesId = t.Id, SeriesInstanceUid = t.SeriesInstanceUid, SOPInstanceUIDList = t.DicomInstanceList.Select(c => c.SopInstanceUid).ToList() }).ToList();
|
||||||
}
|
}
|
||||||
//不是同一个受试者
|
//不是同一个受试者
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// SystemAnonymizationService
|
/// SystemAnonymizationService
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ApiExplorerSettings(GroupName = "Image")]
|
[ApiExplorerSettings(GroupName = "Image")]
|
||||||
public class SystemAnonymizationService(IRepository<SystemAnonymization> systemAnonymizationRepository) : BaseService, ISystemAnonymizationService
|
public class SystemAnonymizationService(IRepository<SystemAnonymization> _systemAnonymizationRepository) : BaseService, ISystemAnonymizationService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
public async Task<PageOutput<SystemAnonymizationView>> GetSystemAnonymizationList(SystemAnonymizationQuery inQuery)
|
public async Task<PageOutput<SystemAnonymizationView>> GetSystemAnonymizationList(SystemAnonymizationQuery inQuery)
|
||||||
{
|
{
|
||||||
|
|
||||||
var systemAnonymizationQueryable = systemAnonymizationRepository
|
var systemAnonymizationQueryable = _systemAnonymizationRepository
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Group), t => t.Group.Contains(inQuery.Group))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.Group), t => t.Group.Contains(inQuery.Group))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Element), t => t.Element.Contains(inQuery.Element))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.Element), t => t.Element.Contains(inQuery.Element))
|
||||||
.WhereIf(inQuery.IsAdd != null, t => t.IsAdd == inQuery.IsAdd)
|
.WhereIf(inQuery.IsAdd != null, t => t.IsAdd == inQuery.IsAdd)
|
||||||
|
@ -36,7 +36,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
public async Task<IResponseOutput> AddOrUpdateSystemAnonymization(SystemAnonymizationAddOrEdit addOrEditSystemAnonymization)
|
public async Task<IResponseOutput> AddOrUpdateSystemAnonymization(SystemAnonymizationAddOrEdit addOrEditSystemAnonymization)
|
||||||
{
|
{
|
||||||
|
|
||||||
var entity = await _repository.InsertOrUpdateAsync<SystemAnonymization, SystemAnonymizationAddOrEdit>(addOrEditSystemAnonymization, true);
|
var entity = await _systemAnonymizationRepository.InsertOrUpdateAsync(addOrEditSystemAnonymization, true);
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok(entity.Id.ToString());
|
return ResponseOutput.Ok(entity.Id.ToString());
|
||||||
|
@ -47,7 +47,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpDelete("{systemAnonymizationId:guid}")]
|
[HttpDelete("{systemAnonymizationId:guid}")]
|
||||||
public async Task<IResponseOutput> DeleteSystemAnonymization(Guid systemAnonymizationId)
|
public async Task<IResponseOutput> DeleteSystemAnonymization(Guid systemAnonymizationId)
|
||||||
{
|
{
|
||||||
var success = await systemAnonymizationRepository.BatchDeleteNoTrackingAsync(t => t.Id == systemAnonymizationId);
|
var success = await _systemAnonymizationRepository.BatchDeleteNoTrackingAsync(t => t.Id == systemAnonymizationId);
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<QCChallenge> _qCChallengeRepository,
|
IRepository<QCChallenge> _qCChallengeRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
|
|
||||||
IRepository<CheckChallengeDialog> _checkChallengeDialogRepository) : BaseService, IFrontAuditConfigService
|
IRepository<CheckChallengeDialog> _checkChallengeDialogRepository) : BaseService, IFrontAuditConfigService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -403,7 +405,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//用户的数据稽查没有 临时处理
|
//用户的数据稽查没有 临时处理
|
||||||
|
|
||||||
|
|
||||||
var userObj = await _repository.Where<User>(t => t.Id == objectRelationParentId).Select(t => new { UserRealName = t.FullName, t.Phone, t.UserName, UserType = t.UserTypeRole.UserTypeShortName, t.EMail, t.OrganizationName }).FirstOrDefaultAsync();
|
var userObj = await _userRepository.Where(t => t.Id == objectRelationParentId).Select(t => new { UserRealName = t.FullName, t.Phone, t.UserName, UserType = t.UserTypeRole.UserTypeShortName, t.EMail, t.OrganizationName }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (userObj != null)
|
if (userObj != null)
|
||||||
{
|
{
|
||||||
|
@ -942,8 +944,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<List<FrontAuditConfigDTO>> GetAuditConfigChildList(Guid frontAuditConfigId)
|
public async Task<List<FrontAuditConfigDTO>> GetAuditConfigChildList(Guid frontAuditConfigId)
|
||||||
{
|
{
|
||||||
//var list = await (from data in _repository.GetQueryable<FrontAuditConfig>().Where(x => x.Id == frontAuditConfigId)
|
//var list = await (from data in _frontAuditConfigRepository.Where().Where(x => x.Id == frontAuditConfigId)
|
||||||
// join childrenType in _repository.GetQueryable<FrontAuditConfig>() on data.Id equals childrenType.ParentId
|
// join childrenType in _frontAuditConfigRepository.Where() on data.Id equals childrenType.ParentId
|
||||||
// select childrenType).OrderBy(x => x.Sort).ToListAsync();
|
// select childrenType).OrderBy(x => x.Sort).ToListAsync();
|
||||||
//return list;
|
//return list;
|
||||||
|
|
||||||
|
@ -992,7 +994,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var additem = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Id == item.AddItemGuid);
|
var additem = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Id == item.AddItemGuid);
|
||||||
|
|
||||||
var alllist = _frontAuditConfigRepository.Where(x => item.DataSourceGuids.Contains(x.ParentId)).ToList().GroupBy(x => new { x.ValueCN }, (key, lst) => new FrontAuditConfig
|
//跟踪的方式查询,直接修改,然后保存数据库
|
||||||
|
var alllist = _frontAuditConfigRepository.Where(x => item.DataSourceGuids.Contains(x.ParentId),true).ToList().GroupBy(x => new { x.ValueCN }, (key, lst) => new FrontAuditConfig
|
||||||
{
|
{
|
||||||
Sort = lst.Select(x => x.Sort).FirstOrDefault(),
|
Sort = lst.Select(x => x.Sort).FirstOrDefault(),
|
||||||
TableConfigJsonStr = lst.Select(x => x.TableConfigJsonStr).FirstOrDefault(),
|
TableConfigJsonStr = lst.Select(x => x.TableConfigJsonStr).FirstOrDefault(),
|
||||||
|
@ -1063,9 +1066,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
await _repository.UpdateRange(neewupdate);
|
await _frontAuditConfigRepository.AddRangeAsync(list);
|
||||||
await _repository.AddRangeAsync(list);
|
await _frontAuditConfigRepository.SaveChangesAsync();
|
||||||
await _repository.SaveChangesAsync();
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -1092,14 +1094,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
|
public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
|
||||||
{
|
{
|
||||||
var query = from data in _repository.GetQueryable<FrontAuditConfig>()
|
var query = from data in _frontAuditConfigRepository.Where()
|
||||||
join childrenType in _repository.GetQueryable<Dictionary>() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
|
join childrenType in _dictionaryRepository.Where() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
|
||||||
from leftchildrenType in childrenTypetemp.DefaultIfEmpty()
|
from leftchildrenType in childrenTypetemp.DefaultIfEmpty()
|
||||||
join ModuleType in _repository.GetQueryable<Dictionary>() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp
|
join ModuleType in _dictionaryRepository.Where() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp
|
||||||
from leftModuleType in ModuleTypetemp.DefaultIfEmpty()
|
from leftModuleType in ModuleTypetemp.DefaultIfEmpty()
|
||||||
join OptTypeId in _repository.GetQueryable<Dictionary>() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp
|
join OptTypeId in _dictionaryRepository.Where() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp
|
||||||
from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty()
|
from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty()
|
||||||
join ObjectTypeId in _repository.GetQueryable<Dictionary>() on data.ObjectTypeId equals ObjectTypeId.Id into ObjectTypeIdtemp
|
join ObjectTypeId in _dictionaryRepository.Where() on data.ObjectTypeId equals ObjectTypeId.Id into ObjectTypeIdtemp
|
||||||
from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty()
|
from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty()
|
||||||
select new FrontAuditConfigView()
|
select new FrontAuditConfigView()
|
||||||
{
|
{
|
||||||
|
@ -1235,7 +1237,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//---存在子类 不能删除
|
//---存在子类 不能删除
|
||||||
return ResponseOutput.NotOk(_localizer["FrontAudit_CannotDelSub"]);
|
return ResponseOutput.NotOk(_localizer["FrontAudit_CannotDelSub"]);
|
||||||
}
|
}
|
||||||
var success = await _repository.BatchDeleteAsync<FrontAuditConfig>(t => t.Id == frontAuditConfigId);
|
var success = await _frontAuditConfigRepository.BatchDeleteNoTrackingAsync(t => t.Id == frontAuditConfigId);
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,15 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
[NonDynamicWebApi]
|
[NonDynamicWebApi]
|
||||||
public class InspectionService(
|
public class InspectionService(
|
||||||
IRepository<DataInspection> _dataInspectionRepository,
|
IRepository<DataInspection> _dataInspectionRepository,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<TrialSign> _trialSignRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<UserType> _userTypeRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<FrontAuditConfig> _frontAuditConfigRepository) : BaseService, IInspectionService
|
IRepository<FrontAuditConfig> _frontAuditConfigRepository) : BaseService, IInspectionService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -23,66 +32,66 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
{
|
{
|
||||||
//_repository.GetQueryable.GetQueryable < DataInspection >
|
//_repository.GetQueryable.GetQueryable < DataInspection >
|
||||||
|
|
||||||
var trialData = await _repository.GetQueryable<Trial>().Where(x => x.Id == inQuery.TrialId).AsNoTracking().FirstNotNullAsync();
|
var trialData = await _trialRepository.Where(x => x.Id == inQuery.TrialId).AsNoTracking().FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
trialData.TrialFinishTime = trialData.TrialFinishTime == null ? DateTime.Now : trialData.TrialFinishTime;
|
trialData.TrialFinishTime = trialData.TrialFinishTime == null ? DateTime.Now : trialData.TrialFinishTime;
|
||||||
|
|
||||||
#region 逻辑代码
|
#region 逻辑代码
|
||||||
var query = from data in _repository.GetQueryable<DataInspection>()
|
var query = from data in _dataInspectionRepository.Where()
|
||||||
//.Where(x => (x.TrialId == dto.TrialId)||(x.TrialId==null&&x.CreateTime>= trialData.CreateTime && x.CreateTime <= trialData.TrialFinishTime))
|
//.Where(x => (x.TrialId == dto.TrialId)||(x.TrialId==null&&x.CreateTime>= trialData.CreateTime && x.CreateTime <= trialData.TrialFinishTime))
|
||||||
|
|
||||||
|
|
||||||
join trial in _repository.GetQueryable<Trial>().IgnoreQueryFilters() on data.TrialId equals trial.Id into trialtemp
|
join trial in _trialRepository.Where().IgnoreQueryFilters() on data.TrialId equals trial.Id into trialtemp
|
||||||
from leftrial in trialtemp.DefaultIfEmpty()
|
from leftrial in trialtemp.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
||||||
join trialSite in _repository.GetQueryable<TrialSite>().IgnoreQueryFilters() on data.TrialSiteId equals trialSite.Id into trialSitetemp
|
join trialSite in _trialSiteRepository.Where().IgnoreQueryFilters() on data.TrialSiteId equals trialSite.Id into trialSitetemp
|
||||||
from lefttrialSite in trialSitetemp.DefaultIfEmpty()
|
from lefttrialSite in trialSitetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
||||||
join subject in _repository.GetQueryable<Subject>().IgnoreQueryFilters() on data.SubjectId equals subject.Id into subtemp
|
join subject in _subjectRepository.Where().IgnoreQueryFilters() on data.SubjectId equals subject.Id into subtemp
|
||||||
from leftsubject in subtemp.DefaultIfEmpty()
|
from leftsubject in subtemp.DefaultIfEmpty()
|
||||||
join subjectVisit in _repository.GetQueryable<SubjectVisit>().IgnoreQueryFilters() on data.SubjectVisitId equals subjectVisit.Id into subjectVisittemp
|
join subjectVisit in _subjectVisitRepository.Where().IgnoreQueryFilters() on data.SubjectVisitId equals subjectVisit.Id into subjectVisittemp
|
||||||
from leftsubjectVisit in subjectVisittemp.DefaultIfEmpty()
|
from leftsubjectVisit in subjectVisittemp.DefaultIfEmpty()
|
||||||
join parent in _repository.GetQueryable<DataInspection>() on data.ParentId equals parent.Id into parenttemp
|
join parent in _dataInspectionRepository.Where() on data.ParentId equals parent.Id into parenttemp
|
||||||
from leftparent in parenttemp.DefaultIfEmpty()
|
from leftparent in parenttemp.DefaultIfEmpty()
|
||||||
join user in _repository.GetQueryable<User>().IgnoreQueryFilters() on data.CreateUserId equals user.Id into usertemp
|
join user in _userRepository.Where().IgnoreQueryFilters() on data.CreateUserId equals user.Id into usertemp
|
||||||
from leftuser in usertemp.DefaultIfEmpty()
|
from leftuser in usertemp.DefaultIfEmpty()
|
||||||
join usertype in _repository.GetQueryable<UserType>().IgnoreQueryFilters() on leftuser.UserTypeId equals usertype.Id into usertypetemp
|
join usertype in _userTypeRepository.Where().IgnoreQueryFilters() on leftuser.UserTypeId equals usertype.Id into usertypetemp
|
||||||
from leftusertype in usertypetemp.DefaultIfEmpty()
|
from leftusertype in usertypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
join visttask in _repository.GetQueryable<VisitTask>().IgnoreQueryFilters() on data.VisitTaskId equals visttask.Id into visttasktemp
|
join visttask in _visitTaskRepository.Where().IgnoreQueryFilters() on data.VisitTaskId equals visttask.Id into visttasktemp
|
||||||
from leftvisttask in visttasktemp.DefaultIfEmpty()
|
from leftvisttask in visttasktemp.DefaultIfEmpty()
|
||||||
|
|
||||||
//join trialCriterion in _repository.GetQueryable<ReadingQuestionCriterionTrial>().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion
|
//join trialCriterion in _repository.GetQueryable<ReadingQuestionCriterionTrial>().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion
|
||||||
//from leftCriterion in criterion.DefaultIfEmpty()
|
//from leftCriterion in criterion.DefaultIfEmpty()
|
||||||
|
|
||||||
//join moduleTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ModuleType") on 1 equals 1
|
//join moduleTyped in _dictionaryRepository.Where().Where(x => x.Code == "ModuleType") on 1 equals 1
|
||||||
//join moduleTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = moduleTyped.Id, ModuleType = data.ModuleType } equals new { ParentId = moduleTypec.ParentId.Value, ModuleType = moduleTypec.Value } into moduleTypectemp
|
//join moduleTypec in _dictionaryRepository.Where() on new { ParentId = moduleTyped.Id, ModuleType = data.ModuleType } equals new { ParentId = moduleTypec.ParentId.Value, ModuleType = moduleTypec.Value } into moduleTypectemp
|
||||||
|
|
||||||
//join childrenTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ChildrenType") on 1 equals 1
|
//join childrenTyped in _dictionaryRepository.Where().Where(x => x.Code == "ChildrenType") on 1 equals 1
|
||||||
//join childrenTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = childrenTyped.Id, ModuleType = data.ChildrenType } equals new { ParentId = childrenTypec.ParentId.Value, ModuleType = childrenTypec.Value } into childrenTypectemp
|
//join childrenTypec in _dictionaryRepository.Where() on new { ParentId = childrenTyped.Id, ModuleType = data.ChildrenType } equals new { ParentId = childrenTypec.ParentId.Value, ModuleType = childrenTypec.Value } into childrenTypectemp
|
||||||
//from leftchildrenTypec in childrenTypectemp.DefaultIfEmpty()
|
//from leftchildrenTypec in childrenTypectemp.DefaultIfEmpty()
|
||||||
|
|
||||||
//join ObjectTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ObjectType") on 1 equals 1
|
//join ObjectTyped in _dictionaryRepository.Where().Where(x => x.Code == "ObjectType") on 1 equals 1
|
||||||
//join ObjectTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = ObjectTyped.Id, ModuleType = data.ObjectType } equals new { ParentId = ObjectTypec.ParentId.Value, ModuleType = ObjectTypec.Value } into objectTypetemp
|
//join ObjectTypec in _dictionaryRepository.Where() on new { ParentId = ObjectTyped.Id, ModuleType = data.ObjectType } equals new { ParentId = ObjectTypec.ParentId.Value, ModuleType = ObjectTypec.Value } into objectTypetemp
|
||||||
//from leftObjectType in objectTypetemp.DefaultIfEmpty()
|
//from leftObjectType in objectTypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
//join OptTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "OptType") on 1 equals 1
|
//join OptTyped in _dictionaryRepository.Where().Where(x => x.Code == "OptType") on 1 equals 1
|
||||||
//join OptTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = OptTyped.Id, ModuleType = data.OptType } equals new { ParentId = OptTypec.ParentId.Value, ModuleType = OptTypec.Value } into optTypetemp
|
//join OptTypec in _dictionaryRepository.Where() on new { ParentId = OptTyped.Id, ModuleType = data.OptType } equals new { ParentId = OptTypec.ParentId.Value, ModuleType = OptTypec.Value } into optTypetemp
|
||||||
//from leftOptType in optTypetemp.DefaultIfEmpty()
|
//from leftOptType in optTypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
||||||
join trialSign in _repository.GetQueryable<TrialSign>().IgnoreQueryFilters() on data.SignId equals trialSign.Id into trialSigntemp
|
join trialSign in _trialSignRepository.Where().IgnoreQueryFilters() on data.SignId equals trialSign.Id into trialSigntemp
|
||||||
from lefttrialSign in trialSigntemp.DefaultIfEmpty()
|
from lefttrialSign in trialSigntemp.DefaultIfEmpty()
|
||||||
join leftfrontAuditConfig in _repository.GetQueryable<FrontAuditConfig>().Where(x => x.ConfigType == "M" && x.Identification != null && x.IsEnable == true) on
|
join leftfrontAuditConfig in _frontAuditConfigRepository.Where().Where(x => x.ConfigType == "M" && x.Identification != null && x.IsEnable == true) on
|
||||||
data.Identification.ToLower()
|
data.Identification.ToLower()
|
||||||
equals
|
equals
|
||||||
leftfrontAuditConfig.Identification.ToLower()
|
leftfrontAuditConfig.Identification.ToLower()
|
||||||
join moduleTypec in _repository.GetQueryable<Dictionary>() on new { ModuleType = leftfrontAuditConfig.ModuleTypeId!.Value } equals new { ModuleType = moduleTypec.Id } into moduleTypectemp
|
join moduleTypec in _dictionaryRepository.Where() on new { ModuleType = leftfrontAuditConfig.ModuleTypeId!.Value } equals new { ModuleType = moduleTypec.Id } into moduleTypectemp
|
||||||
from leftmoduleTypec in moduleTypectemp.DefaultIfEmpty()
|
from leftmoduleTypec in moduleTypectemp.DefaultIfEmpty()
|
||||||
join OptTypec in _repository.GetQueryable<Dictionary>() on new { ModuleType = leftfrontAuditConfig.OptTypeId!.Value } equals new { ModuleType = OptTypec.Id } into optTypetemp
|
join OptTypec in _dictionaryRepository.Where() on new { ModuleType = leftfrontAuditConfig.OptTypeId!.Value } equals new { ModuleType = OptTypec.Id } into optTypetemp
|
||||||
from leftOptType in optTypetemp.DefaultIfEmpty()
|
from leftOptType in optTypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
select new GetDataInspectionOutDto()
|
select new GetDataInspectionOutDto()
|
||||||
|
@ -242,7 +251,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
{
|
{
|
||||||
if (response.IsSuccess)
|
if (response.IsSuccess)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
|
await _trialSignRepository.BatchUpdateNoTrackingAsync(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +260,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
/// <summary> 验证用户签名信息 </summary> ///
|
/// <summary> 验证用户签名信息 </summary> ///
|
||||||
public async Task<IResponseOutput> VerifySignatureAsync(SignDTO signDTO)
|
public async Task<IResponseOutput> VerifySignatureAsync(SignDTO signDTO)
|
||||||
{
|
{
|
||||||
var user = await _repository.FirstOrDefaultAsync<User>(u => u.UserName == signDTO.UserName && u.Password == signDTO.PassWord);
|
var user = await _userRepository.FirstOrDefaultAsync(u => u.UserName == signDTO.UserName && u.Password == signDTO.PassWord);
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
throw new BusinessValidationFailedException(_localizer["User_CheckNameOrPw"]);
|
throw new BusinessValidationFailedException(_localizer["User_CheckNameOrPw"]);
|
||||||
|
@ -268,9 +277,9 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
/// <summary> 添加签名记录 </summary> ///
|
/// <summary> 添加签名记录 </summary> ///
|
||||||
public async Task<Guid> AddSignRecordAsync(SignDTO signDTO)
|
public async Task<Guid> AddSignRecordAsync(SignDTO signDTO)
|
||||||
{
|
{
|
||||||
var add = await _repository.AddAsync(_mapper.Map<TrialSign>(signDTO));
|
var add = await _trialSignRepository.AddAsync(_mapper.Map<TrialSign>(signDTO));
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialSignRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return add.Id;
|
return add.Id;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Site> _siteRepository,
|
IRepository<Site> _siteRepository,
|
||||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
IRepository<Hospital> _hospitalRepository) : BaseService, ISiteService
|
IRepository<Hospital> _hospitalRepository) : BaseService, ISiteService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -46,7 +47,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<PageOutput<TrialSiteAddView>> GetTrialSiteList(TrialSiteInQuery inQuery)
|
public async Task<PageOutput<TrialSiteAddView>> GetTrialSiteList(TrialSiteInQuery inQuery)
|
||||||
{
|
{
|
||||||
var query = _repository.Where<TrialSite>(t => t.SiteId == null)
|
var query = _trialSiteRepository.Where(t => t.SiteId == null)
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteName), t => t.TrialSiteName.Contains(inQuery.TrialSiteName) || t.TrialSiteAliasName.Contains(inQuery.TrialSiteName))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteName), t => t.TrialSiteName.Contains(inQuery.TrialSiteName) || t.TrialSiteAliasName.Contains(inQuery.TrialSiteName))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialCode), t => t.Trial.TrialCode.Contains(inQuery.TrialCode))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialCode), t => t.Trial.TrialCode.Contains(inQuery.TrialCode))
|
||||||
.Select(t => new TrialSiteAddView()
|
.Select(t => new TrialSiteAddView()
|
||||||
|
@ -100,7 +101,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (siteCommand.TrialSiteId != null)
|
if (siteCommand.TrialSiteId != null)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<TrialSite>(t => t.Id == siteCommand.TrialSiteId, u => new TrialSite() { SiteId = site.Id });
|
await _trialSiteRepository.BatchUpdateNoTrackingAsync(t => t.Id == siteCommand.TrialSiteId, u => new TrialSite() { SiteId = site.Id });
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseOutput.Ok(site.Id.ToString());
|
return ResponseOutput.Ok(site.Id.ToString());
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
[ApiExplorerSettings(GroupName = "Management")]
|
[ApiExplorerSettings(GroupName = "Management")]
|
||||||
public class MenuService(
|
public class MenuService(
|
||||||
IRepository<Menu> menuRepository,
|
IRepository<Menu> _menuRepository,
|
||||||
IRepository<UserTypeMenu> _userTypeMenuRepository) : BaseService, IMenuService
|
IRepository<UserTypeMenu> _userTypeMenuRepository) : BaseService, IMenuService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ namespace IRaCIS.Application.Services
|
||||||
VerifyMsg = _localizer["Menu_ParentDupChild"]
|
VerifyMsg = _localizer["Menu_ParentDupChild"]
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = await _repository.InsertOrUpdateAsync<Menu, MenuCommand>(menuAddOrUpdateModel, true, exp);
|
var menu = await _menuRepository.InsertOrUpdateAsync(menuAddOrUpdateModel, true, exp);
|
||||||
|
|
||||||
return ResponseOutput.Ok(menu.Id.ToString());
|
return ResponseOutput.Ok(menu.Id.ToString());
|
||||||
|
|
||||||
|
@ -85,13 +85,13 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpDelete("{menuId:guid}")]
|
[HttpDelete("{menuId:guid}")]
|
||||||
public async Task<IResponseOutput> DeleteMenu(Guid menuId)
|
public async Task<IResponseOutput> DeleteMenu(Guid menuId)
|
||||||
{
|
{
|
||||||
if (await menuRepository.AnyAsync(t => t.ParentId == menuId))
|
if (await _menuRepository.AnyAsync(t => t.ParentId == menuId))
|
||||||
{
|
{
|
||||||
//---该节点存在子节点,请在删除子节点后,再删除该节点。
|
//---该节点存在子节点,请在删除子节点后,再删除该节点。
|
||||||
return ResponseOutput.NotOk(_localizer["Menu_ChildExist"]);
|
return ResponseOutput.NotOk(_localizer["Menu_ChildExist"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var success =await menuRepository.BatchDeleteNoTrackingAsync(u => u.Id == menuId);
|
var success =await _menuRepository.BatchDeleteNoTrackingAsync(u => u.Id == menuId);
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<List<MenuTreeNode>> GetMenuTree()
|
public async Task<List<MenuTreeNode>> GetMenuTree()
|
||||||
{
|
{
|
||||||
var allMenuList = (await menuRepository.ProjectTo<MenuTreeNode>(_mapper.ConfigurationProvider).ToListAsync()).IfNullThrowException();
|
var allMenuList = (await _menuRepository.ProjectTo<MenuTreeNode>(_mapper.ConfigurationProvider).ToListAsync()).IfNullThrowException();
|
||||||
|
|
||||||
var list = allMenuList.ToTree((root, child) => child.ParentId == Guid.Empty,
|
var list = allMenuList.ToTree((root, child) => child.ParentId == Guid.Empty,
|
||||||
(root, child) => child.ParentId == root.MenuId,
|
(root, child) => child.ParentId == root.MenuId,
|
||||||
|
@ -125,7 +125,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<MenuDTO>> GetMenuList(MenuQueyDTO menuQueyDTO)
|
public async Task<List<MenuDTO>> GetMenuList(MenuQueyDTO menuQueyDTO)
|
||||||
{
|
{
|
||||||
return await menuRepository
|
return await _menuRepository
|
||||||
.WhereIf(menuQueyDTO.ParentId != null, t => t.ParentId == menuQueyDTO.ParentId)
|
.WhereIf(menuQueyDTO.ParentId != null, t => t.ParentId == menuQueyDTO.ParentId)
|
||||||
.WhereIf(menuQueyDTO.IsEnable != null, t => t.IsEnable == menuQueyDTO.IsEnable)
|
.WhereIf(menuQueyDTO.IsEnable != null, t => t.IsEnable == menuQueyDTO.IsEnable)
|
||||||
.WhereIf(menuQueyDTO.IsCache != null, t => t.IsCache == menuQueyDTO.IsCache)
|
.WhereIf(menuQueyDTO.IsCache != null, t => t.IsCache == menuQueyDTO.IsCache)
|
||||||
|
@ -146,7 +146,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpGet("{userTypeId:guid}")]
|
[HttpGet("{userTypeId:guid}")]
|
||||||
public async Task<List<MenuTreeNodeSelect>> GetUserTypeMenuTree(Guid userTypeId)
|
public async Task<List<MenuTreeNodeSelect>> GetUserTypeMenuTree(Guid userTypeId)
|
||||||
{
|
{
|
||||||
var menuFunctionlist = (await menuRepository
|
var menuFunctionlist = (await _menuRepository
|
||||||
.ProjectTo<MenuTreeNodeSelect>(_mapper.ConfigurationProvider, new { userTypeId = userTypeId }).ToListAsync()).IfNullThrowException();
|
.ProjectTo<MenuTreeNodeSelect>(_mapper.ConfigurationProvider, new { userTypeId = userTypeId }).ToListAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ namespace IRaCIS.Application.Services
|
||||||
.Where(t => t.UserTypeId == _userInfo.UserTypeId && t.Menu.MenuType == "F")
|
.Where(t => t.UserTypeId == _userInfo.UserTypeId && t.Menu.MenuType == "F")
|
||||||
.Select(t => t.Menu.PermissionStr).ToListAsync();
|
.Select(t => t.Menu.PermissionStr).ToListAsync();
|
||||||
|
|
||||||
//var str = await _repository.Where<UserType>(t => t.Id == _userInfo.UserTypeId).Select(t => t.PermissionStr).FirstOrDefaultAsync();
|
//var str = await _userTypeRepository.Where(t => t.Id == _userInfo.UserTypeId).Select(t => t.PermissionStr).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
list.Add(_userInfo.PermissionStr);
|
list.Add(_userInfo.PermissionStr);
|
||||||
|
|
|
@ -19,7 +19,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// UserFeedBackService
|
/// UserFeedBackService
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ApiExplorerSettings(GroupName = "Management")]
|
[ApiExplorerSettings(GroupName = "Management")]
|
||||||
public class UserFeedBackService (IRepository<UserFeedBack> _userFeedBackRepository) : BaseService, IUserFeedBackService
|
public class UserFeedBackService (IRepository<UserFeedBack> _userFeedBackRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<Subject> _subjectRepository) : BaseService, IUserFeedBackService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +77,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (addOrEditUserFeedBack.VisitTaskId != null)
|
if (addOrEditUserFeedBack.VisitTaskId != null)
|
||||||
{
|
{
|
||||||
var info = await _repository.Where<VisitTask>(t => t.Id == addOrEditUserFeedBack.VisitTaskId).Select(t => new { t.SubjectId, t.SourceSubjectVisitId, t.Subject.TrialSiteId }).FirstOrDefaultAsync();
|
var info = await _visitTaskRepository.Where(t => t.Id == addOrEditUserFeedBack.VisitTaskId).Select(t => new { t.SubjectId, t.SourceSubjectVisitId, t.Subject.TrialSiteId }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (info != null)
|
if (info != null)
|
||||||
{
|
{
|
||||||
|
@ -86,7 +89,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
else if (addOrEditUserFeedBack.SubjectVisitId != null)
|
else if (addOrEditUserFeedBack.SubjectVisitId != null)
|
||||||
{
|
{
|
||||||
var info = await _repository.Where<SubjectVisit>(t => t.Id == addOrEditUserFeedBack.SubjectVisitId).Select(t => new { t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync();
|
var info = await _subjectVisitRepository.Where(t => t.Id == addOrEditUserFeedBack.SubjectVisitId).Select(t => new { t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (info != null)
|
if (info != null)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +99,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
else if (addOrEditUserFeedBack.SubjectId != null)
|
else if (addOrEditUserFeedBack.SubjectId != null)
|
||||||
{
|
{
|
||||||
var info = await _repository.Where<Subject>(t => t.Id == addOrEditUserFeedBack.SubjectId).Select(t => new { t.TrialSiteId }).FirstOrDefaultAsync();
|
var info = await _subjectRepository.Where(t => t.Id == addOrEditUserFeedBack.SubjectId).Select(t => new { t.TrialSiteId }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (info != null)
|
if (info != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,6 +32,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<UserPassWordLog> _userPassWordLogRepository,
|
IRepository<UserPassWordLog> _userPassWordLogRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
IEasyCachingProvider _cache,
|
IEasyCachingProvider _cache,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
||||||
|
|
||||||
|
@ -814,7 +815,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<PageOutput<UserLogView>> GetUserLogList(UserLogQuery inQuery)
|
public async Task<PageOutput<UserLogView>> GetUserLogList(UserLogQuery inQuery)
|
||||||
{
|
{
|
||||||
DateTime? trialCreateTime = inQuery.TrialId != null ? _repository.Where<Trial>(t => t.Id == inQuery.TrialId).Select(t => t.CreateTime).FirstOrDefault() : null;
|
DateTime? trialCreateTime = inQuery.TrialId != null ? _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.CreateTime).FirstOrDefault() : null;
|
||||||
|
|
||||||
var userLogQueryable =
|
var userLogQueryable =
|
||||||
_userLogRepository
|
_userLogRepository
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
/// UserTypeRoleService
|
/// UserTypeRoleService
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ApiExplorerSettings(GroupName = "Management")]
|
[ApiExplorerSettings(GroupName = "Management")]
|
||||||
public class UserTypeRoleService(IRepository<UserType> _userTypeRepository) : BaseService, IUserTypeService
|
public class UserTypeRoleService(IRepository<UserType> _userTypeRepository, IRepository<User> _userRepository) : BaseService, IUserTypeService
|
||||||
{
|
{
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -71,7 +71,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
await _userTypeRepository.EntityVerifyAsync(entity.Id, verifyExp1);
|
await _userTypeRepository.EntityVerifyAsync(entity.Id, verifyExp1);
|
||||||
}
|
}
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _userTypeRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok( entity.Id.ToString());
|
return ResponseOutput.Ok( entity.Id.ToString());
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{userTypeId:guid}")]
|
[HttpDelete("{userTypeId:guid}")]
|
||||||
public async Task<IResponseOutput> DeleteUserTypeRole(Guid userTypeId)
|
public async Task<IResponseOutput> DeleteUserTypeRole(Guid userTypeId)
|
||||||
{
|
{
|
||||||
if ( await _repository.AnyAsync<User>(t => t.UserTypeId == userTypeId))
|
if ( await _userRepository.AnyAsync(t => t.UserTypeId == userTypeId))
|
||||||
{
|
{
|
||||||
//---该用户类型中已存在用户,不能删除
|
//---该用户类型中已存在用户,不能删除
|
||||||
return ResponseOutput.NotOk(_localizer["UserType_InUse"]);
|
return ResponseOutput.NotOk(_localizer["UserType_InUse"]);
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
// 最完美方式 其中TrialSite 通过导航属性 两个字段连接出来
|
// 最完美方式 其中TrialSite 通过导航属性 两个字段连接出来
|
||||||
|
|
||||||
var clinicalObj = await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId)
|
var clinicalObj = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
|
||||||
.ProjectTo<SubjectClinicalDataDto>(_mapper.ConfigurationProvider, new { subjectVisitId = subjectVisitId, token = _userInfo.UserToken }).FirstOrDefaultAsync().IfNullThrowException();
|
.ProjectTo<SubjectClinicalDataDto>(_mapper.ConfigurationProvider, new { subjectVisitId = subjectVisitId, token = _userInfo.UserToken }).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
return clinicalObj;
|
return clinicalObj;
|
||||||
|
@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousHistory(PreviousHistoryAddOrEdit addOrEditPreviousHistory)
|
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousHistory(PreviousHistoryAddOrEdit addOrEditPreviousHistory)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousHistory.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousHistory.SubjectVisitId);
|
||||||
|
|
||||||
var entity = await _previousHistoryRepository.InsertOrUpdateAsync(addOrEditPreviousHistory, true);
|
var entity = await _previousHistoryRepository.InsertOrUpdateAsync(addOrEditPreviousHistory, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
@ -64,7 +64,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousHistoryId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousHistoryId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousHistory(Guid previousHistoryId,Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousHistory(Guid previousHistoryId,Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
await _previousHistoryRepository.DeleteFromQueryAsync(t => t.Id == previousHistoryId,true);
|
await _previousHistoryRepository.DeleteFromQueryAsync(t => t.Id == previousHistoryId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousOther(PreviousOtherAddOrEdit addOrEditPreviousOther)
|
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousOther(PreviousOtherAddOrEdit addOrEditPreviousOther)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousOther.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousOther.SubjectVisitId);
|
||||||
var entity = await _previousOtherRepository.InsertOrUpdateAsync(addOrEditPreviousOther, true);
|
var entity = await _previousOtherRepository.InsertOrUpdateAsync(addOrEditPreviousOther, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousOtherId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousOtherId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousOther(Guid previousOtherId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousOther(Guid previousOtherId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
await _previousOtherRepository.DeleteFromQueryAsync(t => t.Id == previousOtherId,true);
|
await _previousOtherRepository.DeleteFromQueryAsync(t => t.Id == previousOtherId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
@ -109,7 +109,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousSurgery(PreviousSurgeryAddOrEdit addOrEditPreviousSurgery)
|
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousSurgery(PreviousSurgeryAddOrEdit addOrEditPreviousSurgery)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousSurgery.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousSurgery.SubjectVisitId);
|
||||||
var entity = await _previousSurgeryRepository.InsertOrUpdateAsync(addOrEditPreviousSurgery, true);
|
var entity = await _previousSurgeryRepository.InsertOrUpdateAsync(addOrEditPreviousSurgery, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousSurgeryId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousSurgeryId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousSurgery(Guid previousSurgeryId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousSurgery(Guid previousSurgeryId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
var success = await _previousSurgeryRepository.DeleteFromQueryAsync(t => t.Id == previousSurgeryId,true);
|
var success = await _previousSurgeryRepository.DeleteFromQueryAsync(t => t.Id == previousSurgeryId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public async Task<IResponseOutput> AddOrUpdatePreviousPDF(PreviousPDFAddOrEdit addOrEditPreviousPDF)
|
public async Task<IResponseOutput> AddOrUpdatePreviousPDF(PreviousPDFAddOrEdit addOrEditPreviousPDF)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousPDF.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousPDF.SubjectVisitId);
|
||||||
var entity = await _previousPdfRepository.InsertOrUpdateAsync(addOrEditPreviousPDF, true);
|
var entity = await _previousPdfRepository.InsertOrUpdateAsync(addOrEditPreviousPDF, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousPDFId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousPDFId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousPDF(Guid previousPDFId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousPDF(Guid previousPDFId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
await _previousPdfRepository.DeleteFromQueryAsync(t => t.Id == previousPDFId,true);
|
await _previousPdfRepository.DeleteFromQueryAsync(t => t.Id == previousPDFId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using IRaCIS.Core.Application.Contracts.DTO;
|
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
||||||
|
using IRaCIS.Core.Application.Contracts.DTO;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
using IRaCIS.Core.Application.ViewModel;
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
@ -8,6 +9,7 @@ using System.ComponentModel;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
using static MassTransit.ValidationResultExtensions;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Contracts
|
namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
|
@ -211,7 +213,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
//临床数据收集
|
//临床数据收集
|
||||||
|
|
||||||
public string ClinicalDataCollect => $"{DicomStudyCount},{NoneDicomStudyCount}{(IsBaseLine? (ClinicalInformationTransmissionEnum>0 && IsHaveClinicalData ? ",w/" : ",w/o") :"" )}";
|
public string ClinicalDataCollect => $"{DicomStudyCount},{NoneDicomStudyCount}{(IsBaseLine ? (ClinicalInformationTransmissionEnum > 0 && IsHaveClinicalData ? ",w/" : ",w/o") : "")}";
|
||||||
|
|
||||||
public int? DicomStudyCount { get; set; }
|
public int? DicomStudyCount { get; set; }
|
||||||
public int? NoneDicomStudyCount { get; set; }
|
public int? NoneDicomStudyCount { get; set; }
|
||||||
|
@ -257,7 +259,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class QCVisitExportDTO: CRCVisitExportDTO
|
public class QCVisitExportDTO : CRCVisitExportDTO
|
||||||
{
|
{
|
||||||
//上传人
|
//上传人
|
||||||
public string SubmitUserRealName { get; set; }
|
public string SubmitUserRealName { get; set; }
|
||||||
|
@ -294,7 +296,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public string Content { get; set; } = string.Empty;
|
public string Content { get; set; } = string.Empty;
|
||||||
|
|
||||||
[DictionaryTranslateAttribute("YesOrNo")]
|
[DictionaryTranslateAttribute("ChallengeIsClosed")]
|
||||||
public bool IsClosed { get; set; }
|
public bool IsClosed { get; set; }
|
||||||
|
|
||||||
public DateTime? ClosedTime { get; set; }
|
public DateTime? ClosedTime { get; set; }
|
||||||
|
@ -317,10 +319,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
[DictionaryTranslateAttribute("ReuploadEnum")]
|
[DictionaryTranslateAttribute("ReuploadEnum")]
|
||||||
public QCChanllengeReuploadEnum ReuploadEnum { get; set; }
|
public QCChanllengeReuploadEnum ReuploadEnum { get; set; }
|
||||||
|
public List<DialogInfo> DialogList { get; set; }
|
||||||
|
|
||||||
|
public string DialogStr => string.Join("\n\n", DialogList.OrderBy(t => t.CreateTime).Select(c => c.UserName + " (" + ExportExcelConverterDate.DateTimeInternationalToString(c.CreateTime) + ") :" + c.Content));
|
||||||
|
|
||||||
public string DialogStr { get; set; }
|
|
||||||
|
|
||||||
//public SubmitStateEnum SubmitState { get; set; }
|
//public SubmitStateEnum SubmitState { get; set; }
|
||||||
//public string? CurrentActionUserName { get; set; }
|
//public string? CurrentActionUserName { get; set; }
|
||||||
|
@ -341,6 +342,16 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DialogInfo
|
||||||
|
{
|
||||||
|
public DateTime CreateTime { get; set; }
|
||||||
|
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
public string Content { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class SubjectExportDTO
|
public class SubjectExportDTO
|
||||||
{
|
{
|
||||||
|
@ -717,7 +728,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string CheckResult { get; set; } = String.Empty;
|
public string CheckResult { get; set; } = String.Empty;
|
||||||
|
|
||||||
|
|
||||||
public string CheckDialogStr { get; set; }
|
public List<DialogInfo> CheckDialogList { get; set; }
|
||||||
|
public string CheckDialogStr => string.Join("\n\n", CheckDialogList.OrderBy(t => t.CreateTime).Select(c => c.UserName + " (" + ExportExcelConverterDate.DateTimeInternationalToString(c.CreateTime) + ") :" + c.Content));
|
||||||
|
|
||||||
public DateTime? CheckBackTime { get; set; }
|
public DateTime? CheckBackTime { get; set; }
|
||||||
|
|
||||||
|
@ -1438,7 +1450,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public List<CheckChanllengeDialogDTO> DialogList { get; set; }
|
public List<CheckChanllengeDialogDTO> DialogList { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QCCheckWithModalityView: QCCheckViewModel
|
public class QCCheckWithModalityView : QCCheckViewModel
|
||||||
{
|
{
|
||||||
public DateTime? EarliestScanDate { get; set; }
|
public DateTime? EarliestScanDate { get; set; }
|
||||||
|
|
||||||
|
@ -1446,7 +1458,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public List<string> ModalityList { get; set; }
|
public List<string> ModalityList { get; set; }
|
||||||
|
|
||||||
public string Modalitys =>string.Join(',', ModalityList);
|
public string Modalitys => string.Join(',', ModalityList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QCCheckViewModel
|
public class QCCheckViewModel
|
||||||
|
|
|
@ -13,19 +13,19 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人
|
/// 验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="_repository"></param>
|
/// <param name="_subjectVisitRepository"></param>
|
||||||
/// <param name="_userInfo"></param>
|
/// <param name="_userInfo"></param>
|
||||||
/// <param name="subjectVisitId"></param>
|
/// <param name="subjectVisitId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
public async Task VerifyIsCRCSubmmitAsync(IRepository _repository, IUserInfo _userInfo, Guid? subjectVisitId = null)
|
public async Task VerifyIsCRCSubmmitAsync(IRepository<SubjectVisit> _subjectVisitRepository, IUserInfo _userInfo, Guid? subjectVisitId = null)
|
||||||
{
|
{
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||||
{
|
{
|
||||||
//添加的时候不验证
|
//添加的时候不验证
|
||||||
if (subjectVisitId != null)
|
if (subjectVisitId != null)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<SubjectVisit>(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted &&
|
if (await _subjectVisitRepository.AnyAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted &&
|
||||||
(!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))))
|
(!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))))
|
||||||
{
|
{
|
||||||
//---CRC 已提交影像,不能进行操作。
|
//---CRC 已提交影像,不能进行操作。
|
||||||
|
@ -39,17 +39,17 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
||||||
{
|
{
|
||||||
|
|
||||||
await VerifyIsCanQCAsync(_repository, _userInfo, null, subjectVisitId);
|
await VerifyIsCanQCAsync(_subjectVisitRepository, _userInfo, null, subjectVisitId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task VerifyIsCanQCAsync(IRepository _repository, IUserInfo _userInfo, SubjectVisit? subjectVisit = null, Guid? subjectVisitId = null)
|
public async Task VerifyIsCanQCAsync(IRepository<SubjectVisit> _subjectVisitRepository, IUserInfo _userInfo, SubjectVisit? subjectVisit = null, Guid? subjectVisitId = null)
|
||||||
{
|
{
|
||||||
if (subjectVisitId != null)
|
if (subjectVisitId != null)
|
||||||
{
|
{
|
||||||
subjectVisit = (await _repository.FirstOrDefaultAsync<SubjectVisit>(t => t.Id == subjectVisitId)).IfNullThrowException();
|
subjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||||
}
|
}
|
||||||
if (subjectVisit!.CurrentActionUserId != _userInfo.Id)
|
if (subjectVisit!.CurrentActionUserId != _userInfo.Id)
|
||||||
{
|
{
|
||||||
|
@ -60,11 +60,11 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task VerifyStudyImageDataAsync(IRepository _repository, Guid subjectId, Guid subjectVisitId, DateTime imageDate)
|
public async Task VerifyStudyImageDataAsync(IRepository<SubjectVisit> _subjectVisitRepository, Guid subjectId, Guid subjectVisitId, DateTime imageDate)
|
||||||
{
|
{
|
||||||
var visitList = await _repository.Where<SubjectVisit>(t => t.SubjectId == subjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToListAsync();
|
var visitList = await _subjectVisitRepository.Where(t => t.SubjectId == subjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToListAsync();
|
||||||
|
|
||||||
var currentVisitNum = await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => t.VisitNum).FirstOrDefaultAsync();
|
var currentVisitNum = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => t.VisitNum).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSet,
|
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSet,
|
||||||
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
|
IRepository<QCChallenge> _qcChallengeRepository,
|
||||||
IReadingImageTaskService _IReadingImageTaskService) : BaseService, IQCListService
|
IReadingImageTaskService _IReadingImageTaskService) : BaseService, IQCListService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -58,7 +63,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
var defalutSortArray = new string[] { nameof(SubjectVisit.IsUrgent) + " desc", nameof(SubjectVisit.SubjectId), nameof(SubjectVisit.VisitNum) };
|
var defalutSortArray = new string[] { nameof(SubjectVisit.IsUrgent) + " desc", nameof(SubjectVisit.SubjectId), nameof(SubjectVisit.VisitNum) };
|
||||||
var pageList = await query.ToPagedListAsync(inQuery, defalutSortArray);
|
var pageList = await query.ToPagedListAsync(inQuery, defalutSortArray);
|
||||||
|
|
||||||
var config = await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.Subject ) && x.UploadRole == UploadRole.CRC);
|
config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.Subject ) && x.UploadRole == UploadRole.CRC);
|
||||||
config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && x.UploadRole == UploadRole.CRC);
|
config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && x.UploadRole == UploadRole.CRC);
|
||||||
return ResponseOutput.Ok (pageList, config);
|
return ResponseOutput.Ok (pageList, config);
|
||||||
|
@ -134,7 +139,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var svExpression = QCCommon.GetQCChallengeFilter(inQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetQCChallengeFilter(inQuery.VisitPlanArray);
|
||||||
|
|
||||||
var query = _repository.Where<QCChallenge>(x => x.TrialId == inQuery.TrialId)
|
var query = _qcChallengeRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||||
//.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
|
//.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
|
||||||
.WhereIf(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
.WhereIf(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
||||||
.WhereIf(inQuery.IsClosed != null, t => t.IsClosed == inQuery.IsClosed)
|
.WhereIf(inQuery.IsClosed != null, t => t.IsClosed == inQuery.IsClosed)
|
||||||
|
@ -152,7 +157,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var pageList = await query.ToPagedListAsync(inQuery, new string[] { "IsUrgent desc", "CreateTime asc" });
|
var pageList = await query.ToPagedListAsync(inQuery, new string[] { "IsUrgent desc", "CreateTime asc" });
|
||||||
|
|
||||||
var config = await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
return ResponseOutput.Ok (pageList, config);
|
return ResponseOutput.Ok (pageList, config);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -173,7 +178,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var svExpression = QCCommon.GetQCChallengeFilter(inQuery.VisitPlanArray);
|
var svExpression = QCCommon.GetQCChallengeFilter(inQuery.VisitPlanArray);
|
||||||
|
|
||||||
var query = _repository.Where<QCChallenge>(x => x.TrialId == inQuery.TrialId)
|
var query = _qcChallengeRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||||
//.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
|
//.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
|
||||||
.WhereIf(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
.WhereIf(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
||||||
.WhereIf(inQuery.IsClosed != null, t => t.IsClosed == inQuery.IsClosed)
|
.WhereIf(inQuery.IsClosed != null, t => t.IsClosed == inQuery.IsClosed)
|
||||||
|
@ -190,7 +195,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var pageList = await query.ToPagedListAsync(inQuery, new string[] { "IsUrgent desc", "IsClosed asc" });
|
var pageList = await query.ToPagedListAsync(inQuery, new string[] { "IsUrgent desc", "IsClosed asc" });
|
||||||
|
|
||||||
var config = await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
return (pageList, config);
|
return (pageList, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +265,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var config = await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
return ResponseOutput.Ok (pageList, config);
|
return ResponseOutput.Ok (pageList, config);
|
||||||
|
|
||||||
|
@ -292,7 +297,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
.ProjectTo<QCCheckWithModalityView>(_mapper.ConfigurationProvider);
|
.ProjectTo<QCCheckWithModalityView>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
var pageList = await query.ToPagedListAsync(inQuery);
|
var pageList = await query.ToPagedListAsync(inQuery);
|
||||||
var config = await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
return (pageList, config);
|
return (pageList, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,7 +376,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
ExistsManual= (await _IReadingImageTaskService.GetManualList(new GetManualListInDto() { TrialId = sv.TrialId })).Count() > 0,
|
ExistsManual= (await _IReadingImageTaskService.GetManualList(new GetManualListInDto() { TrialId = sv.TrialId })).Count() > 0,
|
||||||
SeriesList = temp.SeriesList,
|
SeriesList = temp.SeriesList,
|
||||||
RelationInfo = await GetVisitQCSubjectInfo(subjectVisitId),
|
RelationInfo = await GetVisitQCSubjectInfo(subjectVisitId),
|
||||||
NoneDicomStudyList = await _repository.Where<NoneDicomStudy>(t => t.SubjectVisitId == subjectVisitId).ProjectTo<NoneDicomStudyView>(_mapper.ConfigurationProvider).ToListAsync(),
|
NoneDicomStudyList = await _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId).ProjectTo<NoneDicomStudyView>(_mapper.ConfigurationProvider).ToListAsync(),
|
||||||
SubjectClinicalData = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
|
SubjectClinicalData = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
|
||||||
.ProjectTo<SubjectClinicalDataDto>(_mapper.ConfigurationProvider, new { subjectVisitId = subjectVisitId, token = _userInfo.UserToken }).FirstOrDefaultAsync()
|
.ProjectTo<SubjectClinicalDataDto>(_mapper.ConfigurationProvider, new { subjectVisitId = subjectVisitId, token = _userInfo.UserToken }).FirstOrDefaultAsync()
|
||||||
};
|
};
|
||||||
|
@ -441,16 +446,16 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
//https://github.com/dotnet/efcore/issues/26833 ef core 导航属性不支持右连接
|
//https://github.com/dotnet/efcore/issues/26833 ef core 导航属性不支持右连接
|
||||||
|
|
||||||
// 直接用ProjectTo的方式 多做一次查询 代码简洁很多 特别是连表多,字段多的情况
|
// 直接用ProjectTo的方式 多做一次查询 代码简洁很多 特别是连表多,字段多的情况
|
||||||
if (await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType))
|
if (await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType))
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType).OrderBy(t => t.TrialQCQuestionConfigure.ShowOrder)
|
var list = await _trialQCQuestionAnswerRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType).OrderBy(t => t.TrialQCQuestionConfigure.ShowOrder)
|
||||||
.ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return await _repository.Where<TrialQCQuestion>(t => t.IsEnable == true && t.TrialId == trialId).OrderBy(t => t.ShowOrder).ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
return await _trialQCQuestionRepository.Where(t => t.IsEnable == true && t.TrialId == trialId).OrderBy(t => t.ShowOrder).ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -466,7 +471,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
[HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||||
public async Task<List<QCChallengeWithUser>> GetHistoryChallengeList(Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
public async Task<List<QCChallengeWithUser>> GetHistoryChallengeList(Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
var qaChallengeQuery = _repository.Where<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess)
|
var qaChallengeQuery = _qcChallengeRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess)
|
||||||
.WhereIf(currentQCType == CurrentQC.First, t => t.CurrentQCEnum == currentQCType)//复审的时候可以看到初审的质疑
|
.WhereIf(currentQCType == CurrentQC.First, t => t.CurrentQCEnum == currentQCType)//复审的时候可以看到初审的质疑
|
||||||
.ProjectTo<QCChallengeWithUser>(_mapper.ConfigurationProvider);
|
.ProjectTo<QCChallengeWithUser>(_mapper.ConfigurationProvider);
|
||||||
var qaChallenges = await qaChallengeQuery.ToListAsync();
|
var qaChallenges = await qaChallengeQuery.ToListAsync();
|
||||||
|
@ -498,10 +503,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[HttpGet("{subjectVisitId:guid}")]
|
[HttpGet("{subjectVisitId:guid}")]
|
||||||
public async Task<QAStudySeriesInfo> GetVisitQCStudyAndSeriesList(Guid subjectVisitId)
|
public async Task<QAStudySeriesInfo> GetVisitQCStudyAndSeriesList(Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
var studyList = await _repository.Where<DicomStudy>(s => s.SubjectVisitId == subjectVisitId).IgnoreQueryFilters().ProjectTo<QAStudyInfoDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
var studyList = await _dicomStudyRepository.Where(s => s.SubjectVisitId == subjectVisitId).IgnoreQueryFilters().ProjectTo<QAStudyInfoDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var seriesList = await _repository.Where<DicomSeries>(t => studyIds.Contains(t.StudyId)).IgnoreQueryFilters().ProjectTo<QASeriesInfoDto>(_mapper.ConfigurationProvider)
|
var seriesList = await _dicomSeriesRepository.Where(t => studyIds.Contains(t.StudyId)).IgnoreQueryFilters().ProjectTo<QASeriesInfoDto>(_mapper.ConfigurationProvider)
|
||||||
.OrderBy(t => t.StudyCode).ThenBy(t => t.SeriesNumber).ToListAsync();
|
.OrderBy(t => t.StudyCode).ThenBy(t => t.SeriesNumber).ToListAsync();
|
||||||
|
|
||||||
return new QAStudySeriesInfo { StudyList = studyList, SeriesList = seriesList };
|
return new QAStudySeriesInfo { StudyList = studyList, SeriesList = seriesList };
|
||||||
|
@ -518,10 +523,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
|
|
||||||
var visit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).FirstNotNullAsync();
|
var visit = await _subjectVisitRepository.Where(x => x.Id == subjectVisitId).FirstNotNullAsync();
|
||||||
var list= await _repository.Where<DicomStudy>(s => s.SubjectVisitId == subjectVisitId).IgnoreQueryFilters().ProjectTo<QAStudyInfoDTO>(_mapper.ConfigurationProvider).OrderBy(t=>t.StudyCode).ToListAsync();
|
var list= await _dicomStudyRepository.Where(s => s.SubjectVisitId == subjectVisitId).IgnoreQueryFilters().ProjectTo<QAStudyInfoDTO>(_mapper.ConfigurationProvider).OrderBy(t=>t.StudyCode).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
var config = await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t=>t.Trial).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t=>t.Trial).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
config.IsHaveStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialId == visit.TrialId && x.ClinicalDataLevel == ClinicalLevel.Study);
|
config.IsHaveStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialId == visit.TrialId && x.ClinicalDataLevel == ClinicalLevel.Study);
|
||||||
|
|
||||||
|
@ -540,7 +545,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<List<ChallengeAndDialog>> GetQCChallengeDialogList(Guid qaChallengeId)
|
public async Task<List<ChallengeAndDialog>> GetQCChallengeDialogList(Guid qaChallengeId)
|
||||||
{
|
{
|
||||||
|
|
||||||
var list = await _repository.Where<QCChallenge>(t => t.Id == qaChallengeId)
|
var list = await _qcChallengeRepository.Where(t => t.Id == qaChallengeId)
|
||||||
.ProjectTo<ChallengeAndDialog>(_mapper.ConfigurationProvider, new { currentUserId = _userInfo.Id }).ToListAsync();
|
.ProjectTo<ChallengeAndDialog>(_mapper.ConfigurationProvider, new { currentUserId = _userInfo.Id }).ToListAsync();
|
||||||
|
|
||||||
//利用automapper 运行时映射
|
//利用automapper 运行时映射
|
||||||
|
@ -562,7 +567,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<List<ChallengeAndDialog>> GetCRCVisitChallengeAndDialog(Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess)
|
public async Task<List<ChallengeAndDialog>> GetCRCVisitChallengeAndDialog(Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess)
|
||||||
{
|
{
|
||||||
|
|
||||||
var qaChallengeQuery = _repository.Where<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess)
|
var qaChallengeQuery = _qcChallengeRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess)
|
||||||
.ProjectTo<ChallengeAndDialog>(_mapper.ConfigurationProvider, new { currentUserId = _userInfo.Id });
|
.ProjectTo<ChallengeAndDialog>(_mapper.ConfigurationProvider, new { currentUserId = _userInfo.Id });
|
||||||
|
|
||||||
var list = await qaChallengeQuery.ToListAsync();
|
var list = await qaChallengeQuery.ToListAsync();
|
||||||
|
@ -581,7 +586,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<List<QCChanllengeCreatorDto>> GetQCChallengeCreatorList(Guid trialId)
|
public async Task<List<QCChanllengeCreatorDto>> GetQCChallengeCreatorList(Guid trialId)
|
||||||
{
|
{
|
||||||
|
|
||||||
return await _repository.Where<TrialUser>(t => t.TrialId == trialId && t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new QCChanllengeCreatorDto()
|
return await _trialUserRepository.Where(t => t.TrialId == trialId && t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new QCChanllengeCreatorDto()
|
||||||
{
|
{
|
||||||
CreatorRealName = t.User.FullName,
|
CreatorRealName = t.User.FullName,
|
||||||
Creator = t.User.UserName,
|
Creator = t.User.UserName,
|
||||||
|
@ -598,7 +603,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[HttpGet("{trialId:guid}")]
|
[HttpGet("{trialId:guid}")]
|
||||||
public async Task<List<ParticipantDTO>> GetQCParticipantList(Guid trialId)
|
public async Task<List<ParticipantDTO>> GetQCParticipantList(Guid trialId)
|
||||||
{
|
{
|
||||||
return await _repository.Where<TrialUser>(t => t.TrialId == trialId && (t.User.UserTypeEnum == UserTypeEnum.IQC || t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Select(t => new ParticipantDTO()
|
return await _trialUserRepository.Where(t => t.TrialId == trialId && (t.User.UserTypeEnum == UserTypeEnum.IQC || t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Select(t => new ParticipantDTO()
|
||||||
{
|
{
|
||||||
HandleUserRealName = t.User.FullName,
|
HandleUserRealName = t.User.FullName,
|
||||||
HandleUser = t.User.UserName,
|
HandleUser = t.User.UserName,
|
||||||
|
@ -613,9 +618,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<PageOutput<GetUserUploadFileDto>> GetConsistencyCheckFile(GetConsistencyCheckFileInDto inQuery)
|
public async Task<PageOutput<GetUserUploadFileDto>> GetConsistencyCheckFile(GetConsistencyCheckFileInDto inQuery, [FromServices] IRepository<InspectionFile> _inspectionFileRepository)
|
||||||
{
|
{
|
||||||
var query = _repository.Where<InspectionFile>(t => t.TrialId == inQuery.TrialId)
|
var query = _inspectionFileRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.ProjectTo<GetUserUploadFileDto>(_mapper.ConfigurationProvider);
|
.ProjectTo<GetUserUploadFileDto>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
return await query.ToPagedListAsync(inQuery);
|
return await query.ToPagedListAsync(inQuery);
|
||||||
|
|
|
@ -29,9 +29,17 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
||||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||||
IRepository<QCChallengeDialog> _qCChallengeDialogrepository,
|
IRepository<QCChallengeDialog> _qCChallengeDialogrepository,
|
||||||
IRepository<CheckChallengeDialog> _checkChallengeDialogrepository,
|
IRepository<CheckChallengeDialog> _checkChallengeDialogRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<SCPPatient> _scpPatientRepository,
|
||||||
|
IRepository<SCPStudy> _scpStudyRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<ReadModule> _readModuleRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService) : BaseService, IQCOperationService
|
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService) : BaseService, IQCOperationService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -46,7 +54,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
await VerifyIsCanQCAsync(null, subjectVisitId);
|
await VerifyIsCanQCAsync(null, subjectVisitId);
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == currentQCType))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == currentQCType))
|
||||||
{
|
{
|
||||||
//---请先核查图像,并保存审核问题,然后再发质疑。
|
//---请先核查图像,并保存审核问题,然后再发质疑。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_CheckFirst"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_CheckFirst"]);
|
||||||
|
@ -108,7 +116,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.UpdateFromDTOAsync<QCChallenge, QCChallengeCommand>(qaQuestionCommand, true);
|
await _qcChallengeRepository.UpdateFromDTOAsync(qaQuestionCommand, true);
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
||||||
|
@ -183,7 +191,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId)
|
public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (await _repository.AnyAsync<QCChallengeDialog>(t => t.QCChallengeId == qcChallengeId))
|
if (await _qCChallengeDialogrepository.AnyAsync(t => t.QCChallengeId == qcChallengeId))
|
||||||
{
|
{
|
||||||
//---当前QC质疑已经回复。
|
//---当前QC质疑已经回复。
|
||||||
ResponseOutput.NotOk(_localizer["QCOperation_QuestionReplied"]);
|
ResponseOutput.NotOk(_localizer["QCOperation_QuestionReplied"]);
|
||||||
|
@ -195,7 +203,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
await _qcChallengeRepository.DeleteAsync(qaRecord);
|
await _qcChallengeRepository.DeleteAsync(qaRecord);
|
||||||
|
|
||||||
|
|
||||||
var success1 = await _repository.SaveChangesAsync();
|
var success1 = await _qcChallengeRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success1 /*|| success2 || success3*/);
|
return ResponseOutput.Result(success1 /*|| success2 || success3*/);
|
||||||
}
|
}
|
||||||
|
@ -216,7 +224,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
||||||
|
|
||||||
var dbQCChallenge = (await _repository.FirstOrDefaultAsync<QCChallenge>(t => t.Id == qaDialogCommand.QCChallengeId)).IfNullThrowException();
|
var dbQCChallenge = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qaDialogCommand.QCChallengeId)).IfNullThrowException();
|
||||||
|
|
||||||
dbQCChallenge.LatestMsgTime = DateTime.Now;
|
dbQCChallenge.LatestMsgTime = DateTime.Now;
|
||||||
|
|
||||||
|
@ -224,7 +232,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
dbQCChallenge.LatestReplyUserId = _userInfo.Id;
|
dbQCChallenge.LatestReplyUserId = _userInfo.Id;
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _qCChallengeDialogrepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Result(success, qaReply);
|
return ResponseOutput.Result(success, qaReply);
|
||||||
|
@ -254,7 +262,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
||||||
|
|
||||||
await _repository.AddAsync(qaReply);
|
await _checkChallengeDialogRepository.AddAsync(qaReply);
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||||
{
|
{
|
||||||
|
@ -271,7 +279,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
throw new BusinessValidationFailedException(_localizer["QCOperation_NoPermissionReply"]);
|
throw new BusinessValidationFailedException(_localizer["QCOperation_NoPermissionReply"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success, qaReply.Id);
|
return ResponseOutput.Result(success, qaReply.Id);
|
||||||
}
|
}
|
||||||
|
@ -298,7 +306,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
sv.CloseTheReason = input.CloseCheckChallenge;
|
sv.CloseTheReason = input.CloseCheckChallenge;
|
||||||
|
|
||||||
sv.CheckChallengeState = CheckChanllengeTypeEnum.Closed;
|
sv.CheckChallengeState = CheckChanllengeTypeEnum.Closed;
|
||||||
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog()
|
||||||
{
|
{
|
||||||
SubjectVisitId = input.subjectVisitId,
|
SubjectVisitId = input.subjectVisitId,
|
||||||
//---原因:
|
//---原因:
|
||||||
|
@ -306,7 +314,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||||
|
|
||||||
});
|
});
|
||||||
await _repository.SaveChangesAsync();
|
await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(sv);
|
return ResponseOutput.Ok(sv);
|
||||||
}
|
}
|
||||||
|
@ -379,7 +387,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
|
var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
|
||||||
|
|
||||||
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog()
|
||||||
{
|
{
|
||||||
SubjectVisitId = subjectVisitId,
|
SubjectVisitId = subjectVisitId,
|
||||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||||
|
@ -425,7 +433,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
sv.RequestBackState = RequestBackStateEnum.PM_NotAgree;
|
sv.RequestBackState = RequestBackStateEnum.PM_NotAgree;
|
||||||
|
|
||||||
//---PM/APM拒绝一致性核查回退
|
//---PM/APM拒绝一致性核查回退
|
||||||
await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMReject"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMReject"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
||||||
|
|
||||||
await _subjectVisitRepository.SaveChangesAsync();
|
await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -499,12 +507,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
//_qcChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
//_qcChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
||||||
//_checkChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
//_checkChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
||||||
//---PM/APM同意一致性核查回退。
|
//---PM/APM同意一致性核查回退。
|
||||||
await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMAPMConsistency"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMAPMConsistency"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.DicomSerie.IsDeleted);
|
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.DicomSerie.IsDeleted);
|
||||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.IsDeleted);
|
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted);
|
||||||
|
|
||||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -547,7 +555,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
#region 先查询再更新
|
#region 先查询再更新
|
||||||
|
|
||||||
var questionAnswerList = await _repository.Where<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType, true).ToListAsync();
|
var questionAnswerList = await _trialQCQuestionAnswerRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType, true).ToListAsync();
|
||||||
|
|
||||||
qcQuestionAnswerCommands.ToList().ForEach(t =>
|
qcQuestionAnswerCommands.ToList().ForEach(t =>
|
||||||
{
|
{
|
||||||
|
@ -567,7 +575,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
return ResponseOutput.Ok(await _trialQCQuestionAnswerRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -575,9 +583,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
addlist.ForEach(t => { t.TrialId = trialId; t.SubjectVisitId = subjectVisitId; t.CurrentQCEnum = currentQCType; t.QCProcessEnum = trialQCProcess; });
|
addlist.ForEach(t => { t.TrialId = trialId; t.SubjectVisitId = subjectVisitId; t.CurrentQCEnum = currentQCType; t.QCProcessEnum = trialQCProcess; });
|
||||||
|
|
||||||
await _repository.AddRangeAsync(addlist);
|
await _trialQCQuestionAnswerRepository.AddRangeAsync(addlist);
|
||||||
|
|
||||||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
return ResponseOutput.Result(await _trialQCQuestionAnswerRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -601,7 +609,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
await VerifyIsCanQCAsync(null, subjectVisitId);
|
await VerifyIsCanQCAsync(null, subjectVisitId);
|
||||||
|
|
||||||
var series = (await _repository.Where<DicomSeries>(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
var series = (await _dicomSeriesRepository.Where(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
if (state == 1)
|
if (state == 1)
|
||||||
|
@ -616,9 +624,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
series.IsDeleted = true;
|
series.IsDeleted = true;
|
||||||
|
|
||||||
var study = (await _repository.Where<DicomStudy>(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
var study = (await _dicomStudyRepository.Where(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
var instanceIdList = await _repository.Where<DicomInstance>(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
var instanceIdList = await _dicomInstanceRepository.Where(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
||||||
|
|
||||||
//instanceIdList.ForEach(t =>
|
//instanceIdList.ForEach(t =>
|
||||||
//{
|
//{
|
||||||
|
@ -641,10 +649,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
series.IsDeleted = false;
|
series.IsDeleted = false;
|
||||||
|
|
||||||
var study = (await _repository.Where<DicomStudy>(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
var study = (await _dicomStudyRepository.Where(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
var instanceIdList = await _repository.Where<DicomInstance>(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
var instanceIdList = await _dicomInstanceRepository.Where(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
||||||
|
|
||||||
study.InstanceCount = study.InstanceCount + instanceIdList.Count;
|
study.InstanceCount = study.InstanceCount + instanceIdList.Count;
|
||||||
|
|
||||||
|
@ -653,7 +661,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
study.IsDeleted = study.SeriesCount == 0;
|
study.IsDeleted = study.SeriesCount == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -685,20 +693,20 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
|
|
||||||
var studyId = updateModalityCommand.Id;
|
var studyId = updateModalityCommand.Id;
|
||||||
var study = (await _repository.FirstOrDefaultAsync<DicomStudy>(t => t.Id == studyId)).IfNullThrowException();
|
var study = (await _dicomStudyRepository.FirstOrDefaultAsync(t => t.Id == studyId)).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
study.BodyPartForEdit = updateModalityCommand.BodyPart;
|
study.BodyPartForEdit = updateModalityCommand.BodyPart;
|
||||||
|
|
||||||
study.ModalityForEdit = updateModalityCommand.Modality;
|
study.ModalityForEdit = updateModalityCommand.Modality;
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<DicomSeries>(t => t.StudyId == studyId, r => new DicomSeries() { BodyPartForEdit = updateModalityCommand.BodyPart });
|
await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.StudyId == studyId, r => new DicomSeries() { BodyPartForEdit = updateModalityCommand.BodyPart });
|
||||||
}
|
}
|
||||||
else if (updateModalityCommand.Type == 2)
|
else if (updateModalityCommand.Type == 2)
|
||||||
{
|
{
|
||||||
|
|
||||||
var seriesId = updateModalityCommand.Id;
|
var seriesId = updateModalityCommand.Id;
|
||||||
var series = (await _repository.FirstOrDefaultAsync<DicomSeries>(t => t.Id == seriesId)).IfNullThrowException();
|
var series = (await _dicomSeriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId)).IfNullThrowException();
|
||||||
series.BodyPartForEdit = updateModalityCommand.BodyPart;
|
series.BodyPartForEdit = updateModalityCommand.BodyPart;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -707,7 +715,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _subjectVisitRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,7 +730,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
await VerifyIsCanQCAsync(null, subjectVisitId);
|
await VerifyIsCanQCAsync(null, subjectVisitId);
|
||||||
|
|
||||||
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
if (await _qcChallengeRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
||||||
{
|
{
|
||||||
//---当前访视有质疑未关闭,不允许该操作
|
//---当前访视有质疑未关闭,不允许该操作
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_UnresolvedQCQuery"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_UnresolvedQCQuery"]);
|
||||||
|
@ -765,10 +773,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
await _dicomStudyRepository.DeleteAsync(study);
|
await _dicomStudyRepository.DeleteAsync(study);
|
||||||
|
|
||||||
|
|
||||||
var succeess2 = await _repository.BatchDeleteAsync<DicomInstance>(t => t.StudyId == id);
|
var succeess2 = await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
|
||||||
var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
|
var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == id,u=>new SCPStudy() { SubjectVisitId=null});
|
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == id,u=>new SCPStudy() { SubjectVisitId=null});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -777,7 +785,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
//删除 物理文件
|
//删除 物理文件
|
||||||
|
|
||||||
//var instancePathList = await _repository.Where<DicomInstance>(t => t.StudyId == id)
|
//var instancePathList = await _dicomInstanceRepository.Where(t => t.StudyId == id)
|
||||||
// .Select(t => t.Path).ToListAsync();
|
// .Select(t => t.Path).ToListAsync();
|
||||||
|
|
||||||
//instancePathList.ForEach(path =>
|
//instancePathList.ForEach(path =>
|
||||||
|
@ -796,13 +804,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var subjectId=waitDeleteStudyList.Select(t=>t.SubjectId).FirstOrDefault();
|
var subjectId=waitDeleteStudyList.Select(t=>t.SubjectId).FirstOrDefault();
|
||||||
|
|
||||||
var patientList = _repository.Where<SCPPatient>(t => t.SubjectId == subjectId).Select(t => t.Id).ToList();
|
var patientList = _scpPatientRepository.Where(t => t.SubjectId == subjectId).Select(t => t.Id).ToList();
|
||||||
|
|
||||||
foreach (var patientId in patientList)
|
foreach (var patientId in patientList)
|
||||||
{
|
{
|
||||||
if (_repository.Where<SCPPatient>(t=>t.Id== patientId).Any(t => t.SCPStudyList.Count() == t.SCPStudyList.Where(t => t.SubjectVisitId == null).Count()))
|
if (_scpPatientRepository.Where(t=>t.Id== patientId).Any(t => t.SCPStudyList.Count() == t.SCPStudyList.Where(t => t.SubjectVisitId == null).Count()))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == patientId, u => new SCPPatient() { SubjectId = null });
|
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == patientId, u => new SCPPatient() { SubjectId = null });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1256,11 +1264,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
.FirstOrDefaultAsync(t => t.TrialId == cRCRequestToQCCommand.TrialId)).IfNullThrowException();
|
.FirstOrDefaultAsync(t => t.TrialId == cRCRequestToQCCommand.TrialId)).IfNullThrowException();
|
||||||
|
|
||||||
//找到符合配置的标准 确认的并且签名的、双重,有序,阅片期仲裁
|
//找到符合配置的标准 确认的并且签名的、双重,有序,阅片期仲裁
|
||||||
var trialReadingCriterionIdList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm && t.ReadingInfoSignTime != null
|
var trialReadingCriterionIdList = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm && t.ReadingInfoSignTime != null
|
||||||
//&& t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading
|
//&& t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading
|
||||||
&& t.IsReadingTaskViewInOrder == ReadingOrder.InOrder && t.IsReadingPeriod).Select(t => t.Id).ToList();
|
&& t.IsReadingTaskViewInOrder == ReadingOrder.InOrder && t.IsReadingPeriod).Select(t => t.Id).ToList();
|
||||||
|
|
||||||
var trialInOrderCriterionIdList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm && t.ReadingInfoSignTime != null
|
var trialInOrderCriterionIdList = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm && t.ReadingInfoSignTime != null
|
||||||
//&& t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading
|
//&& t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading
|
||||||
&& t.IsReadingTaskViewInOrder == ReadingOrder.InOrder).Select(t => t.Id).ToList();
|
&& t.IsReadingTaskViewInOrder == ReadingOrder.InOrder).Select(t => t.Id).ToList();
|
||||||
|
|
||||||
|
@ -1287,7 +1295,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取确认的临床数据配置
|
//获取确认的临床数据配置
|
||||||
var clinicalDataConfirmList = _repository.Where<ClinicalDataTrialSet>(t => t.TrialId == trialId && t.IsConfirm).ToList();
|
var clinicalDataConfirmList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList();
|
||||||
|
|
||||||
// 别人未提交的
|
// 别人未提交的
|
||||||
foreach (var dbSubjectVisit in dbSubjectVisitList)
|
foreach (var dbSubjectVisit in dbSubjectVisitList)
|
||||||
|
@ -1461,10 +1469,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
foreach (var trialReadingCriterionId in trialReadingCriterionIdList)
|
foreach (var trialReadingCriterionId in trialReadingCriterionIdList)
|
||||||
{
|
{
|
||||||
//不存在该阅片期 (重传、回退都会重新提交)
|
//不存在该阅片期 (重传、回退都会重新提交)
|
||||||
if (!await _repository.Where<ReadModule>(t => t.SubjectVisitId == dbSubjectVisit.Id && t.ReadingSetType == ReadingSetType.ImageReading && t.TrialReadingCriterionId == trialReadingCriterionId).AnyAsync())
|
if (!await _readModuleRepository.Where(t => t.SubjectVisitId == dbSubjectVisit.Id && t.ReadingSetType == ReadingSetType.ImageReading && t.TrialReadingCriterionId == trialReadingCriterionId).AnyAsync())
|
||||||
{
|
{
|
||||||
|
|
||||||
var newReadModule = await _repository.AddAsync(new ReadModule()
|
var newReadModule = await _readModuleRepository.AddAsync(new ReadModule()
|
||||||
{
|
{
|
||||||
TrialReadingCriterionId = trialReadingCriterionId,
|
TrialReadingCriterionId = trialReadingCriterionId,
|
||||||
ReadingSetType = ReadingSetType.ImageReading,
|
ReadingSetType = ReadingSetType.ImageReading,
|
||||||
|
@ -1488,7 +1496,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(success);
|
return ResponseOutput.Ok(success);
|
||||||
|
|
||||||
|
@ -1510,7 +1518,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialUser>(t => t.TrialId == trialId && t.UserId == _userInfo.Id))
|
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
//---您已经被移出项目,没有操作权限。
|
//---您已经被移出项目,没有操作权限。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_RemoveItem"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_RemoveItem"]);
|
||||||
|
@ -1520,7 +1528,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
if (auditState == AuditStateEnum.QCPassed)
|
if (auditState == AuditStateEnum.QCPassed)
|
||||||
{
|
{
|
||||||
//判断质疑是否都关闭了
|
//判断质疑是否都关闭了
|
||||||
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
if (await _qcChallengeRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
||||||
{
|
{
|
||||||
//---当前访视有影像质控质疑未关闭,不能进行此操作。
|
//---当前访视有影像质控质疑未关闭,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotClosed"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotClosed"]);
|
||||||
|
@ -1540,7 +1548,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
//删除 软删除的物理文件
|
//删除 软删除的物理文件
|
||||||
var instancePathList = await _repository.Where<DicomInstance>(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)
|
var instancePathList = await _dicomInstanceRepository.Where(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)
|
||||||
.Select(t => t.Path).ToListAsync();
|
.Select(t => t.Path).ToListAsync();
|
||||||
|
|
||||||
//维护统一状态
|
//维护统一状态
|
||||||
|
@ -1561,7 +1569,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
||||||
{
|
{
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题没有保存,不能进行此操作。
|
//---影像质控审核问题没有保存,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||||
|
@ -1608,7 +1616,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题没有保存,不能进行此操作。
|
//---影像质控审核问题没有保存,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||||
|
@ -1623,7 +1631,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
else if (dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC)
|
else if (dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.Second))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.Second))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题没有保存,不能进行此操作。
|
//---影像质控审核问题没有保存,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||||
|
@ -1719,7 +1727,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
dbSubjectVisit.CurrentActionUserId = null;
|
dbSubjectVisit.CurrentActionUserId = null;
|
||||||
dbSubjectVisit.CurrentActionUserExpireTime = null;
|
dbSubjectVisit.CurrentActionUserExpireTime = null;
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Result(true);
|
return ResponseOutput.Result(true);
|
||||||
|
@ -1745,7 +1753,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||||
|
|
||||||
sv.IsUrgent = setOrCancel;
|
sv.IsUrgent = setOrCancel;
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1782,7 +1790,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
|
|
||||||
//获取项目配置
|
//获取项目配置
|
||||||
var trialConfig = await _repository.Where<Trial>(t => t.Id == trialId).Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification })
|
var trialConfig = await _trialRepository.Where(t => t.Id == trialId).Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification })
|
||||||
.FirstOrDefaultAsync().IfNullThrowException();
|
.FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
||||||
|
@ -1829,7 +1837,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
});
|
});
|
||||||
|
|
||||||
//双审 并且是2QC 那么需要回退到1QC 讲1QC数据清除
|
//双审 并且是2QC 那么需要回退到1QC 讲1QC数据清除
|
||||||
if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit && await _repository.AnyAsync<QCChallenge>(t => t.Id == qcChallengeId && t.SubjectVisit.AuditState == AuditStateEnum.InSecondaryQC))
|
if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit && await _qcChallengeRepository.AnyAsync(t => t.Id == qcChallengeId && t.SubjectVisit.AuditState == AuditStateEnum.InSecondaryQC))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -1853,18 +1861,18 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
//删除1QC 填写的问题答案
|
//删除1QC 填写的问题答案
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.First);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.First);
|
||||||
|
|
||||||
//2QC 数据变为1QC
|
//2QC 数据变为1QC
|
||||||
await _repository.BatchUpdateAsync<QCChallenge>(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new QCChallenge() { CurrentQCEnum = CurrentQC.First });
|
await _qcChallengeRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new QCChallenge() { CurrentQCEnum = CurrentQC.First });
|
||||||
await _repository.BatchUpdateAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new TrialQCQuestionAnswer() { CurrentQCEnum = CurrentQC.First });
|
await _trialQCQuestionAnswerRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new TrialQCQuestionAnswer() { CurrentQCEnum = CurrentQC.First });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _qcChallengeRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
|
|
|
@ -21,6 +21,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[ApiExplorerSettings(GroupName = "Image")]
|
[ApiExplorerSettings(GroupName = "Image")]
|
||||||
public class TrialQCQuestionConfigureService(
|
public class TrialQCQuestionConfigureService(
|
||||||
IRepository<TrialQCQuestion> _trialQcQuestionRepository,
|
IRepository<TrialQCQuestion> _trialQcQuestionRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
||||||
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<QCQuestion> _qCQuestionRepository) : BaseService, ITrialQCQuestionConfigureService
|
IRepository<QCQuestion> _qCQuestionRepository) : BaseService, ITrialQCQuestionConfigureService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -55,10 +58,10 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
var list = await trialQCQuestionQueryable.OrderByDescending(x=>x.LanguageType).ThenBy(t => t.ShowOrder).ToListAsync();
|
var list = await trialQCQuestionQueryable.OrderByDescending(x=>x.LanguageType).ThenBy(t => t.ShowOrder).ToListAsync();
|
||||||
|
|
||||||
var isHaveQCQuestion = _repository.Where<TrialQCQuestion>(t => t.TrialId == queryTrialQCQuestionConfigure.TrialId).Any();
|
var isHaveQCQuestion = _trialQCQuestionRepository.Where(t => t.TrialId == queryTrialQCQuestionConfigure.TrialId).Any();
|
||||||
|
|
||||||
|
|
||||||
var signInfo = await _repository.Where<Trial>(t => t.Id == queryTrialQCQuestionConfigure.TrialId)
|
var signInfo = await _trialRepository.Where(t => t.Id == queryTrialQCQuestionConfigure.TrialId)
|
||||||
.Select(trial => new
|
.Select(trial => new
|
||||||
{
|
{
|
||||||
trial.QCProcessEnum,
|
trial.QCProcessEnum,
|
||||||
|
@ -132,7 +135,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public async Task VerifyIsQCConfirmedAsync(Guid trialId)
|
public async Task VerifyIsQCConfirmedAsync(Guid trialId)
|
||||||
{
|
{
|
||||||
if (!await _repository.AnyAsync<Trial>(t => t.Id == trialId && t.QCQuestionConfirmedUserId == null))
|
if (!await _trialRepository.AnyAsync(t => t.Id == trialId && t.QCQuestionConfirmedUserId == null))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题模板已经确认,不允许操作。
|
//---影像质控审核问题模板已经确认,不允许操作。
|
||||||
throw new BusinessValidationFailedException(_localizer["TrialQCQuestion_TemplateConfirmed"]);
|
throw new BusinessValidationFailedException(_localizer["TrialQCQuestion_TemplateConfirmed"]);
|
||||||
|
@ -251,7 +254,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
await _trialQcQuestionRepository.AddRangeAsync(childList);
|
await _trialQcQuestionRepository.AddRangeAsync(childList);
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialQcQuestionRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
@ -318,7 +321,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_DeleteChildFirst"]);
|
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_DeleteChildFirst"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId))
|
if (await _trialQCQuestionAnswerRepository.AnyAsync(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId))
|
||||||
{
|
{
|
||||||
//---该审核问题已被影像质控过程引用,不允许删除
|
//---该审核问题已被影像质控过程引用,不允许删除
|
||||||
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_ReferencedByQCProcess"]);
|
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_ReferencedByQCProcess"]);
|
||||||
|
|
|
@ -42,7 +42,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName));
|
.ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName));
|
||||||
|
|
||||||
|
|
||||||
|
CreateMap<QCChallengeDialog, DialogInfo>()
|
||||||
|
.ForMember(d => d.CreateTime, u => u.MapFrom(s => s.CreateTime))
|
||||||
|
.ForMember(d => d.UserName, u => u.MapFrom(s => s.CreateUser.UserName))
|
||||||
|
.ForMember(d => d.Content, u => u.MapFrom(s => s.TalkContent));
|
||||||
|
|
||||||
CreateMap<QCChallenge, QCChanllengeExportDto>()
|
CreateMap<QCChallenge, QCChanllengeExportDto>()
|
||||||
|
|
||||||
|
@ -53,7 +56,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.CreateUserName, u => u.MapFrom(s => s.CreateUser.UserName))
|
.ForMember(d => d.CreateUserName, u => u.MapFrom(s => s.CreateUser.UserName))
|
||||||
.ForMember(d => d.LatestReplyUserName, u => u.MapFrom(t => t.LatestReplyUser.UserName))
|
.ForMember(d => d.LatestReplyUserName, u => u.MapFrom(t => t.LatestReplyUser.UserName))
|
||||||
|
|
||||||
.ForMember(d => d.DialogStr, u => u.MapFrom(t => string.Join("\n\n", t.DialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " (" + c.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") + ") :" + c.TalkContent))))
|
.ForMember(d => d.DialogList, u => u.MapFrom(t => t.DialogList))
|
||||||
|
|
||||||
|
//.ForMember(d => d.DialogStr, u => u.MapFrom(t => string.Join("\n\n", t.DialogList.OrderBy(t => t.CreateTime)
|
||||||
|
//.Select(c => c.CreateUser.UserName + " (" + c.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") + ") :" + c.TalkContent))))
|
||||||
|
|
||||||
.ForMember(d => d.SubjectState, u => u.MapFrom(s => s.SubjectVisit.Subject.Status));
|
.ForMember(d => d.SubjectState, u => u.MapFrom(s => s.SubjectVisit.Subject.Status));
|
||||||
|
|
||||||
|
@ -111,13 +117,20 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.FirstGiveMedicineTime, u => u.MapFrom(s => s.Subject.FirstGiveMedicineTime))
|
.ForMember(d => d.FirstGiveMedicineTime, u => u.MapFrom(s => s.Subject.FirstGiveMedicineTime))
|
||||||
.ForMember(d => d.TrialReadingCriterionName, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionName));
|
.ForMember(d => d.TrialReadingCriterionName, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionName));
|
||||||
|
|
||||||
|
CreateMap<CheckChallengeDialog, DialogInfo>()
|
||||||
|
.ForMember(d => d.CreateTime, u => u.MapFrom(s => s.CreateTime))
|
||||||
|
.ForMember(d => d.UserName, u => u.MapFrom(s => s.CreateUser.UserName))
|
||||||
|
.ForMember(d => d.Content, u => u.MapFrom(s => s.TalkContent));
|
||||||
|
|
||||||
CreateMap<SubjectVisit, PMKCheckEXportDTO>()
|
CreateMap<SubjectVisit, PMKCheckEXportDTO>()
|
||||||
.ForMember(d => d.TalkContent, u => u.MapFrom(s => s.CheckChallengeDialogList.OrderByDescending(y => y.CreateTime).Select(x => x.TalkContent).FirstOrDefault()))
|
.ForMember(d => d.TalkContent, u => u.MapFrom(s => s.CheckChallengeDialogList.OrderByDescending(y => y.CreateTime).Select(x => x.TalkContent).FirstOrDefault()))
|
||||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
|
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
|
||||||
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
|
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
|
||||||
|
|
||||||
.ForMember(d => d.CheckDialogStr, u => u.MapFrom(t => string.Join("\n\n", t.CheckChallengeDialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " (" + c.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") + ") :" + c.TalkContent))))
|
.ForMember(d => d.CheckDialogList, u => u.MapFrom(s => s.CheckChallengeDialogList))
|
||||||
|
//.ForMember(d => d.CheckDialogStr, u => u.MapFrom(t => string.Join("\n\n",
|
||||||
|
//t.CheckChallengeDialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " (" + c.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") + ") :" + c.TalkContent))))
|
||||||
|
|
||||||
.ForMember(d => d.ModalityList, c => c.MapFrom(s =>
|
.ForMember(d => d.ModalityList, c => c.MapFrom(s =>
|
||||||
(s.NoneDicomStudyList.Select(t => t.Modality)
|
(s.NoneDicomStudyList.Select(t => t.Modality)
|
||||||
.Union(s.StudyList.Select(k => k.ModalityForEdit))).Distinct()))
|
.Union(s.StudyList.Select(k => k.ModalityForEdit))).Distinct()))
|
||||||
|
@ -155,7 +168,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
|
.ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
|
||||||
.ForMember(o => o.DoctorUserName, t => t.MapFrom(u => u.VisitTask.DoctorUser.UserName))
|
.ForMember(o => o.DoctorUserName, t => t.MapFrom(u => u.VisitTask.DoctorUser.UserName))
|
||||||
.ForMember(o => o.MedicalManagerUserName, t => t.MapFrom(u => u.MedicalManagerUser.UserName))
|
.ForMember(o => o.MedicalManagerUserName, t => t.MapFrom(u => u.MedicalManagerUser.UserName))
|
||||||
.ForMember(o => o.QuestionContent, t => t.MapFrom(u=> string.Join("\n\n", u.ReadingMedicalReviewDialogList.Where(t => t.IsHaveQuestion).Select(t=>t.Questioning))) );
|
.ForMember(o => o.QuestionContent, t => t.MapFrom(u => string.Join("\n\n", u.ReadingMedicalReviewDialogList.Where(t => t.IsHaveQuestion).Select(t => t.Questioning))));
|
||||||
|
|
||||||
CreateMap<VisitTask, TaskMedicalReviewExportDto>()
|
CreateMap<VisitTask, TaskMedicalReviewExportDto>()
|
||||||
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
|
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
|
||||||
|
@ -173,8 +186,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
||||||
.ForMember(o => o.IsBaseline, t => t.MapFrom(u => u.SourceSubjectVisit.IsBaseLine))
|
.ForMember(o => o.IsBaseline, t => t.MapFrom(u => u.SourceSubjectVisit.IsBaseLine))
|
||||||
.ForMember(o => o.EvaluateResult, t => t.MapFrom(u =>
|
.ForMember(o => o.EvaluateResult, t => t.MapFrom(u =>
|
||||||
u.SourceSubjectVisit.IsBaseLine? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault()!.Answer
|
u.SourceSubjectVisit.IsBaseLine ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault()!.Answer
|
||||||
: u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault()!.Answer ))
|
: u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault()!.Answer))
|
||||||
|
|
||||||
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
|
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
|
||||||
|
|
||||||
|
@ -191,8 +204,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(o => o.JudgeArmEnum, t => t.MapFrom(u => u.JudgeResultTask.ArmEnum))
|
.ForMember(o => o.JudgeArmEnum, t => t.MapFrom(u => u.JudgeResultTask.ArmEnum))
|
||||||
|
|
||||||
.ForMember(o => o.OverallTumorEvaluationResult, t => t.MapFrom(u =>
|
.ForMember(o => o.OverallTumorEvaluationResult, t => t.MapFrom(u =>
|
||||||
criterionType == CriterionType.RECIST1Point1 ?( u.SourceSubjectVisit.IsBaseLine==true ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault()!.Answer:
|
criterionType == CriterionType.RECIST1Point1 ? (u.SourceSubjectVisit.IsBaseLine == true ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault()!.Answer :
|
||||||
u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).Select(t=>t.IsGlobalChange?t.GlobalChangeAnswer:t.Answer).FirstOrDefault())
|
u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).Select(t => t.IsGlobalChange ? t.GlobalChangeAnswer : t.Answer).FirstOrDefault())
|
||||||
: criterionType == CriterionType.PCWG3 ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefault()!.Answer : String.Empty
|
: criterionType == CriterionType.PCWG3 ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefault()!.Answer : String.Empty
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@ -220,7 +233,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<ReadingTableAnswerRowInfo, RECIST1Point1LessionInfo>()
|
CreateMap<ReadingTableAnswerRowInfo, RECIST1Point1LessionInfo>()
|
||||||
.ForMember(o => o.LessionCode, t => t.MapFrom(u => u.RowMark))
|
.ForMember(o => o.LessionCode, t => t.MapFrom(u => u.RowMark))
|
||||||
.ForMember(o => o.LessionType, t => t.MapFrom(u =>(int?) u.ReadingQuestionTrial.LesionType))
|
.ForMember(o => o.LessionType, t => t.MapFrom(u => (int?)u.ReadingQuestionTrial.LesionType))
|
||||||
.ForMember(o => o.IsLymph, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.IsLymph).FirstOrDefault()!.Answer))
|
.ForMember(o => o.IsLymph, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.IsLymph).FirstOrDefault()!.Answer))
|
||||||
|
|
||||||
//位置可能是自己填写的
|
//位置可能是自己填写的
|
||||||
|
@ -412,11 +425,11 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex))
|
.ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex))
|
||||||
.ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age))
|
.ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age))
|
||||||
.ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
|
.ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
|
||||||
|| t.Subject.ClinicalFormList.Any(x=>x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&& x.ReadingId==t.Id)
|
|| t.Subject.ClinicalFormList.Any(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == t.Id)
|
||||||
|| t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count > 0)
|
|| t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count > 0)
|
||||||
|| t.PreviousSurgeryList.Any()))
|
|| t.PreviousSurgeryList.Any()))
|
||||||
|
|
||||||
.ForMember(d => d.IsHaveUploadFailed, u => u.MapFrom(t => t.StudyList.SelectMany(c=>c.DicomStudyMonitorList).Any(h => h.FailedFileCount>0) ))
|
.ForMember(d => d.IsHaveUploadFailed, u => u.MapFrom(t => t.StudyList.SelectMany(c => c.DicomStudyMonitorList).Any(h => h.FailedFileCount > 0)))
|
||||||
|
|
||||||
//.ForMember(d => d.VisitName, u => u.MapFrom(t =>t.InPlan? t.VisitStage.VisitName : t.VisitName))
|
//.ForMember(d => d.VisitName, u => u.MapFrom(t =>t.InPlan? t.VisitStage.VisitName : t.VisitName))
|
||||||
//.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitNum : t.VisitNum))
|
//.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitNum : t.VisitNum))
|
||||||
|
@ -581,7 +594,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<NoneDicomStudy, NoneDicomStudyView>()
|
CreateMap<NoneDicomStudy, NoneDicomStudyView>()
|
||||||
//.ForMember(d => d.FileCount, u => u.MapFrom(s => s.NoneDicomFileList.Count))
|
//.ForMember(d => d.FileCount, u => u.MapFrom(s => s.NoneDicomFileList.Count))
|
||||||
.ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => isFilterZip? s.NoneDicomFileList.Where(t=>!t.FileType.Contains(StaticData.FileType.Zip)): s.NoneDicomFileList))
|
.ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => isFilterZip ? s.NoneDicomFileList.Where(t => !t.FileType.Contains(StaticData.FileType.Zip)) : s.NoneDicomFileList))
|
||||||
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
|
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository,
|
IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IVisitTaskHelpeService _IVisitTaskHelpeService,
|
IVisitTaskHelpeService _IVisitTaskHelpeService,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||||||
IRepository<VisitTaskReReading> _visitTaskReReadingRepository) : BaseService, ISubjectCriteriaEvaluationService
|
IRepository<VisitTaskReReading> _visitTaskReReadingRepository) : BaseService, ISubjectCriteriaEvaluationService
|
||||||
{
|
{
|
||||||
|
@ -311,7 +313,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
//找到该方式的所有序列
|
//找到该方式的所有序列
|
||||||
var list = await _repository.Where<DicomSeries>(t => t.SubjectVisitId == subjectVisitId && t.SubjectId == subjectId).Select(t => new { SeriesId = t.Id, t.StudyId, t.BodyPartForEdit }).ToListAsync();
|
var list = await _dicomSeriesRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.SubjectId == subjectId).Select(t => new { SeriesId = t.Id, t.StudyId, t.BodyPartForEdit }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
////已经自动筛选过
|
////已经自动筛选过
|
||||||
|
@ -462,7 +464,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<HaveGeneratedTaskDto>> GetHaveGeneratedTaskList(HaveGeneratedTaskQuery inQuery)
|
public async Task<List<HaveGeneratedTaskDto>> GetHaveGeneratedTaskList(HaveGeneratedTaskQuery inQuery)
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<VisitTask>(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SubjectId == inQuery.SubjectId && t.TaskState == TaskState.Effect).OrderBy(t => t.VisitTaskNum)
|
var list = await _visitTaskRepository.Where(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SubjectId == inQuery.SubjectId && t.TaskState == TaskState.Effect).OrderBy(t => t.VisitTaskNum)
|
||||||
.ProjectTo<HaveGeneratedTaskDto>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<HaveGeneratedTaskDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
@ -494,7 +496,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var idList = batchGenerateTaskCommand.SubjectVisitIdList.Select(t => (Guid?)t).ToList();
|
var idList = batchGenerateTaskCommand.SubjectVisitIdList.Select(t => (Guid?)t).ToList();
|
||||||
|
|
||||||
//存在任务的访视
|
//存在任务的访视
|
||||||
var haveGenerateVisitIdList = await _repository.Where<VisitTask>(t => idList.Contains(t.SourceSubjectVisitId) && t.TrialReadingCriterionId == batchGenerateTaskCommand.TrialReadingCriterionId && t.TaskState == TaskState.Effect)
|
var haveGenerateVisitIdList = await _visitTaskRepository.Where(t => idList.Contains(t.SourceSubjectVisitId) && t.TrialReadingCriterionId == batchGenerateTaskCommand.TrialReadingCriterionId && t.TaskState == TaskState.Effect)
|
||||||
.Select(t => t.SourceSubjectVisitId).ToListAsync();
|
.Select(t => t.SourceSubjectVisitId).ToListAsync();
|
||||||
|
|
||||||
var generateVisitIdList = idList.Except(haveGenerateVisitIdList);
|
var generateVisitIdList = idList.Except(haveGenerateVisitIdList);
|
||||||
|
@ -514,12 +516,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<SelctStudySeriesView> GetVisitStudyAndSeriesList(VisitStudyAndSeriesQuery inQuery)
|
public async Task<SelctStudySeriesView> GetVisitStudyAndSeriesList(VisitStudyAndSeriesQuery inQuery)
|
||||||
{
|
{
|
||||||
var studyList = await _repository.Where<DicomStudy>(s => s.SubjectVisitId == inQuery.SubjectVisitId).ProjectTo<SelectStudyView>(_mapper.ConfigurationProvider).ToListAsync();
|
var studyList = await _dicomStudyRepository.Where(s => s.SubjectVisitId == inQuery.SubjectVisitId).ProjectTo<SelectStudyView>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
|
|
||||||
var query = from series in _repository.Where<DicomSeries>(t => studyIds.Contains(t.StudyId))
|
var query = from series in _dicomSeriesRepository.Where(t => studyIds.Contains(t.StudyId))
|
||||||
join visitStudyFilter in _subjectCriteriaEvaluationVisitStudyFilterRepository.Where(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SubjectVisitId == inQuery.SubjectVisitId) on series.Id equals visitStudyFilter.SeriesId into d
|
join visitStudyFilter in _subjectCriteriaEvaluationVisitStudyFilterRepository.Where(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SubjectVisitId == inQuery.SubjectVisitId) on series.Id equals visitStudyFilter.SeriesId into d
|
||||||
from visitStudyFilter in d.DefaultIfEmpty()
|
from visitStudyFilter in d.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<PreviousPDF> _previousPDFRepository,
|
IRepository<PreviousPDF> _previousPDFRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository,
|
IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository,
|
||||||
IRepository<SystemClinicalQuestion> _systemClinicalQuestionRepository) : BaseService
|
IRepository<SystemClinicalQuestion> _systemClinicalQuestionRepository) : BaseService
|
||||||
{
|
{
|
||||||
|
@ -231,7 +232,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
await _trialClinicalDataSetCriterionRepository.DeleteFromQueryAsync(t => t.TrialClinicalDataSetId == entity.Id);
|
await _trialClinicalDataSetCriterionRepository.DeleteFromQueryAsync(t => t.TrialClinicalDataSetId == entity.Id);
|
||||||
|
|
||||||
await _repository.AddRangeAsync<TrialClinicalDataSetCriterion>(entity.TrialClinicalDataSetCriteriaList);
|
await _trialClinicalDataSetCriterionRepository.AddRangeAsync(entity.TrialClinicalDataSetCriteriaList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -320,7 +321,7 @@ namespace IRaCIS.Application.Services
|
||||||
//[HttpPost]
|
//[HttpPost]
|
||||||
//public async Task<List<TrialCriterionSelectDto>> GetTrialCriterionSelectList(TrialCriterionSelectQuery inQuery)
|
//public async Task<List<TrialCriterionSelectDto>> GetTrialCriterionSelectList(TrialCriterionSelectQuery inQuery)
|
||||||
//{
|
//{
|
||||||
// return await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == inQuery.TrialId)
|
// return await _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
// .WhereIf(!string.IsNullOrEmpty(inQuery.CriterionName), t => t.CriterionName.Contains(inQuery.CriterionName))
|
// .WhereIf(!string.IsNullOrEmpty(inQuery.CriterionName), t => t.CriterionName.Contains(inQuery.CriterionName))
|
||||||
// .WhereIf(inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable)
|
// .WhereIf(inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable)
|
||||||
// .WhereIf(inQuery.IsCompleteConfig != null, t => t.IsCompleteConfig == inQuery.IsCompleteConfig)
|
// .WhereIf(inQuery.IsCompleteConfig != null, t => t.IsCompleteConfig == inQuery.IsCompleteConfig)
|
||||||
|
@ -363,7 +364,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var systemDataList = systemClinicalDataList.Where(x => needAddids.Contains(x.Id)).ToList();
|
var systemDataList = systemClinicalDataList.Where(x => needAddids.Contains(x.Id)).ToList();
|
||||||
|
|
||||||
var readingCriterionList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId).Where(t => t.ReadingQuestionCriterionSystemId != null)
|
var readingCriterionList = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId).Where(t => t.ReadingQuestionCriterionSystemId != null)
|
||||||
.Select(t => new { t.ReadingQuestionCriterionSystemId, TrialReadingCriterionId = t.Id ,t.CriterionType}).ToList();
|
.Select(t => new { t.ReadingQuestionCriterionSystemId, TrialReadingCriterionId = t.Id ,t.CriterionType}).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
@ -419,7 +420,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
// var systemDataList = systemClinicalDataList.Where(x => needAddids.Contains(x.Id)).ToList();
|
// var systemDataList = systemClinicalDataList.Where(x => needAddids.Contains(x.Id)).ToList();
|
||||||
|
|
||||||
// var readingCriterionList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId).Where(t => t.ReadingQuestionCriterionSystemId != null)
|
// var readingCriterionList = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId).Where(t => t.ReadingQuestionCriterionSystemId != null)
|
||||||
// .Select(t => new { t.ReadingQuestionCriterionSystemId, TrialReadingCriterionId = t.Id }).ToList();
|
// .Select(t => new { t.ReadingQuestionCriterionSystemId, TrialReadingCriterionId = t.Id }).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -354,9 +354,9 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
//如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
//如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
||||||
|
|
||||||
if (await _repository.AnyAsync<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)))
|
if (await _clinicalDataTrialSetRepository.AnyAsync(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)))
|
||||||
{
|
{
|
||||||
var needDealTrialReadingCriterionIdList = _repository.Where<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId)
|
var needDealTrialReadingCriterionIdList = _clinicalDataTrialSetRepository.Where(t => t.Id == data.ClinicalDataTrialSetId)
|
||||||
.SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
.SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
||||||
.Select(u => u.TrialReadingCriterionId).Distinct().ToList();
|
.Select(u => u.TrialReadingCriterionId).Distinct().ToList();
|
||||||
|
|
||||||
|
@ -400,9 +400,9 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
// //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
// //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
||||||
|
|
||||||
// if (await _repository.AnyAsync<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && t.ClinicalDataLevel == ClinicalLevel.Subject))
|
// if (await _clinicalDataTrialSetRepository.AnyAsync(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && t.ClinicalDataLevel == ClinicalLevel.Subject))
|
||||||
// {
|
// {
|
||||||
// var needDealTrialReadingCriterionIdList = _repository.Where<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId)
|
// var needDealTrialReadingCriterionIdList = _clinicalDataTrialSetRepository.Where(t => t.Id == data.ClinicalDataTrialSetId)
|
||||||
// .SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
// .SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
||||||
// .Select(u => u.TrialReadingCriterionId).Distinct().ToList();
|
// .Select(u => u.TrialReadingCriterionId).Distinct().ToList();
|
||||||
|
|
||||||
|
@ -431,7 +431,7 @@ namespace IRaCIS.Application.Services
|
||||||
//var criterionType = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCritrialId).Select(t => t.CriterionType).FirstOrDefaultAsync();
|
//var criterionType = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCritrialId).Select(t => t.CriterionType).FirstOrDefaultAsync();
|
||||||
|
|
||||||
// 获取确认的项目标准 废弃 签名的时候 传递标准Id
|
// 获取确认的项目标准 废弃 签名的时候 传递标准Id
|
||||||
//var confirmedCtritrialList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.ReadingInfoSignTime != null).Select(t => new { t.Id, t.CriterionType }).ToList();
|
//var confirmedCtritrialList = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.ReadingInfoSignTime != null).Select(t => new { t.Id, t.CriterionType }).ToList();
|
||||||
|
|
||||||
var needSignCount = 0;
|
var needSignCount = 0;
|
||||||
var haveSignedCount = _readingClinicalDataRepository.Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
|
var haveSignedCount = _readingClinicalDataRepository.Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
|
||||||
|
|
|
@ -28,6 +28,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IRepository<DicomInstance> _dicomInstanceRepository,
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||||
|
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
||||||
IRepository<ReadingPeriodSet> _readingPeriodSetRepository,
|
IRepository<ReadingPeriodSet> _readingPeriodSetRepository,
|
||||||
IRepository<ReadModule> _readModuleRepository) : BaseService
|
IRepository<ReadModule> _readModuleRepository) : BaseService
|
||||||
{
|
{
|
||||||
|
@ -454,7 +455,7 @@ namespace IRaCIS.Application.Services
|
||||||
var readModule = await _readModuleRepository.Where(x => x.Id == readModuleId).FirstNotNullAsync();
|
var readModule = await _readModuleRepository.Where(x => x.Id == readModuleId).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
if(await _repository.Where<ReadingClinicalData>(t => t.ReadingId == readModuleId).AnyAsync(t => t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned))
|
if(await _readingClinicalDataRepository.Where(t => t.ReadingId == readModuleId).AnyAsync(t => t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned))
|
||||||
{
|
{
|
||||||
//---临床资料已签名,不允许删除
|
//---临床资料已签名,不允许删除
|
||||||
return ResponseOutput.NotOk(_localizer["ReadModule_SignedDataCannotDelete"]);
|
return ResponseOutput.NotOk(_localizer["ReadModule_SignedDataCannotDelete"]);
|
||||||
|
|
|
@ -35,11 +35,15 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
IRepository<TrialSiteSurvey> _trialSiteSurveyRepository,
|
IRepository<TrialSiteSurvey> _trialSiteSurveyRepository,
|
||||||
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
|
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<TrialSite> _trialSiteRepository,
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
|
IRepository<Doctor> _doctorRepository,
|
||||||
|
IRepository<VerificationCode> _verificationCodeRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
ITokenService _tokenService,
|
ITokenService _tokenService,
|
||||||
|
IRepository<UserType> _userTypeRepository,
|
||||||
IMailVerificationService _mailVerificationService,
|
IMailVerificationService _mailVerificationService,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : BaseService, ITrialSiteSurveyService
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : BaseService, ITrialSiteSurveyService
|
||||||
{
|
{
|
||||||
|
@ -80,7 +84,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<VerifyEmialGetDoctorInfoOutDto> VerifyEmialGetDoctorInfo(VerifyEmialGetDoctorInfoInDto inDto)
|
public async Task<VerifyEmialGetDoctorInfoOutDto> VerifyEmialGetDoctorInfo(VerifyEmialGetDoctorInfoInDto inDto)
|
||||||
{
|
{
|
||||||
var verificationRecord = await _repository.GetQueryable<VerificationCode>().OrderByDescending(x => x.ExpirationTime).Where(t => (t.EmailOrPhone == inDto.EmailOrPhone) && t.Code == inDto.VerificationCode && t.CodeType == VerifyType.Email).FirstOrDefaultAsync();
|
var verificationRecord = await _verificationCodeRepository.Where().OrderByDescending(x => x.ExpirationTime).Where(t => (t.EmailOrPhone == inDto.EmailOrPhone) && t.Code == inDto.VerificationCode && t.CodeType == VerifyType.Email).FirstOrDefaultAsync();
|
||||||
VerifyEmialGetDoctorInfoOutDto result = new VerifyEmialGetDoctorInfoOutDto();
|
VerifyEmialGetDoctorInfoOutDto result = new VerifyEmialGetDoctorInfoOutDto();
|
||||||
|
|
||||||
//检查数据库是否存在该验证码
|
//检查数据库是否存在该验证码
|
||||||
|
@ -101,9 +105,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
|
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _repository.BatchDeleteAsync<VerificationCode>(t => t.Id == verificationRecord.Id);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id);
|
||||||
|
|
||||||
var dockerInfo = await _repository.Where<Doctor>(t => t.EMail == inDto.EmailOrPhone || t.Phone == inDto.EmailOrPhone).FirstOrDefaultAsync();
|
var dockerInfo = await _doctorRepository.Where(t => t.EMail == inDto.EmailOrPhone || t.Phone == inDto.EmailOrPhone).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (dockerInfo != null)
|
if (dockerInfo != null)
|
||||||
{
|
{
|
||||||
|
@ -138,7 +142,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//验证码 6位
|
//验证码 6位
|
||||||
int verificationCode = new Random().Next(100000, 1000000);
|
int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == userInfo.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == userInfo.TrialId);
|
||||||
|
|
||||||
await _mailVerificationService.AnolymousSendEmail(trialInfo.ResearchProgramNo, userInfo.Email, verificationCode);
|
await _mailVerificationService.AnolymousSendEmail(trialInfo.ResearchProgramNo, userInfo.Email, verificationCode);
|
||||||
|
|
||||||
|
@ -165,7 +169,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
#region 20230804 修改调研表逻辑
|
#region 20230804 修改调研表逻辑
|
||||||
|
|
||||||
var verifyRecord = await _repository.FirstOrDefaultAsync<VerificationCode>(t => (t.EmailOrPhone == userInfo.EmailOrPhone) && t.Code == userInfo.verificationCode && t.CodeType == userInfo.verificationType);
|
var verifyRecord = await _verificationCodeRepository.FirstOrDefaultAsync(t => (t.EmailOrPhone == userInfo.EmailOrPhone) && t.Code == userInfo.verificationCode && t.CodeType == userInfo.verificationType);
|
||||||
//检查数据库是否存在该验证码
|
//检查数据库是否存在该验证码
|
||||||
if (verifyRecord == null)
|
if (verifyRecord == null)
|
||||||
{
|
{
|
||||||
|
@ -179,7 +183,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _repository.BatchDeleteAsync<VerificationCode>(t => t.Id == verifyRecord.Id);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verifyRecord.Id);
|
||||||
|
|
||||||
//验证码正确 不处理
|
//验证码正确 不处理
|
||||||
}
|
}
|
||||||
|
@ -205,7 +209,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//从项目site 中找到已存在的 加到历史人员中
|
//从项目site 中找到已存在的 加到历史人员中
|
||||||
addSurvey.TrialSiteUserSurveyList = userList;
|
addSurvey.TrialSiteUserSurveyList = userList;
|
||||||
|
|
||||||
currentEntity = await _repository.AddAsync(addSurvey);
|
currentEntity = await _trialSiteSurveyRepository.AddAsync(addSurvey);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -309,7 +313,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
|
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _repository.BatchDeleteAsync<VerificationCode>(t => t.EmailOrPhone == userInfo.EmailOrPhone && t.Code == userInfo.verificationCode && t.CodeType == userInfo.verificationType);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.EmailOrPhone == userInfo.EmailOrPhone && t.Code == userInfo.verificationCode && t.CodeType == userInfo.verificationType);
|
||||||
|
|
||||||
await _trialSiteSurveyRepository.SaveChangesAsync();
|
await _trialSiteSurveyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -527,7 +531,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpGet("{trialId:guid}")]
|
[HttpGet("{trialId:guid}")]
|
||||||
public async Task<TrialSurveyInitInfo> GetTrialSurveyInitInfo(Guid trialId)
|
public async Task<TrialSurveyInitInfo> GetTrialSurveyInitInfo(Guid trialId)
|
||||||
{
|
{
|
||||||
var info = await _repository.Where<Trial>(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo<TrialSurveyInitInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var info = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo<TrialSurveyInitInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
@ -552,7 +556,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteSurvey>(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
|
if (await _trialSiteSurveyRepository.AnyAsync(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
|
||||||
{
|
{
|
||||||
//---中心调研已锁定,不允许操作。
|
//---中心调研已锁定,不允许操作。
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
||||||
|
@ -628,7 +632,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
survey.IsDeleted = true;
|
survey.IsDeleted = true;
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _trialSiteSurveyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
||||||
|
@ -745,7 +749,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
private async Task GenerateAccountAsync(List<TrialSiteUserSurveyView> needGenerateList, Guid trialId)
|
private async Task GenerateAccountAsync(List<TrialSiteUserSurveyView> needGenerateList, Guid trialId)
|
||||||
{
|
{
|
||||||
var trialType = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
|
var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
|
||||||
|
|
||||||
foreach (var item in needGenerateList)
|
foreach (var item in needGenerateList)
|
||||||
{
|
{
|
||||||
|
@ -777,7 +781,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
saveItem.UserName = saveItem.UserCode;
|
saveItem.UserName = saveItem.UserCode;
|
||||||
|
|
||||||
saveItem.UserTypeEnum = _repository.Where<UserType>(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First();
|
saveItem.UserTypeEnum = _userTypeRepository.Where(t => t.Id == saveItem.UserTypeId).Select(t => t.UserTypeEnum).First();
|
||||||
|
|
||||||
|
|
||||||
var newUser = _userRepository.AddAsync(saveItem).Result;
|
var newUser = _userRepository.AddAsync(saveItem).Result;
|
||||||
|
@ -829,7 +833,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
||||||
if (findTrialUser == null)
|
if (findTrialUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
|
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
|
||||||
|
|
||||||
|
@ -850,7 +854,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (findTrialSiteUser == null)
|
if (findTrialSiteUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -888,7 +892,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _trialSiteUserRepository.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -897,7 +901,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var trialType = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
|
var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
|
||||||
|
|
||||||
//判断是否有系统账号
|
//判断是否有系统账号
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
|
@ -947,7 +951,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
||||||
if (findTrialUser == null)
|
if (findTrialUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, baseUrl, routeUrl);
|
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, baseUrl, routeUrl);
|
||||||
|
|
||||||
|
@ -969,7 +973,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (findTrialSiteUser == null)
|
if (findTrialSiteUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -17,6 +17,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class TrialSiteUserSurveyService(
|
public class TrialSiteUserSurveyService(
|
||||||
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
|
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
IRepository<TrialSiteSurvey> _trialSiteSurveyRepository) : BaseService, ITrialSiteUserSurveyService
|
IRepository<TrialSiteSurvey> _trialSiteSurveyRepository) : BaseService, ITrialSiteUserSurveyService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -51,12 +53,12 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
var trialId = _trialSiteSurveyRepository.Where(t => t.Id == addOrEditTrialSiteUserSurvey.TrialSiteSurveyId, false, true).Select(t => t.TrialId).FirstOrDefault();
|
var trialId = _trialSiteSurveyRepository.Where(t => t.Id == addOrEditTrialSiteUserSurvey.TrialSiteSurveyId, false, true).Select(t => t.TrialId).FirstOrDefault();
|
||||||
|
|
||||||
var trialType = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
|
var trialType = _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
|
||||||
|
|
||||||
var item = addOrEditTrialSiteUserSurvey;
|
var item = addOrEditTrialSiteUserSurvey;
|
||||||
|
|
||||||
//找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户
|
//找下系统中是否存在该用户类型的 并且邮箱 或者手机的账户
|
||||||
var sysUserInfo = await _repository.Where<User>(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email).Include(t => t.UserTypeRole).FirstOrDefaultAsync();
|
var sysUserInfo = await _userRepository.Where(t => t.UserTypeId == item.UserTypeId && t.EMail == item.Email).Include(t => t.UserTypeRole).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (sysUserInfo != null)
|
if (sysUserInfo != null)
|
||||||
{
|
{
|
||||||
|
@ -97,7 +99,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (addOrEditTrialSiteUserSurvey.UserTypeId != null)
|
if (addOrEditTrialSiteUserSurvey.UserTypeId != null)
|
||||||
{
|
{
|
||||||
var existSysUser = await _repository.Where<User>(t => t.EMail == addOrEditTrialSiteUserSurvey.Email && t.UserTypeId == addOrEditTrialSiteUserSurvey.UserTypeId).Include(d => d.UserTypeRole).FirstOrDefaultAsync();
|
var existSysUser = await _userRepository.Where(t => t.EMail == addOrEditTrialSiteUserSurvey.Email && t.UserTypeId == addOrEditTrialSiteUserSurvey.UserTypeId).Include(d => d.UserTypeRole).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
if (existSysUser != null)
|
if (existSysUser != null)
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialUserSelct: UserTrialCommand
|
public class TrialUserSelct : UserTrialCommand
|
||||||
{
|
{
|
||||||
public string Phone { get; set; } = String.Empty;
|
public string Phone { get; set; } = String.Empty;
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class TrialCRCUploadImageList_Export: ExcelExportInfo
|
public class TrialCRCUploadImageList_Export : ExcelExportInfo
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,12 +129,8 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public class ExcelExportInfo : TrialSelectDTO
|
public class ExcelExportInfo : TrialSelectDTO
|
||||||
{
|
{
|
||||||
|
public string CurrentTime { get; set; }
|
||||||
|
|
||||||
public string CurrentTime => TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, TimeZoneInfo.FindSystemTimeZoneById(ClientZoneId)).ToString("yyyy-MM-dd HH:mm:ss");
|
|
||||||
|
|
||||||
public bool IsEn_US { get; set; }
|
|
||||||
|
|
||||||
public string ClientZoneId { get; set; } = string.Empty;
|
|
||||||
public object List { get; set; }
|
public object List { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -165,7 +161,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialSiteUserSummaryDto: TrialSiteUserSurveyView
|
public class TrialSiteUserSummaryDto : TrialSiteUserSurveyView
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ namespace IRaCIS.Core.Application
|
||||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||||
IRepository<ReadingCriterionPage> _readingCriterionPageRepository,
|
IRepository<ReadingCriterionPage> _readingCriterionPageRepository,
|
||||||
IOrganInfoService _iOrganInfoService,
|
IOrganInfoService _iOrganInfoService,
|
||||||
|
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
||||||
IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository,
|
IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository,
|
||||||
IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository,
|
IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository,
|
||||||
IReadingQuestionService iReadingQuestionService,
|
IReadingQuestionService iReadingQuestionService,
|
||||||
|
@ -47,6 +48,10 @@ namespace IRaCIS.Core.Application
|
||||||
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
|
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
|
||||||
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
||||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||||
|
IRepository<SystemBasicData> _systemBasicDataRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<Enroll> _enrollRepository,
|
||||||
|
IRepository<TrialStateChange> _trialStateChangeRepository,
|
||||||
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService
|
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -725,7 +730,7 @@ namespace IRaCIS.Core.Application
|
||||||
[HttpGet("{signCode}")]
|
[HttpGet("{signCode}")]
|
||||||
public async Task<IResponseOutput> GetSignText(string signCode)
|
public async Task<IResponseOutput> GetSignText(string signCode)
|
||||||
{
|
{
|
||||||
var signRawText = await _repository.Where<SystemBasicData>(t => t.Code == signCode).Select(t => new { t.Code, t.Value, t.ValueCN, t.Id, ParentValue = t.Parent.Value, ParentValueCN = t.Parent.ValueCN }).FirstOrDefaultAsync();
|
var signRawText = await _systemBasicDataRepository.Where(t => t.Code == signCode).Select(t => new { t.Code, t.Value, t.ValueCN, t.Id, ParentValue = t.Parent.Value, ParentValueCN = t.Parent.ValueCN }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (signRawText == null)
|
if (signRawText == null)
|
||||||
{
|
{
|
||||||
|
@ -769,7 +774,7 @@ namespace IRaCIS.Core.Application
|
||||||
.IfNullThrowException();
|
.IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
var showOrderList = await _repository.Where<TrialQCQuestion>(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
var showOrderList = await _trialQCQuestionRepository.Where(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
||||||
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
||||||
|
|
||||||
if (trialConfig.QCProcessEnum ==
|
if (trialConfig.QCProcessEnum ==
|
||||||
|
@ -839,7 +844,7 @@ namespace IRaCIS.Core.Application
|
||||||
.IfNullThrowException();
|
.IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
var showOrderList = await _repository.Where<TrialQCQuestion>(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
var showOrderList = await _trialQCQuestionRepository.Where(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
||||||
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
||||||
|
|
||||||
if (trialConfig.QCProcessEnum ==
|
if (trialConfig.QCProcessEnum ==
|
||||||
|
@ -906,7 +911,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
//await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialConfig.TrialId && t.IsSigned == false, u => new ReadingQuestionCriterionTrial() { CriterionModalitys = trialConfig.Modalitys });
|
//await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialConfig.TrialId && t.IsSigned == false, u => new ReadingQuestionCriterionTrial() { CriterionModalitys = trialConfig.Modalitys });
|
||||||
|
|
||||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
return ResponseOutput.Ok(await _trialRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1049,7 +1054,7 @@ namespace IRaCIS.Core.Application
|
||||||
//}); ;
|
//}); ;
|
||||||
|
|
||||||
|
|
||||||
var result = await _repository.SaveChangesAsync();
|
var result = await _trialRepository.SaveChangesAsync();
|
||||||
|
|
||||||
if (trialConfig.IsTrialProcessConfirmed)
|
if (trialConfig.IsTrialProcessConfirmed)
|
||||||
{
|
{
|
||||||
|
@ -1086,7 +1091,7 @@ namespace IRaCIS.Core.Application
|
||||||
if (trialConfig.IsUrgent)
|
if (trialConfig.IsUrgent)
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.TrialId == trialInfo.Id && t.SubmitState == SubmitStateEnum.Submitted && t.ForwardState < ForwardStateEnum.Forwarded,
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialInfo.Id && t.SubmitState == SubmitStateEnum.Submitted && t.ForwardState < ForwardStateEnum.Forwarded,
|
||||||
s => new SubjectVisit() { IsUrgent = trialConfig.IsUrgent });
|
s => new SubjectVisit() { IsUrgent = trialConfig.IsUrgent });
|
||||||
}
|
}
|
||||||
else //之前设置为加急的访视状态不变。后续提交的访视,为不加急。
|
else //之前设置为加急的访视状态不变。后续提交的访视,为不加急。
|
||||||
|
@ -1098,7 +1103,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
trialInfo.UpdateTime = DateTime.Now;
|
trialInfo.UpdateTime = DateTime.Now;
|
||||||
|
|
||||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
return ResponseOutput.Ok(await _trialRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1178,7 +1183,7 @@ namespace IRaCIS.Core.Application
|
||||||
//Paused、 添加工总量 算医生读片中
|
//Paused、 添加工总量 算医生读片中
|
||||||
if (trialStatusStr.Contains(StaticData.TrialState.TrialCompleted))
|
if (trialStatusStr.Contains(StaticData.TrialState.TrialCompleted))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<Enroll>(u => u.TrialId == trialId, e => new Enroll
|
await _enrollRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialId, e => new Enroll
|
||||||
{
|
{
|
||||||
EnrollStatus = EnrollStatus.Finished
|
EnrollStatus = EnrollStatus.Finished
|
||||||
});
|
});
|
||||||
|
@ -1189,7 +1194,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
await _fusionCache.SetAsync(CacheKeys.Trial(trial.Id.ToString()), trialStatusStr, TimeSpan.FromDays(7));
|
await _fusionCache.SetAsync(CacheKeys.Trial(trial.Id.ToString()), trialStatusStr, TimeSpan.FromDays(7));
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _trialRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -1203,7 +1208,7 @@ namespace IRaCIS.Core.Application
|
||||||
[HttpGet("{trialId:guid}")]
|
[HttpGet("{trialId:guid}")]
|
||||||
public async Task<List<TrialStateChangeDTO>> GetTrialStateChangeList(Guid trialId)
|
public async Task<List<TrialStateChangeDTO>> GetTrialStateChangeList(Guid trialId)
|
||||||
{
|
{
|
||||||
return await _repository.Where<TrialStateChange>(t => t.TrialId == trialId).ProjectTo<TrialStateChangeDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
return await _trialStateChangeRepository.Where(t => t.TrialId == trialId).ProjectTo<TrialStateChangeDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1295,7 +1300,7 @@ namespace IRaCIS.Core.Application
|
||||||
public async Task<IResponseOutput> AddOrUpdateTrialBodyPart(AddOrUpdateTrialBodyPartCommand incommand)
|
public async Task<IResponseOutput> AddOrUpdateTrialBodyPart(AddOrUpdateTrialBodyPartCommand incommand)
|
||||||
{
|
{
|
||||||
|
|
||||||
var codeList = await _repository.Where<TrialBodyPart>(t => t.TrialId == incommand.TrialId)
|
var codeList = await _trialBodyPartRepository.Where(t => t.TrialId == incommand.TrialId)
|
||||||
.WhereIf(incommand.Id != null, t => t.Id != incommand.Id)
|
.WhereIf(incommand.Id != null, t => t.Id != incommand.Id)
|
||||||
.Select(t => t.Code).ToListAsync();
|
.Select(t => t.Code).ToListAsync();
|
||||||
|
|
||||||
|
@ -1319,7 +1324,7 @@ namespace IRaCIS.Core.Application
|
||||||
VerifyMsg = _localizer["TrialBodyPart_DupName"]
|
VerifyMsg = _localizer["TrialBodyPart_DupName"]
|
||||||
};
|
};
|
||||||
|
|
||||||
var cro = await _repository.InsertOrUpdateAsync<TrialBodyPart, AddOrUpdateTrialBodyPartCommand>(incommand, true, exp);
|
var cro = await _trialBodyPartRepository.InsertOrUpdateAsync(incommand, true, exp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<TrialExternalUser> _trialExternalUseRepository,
|
IRepository<TrialExternalUser> _trialExternalUseRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<UserType> _userTypeRepository,
|
||||||
IMailVerificationService _mailVerificationService,
|
IMailVerificationService _mailVerificationService,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, ITrialExternalUserService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, ITrialExternalUserService
|
||||||
{
|
{
|
||||||
|
@ -97,7 +99,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
var existUser = await _userRepository.FirstOrDefaultAsync(t => t.EMail == addOrEditTrialExternalUser.Email && t.UserTypeId == addOrEditTrialExternalUser.UserTypeId);
|
var existUser = await _userRepository.FirstOrDefaultAsync(t => t.EMail == addOrEditTrialExternalUser.Email && t.UserTypeId == addOrEditTrialExternalUser.UserTypeId);
|
||||||
var trialType = await _repository.Where<Trial>(t => t.Id == addOrEditTrialExternalUser.TrialId).Select(t => t.TrialType).FirstOrDefaultAsync();
|
var trialType = await _trialRepository.Where(t => t.Id == addOrEditTrialExternalUser.TrialId).Select(t => t.TrialType).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (existUser != null)
|
if (existUser != null)
|
||||||
{
|
{
|
||||||
|
@ -127,13 +129,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
generateUser.UserName = generateUser.UserCode;
|
generateUser.UserName = generateUser.UserCode;
|
||||||
|
|
||||||
generateUser.UserTypeEnum = _repository.Where<UserType>(t => t.Id == generateUser.UserTypeId).Select(t => t.UserTypeEnum).First();
|
generateUser.UserTypeEnum = _userTypeRepository.Where(t => t.Id == generateUser.UserTypeId).Select(t => t.UserTypeEnum).First();
|
||||||
|
|
||||||
generateUser.Password = MD5Helper.Md5("123456");
|
generateUser.Password = MD5Helper.Md5("123456");
|
||||||
|
|
||||||
generateUser.Status = UserStateEnum.Disable;
|
generateUser.Status = UserStateEnum.Disable;
|
||||||
|
|
||||||
var newAddUser = await _repository.AddAsync(generateUser);
|
var newAddUser = await _userRepository.AddAsync(generateUser);
|
||||||
|
|
||||||
|
|
||||||
addEntity.IsSystemUser = false;
|
addEntity.IsSystemUser = false;
|
||||||
|
@ -254,7 +256,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true))
|
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
|
||||||
|
|
||||||
|
|
|
@ -16,44 +16,12 @@ namespace IRaCIS.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class TrialMaintenanceService(
|
public class TrialMaintenanceService(
|
||||||
IRepository<TrialUser> _trialUseRepository,
|
IRepository<TrialUser> _trialUseRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<Trial> _trialRepository) : BaseService, ITrialMaintenanceService
|
IRepository<Trial> _trialRepository) : BaseService, ITrialMaintenanceService
|
||||||
{
|
{
|
||||||
|
|
||||||
#region 移动废弃
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// 项目参与人员导出
|
|
||||||
///// </summary>
|
|
||||||
///// <param name="param"></param>
|
|
||||||
///// <param name="_commonDocumentRepository"></param>
|
|
||||||
///// <returns></returns>
|
|
||||||
///// <exception cref="Exception"></exception>
|
|
||||||
//[HttpPost]
|
|
||||||
//[AllowAnonymous]
|
|
||||||
//public async Task<IActionResult> TrialUserListExport(TrialMaintenanceExportQuery param, [FromServices] IRepository<CommonDocument> _commonDocumentRepository, [FromServices] IDictionaryService _dictionaryService)
|
|
||||||
//{
|
|
||||||
|
|
||||||
// var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
|
||||||
|
|
||||||
// exportInfo.List = await _trialUseRepository.Where(t => t.TrialId == param.TrialId).IgnoreQueryFilters()
|
|
||||||
// .WhereIf(param.UserTypeId != null, t => t.User.UserTypeId == param.UserTypeId)
|
|
||||||
// .WhereIf(!string.IsNullOrWhiteSpace(param.UserName), t => t.User.UserName.Contains(param.UserName))
|
|
||||||
|
|
||||||
// .WhereIf(param.IsDeleted != null, t => t.IsDeleted == param.IsDeleted)
|
|
||||||
// .WhereIf(!string.IsNullOrWhiteSpace(param.OrganizationName),
|
|
||||||
// t => t.User.OrganizationName.Contains(param.OrganizationName))
|
|
||||||
// .WhereIf(!string.IsNullOrWhiteSpace(param.UserRealName),
|
|
||||||
// t => (t.User.FullName).Contains(param.UserRealName))
|
|
||||||
// .ProjectTo<TrialMaintenanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
// exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
|
||||||
|
|
||||||
// return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialUserList_Export, exportInfo, exportInfo.TrialCode, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TrialMaintenanceDTO));
|
|
||||||
|
|
||||||
//}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<List<TrialUserBasicInfo>> GetTrialUserList(Guid trialId)
|
public async Task<List<TrialUserBasicInfo>> GetTrialUserList(Guid trialId)
|
||||||
{
|
{
|
||||||
|
@ -121,7 +89,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
||||||
var query = _repository.Where<User>(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
var query = _userRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||||
|
|
||||||
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
//正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
||||||
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
||||||
|
@ -168,7 +136,7 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialUseRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
@ -187,7 +155,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (updateTrialUserCommand.IsDeleted)
|
if (updateTrialUserCommand.IsDeleted)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
||||||
{
|
{
|
||||||
// ----人员已加入现场维护
|
// ----人员已加入现场维护
|
||||||
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
||||||
|
@ -195,14 +163,14 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_mapper.Map(updateTrialUserCommand, trialUser);
|
_mapper.Map(updateTrialUserCommand, trialUser);
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _trialUseRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
||||||
|
@ -223,7 +191,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (trialUser == null) return Null404NotFound(trialUser);
|
if (trialUser == null) return Null404NotFound(trialUser);
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
||||||
{
|
{
|
||||||
//---人员已加入现场维护
|
//---人员已加入现场维护
|
||||||
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
||||||
|
@ -231,12 +199,12 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
||||||
}
|
}
|
||||||
|
|
||||||
await _trialUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialUser() { IsDeleted = isDelete, RemoveTime = isDelete ? DateTime.Now : null });
|
await _trialUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialUser() { IsDeleted = isDelete, RemoveTime = isDelete ? DateTime.Now : null });
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _trialUseRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,16 @@ namespace IRaCIS.Application.Services
|
||||||
public class TrialService(
|
public class TrialService(
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<CRO> _croRepository,
|
||||||
|
IRepository<EnrollDetail> _enrollDetailRepository,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<Enroll> _enrollRepository,
|
||||||
|
IRepository<Workload> _workloadRepository,
|
||||||
|
IRepository<Sponsor> _sponsorRepository,
|
||||||
|
IRepository<VisitStage> _visitStageRepository,
|
||||||
|
IRepository<TrialPaymentPrice> _trialPaymentPriceRepository,
|
||||||
|
IRepository<TrialDictionary> _trialDictionaryRepository,
|
||||||
|
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig) : BaseService, ITrialService
|
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig) : BaseService, ITrialService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -120,7 +130,7 @@ namespace IRaCIS.Application.Services
|
||||||
[NonDynamicMethod]
|
[NonDynamicMethod]
|
||||||
public async Task<int> GetTrialMaxState(Guid trialId)
|
public async Task<int> GetTrialMaxState(Guid trialId)
|
||||||
{
|
{
|
||||||
return await _repository.Where<EnrollDetail>(t => t.TrialId == trialId).MaxAsync(u => (int?)u.EnrollStatus) ?? 0;
|
return await _enrollDetailRepository.Where(t => t.TrialId == trialId).MaxAsync(u => (int?)u.EnrollStatus) ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{trialId:guid}")]
|
[HttpGet("{trialId:guid}")]
|
||||||
|
@ -203,23 +213,23 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
//如果是PM, 则需要将该人员添加到 运维人员表
|
//如果是PM, 则需要将该人员添加到 运维人员表
|
||||||
//添加运维人员PM
|
//添加运维人员PM
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
// 添加扩展信息表记录
|
// 添加扩展信息表记录
|
||||||
await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
|
await _trialPaymentPriceRepository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
|
||||||
|
|
||||||
//添加访视
|
//添加访视
|
||||||
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Baseline", IsBaseLine = true, VisitWindowLeft = -28, VisitWindowRight = 0 });
|
await _visitStageRepository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Baseline", IsBaseLine = true, VisitWindowLeft = -28, VisitWindowRight = 0 });
|
||||||
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1", VisitWindowLeft = -5, VisitWindowRight = 5 });
|
await _visitStageRepository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1", VisitWindowLeft = -5, VisitWindowRight = 5 });
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialRepository.SaveChangesAsync();
|
||||||
|
|
||||||
//维护CRO Sponsor
|
//维护CRO Sponsor
|
||||||
await DealSponsorAndCROAsync(trial);
|
await DealSponsorAndCROAsync(trial);
|
||||||
|
|
||||||
//维护部位到项目表
|
//维护部位到项目表
|
||||||
var searchList = await _repository.Where<Dictionary>(t => t.Parent.Code == "BodyPart" && t.ParentId != null && t.IsEnable).ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).ToListAsync();
|
var searchList = await _dictionaryRepository.Where(t => t.Parent.Code == "BodyPart" && t.ParentId != null && t.IsEnable).ProjectTo<BasicDicSelect>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
var needAddBodyPartList = searchList.Select(t => new TrialBodyPart() { Code = t.Code, Name = t.Value, NameCN = t.ValueCN }).ToList();
|
var needAddBodyPartList = searchList.Select(t => new TrialBodyPart() { Code = t.Code, Name = t.Value, NameCN = t.ValueCN }).ToList();
|
||||||
|
|
||||||
|
@ -229,7 +239,7 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await _repository.AddRangeAsync(needAddBodyPartList, true);
|
await _trialBodyPartRepository.AddRangeAsync(needAddBodyPartList, true);
|
||||||
|
|
||||||
await _fusionCache.SetAsync(CacheKeys.Trial(trial.Id.ToString()), StaticData.TrialState.TrialInitializing, TimeSpan.FromDays(7));
|
await _fusionCache.SetAsync(CacheKeys.Trial(trial.Id.ToString()), StaticData.TrialState.TrialInitializing, TimeSpan.FromDays(7));
|
||||||
|
|
||||||
|
@ -239,14 +249,14 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
var updateModel = trialAddModel;
|
var updateModel = trialAddModel;
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<Trial>(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
if (!await _trialRepository.AnyAsync(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
||||||
{
|
{
|
||||||
//---项目状态只有处于:初始化或者进行中时,才允许操作。
|
//---项目状态只有处于:初始化或者进行中时,才允许操作。
|
||||||
throw new BusinessValidationFailedException(_localizer["Trial_InvalidProjectStatus"]);
|
throw new BusinessValidationFailedException(_localizer["Trial_InvalidProjectStatus"]);
|
||||||
|
|
||||||
}
|
}
|
||||||
// 判断项目Id 是否已经存在
|
// 判断项目Id 是否已经存在
|
||||||
if (await _repository.AnyAsync<Trial>(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id))
|
if (await _trialRepository.AnyAsync(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id))
|
||||||
{
|
{
|
||||||
//---已经存在相同的项目编号。
|
//---已经存在相同的项目编号。
|
||||||
throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]);
|
throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]);
|
||||||
|
@ -254,11 +264,11 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var trial = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == updateModel.Id);
|
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id);
|
||||||
|
|
||||||
|
|
||||||
//删除中间表 Title对应的记录
|
//删除中间表 Title对应的记录
|
||||||
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == updateModel.Id);
|
await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == updateModel.Id);
|
||||||
|
|
||||||
//重新插入新的 Title记录
|
//重新插入新的 Title记录
|
||||||
|
|
||||||
|
@ -277,7 +287,7 @@ namespace IRaCIS.Application.Services
|
||||||
trial.DeclarationTypes = $"|{string.Join('|', updateModel.DeclarationTypeEnumList.Select(x => ((int)x).ToString()).ToList())}|";
|
trial.DeclarationTypes = $"|{string.Join('|', updateModel.DeclarationTypeEnumList.Select(x => ((int)x).ToString()).ToList())}|";
|
||||||
trial.AttendedReviewerTypes = $"|{string.Join('|', updateModel.AttendedReviewerTypeEnumList.Select(x => ((int)x).ToString()).ToList())}|";
|
trial.AttendedReviewerTypes = $"|{string.Join('|', updateModel.AttendedReviewerTypeEnumList.Select(x => ((int)x).ToString()).ToList())}|";
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _trialRepository.SaveChangesAsync();
|
||||||
|
|
||||||
//维护CRO Sponsor
|
//维护CRO Sponsor
|
||||||
await DealSponsorAndCROAsync(trial);
|
await DealSponsorAndCROAsync(trial);
|
||||||
|
@ -292,17 +302,17 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
if (trial.SponsorId != null)
|
if (trial.SponsorId != null)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<Sponsor>(t => t.Id == trial.SponsorId && t.IsTrialLevel))
|
if (await _sponsorRepository.AnyAsync(t => t.Id == trial.SponsorId && t.IsTrialLevel))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<Sponsor>(t => t.Id == trial.SponsorId, u => new Sponsor() { TrialId = trial.Id });
|
await _sponsorRepository.BatchUpdateNoTrackingAsync(t => t.Id == trial.SponsorId, u => new Sponsor() { TrialId = trial.Id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trial.CROId != null)
|
if (trial.CROId != null)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<CRO>(t => t.Id == trial.CROId && t.IsTrialLevel))
|
if (await _croRepository.AnyAsync(t => t.Id == trial.CROId && t.IsTrialLevel))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<CRO>(t => t.Id == trial.CROId, u => new CRO() { TrialId = trial.Id });
|
await _croRepository.BatchUpdateNoTrackingAsync(t => t.Id == trial.CROId, u => new CRO() { TrialId = trial.Id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,7 +327,7 @@ namespace IRaCIS.Application.Services
|
||||||
switch (newState)
|
switch (newState)
|
||||||
{
|
{
|
||||||
case (int)TrialExpedited.ExpeditedIn24H:
|
case (int)TrialExpedited.ExpeditedIn24H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn24H = u.Timepoint,
|
TimepointIn24H = u.Timepoint,
|
||||||
AdjudicationIn24H = u.Adjudication,
|
AdjudicationIn24H = u.Adjudication,
|
||||||
|
@ -326,7 +336,7 @@ namespace IRaCIS.Application.Services
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case (int)TrialExpedited.ExpeditedIn48H:
|
case (int)TrialExpedited.ExpeditedIn48H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn48H = u.Timepoint,
|
TimepointIn48H = u.Timepoint,
|
||||||
AdjudicationIn48H = u.Adjudication,
|
AdjudicationIn48H = u.Adjudication,
|
||||||
|
@ -347,7 +357,7 @@ namespace IRaCIS.Application.Services
|
||||||
switch (newState)
|
switch (newState)
|
||||||
{
|
{
|
||||||
case (int)TrialExpedited.None:
|
case (int)TrialExpedited.None:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
Timepoint = u.TimepointIn24H,
|
Timepoint = u.TimepointIn24H,
|
||||||
Adjudication = u.AdjudicationIn24H,
|
Adjudication = u.AdjudicationIn24H,
|
||||||
|
@ -356,7 +366,7 @@ namespace IRaCIS.Application.Services
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case (int)TrialExpedited.ExpeditedIn48H:
|
case (int)TrialExpedited.ExpeditedIn48H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn48H = u.TimepointIn24H,
|
TimepointIn48H = u.TimepointIn24H,
|
||||||
AdjudicationIn48H = u.AdjudicationIn24H,
|
AdjudicationIn48H = u.AdjudicationIn24H,
|
||||||
|
@ -378,7 +388,7 @@ namespace IRaCIS.Application.Services
|
||||||
switch (newState)
|
switch (newState)
|
||||||
{
|
{
|
||||||
case (int)TrialExpedited.None:
|
case (int)TrialExpedited.None:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
Timepoint = u.TimepointIn48H,
|
Timepoint = u.TimepointIn48H,
|
||||||
Adjudication = u.AdjudicationIn48H,
|
Adjudication = u.AdjudicationIn48H,
|
||||||
|
@ -387,7 +397,7 @@ namespace IRaCIS.Application.Services
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case (int)TrialExpedited.ExpeditedIn24H:
|
case (int)TrialExpedited.ExpeditedIn24H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn24H = u.TimepointIn48H,
|
TimepointIn24H = u.TimepointIn48H,
|
||||||
AdjudicationIn24H = u.AdjudicationIn48H,
|
AdjudicationIn24H = u.AdjudicationIn48H,
|
||||||
|
@ -422,166 +432,132 @@ namespace IRaCIS.Application.Services
|
||||||
if (_verifyConfig.CurrentValue.OpenTrialRelationDelete)
|
if (_verifyConfig.CurrentValue.OpenTrialRelationDelete)
|
||||||
{
|
{
|
||||||
|
|
||||||
#region 项目真删除废弃
|
|
||||||
|
|
||||||
//if (trial.VisitPlanConfirmed)
|
#region 真项目删除
|
||||||
//{
|
//await _repository.BatchDeleteNoTrackingAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
||||||
// return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除");
|
//await _repository.BatchDeleteNoTrackingAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
||||||
//}
|
//await _repository.BatchDeleteNoTrackingAsync<InspectionFile>(o => o.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<DataInspection>(o => o.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<DicomStudy>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<StudyMonitor>(t => t.TrialId == trialId);
|
||||||
|
//await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<EnrollReadingCategory>(t => t.Enroll.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<Enroll>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<EnrollDetail>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<NoneDicomStudyFile>(t => t.NoneDicomStudy.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<NoneDicomStudy>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
//if (await _repository.AnyAsync<Enroll>(u => u.TrialId == trialId))
|
//await _repository.BatchDeleteNoTrackingAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
||||||
//{
|
|
||||||
// return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除");
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if (await _repository.AnyAsync<TrialSite>(u => u.TrialId == trialId))
|
//await _repository.BatchDeleteNoTrackingAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
||||||
//{
|
//await _repository.BatchDeleteNoTrackingAsync<PaymentDetail>(t => t.TrialId == trialId);
|
||||||
// return ResponseOutput.NotOk("该Trial下面有Site,无法删除");
|
|
||||||
//}
|
|
||||||
|
|
||||||
////PM 可以删除项目 仅仅在没有site 参与者只有他自己的时候
|
|
||||||
//if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
|
|
||||||
//{
|
|
||||||
// //参与者仅有他自己时,可以删除
|
|
||||||
// if (await _trialUserRepository.CountAsync(t => t.TrialId == trialId) == 1)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// var success1 = await _repository.BatchDeleteAsync<Trial>(o => o.Id == trialId) ||
|
|
||||||
// await _repository.BatchDeleteAsync<TrialUser>(t => t.TrialId == trialId) ||
|
|
||||||
// await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
// return ResponseOutput.Result(success1);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if (await _repository.AnyAsync<TrialUser>(u => u.TrialId == trialId))
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
||||||
//{
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
||||||
// return ResponseOutput.NotOk("该Trial下面有参与者,无法删除");
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousPDF>(t => t.SubjectVisit.TrialId == trialId);
|
||||||
//}
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<QCChallengeDialog>(t => t.QCChallenge.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<QCChallenge>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingClinicalDataPDF>(t => t.ReadingClinicalData.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingClinicalData>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingGlobalTaskInfo>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingJudgeInfo>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicalReviewDialog>(t => t.TaskMedicalReview.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicineQuestionAnswer>(t => t.TaskMedicalReview.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicineTrialQuestion>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingOncologyTaskInfo>(t => t.VisitTask.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingPeriodPlan>(t => t.ReadingPeriodSet.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingPeriodSet>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingQuestionTrial>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionTrial>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadModule>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<SubjectCanceDoctor>(t => t.Subject.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<SubjectUser>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<Subject>(t => t.TrialId == trialId);
|
||||||
|
//await _subjectVisitRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskAllocationRule>(t => t.TrialId == trialId);
|
||||||
|
//await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskInfluence>(t => t.InfluenceTask.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskMedicalReview>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskMedicalReviewRule>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialStateChange>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<Trial>(o => o.Id == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialClinicalDataSetCriterion>(t => t.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialCriterionDictionaryCode>(t => t.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId);
|
||||||
|
//await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocument>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
||||||
|
|
||||||
|
////await _repository.BatchDeleteAsync<TrialExperience>(t => t.TrialId == trialId) ;
|
||||||
|
//await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialEmailNoticeConfig>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialExternalUser>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialRevenuesPrice>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialRevenuesPriceVerification>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSign>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSite>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteSurvey>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteUserSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialUser>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteUser>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitStage>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitTaskReReading>(t => t.OriginalReReadingTask.TrialId == trialId);
|
||||||
|
//await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialStateChange>(t => t.TrialId == trialId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<InspectionFile>(o => o.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DataInspection>(o => o.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DicomStudy>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<StudyMonitor>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<EnrollReadingCategory>(t => t.Enroll.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<Enroll>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<EnrollDetail>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<NoneDicomStudyFile>(t => t.NoneDicomStudy.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<NoneDicomStudy>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<PaymentDetail>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<PreviousPDF>(t => t.SubjectVisit.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<QCChallengeDialog>(t => t.QCChallenge.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<QCChallenge>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingClinicalDataPDF>(t => t.ReadingClinicalData.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingClinicalData>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingGlobalTaskInfo>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingJudgeInfo>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingMedicalReviewDialog>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingMedicineQuestionAnswer>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingMedicineTrialQuestion>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingOncologyTaskInfo>(t => t.VisitTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingPeriodPlan>(t => t.ReadingPeriodSet.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingPeriodSet>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingQuestionTrial>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTableQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTableQuestionTrial>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadModule>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<SubjectCanceDoctor>(t => t.Subject.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<SubjectUser>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<Subject>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<SubjectVisit>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TaskAllocationRule>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskConsistentRule>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskInfluence>(t => t.InfluenceTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskMedicalReview>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskMedicalReviewRule>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<Trial>(o => o.Id == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialClinicalDataSetCriterion>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialCriterionDictionaryCode>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialDocument>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
||||||
|
|
||||||
//await _repository.BatchDeleteAsync<TrialExperience>(t => t.TrialId == trialId) ;
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeConfig>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialExternalUser>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialRevenuesPrice>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialRevenuesPriceVerification>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialSign>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSite>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteSurvey>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteUserSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialUser>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteUser>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitStage>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<VisitTaskReReading>(t => t.OriginalReReadingTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitTask>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
||||||
|
@ -620,7 +596,7 @@ namespace IRaCIS.Application.Services
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<List<Guid>> GetTrialEnrollmentReviewerIds(Guid trialId)
|
public async Task<List<Guid>> GetTrialEnrollmentReviewerIds(Guid trialId)
|
||||||
{
|
{
|
||||||
return await _repository.Where<Enroll>(u => u.TrialId == trialId &&
|
return await _enrollRepository.Where(u => u.TrialId == trialId &&
|
||||||
u.EnrollStatus >= EnrollStatus.DoctorReading).Select(u => u.DoctorId).Distinct().ToListAsync();
|
u.EnrollStatus >= EnrollStatus.DoctorReading).Select(u => u.DoctorId).Distinct().ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,14 +639,14 @@ namespace IRaCIS.Application.Services
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
|
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new EnrollDetail()
|
await _enrollDetailRepository.AddAsync(new EnrollDetail()
|
||||||
{
|
{
|
||||||
DoctorId = _userInfo.Id,
|
DoctorId = _userInfo.Id,
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
EnrollStatus = status,
|
EnrollStatus = status,
|
||||||
OptUserType = (int)SystemUserType.DoctorUser,
|
OptUserType = (int)SystemUserType.DoctorUser,
|
||||||
});
|
});
|
||||||
return ResponseOutput.Result(await _repository.BatchUpdateAsync<Enroll>(u => u.TrialId == trialId && u.DoctorId == _userInfo.Id, e => new Enroll
|
return ResponseOutput.Result(await _enrollRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialId && u.DoctorId == _userInfo.Id, e => new Enroll
|
||||||
{
|
{
|
||||||
EnrollStatus = status
|
EnrollStatus = status
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -18,6 +18,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<TrialSite> _trialSiteRepository,
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IRepository<Site> _siteRepository,
|
IRepository<Site> _siteRepository,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<Trial> _trialRepository) : BaseService, ITrialSiteService
|
IRepository<Trial> _trialRepository) : BaseService, ITrialSiteService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -128,10 +130,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.AddRangeAsync(addArray);
|
await _trialSiteRepository.AddRangeAsync(addArray);
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
return ResponseOutput.Result(await _trialSiteRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,13 +158,13 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (editTrialSiteCommand.IsDeleted)
|
if (editTrialSiteCommand.IsDeleted)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
||||||
{
|
{
|
||||||
//---The site has been associated with CRC, and couldn't be deleted.
|
//---The site has been associated with CRC, and couldn't be deleted.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<Subject>(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
if (await _subjectRepository.AnyAsync(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
||||||
{
|
{
|
||||||
//---The subjects has been added to this site, and couldn't be disable.
|
//---The subjects has been added to this site, and couldn't be disable.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_ParticipantJoined"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_ParticipantJoined"]);
|
||||||
|
@ -276,7 +278,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
.Select(t => t.TrialSiteCode).ToListAsync();
|
.Select(t => t.TrialSiteCode).ToListAsync();
|
||||||
|
|
||||||
var virtualList = await _repository.Where<VisitTask>(t => t.IsSelfAnalysis == true && t.TrialId == trialId).Select(t => t.BlindTrialSiteCode).Distinct().ToListAsync();
|
var virtualList = await _visitTaskRepository.Where(t => t.IsSelfAnalysis == true && t.TrialId == trialId).Select(t => t.BlindTrialSiteCode).Distinct().ToListAsync();
|
||||||
|
|
||||||
return isIncludeVirtualSite ? list.Concat(virtualList) : list;
|
return isIncludeVirtualSite ? list.Concat(virtualList) : list;
|
||||||
}
|
}
|
||||||
|
@ -295,21 +297,21 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var trialId = relation.TrialId;
|
var trialId = relation.TrialId;
|
||||||
var trialSiteId = relation.Id;
|
var trialSiteId = relation.Id;
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
||||||
{
|
{
|
||||||
//---The site has been associated with CRC, and couldn't be deleted.
|
//---The site has been associated with CRC, and couldn't be deleted.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<Subject>(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
if (await _subjectRepository.AnyAsync(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
||||||
{
|
{
|
||||||
//---The subjects has been added to this site, and couldn't be deleted.
|
//---The subjects has been added to this site, and couldn't be deleted.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedSubject"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedSubject"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.DeleteAsync(relation);
|
await _trialSiteRepository.DeleteAsync(relation);
|
||||||
|
|
||||||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
return ResponseOutput.Result(await _trialSiteUserRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,9 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<SCPPatient> _scpPatientRepository,
|
||||||
|
IRepository<SCPImageUpload> _scpImageUploadRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService
|
IDistributedLockProvider _distributedLockProvider) : BaseService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -104,7 +107,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput<PageOutput<SCPImageUploadView>>> GetSCPImageUploadList(SCPImageUploadQuery inQuery)
|
public async Task<IResponseOutput<PageOutput<SCPImageUploadView>>> GetSCPImageUploadList(SCPImageUploadQuery inQuery)
|
||||||
{
|
{
|
||||||
var query = _repository.Where<SCPImageUpload>(t => t.TrialId == inQuery.TrialId)
|
var query = _scpImageUploadRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CalledAE), t => t.CalledAE.Contains(inQuery.CalledAE))
|
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CalledAE), t => t.CalledAE.Contains(inQuery.CalledAE))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAEIP), t => t.CallingAEIP.Contains(inQuery.CallingAEIP))
|
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAEIP), t => t.CallingAEIP.Contains(inQuery.CallingAEIP))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE))
|
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE))
|
||||||
|
@ -318,11 +321,11 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var subjectId = inCommand.SubjectId;
|
var subjectId = inCommand.SubjectId;
|
||||||
|
|
||||||
var isVerifyVisitImageDate = await _repository.Where<Trial>(t => t.Id == inCommand.TrialId).Select(t => t.IsVerifyVisitImageDate).FirstNotNullAsync();
|
var isVerifyVisitImageDate = await _trialRepository.Where(t => t.Id == inCommand.TrialId).Select(t => t.IsVerifyVisitImageDate).FirstNotNullAsync();
|
||||||
|
|
||||||
var result = new List<VerifySCPStudyUploadResult>();
|
var result = new List<VerifySCPStudyUploadResult>();
|
||||||
|
|
||||||
var visitList = _repository.Where<SubjectVisit>(t => t.SubjectId == inCommand.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
|
var visitList = _subjectVisitRepository.Where(t => t.SubjectId == inCommand.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
|
||||||
|
|
||||||
var currentVisitNum = visitList.First(t => t.Id == inCommand.SubjectVisitId).VisitNum;
|
var currentVisitNum = visitList.First(t => t.Id == inCommand.SubjectVisitId).VisitNum;
|
||||||
|
|
||||||
|
@ -355,7 +358,7 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var verifyStudyInfo = _repository.Where<DicomStudy>(t => t.TrialId == trialId && t.Id == waitUploadItem.Id).ProjectTo<VerifyStudyDto>(_mapper.ConfigurationProvider).FirstOrDefault();
|
var verifyStudyInfo = _dicomStudyRepository.Where(t => t.TrialId == trialId && t.Id == waitUploadItem.Id).ProjectTo<VerifyStudyDto>(_mapper.ConfigurationProvider).FirstOrDefault();
|
||||||
|
|
||||||
var currentStudyResult = new VerifySCPStudyUploadResult() { SCPStudyId = waitUploadItem.Id };
|
var currentStudyResult = new VerifySCPStudyUploadResult() { SCPStudyId = waitUploadItem.Id };
|
||||||
|
|
||||||
|
@ -436,7 +439,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
using (await @lock.AcquireAsync())
|
using (await @lock.AcquireAsync())
|
||||||
{
|
{
|
||||||
var dbStudyCodeIntMax = _repository.Where<DicomStudy>(s => s.TrialId == inCommand.TrialId).Select(t => t.Code).DefaultIfEmpty().Max();
|
var dbStudyCodeIntMax = _dicomStudyRepository.Where(s => s.TrialId == inCommand.TrialId).Select(t => t.Code).DefaultIfEmpty().Max();
|
||||||
|
|
||||||
int currentNextCodeInt = dbStudyCodeIntMax + 1;
|
int currentNextCodeInt = dbStudyCodeIntMax + 1;
|
||||||
|
|
||||||
|
@ -450,7 +453,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
var newStuty = _mapper.Map<DicomStudy>(find.SCPStudy);
|
var newStuty = _mapper.Map<DicomStudy>(find.SCPStudy);
|
||||||
|
|
||||||
await _repository.AddAsync(newStuty);
|
await _dicomStudyRepository.AddAsync(newStuty);
|
||||||
|
|
||||||
newStuty.SeqId = Guid.Empty;
|
newStuty.SeqId = Guid.Empty;
|
||||||
newStuty.Code = currentNextCodeInt;
|
newStuty.Code = currentNextCodeInt;
|
||||||
|
@ -471,7 +474,7 @@ namespace IRaCIS.Application.Services
|
||||||
series.SubjectVisitId = subjectVisitId;
|
series.SubjectVisitId = subjectVisitId;
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.AddRangeAsync(newSeriesList);
|
await _dicomSeriesRepository.AddRangeAsync(newSeriesList);
|
||||||
|
|
||||||
var newInstanceList = _mapper.Map<List<DicomInstance>>(find.InstanceList);
|
var newInstanceList = _mapper.Map<List<DicomInstance>>(find.InstanceList);
|
||||||
|
|
||||||
|
@ -483,13 +486,13 @@ namespace IRaCIS.Application.Services
|
||||||
instance.SubjectVisitId = subjectVisitId;
|
instance.SubjectVisitId = subjectVisitId;
|
||||||
|
|
||||||
}
|
}
|
||||||
await _repository.AddRangeAsync(newInstanceList);
|
await _dicomInstanceRepository.AddRangeAsync(newInstanceList);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentNextCodeInt++;
|
currentNextCodeInt++;
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == find.SCPStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == find.SCPStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -576,9 +579,8 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
||||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -586,7 +588,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _scpStudyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
|
@ -13,6 +13,7 @@ namespace IRaCIS.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class SubjectService(
|
public class SubjectService(
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository) : BaseService, ISubjectService
|
IRepository<SubjectVisit> _subjectVisitRepository) : BaseService, ISubjectService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@ namespace IRaCIS.Application.Services
|
||||||
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
||||||
{
|
{
|
||||||
var svlist = new List<SubjectVisit>();
|
var svlist = new List<SubjectVisit>();
|
||||||
if (await _repository.AnyAsync<Trial>(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed))
|
if (await _trialRepository.AnyAsync(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed))
|
||||||
{
|
{
|
||||||
//---项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。
|
//---项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。
|
||||||
return ResponseOutput.NotOk(_localizer["Subject_NoConfirmedPlan"]);
|
return ResponseOutput.NotOk(_localizer["Subject_NoConfirmedPlan"]);
|
||||||
|
@ -124,7 +125,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var pageList = await subjectQuery.ToPagedListAsync(inQuery,nameof(SubjectQueryView.Code));
|
var pageList = await subjectQuery.ToPagedListAsync(inQuery,nameof(SubjectQueryView.Code));
|
||||||
|
|
||||||
var trialConfig = await _repository.Where<Trial>(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var trialConfig = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo<TrialSubjectConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
|
||||||
return ResponseOutput.Ok(pageList, trialConfig);
|
return ResponseOutput.Ok(pageList, trialConfig);
|
||||||
|
|
||||||
|
|
|
@ -23,13 +23,17 @@ namespace IRaCIS.Core.Application.Services
|
||||||
public class SubjectVisitService(
|
public class SubjectVisitService(
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||||
IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
||||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<TaskStudy> _taskStudyRepository,
|
||||||
IServiceProvider _serviceProvider,
|
IServiceProvider _serviceProvider,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository
|
||||||
) : BaseService, ISubjectVisitService
|
) : BaseService, ISubjectVisitService
|
||||||
{
|
{
|
||||||
|
@ -85,7 +89,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]);
|
throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<VisitTask>(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder))
|
if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder))
|
||||||
{
|
{
|
||||||
//---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退
|
//---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退
|
||||||
throw new BusinessValidationFailedException(_localizer["Visit_FinishedTasksNoAdd"]);
|
throw new BusinessValidationFailedException(_localizer["Visit_FinishedTasksNoAdd"]);
|
||||||
|
@ -182,7 +186,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||||
public async Task<IResponseOutput> DeleteSV(Guid id)
|
public async Task<IResponseOutput> DeleteSV(Guid id)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<DicomStudy>(t => t.SubjectVisitId == id))
|
if (await _dicomStudyRepository.AnyAsync(t => t.SubjectVisitId == id))
|
||||||
{
|
{
|
||||||
//---当前访视已经有影像上传,不允许删除。
|
//---当前访视已经有影像上传,不允许删除。
|
||||||
return ResponseOutput.NotOk(_localizer["Visit_UploadedNoDelete"]);
|
return ResponseOutput.NotOk(_localizer["Visit_UploadedNoDelete"]);
|
||||||
|
@ -216,7 +220,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<List<VisitStudyDTO>> GetVisitStudyList(Guid trialId, Guid sujectVisitId, int isReading)
|
public async Task<List<VisitStudyDTO>> GetVisitStudyList(Guid trialId, Guid sujectVisitId, int isReading)
|
||||||
{
|
{
|
||||||
var studyList = await _repository.Where<DicomStudy>(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).Select(k => new VisitStudyDTO()
|
var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
Modalities = k.Modalities,
|
Modalities = k.Modalities,
|
||||||
|
@ -226,12 +230,12 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
foreach (var t in studyList)
|
foreach (var t in studyList)
|
||||||
{
|
{
|
||||||
t.SeriesList = await _repository.Where<DicomSeries>(s => s.StudyId == t.StudyId)
|
t.SeriesList = await _dicomSeriesRepository.Where(s => s.StudyId == t.StudyId)
|
||||||
.WhereIf(isReading == 1, s => s.IsReading).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime)
|
.WhereIf(isReading == 1, s => s.IsReading).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime)
|
||||||
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
@ -275,9 +279,9 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<DicomSeriesDTO> GetDicomSeriesInfo(GetDicomSeriesInfoInDto inDto)
|
public async Task<DicomSeriesDTO> GetDicomSeriesInfo(GetDicomSeriesInfoInDto inDto)
|
||||||
{
|
{
|
||||||
DicomSeriesDTO series = await _repository.Where<DicomSeries>(s => s.Id == inDto.SeriesId).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
DicomSeriesDTO series = await _dicomSeriesRepository.Where(s => s.Id == inDto.SeriesId).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => t.SeriesId == inDto.SeriesId)
|
var instanceList = await _dicomInstanceRepository.Where(t => t.SeriesId == inDto.SeriesId)
|
||||||
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.SliceLocation }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.SliceLocation }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,17 +364,17 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
List<DicomSeriesDTO> ctseriesLists = await _repository.Where<DicomSeries>(s => ctseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
List<DicomSeriesDTO> ctseriesLists = await _dicomSeriesRepository.Where(s => ctseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
List<DicomSeriesDTO> ptseriesLists = await _repository.Where<DicomSeries>(s => ptseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
List<DicomSeriesDTO> ptseriesLists = await _dicomSeriesRepository.Where(s => ptseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集
|
var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => seriesIds.Contains(t.SeriesId))
|
var instanceList = await _dicomInstanceRepository.Where(t => seriesIds.Contains(t.SeriesId))
|
||||||
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
var studyIds = instanceList.Select(x => x.StudyId).Distinct().ToList();
|
var studyIds = instanceList.Select(x => x.StudyId).Distinct().ToList();
|
||||||
|
|
||||||
var studyList = await _repository.Where<DicomStudy>(t => studyIds.Contains(t.Id))
|
var studyList = await _dicomStudyRepository.Where(t => studyIds.Contains(t.Id))
|
||||||
.Select(k => new StudyInfo()
|
.Select(k => new StudyInfo()
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
|
@ -446,7 +450,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (taskInfo.TaskStudyCount > 0)
|
if (taskInfo.TaskStudyCount > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
var taskStudyList = await _repository.Where<TaskStudy>(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId).ProjectTo<VisitStudyDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId).ProjectTo<VisitStudyDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
foreach (var study in taskStudyList)
|
foreach (var study in taskStudyList)
|
||||||
{
|
{
|
||||||
|
@ -473,7 +477,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
||||||
|
|
||||||
var dicomStudyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
var dicomStudyList = await _dicomStudyRepository.Where(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
||||||
.WhereIf(taskInfo.IsImageFilter == true, t => taskInfo.CriterionModalitys.Contains(t.ModalityForEdit))
|
.WhereIf(taskInfo.IsImageFilter == true, t => taskInfo.CriterionModalitys.Contains(t.ModalityForEdit))
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
.Select(k => new VisitStudyDTO()
|
.Select(k => new VisitStudyDTO()
|
||||||
|
@ -487,10 +491,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId))
|
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
||||||
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
@ -558,7 +562,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList();
|
var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList();
|
||||||
if (rowInfoList.Count > 0)
|
if (rowInfoList.Count > 0)
|
||||||
{
|
{
|
||||||
var thisVisitTaskStudy = await _repository.Where<DicomStudy>(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO()
|
var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
|
|
||||||
|
@ -572,7 +576,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (thisVisitTaskStudy != null)
|
if (thisVisitTaskStudy != null)
|
||||||
{
|
{
|
||||||
thisVisitTaskStudy.StudyId = default(Guid);
|
thisVisitTaskStudy.StudyId = default(Guid);
|
||||||
var item = await _repository.Where<DicomSeries>(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).
|
var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).
|
||||||
ThenBy(s => s.SeriesTime)
|
ThenBy(s => s.SeriesTime)
|
||||||
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
@ -582,7 +586,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList();
|
var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList();
|
||||||
|
|
||||||
item.InstanceInfoList = await _repository.Where<DicomInstance>(t => markInstanceIdList.Contains(t.Id)).OrderBy(t => t.InstanceNumber).Select(k =>
|
item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).OrderBy(t => t.InstanceNumber).Select(k =>
|
||||||
new InstanceBasicInfo()
|
new InstanceBasicInfo()
|
||||||
{
|
{
|
||||||
Id = k.Id,
|
Id = k.Id,
|
||||||
|
@ -613,7 +617,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
item.Description = "Key Series";
|
item.Description = "Key Series";
|
||||||
|
|
||||||
var modalityList = await _repository.Where<DicomSeries>(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
||||||
item.Modality = string.Join(",", modalityList);
|
item.Modality = string.Join(",", modalityList);
|
||||||
thisVisitTaskStudy.SeriesList.Add(item);
|
thisVisitTaskStudy.SeriesList.Add(item);
|
||||||
//thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
//thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<VisitPlanInfluenceStudy> _influnceRepository,
|
IRepository<VisitPlanInfluenceStudy> _influnceRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
IRepository<VisitPlanInfluenceStat> _visitPlanInfluenceStatRepository) : BaseService, IVisitPlanService
|
IRepository<VisitPlanInfluenceStat> _visitPlanInfluenceStatRepository) : BaseService, IVisitPlanService
|
||||||
{
|
{
|
||||||
|
@ -43,9 +44,9 @@ namespace IRaCIS.Application.Services
|
||||||
var query = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == trialId)
|
var query = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == trialId)
|
||||||
.ProjectTo<VisitStageDTO>(_mapper.ConfigurationProvider).OrderBy(t => t.VisitNum);
|
.ProjectTo<VisitStageDTO>(_mapper.ConfigurationProvider).OrderBy(t => t.VisitNum);
|
||||||
var list = await query.ToListAsync();
|
var list = await query.ToListAsync();
|
||||||
var trial = (await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == trialId)).IfNullThrowException();
|
var trial = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId)).IfNullThrowException();
|
||||||
|
|
||||||
var isHaveGeneratedTask = (await _repository.AnyAsync<VisitTask>(t => t.TrialId == trialId));
|
var isHaveGeneratedTask = (await _visitTaskRepository.AnyAsync(t => t.TrialId == trialId));
|
||||||
return new VisitPlanView()
|
return new VisitPlanView()
|
||||||
{
|
{
|
||||||
VisitPlanList = list,
|
VisitPlanList = list,
|
||||||
|
@ -179,7 +180,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (stage.IsBaseLine && stage.IsBaseLine != visitPlan.IsBaseLine)
|
if (stage.IsBaseLine && stage.IsBaseLine != visitPlan.IsBaseLine)
|
||||||
{
|
{
|
||||||
if (await _repository.Where<SubjectVisit>(t => t.TrialId == visitPlan.TrialId).AnyAsync(v => v.IsBaseLine && v.SubmitState >= SubmitStateEnum.ToSubmit))
|
if (await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId).AnyAsync(v => v.IsBaseLine && v.SubmitState >= SubmitStateEnum.ToSubmit))
|
||||||
{
|
{
|
||||||
//---有受试者的基线已经上传了影像数据,不允许修改基线访视。
|
//---有受试者的基线已经上传了影像数据,不允许修改基线访视。
|
||||||
throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistBaselineImgNoModify"]);
|
throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistBaselineImgNoModify"]);
|
||||||
|
@ -497,13 +498,13 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var visitPlan = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == id);
|
var visitPlan = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == id);
|
||||||
if (visitPlan == null) return Null404NotFound(visitPlan);
|
if (visitPlan == null) return Null404NotFound(visitPlan);
|
||||||
if (await _repository.AnyAsync<SubjectVisit>(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId && t.VisitExecuted == VisitExecutedEnum.Executed))
|
if (await _subjectVisitRepository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId && t.VisitExecuted == VisitExecutedEnum.Executed))
|
||||||
{
|
{
|
||||||
//---The visit plan has been assigned to the subjects and executed.
|
//---The visit plan has been assigned to the subjects and executed.
|
||||||
return ResponseOutput.NotOk(_localizer["VisitPlan_Assigned"]);
|
return ResponseOutput.NotOk(_localizer["VisitPlan_Assigned"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<SubjectVisit>(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName);
|
await _subjectVisitRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName);
|
||||||
|
|
||||||
var result = await _visitStageRepository.BatchDeleteNoTrackingAsync(u => u.Id == id);
|
var result = await _visitStageRepository.BatchDeleteNoTrackingAsync(u => u.Id == id);
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<TrialRevenuesPrice> _trialRevenuesPriceRepository,
|
IRepository<TrialRevenuesPrice> _trialRevenuesPriceRepository,
|
||||||
IRepository<TrialRevenuesPriceVerification> _trialRevenuesPriceVerificationRepository,
|
IRepository<TrialRevenuesPriceVerification> _trialRevenuesPriceVerificationRepository,
|
||||||
IRepository<EnrollReadingCriterion> _enrollReadingCriterionRepository,
|
IRepository<EnrollReadingCriterion> _enrollReadingCriterionRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<TaskAllocationRule> _taskAllocationRuleRepository) : BaseService, IDoctorWorkloadService
|
IRepository<TaskAllocationRule> _taskAllocationRuleRepository) : BaseService, IDoctorWorkloadService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -129,7 +130,7 @@ namespace IRaCIS.Application.Services
|
||||||
var enroll = await _enrollRepository.FirstAsync(t => t.Id == inDto.EnrollId);
|
var enroll = await _enrollRepository.FirstAsync(t => t.Id == inDto.EnrollId);
|
||||||
|
|
||||||
|
|
||||||
if (_repository.Where<VisitTask>(t => t.TrialId == enroll.TrialId && t.DoctorUserId == enroll.DoctorUserId && t.TaskAllocationState == TaskAllocationState.Allocated && t.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Any())
|
if (_visitTaskRepository.Where(t => t.TrialId == enroll.TrialId && t.DoctorUserId == enroll.DoctorUserId && t.TaskAllocationState == TaskAllocationState.Allocated && t.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Any())
|
||||||
{
|
{
|
||||||
|
|
||||||
var readingCategoryList = await _enrollReadingCategoryRepository.Where(t => t.EnrollId == inDto.EnrollId && t.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(t => t.ReadingCategory).ToListAsync();
|
var readingCategoryList = await _enrollReadingCategoryRepository.Where(t => t.EnrollId == inDto.EnrollId && t.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(t => t.ReadingCategory).ToListAsync();
|
||||||
|
|
|
@ -19,6 +19,8 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Doctor> _doctorRepository,
|
IRepository<Doctor> _doctorRepository,
|
||||||
IRepository<EnrollDetail> _enrollDetailRepository,
|
IRepository<EnrollDetail> _enrollDetailRepository,
|
||||||
IRepository<Workload> _workloadRepository,
|
IRepository<Workload> _workloadRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
IMailVerificationService _mailVerificationService) : BaseService, IEnrollService
|
IMailVerificationService _mailVerificationService) : BaseService, IEnrollService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -140,7 +142,7 @@ namespace IRaCIS.Application.Services
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
EnrollStatus = EnrollStatus.HasApplyDownloadResume,
|
EnrollStatus = EnrollStatus.HasApplyDownloadResume,
|
||||||
|
|
||||||
DoctorUserId = _repository.Where<User>(t => t.DoctorId == doctorId).Select(t => t.Id).FirstOrDefault()
|
DoctorUserId = _userRepository.Where(t => t.DoctorId == doctorId).Select(t => t.Id).FirstOrDefault()
|
||||||
}); ;
|
}); ;
|
||||||
|
|
||||||
await _enrollDetailRepository.AddAsync(new EnrollDetail()
|
await _enrollDetailRepository.AddAsync(new EnrollDetail()
|
||||||
|
@ -168,7 +170,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
|
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
|
||||||
|
|
||||||
var hasSPMOrCPM = await _repository.Where<TrialUser>(t => t.TrialId == trialId).AnyAsync(t=> t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM);
|
var hasSPMOrCPM = await _trialUserRepository.Where(t => t.TrialId == trialId).AnyAsync(t=> t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM);
|
||||||
|
|
||||||
if (trial != null)
|
if (trial != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,73 +33,65 @@ using Xceed.Words.NET;
|
||||||
namespace IRaCIS.Application.Services
|
namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
[ApiExplorerSettings(GroupName = "Institution")]
|
[ApiExplorerSettings(GroupName = "Institution")]
|
||||||
public class TestService : BaseService
|
public class TestService(
|
||||||
|
IRepository<Dictionary> _dicRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IOptionsMonitor<SystemEmailSendConfig> _systemEmailConfig,
|
||||||
|
IOptionsMonitor<ServiceVerifyConfigOption> _basicConfig,
|
||||||
|
IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
|
IRepository<TrialClinicalDataSetCriterion> _trialClinicalDataSetCriterionRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<Internationalization> _internationalizationRepository,
|
||||||
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||||
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
||||||
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
|
ILogger<TestService> _logger) : BaseService
|
||||||
{
|
{
|
||||||
|
|
||||||
public static int IntValue = 100;
|
public static int IntValue = 100;
|
||||||
private readonly IRepository<Dictionary> _dicRepository;
|
|
||||||
private readonly IRepository<Trial> _trialRepository;
|
|
||||||
|
|
||||||
//private readonly IDistributedCache _cache;
|
|
||||||
|
|
||||||
private readonly IOptionsMonitor<SystemEmailSendConfig> _systemEmailConfig;
|
|
||||||
|
|
||||||
private readonly IOptionsMonitor<ServiceVerifyConfigOption> _basicConfig;
|
|
||||||
private readonly IRepository<VisitTask> _visitTaskRepositoryy;
|
|
||||||
|
|
||||||
private readonly IDistributedLockProvider _distributedLockProvider;
|
|
||||||
|
|
||||||
private readonly ILogger<TestService> _logger;
|
|
||||||
|
|
||||||
public TestService(IRepository<Dictionary> dicRepository, IRepository<Trial> trialRepository, ILogger<TestService> logger
|
|
||||||
|
|
||||||
, IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig, IOptionsMonitor<ServiceVerifyConfigOption> basicConfig, IRepository<VisitTask> visitTaskRepository, IDistributedLockProvider distributedLockProvider)
|
|
||||||
{
|
|
||||||
_visitTaskRepositoryy = visitTaskRepository;
|
|
||||||
|
|
||||||
_systemEmailConfig = systemEmailConfig;
|
|
||||||
_basicConfig = basicConfig;
|
|
||||||
|
|
||||||
_dicRepository = dicRepository;
|
|
||||||
_trialRepository = trialRepository;
|
|
||||||
|
|
||||||
_distributedLockProvider = distributedLockProvider;
|
|
||||||
|
|
||||||
_logger = logger;
|
|
||||||
//_cache = cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清理一致性分析任务
|
/// 清理一致性分析任务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="trialReadingCriterionId"></param>
|
/// <param name="trialReadingCriterionId"></param>
|
||||||
|
/// <param name="_taskConsistentRuleRepository"></param>
|
||||||
|
/// <param name="_readingConsistentClinicalDataPDFRepository"></param>
|
||||||
|
/// <param name="_readingConsistentClinicalDataRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IResponseOutput> DeleteConsistentDate(Guid trialReadingCriterionId)
|
public async Task<IResponseOutput> DeleteConsistentDate(Guid trialReadingCriterionId,
|
||||||
|
[FromServices] IRepository<TaskConsistentRule> _taskConsistentRuleRepository,
|
||||||
|
[FromServices] IRepository<ReadingConsistentClinicalDataPDF> _readingConsistentClinicalDataPDFRepository,
|
||||||
|
[FromServices] IRepository<ReadingConsistentClinicalData> _readingConsistentClinicalDataRepository
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var consistentSubjectIdList = _repository.Where<VisitTask>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true).Select(t => t.SubjectId).ToList();
|
var consistentSubjectIdList = _visitTaskRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true).Select(t => t.SubjectId).ToList();
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TaskConsistentRule>(t => t.TrialReadingCriterionId == trialReadingCriterionId);
|
await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<VisitTask>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true);
|
await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true);
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingConsistentClinicalDataPDF>(t => consistentSubjectIdList.Contains(t.ReadingConsistentClinicalData.SubjectId));
|
await _readingConsistentClinicalDataPDFRepository.BatchDeleteNoTrackingAsync(t => consistentSubjectIdList.Contains(t.ReadingConsistentClinicalData.SubjectId));
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingConsistentClinicalData>(t => consistentSubjectIdList.Contains(t.SubjectId));
|
await _readingConsistentClinicalDataRepository.BatchDeleteNoTrackingAsync(t => consistentSubjectIdList.Contains(t.SubjectId));
|
||||||
|
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _readingConsistentClinicalDataRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<IResponseOutput> TestEFcore8()
|
public async Task<IResponseOutput> TestEFcore8()
|
||||||
{
|
{
|
||||||
var systemDocQuery = from sysDoc in _repository.GetQueryable<SystemDocument>()
|
var systemDocQuery = from sysDoc in _systemDocumentRepository.Where()
|
||||||
|
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>().Where(t => t.ConfirmTime != null) on sysDoc.Id equals confirm.SystemDocumentId
|
join confirm in _systemDocConfirmedUserRepository.Where().Where(t => t.ConfirmTime != null) on sysDoc.Id equals confirm.SystemDocumentId
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
IsSystemDoc = true,
|
IsSystemDoc = true,
|
||||||
|
@ -131,7 +123,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
//await _repository.BatchUpdateAsync<Subject>(t => t.Id == Guid.Empty, u => new Subject() { FirstName = "fddd", LastName = "sss", UpdateTime = DateTime.Now });
|
//await _repository.BatchUpdateAsync<Subject>(t => t.Id == Guid.Empty, u => new Subject() { FirstName = "fddd", LastName = "sss", UpdateTime = DateTime.Now });
|
||||||
|
|
||||||
//await _repository.Where<Subject>().ExecuteUpdateAsync(t => t.SetProperty(t => t.UpdateTime, u => DateTime.Now));
|
//await _subjectRepository.Where().ExecuteUpdateAsync(t => t.SetProperty(t => t.UpdateTime, u => DateTime.Now));
|
||||||
|
|
||||||
return ResponseOutput.Ok(list);
|
return ResponseOutput.Ok(list);
|
||||||
}
|
}
|
||||||
|
@ -155,7 +147,7 @@ namespace IRaCIS.Application.Services
|
||||||
public async Task<IResponseOutput> TestDistributedLock()
|
public async Task<IResponseOutput> TestDistributedLock()
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.Where<User>().Select(t => t.FullName).FirstNotNullAsync();
|
await _userRepository.Where().Select(t => t.FullName).FirstNotNullAsync();
|
||||||
|
|
||||||
Console.WriteLine($"我进来了当前值是:" + IntValue);
|
Console.WriteLine($"我进来了当前值是:" + IntValue);
|
||||||
_logger.LogWarning($"我进来了当前值是:" + IntValue);
|
_logger.LogWarning($"我进来了当前值是:" + IntValue);
|
||||||
|
@ -186,11 +178,11 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
foreach (var row in rows)
|
foreach (var row in rows)
|
||||||
{
|
{
|
||||||
await _repository.InsertOrUpdateAsync<Internationalization, InternationalizationAddOrEdit>(row);
|
await _internationalizationRepository.InsertOrUpdateAsync(row);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _internationalizationRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -199,7 +191,6 @@ namespace IRaCIS.Application.Services
|
||||||
public async Task<string> Get()
|
public async Task<string> Get()
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.Where<ReadingConsistentClinicalData>(t => t.SubjectId == Guid.Empty).Include(t => t.ReadingClinicalDataPDFList).ExecuteDeleteAsync();
|
|
||||||
|
|
||||||
// Generate RSA keys
|
// Generate RSA keys
|
||||||
var keyPair = RSAHelper.GenerateRSAKeyPair(2048);
|
var keyPair = RSAHelper.GenerateRSAKeyPair(2048);
|
||||||
|
@ -394,7 +385,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//var d = _repository.Where<User>(t => t.FullName.Contains("cc")).Select(t => t.FullName).FirstOrDefault();
|
//var d = _userRepository.Where(t => t.FullName.Contains("cc")).Select(t => t.FullName).FirstOrDefault();
|
||||||
//var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First();
|
//var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First();
|
||||||
//CultureInfo culture = CultureInfo.CurrentUICulture;
|
//CultureInfo culture = CultureInfo.CurrentUICulture;
|
||||||
|
|
||||||
|
@ -421,12 +412,12 @@ namespace IRaCIS.Application.Services
|
||||||
return _localizer["test{0}", "测试"];
|
return _localizer["test{0}", "测试"];
|
||||||
|
|
||||||
|
|
||||||
//var list = _repository.Where<SubjectVisit>(t => t.Id == Guid.NewGuid()).SelectMany(t => t.VisitTaskList).ToList();
|
//var list = _subjectVisitRepository.Where(t => t.Id == Guid.NewGuid()).SelectMany(t => t.VisitTaskList).ToList();
|
||||||
|
|
||||||
//var list2 = _repository.Where<VisitTask>(t => t.Id == Guid.NewGuid()).Select(t => t.SourceSubjectVisit).ToList();
|
//var list2 = _visitTaskRepository.Where(t => t.Id == Guid.NewGuid()).Select(t => t.SourceSubjectVisit).ToList();
|
||||||
|
|
||||||
//var list3 = _repository.Where<VisitTask>(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SourceSubjectVisit.VisitTaskList).ToList();
|
//var list3 = _visitTaskRepository.Where(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SourceSubjectVisit.VisitTaskList).ToList();
|
||||||
//var list2 = _repository.Where<Subject>(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SubjectVisitTaskList).ToList();
|
//var list2 = _subjectRepository.Where(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SubjectVisitTaskList).ToList();
|
||||||
//return _userInfo.LocalIp;
|
//return _userInfo.LocalIp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,7 +430,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var needAddBodyPartList = searchList.Select(t => new TrialBodyPart() { Code = t.Code, Name = t.Value, NameCN = t.ValueCN });
|
var needAddBodyPartList = searchList.Select(t => new TrialBodyPart() { Code = t.Code, Name = t.Value, NameCN = t.ValueCN });
|
||||||
|
|
||||||
var trialIds = _repository.Where<Trial>(t => !t.TrialBodyPartList.Any()).Select(t => t.Id).ToList();
|
var trialIds = _trialRepository.Where(t => !t.TrialBodyPartList.Any()).Select(t => t.Id).ToList();
|
||||||
|
|
||||||
foreach (var trialId in trialIds)
|
foreach (var trialId in trialIds)
|
||||||
{
|
{
|
||||||
|
@ -447,10 +438,10 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
tempList.ForEach(t => t.TrialId = trialId);
|
tempList.ForEach(t => t.TrialId = trialId);
|
||||||
|
|
||||||
await _repository.AddRangeAsync(tempList);
|
await _trialBodyPartRepository.AddRangeAsync(tempList);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _dicRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,7 +453,7 @@ namespace IRaCIS.Application.Services
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<IResponseOutput> ModifyClinicalDataTable()
|
public async Task<IResponseOutput> ModifyClinicalDataTable()
|
||||||
{
|
{
|
||||||
var needAddList = _repository.Where<ClinicalDataTrialSet>(t => t.CriterionEnumListStr != String.Empty && t.TrialClinicalDataSetCriteriaList.Count() == 0).ToList();
|
var needAddList = _clinicalDataTrialSetRepository.Where(t => t.CriterionEnumListStr != String.Empty && t.TrialClinicalDataSetCriteriaList.Count() == 0).ToList();
|
||||||
|
|
||||||
|
|
||||||
//遍历项目
|
//遍历项目
|
||||||
|
@ -470,7 +461,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
//找到项目存在的项目标准
|
//找到项目存在的项目标准
|
||||||
|
|
||||||
var trialCritrialList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == needAddTrialGroup.Key).ToList();
|
var trialCritrialList = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == needAddTrialGroup.Key).ToList();
|
||||||
|
|
||||||
//遍历项目下的临床数据
|
//遍历项目下的临床数据
|
||||||
foreach (var needAddTrial in needAddTrialGroup)
|
foreach (var needAddTrial in needAddTrialGroup)
|
||||||
|
@ -484,12 +475,12 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (find != null)
|
if (find != null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialClinicalDataSetCriterion() { TrialClinicalDataSetId = needAddTrial.Id, TrialReadingCriterionId = find.Id });
|
await _trialClinicalDataSetCriterionRepository.AddAsync(new TrialClinicalDataSetCriterion() { TrialClinicalDataSetId = needAddTrial.Id, TrialReadingCriterionId = find.Id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await _repository.SaveChangesAsync();
|
await _trialClinicalDataSetCriterionRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,7 +491,7 @@ namespace IRaCIS.Application.Services
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> OldLocalImageResizeJpg([FromServices] IOSSService oSSService, [FromServices] IRepository _repository, [FromServices] IWebHostEnvironment _hostEnvironment)
|
public async Task<IResponseOutput> OldLocalImageResizeJpg([FromServices] IOSSService oSSService, [FromServices] IWebHostEnvironment _hostEnvironment)
|
||||||
{
|
{
|
||||||
|
|
||||||
var aliConfig = oSSService.ObjectStoreServiceOptions.AliyunOSS;
|
var aliConfig = oSSService.ObjectStoreServiceOptions.AliyunOSS;
|
||||||
|
@ -508,7 +499,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
|
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
|
||||||
|
|
||||||
var studyList = _repository.Where<DicomStudy>(t => t.SeriesList.Any(t => t.ImageResizePath.Length < 10)).Select(t => new { t.TrialId, t.Subject.TrialSiteId, t.SubjectId, t.SubjectVisitId, t.Id }).ToList();
|
var studyList = _dicomStudyRepository.Where(t => t.SeriesList.Any(t => t.ImageResizePath.Length < 10)).Select(t => new { t.TrialId, t.Subject.TrialSiteId, t.SubjectId, t.SubjectVisitId, t.Id }).ToList();
|
||||||
|
|
||||||
foreach (var studyitem in studyList)
|
foreach (var studyitem in studyList)
|
||||||
{
|
{
|
||||||
|
@ -549,9 +540,9 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
foreach (var jpg in jpgInfoList)
|
foreach (var jpg in jpgInfoList)
|
||||||
{
|
{
|
||||||
var seriesId = _repository.Where<DicomInstance>(t => t.Id == jpg.InstanceId).Select(t => t.SeriesId).FirstOrDefault();
|
var seriesId = _dicomInstanceRepository.Where(t => t.Id == jpg.InstanceId).Select(t => t.SeriesId).FirstOrDefault();
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<DicomSeries>(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key });
|
await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置 NextMarker 以获取下一页的数据
|
// 设置 NextMarker 以获取下一页的数据
|
||||||
|
@ -564,7 +555,7 @@ namespace IRaCIS.Application.Services
|
||||||
Console.WriteLine($"Error: {ex.Message}");
|
Console.WriteLine($"Error: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _dicomStudyRepository.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,19 +8,11 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Triggers
|
namespace IRaCIS.Core.Application.Triggers
|
||||||
{
|
{
|
||||||
public class AddCRCCliniaclDataTrigger : IAfterSaveTrigger<SubjectVisit>
|
public class AddCRCCliniaclDataTrigger(
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IClinicalAnswerService _iClinicalAnswerService) : IAfterSaveTrigger<SubjectVisit>
|
||||||
{
|
{
|
||||||
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
|
||||||
private readonly IRepository _repository;
|
|
||||||
private readonly IClinicalAnswerService _iClinicalAnswerService;
|
|
||||||
|
|
||||||
public AddCRCCliniaclDataTrigger(IRepository<SubjectVisit> subjectVisitRepository, IRepository repository, IClinicalAnswerService iClinicalAnswerService)
|
|
||||||
{
|
|
||||||
_subjectVisitRepository = subjectVisitRepository;
|
|
||||||
|
|
||||||
_repository = repository;
|
|
||||||
this._iClinicalAnswerService = iClinicalAnswerService;
|
|
||||||
}
|
|
||||||
|
|
||||||
//注意删除不能用扩展方法,必须用EF跟踪的实体 否则不能取到 SubjectVisitId
|
//注意删除不能用扩展方法,必须用EF跟踪的实体 否则不能取到 SubjectVisitId
|
||||||
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
||||||
|
|
|
@ -8,28 +8,14 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加访视计划 要给改项目下的所有Subject 添加该访视
|
/// 添加访视计划 要给改项目下的所有Subject 添加该访视
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class AddSubjectTrigger : IBeforeSaveTrigger<Subject>
|
public class AddSubjectTrigger(
|
||||||
{
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
|
||||||
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
|
||||||
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
|
||||||
private readonly IRepository<VisitStage> _visitStageRepository;
|
|
||||||
private readonly IRepository<Trial> _trialRepository;
|
|
||||||
private readonly IMapper _mapper;
|
|
||||||
|
|
||||||
public AddSubjectTrigger(IRepository<SubjectVisit> subjectVisitRepository,
|
IRepository<VisitStage> _visitStageRepository,
|
||||||
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
IMapper _mapper) : IBeforeSaveTrigger<Subject>
|
||||||
IMapper mapper, IRepository<VisitStage> visitStageRepository, IRepository<Trial> trialRepository)
|
|
||||||
{
|
{
|
||||||
_subjectVisitRepository = subjectVisitRepository;
|
|
||||||
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
|
||||||
this._readingClinicalDataRepository = readingClinicalDataRepository;
|
|
||||||
_trialRepository = trialRepository;
|
|
||||||
|
|
||||||
_visitStageRepository = visitStageRepository;
|
|
||||||
_mapper = mapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task BeforeSave(ITriggerContext<Subject> context, CancellationToken cancellationToken)
|
public async Task BeforeSave(ITriggerContext<Subject> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,20 +12,13 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
{
|
{
|
||||||
|
|
||||||
// 统一处理 外部用户、中心调研(先添加 再发送邮件)、参与医生加入到项目 ----废弃
|
// 统一处理 外部用户、中心调研(先添加 再发送邮件)、参与医生加入到项目 ----废弃
|
||||||
public class AddlTrialUserTrigger :IBeforeSaveTrigger<TrialUser>
|
public class AddlTrialUserTrigger(
|
||||||
|
IStringLocalizer _localizer,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<User> _userRepository) : IBeforeSaveTrigger<TrialUser>
|
||||||
|
|
||||||
{
|
{
|
||||||
public IStringLocalizer _localizer;
|
|
||||||
private readonly IRepository<Trial> _trialRepository;
|
|
||||||
private readonly IRepository<User> _userRepository;
|
|
||||||
|
|
||||||
public AddlTrialUserTrigger(IRepository<Trial> trialRepository, IRepository<User> userRepository, IStringLocalizer localizer)
|
|
||||||
{
|
|
||||||
_trialRepository = trialRepository;
|
|
||||||
|
|
||||||
_userRepository = userRepository;
|
|
||||||
_localizer = localizer;
|
|
||||||
}
|
|
||||||
public async Task BeforeSave(ITriggerContext<TrialUser> context, CancellationToken cancellationToken)
|
public async Task BeforeSave(ITriggerContext<TrialUser> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var trialUser = context.Entity;
|
var trialUser = context.Entity;
|
||||||
|
|
|
@ -5,14 +5,9 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
{
|
{
|
||||||
|
|
||||||
//访视 质疑状态 触发修改
|
//访视 质疑状态 触发修改
|
||||||
public class ChallengeStateTrigger : IAfterSaveTrigger<QCChallenge>
|
public class ChallengeStateTrigger(IRepository<QCChallenge> _qcChallengeRepository, IRepository<SubjectVisit> _subjectVisitRepository) : IAfterSaveTrigger<QCChallenge>
|
||||||
{
|
{
|
||||||
private readonly IRepository _repository;
|
|
||||||
|
|
||||||
public ChallengeStateTrigger(IRepository repository)
|
|
||||||
{
|
|
||||||
_repository = repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task AfterSave(ITriggerContext<QCChallenge> context, CancellationToken cancellationToken)
|
public async Task AfterSave(ITriggerContext<QCChallenge> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
@ -21,7 +16,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
ChallengeStateEnum subjectVisitChallengeState = default;
|
ChallengeStateEnum subjectVisitChallengeState = default;
|
||||||
|
|
||||||
|
|
||||||
var closedStateList = await _repository.Where<QCChallenge>(t => t.SubjectVisitId == subjectVisitId).Select(t => t.IsClosed).ToListAsync();
|
var closedStateList = await _qcChallengeRepository.Where(t => t.SubjectVisitId == subjectVisitId).Select(t => t.IsClosed).ToListAsync();
|
||||||
|
|
||||||
if (closedStateList.Count == 0)
|
if (closedStateList.Count == 0)
|
||||||
{
|
{
|
||||||
|
@ -37,7 +32,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.Id == subjectVisitId,
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisitId,
|
||||||
u => new SubjectVisit() { ChallengeState = subjectVisitChallengeState });
|
u => new SubjectVisit() { ChallengeState = subjectVisitChallengeState });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,18 +11,11 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SubjectStateTrigger : IAfterSaveTrigger<Subject>
|
public class SubjectStateTrigger(
|
||||||
|
IStringLocalizer _localizer,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository) : IAfterSaveTrigger<Subject>
|
||||||
{
|
{
|
||||||
public IStringLocalizer _localizer;
|
|
||||||
private readonly IRepository _repository;
|
|
||||||
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
|
||||||
|
|
||||||
public SubjectStateTrigger(IRepository<SubjectVisit> subjectVisitRepository, IStringLocalizer localizer, IRepository repository)
|
|
||||||
{
|
|
||||||
_repository = repository;
|
|
||||||
_localizer = localizer;
|
|
||||||
_subjectVisitRepository = subjectVisitRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task AfterSave(ITriggerContext<Subject> context, CancellationToken cancellationToken)
|
public async Task AfterSave(ITriggerContext<Subject> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
@ -39,7 +32,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
var trialSiteId = context.Entity.TrialSiteId;
|
var trialSiteId = context.Entity.TrialSiteId;
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,44 +12,14 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 处理 访视 末次评估 会影响Subject 状态
|
/// 处理 访视 末次评估 会影响Subject 状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SubjectVisitCheckPassedTrigger : IBeforeSaveTrigger<SubjectVisit>
|
public class SubjectVisitCheckPassedTrigger(
|
||||||
|
IVisitTaskHelpeService _visitTaskHelpeService,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
||||||
|
ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService,
|
||||||
|
IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository) : IBeforeSaveTrigger<SubjectVisit>
|
||||||
{
|
{
|
||||||
|
|
||||||
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
|
|
||||||
|
|
||||||
private readonly IRepository<Subject> _subjectRepository;
|
|
||||||
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
|
||||||
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
|
||||||
|
|
||||||
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
|
||||||
|
|
||||||
private readonly IRepository<SubjectCriteriaEvaluationVisitFilter> _SubjectCriteriaEvaluationVisitFilterRepository;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private readonly ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService;
|
|
||||||
|
|
||||||
private readonly IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository;
|
|
||||||
|
|
||||||
public SubjectVisitCheckPassedTrigger(IRepository<Subject> subjectRepository,
|
|
||||||
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
|
|
||||||
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
|
||||||
IVisitTaskHelpeService visitTaskHelpeService, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository,
|
|
||||||
IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, ISubjectCriteriaEvaluationService subjectCriteriaEvaluationService
|
|
||||||
, IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository)
|
|
||||||
{
|
|
||||||
_subjectCriteriaEvaluationRepository= subjectCriteriaEvaluationRepository;
|
|
||||||
_subjectRepository = subjectRepository;
|
|
||||||
_clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
|
||||||
_readingClinicalDataRepository = readingClinicalDataRepository;
|
|
||||||
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
|
||||||
_visitTaskHelpeService = visitTaskHelpeService;
|
|
||||||
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
|
||||||
_SubjectCriteriaEvaluationVisitFilterRepository = subjectCriteriaEvaluationVisitFilterRepository;
|
|
||||||
_subjectCriteriaEvaluationService = subjectCriteriaEvaluationService;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task BeforeSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
public async Task BeforeSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
@ -71,7 +41,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
context.Entity.IsPMBackOrReReading = false;
|
context.Entity.IsPMBackOrReReading = false;
|
||||||
|
|
||||||
//找到手动生成任务的标准
|
//找到手动生成任务的标准
|
||||||
var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId,t.IsReadingTaskViewInOrder }).ToListAsync();
|
var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId, t.IsReadingTaskViewInOrder }).ToListAsync();
|
||||||
|
|
||||||
foreach (var criterion in criterionList)
|
foreach (var criterion in criterionList)
|
||||||
{
|
{
|
||||||
|
@ -81,7 +51,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//如果参与评估,那么久对当前访视进行自动筛选
|
//如果参与评估,那么久对当前访视进行自动筛选
|
||||||
if( await _subjectCriteriaEvaluationRepository.AnyAsync(t=>t.SubjectId==subjectVisit.SubjectId && t.TrialReadingCriterionId==criterion.Id && t.IsJoinEvaluation))
|
if (await _subjectCriteriaEvaluationRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.TrialReadingCriterionId == criterion.Id && t.IsJoinEvaluation))
|
||||||
{
|
{
|
||||||
await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
|
await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
|
||||||
|
|
||||||
|
|
|
@ -12,38 +12,18 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 处理 访视 末次评估 会影响Subject 状态
|
/// 处理 访视 末次评估 会影响Subject 状态
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SubjectVisitFinalVisitTrigger :IAfterSaveTrigger<SubjectVisit>
|
public class SubjectVisitFinalVisitTrigger(
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<ReadModule> _readModuleRepository,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IVisitTaskHelpeService _ivisitTaskHelpeService,
|
||||||
|
IStringLocalizer _localizer,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository
|
||||||
|
) : IAfterSaveTrigger<SubjectVisit>
|
||||||
{
|
{
|
||||||
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
|
||||||
private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository;
|
|
||||||
private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository;
|
|
||||||
private readonly IRepository<ReadModule> _readModuleRepository;
|
|
||||||
private readonly IRepository<Subject> _subjectRepository;
|
|
||||||
private readonly IRepository<VisitTask> _visitTaskRepository;
|
|
||||||
private readonly IVisitTaskHelpeService _ivisitTaskHelpeService;
|
|
||||||
public IStringLocalizer _localizer;
|
|
||||||
private readonly IRepository _repository;
|
|
||||||
public SubjectVisitFinalVisitTrigger(IRepository<SubjectVisit> subjectVisitRepository,
|
|
||||||
|
|
||||||
IRepository<ReadingPeriodSet> readingPeriodSetRepository,
|
|
||||||
IRepository<ReadingPeriodPlan> readingPeriodPlanRepository,
|
|
||||||
IRepository<VisitTask> visitTaskRepository,
|
|
||||||
IVisitTaskHelpeService visitTaskHelpeService,
|
|
||||||
IRepository<ReadModule> readModuleRepository,
|
|
||||||
IRepository<Subject> subjectRepository,
|
|
||||||
IStringLocalizer localizer,
|
|
||||||
IRepository repository)
|
|
||||||
{
|
|
||||||
_subjectVisitRepository = subjectVisitRepository;
|
|
||||||
this._readingPeriodSetRepository = readingPeriodSetRepository;
|
|
||||||
this._visitTaskRepository = visitTaskRepository;
|
|
||||||
this._ivisitTaskHelpeService = visitTaskHelpeService;
|
|
||||||
this._readingPeriodPlanRepository = readingPeriodPlanRepository;
|
|
||||||
this._readModuleRepository = readModuleRepository;
|
|
||||||
_subjectRepository = subjectRepository;
|
|
||||||
_repository = repository;
|
|
||||||
_localizer = localizer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
@ -112,12 +92,12 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
// 是否全局阅片
|
// 是否全局阅片
|
||||||
|
|
||||||
|
|
||||||
var trial = await _repository.Where<Trial>(x => x.Id == trialId).FirstNotNullAsync();
|
var trial = await _trialRepository.Where(x => x.Id == trialId).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
if (!subjectVisit.IsBaseLine && subjectVisit.SubmitState == SubmitStateEnum.Submitted)
|
if (!subjectVisit.IsBaseLine && subjectVisit.SubmitState == SubmitStateEnum.Submitted)
|
||||||
{
|
{
|
||||||
var criterionList = await _repository.Where<ReadingQuestionCriterionTrial>(x => x.TrialId == trialId && x.ReadingInfoSignTime != null && x.IsConfirm && x.IsReadingPeriod && x.IsReadingTaskViewInOrder == ReadingOrder.InOrder).ToListAsync();
|
var criterionList = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialId && x.ReadingInfoSignTime != null && x.IsConfirm && x.IsReadingPeriod && x.IsReadingTaskViewInOrder == ReadingOrder.InOrder).ToListAsync();
|
||||||
foreach (var item in criterionList)
|
foreach (var item in criterionList)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -7,18 +7,14 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期
|
/// 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SubjectVisitTrigger : IAfterSaveTrigger<NoneDicomStudy>, IAfterSaveTrigger<DicomStudy>, IAfterSaveTrigger<NoneDicomStudyFile>
|
public class SubjectVisitTrigger(
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IClinicalAnswerService _iClinicalAnswerService,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository
|
||||||
|
) : IAfterSaveTrigger<NoneDicomStudy>, IAfterSaveTrigger<DicomStudy>, IAfterSaveTrigger<NoneDicomStudyFile>
|
||||||
{
|
{
|
||||||
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
|
||||||
private readonly IClinicalAnswerService _iClinicalAnswerService;
|
|
||||||
private readonly IRepository _repository;
|
|
||||||
|
|
||||||
public SubjectVisitTrigger(IRepository<SubjectVisit> subjectVisitRepository, IClinicalAnswerService iClinicalAnswerService,IRepository repository)
|
|
||||||
{
|
|
||||||
_subjectVisitRepository = subjectVisitRepository;
|
|
||||||
this._iClinicalAnswerService = iClinicalAnswerService;
|
|
||||||
_repository = repository;
|
|
||||||
}
|
|
||||||
|
|
||||||
//注意删除不能用扩展方法,必须用EF跟踪的实体 否则不能取到 SubjectVisitId
|
//注意删除不能用扩展方法,必须用EF跟踪的实体 否则不能取到 SubjectVisitId
|
||||||
public async Task AfterSave(ITriggerContext<NoneDicomStudy> context, CancellationToken cancellationToken)
|
public async Task AfterSave(ITriggerContext<NoneDicomStudy> context, CancellationToken cancellationToken)
|
||||||
|
@ -54,7 +50,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
|
|
||||||
var studyId = context.Entity.Id;
|
var studyId = context.Entity.Id;
|
||||||
//处理Modality
|
//处理Modality
|
||||||
var seriesModalityList = _repository.Where<DicomSeries>(t => t.StudyId == studyId).Select(u => u.Modality).Distinct();
|
var seriesModalityList = _dicomSeriesRepository.Where(t => t.StudyId == studyId).Select(u => u.Modality).Distinct();
|
||||||
string ModaliyStr = string.Join('、', seriesModalityList.ToList());
|
string ModaliyStr = string.Join('、', seriesModalityList.ToList());
|
||||||
|
|
||||||
|
|
||||||
|
@ -101,7 +97,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
|
|
||||||
public async Task AfterSave(ITriggerContext<NoneDicomStudyFile> context, CancellationToken cancellationToken)
|
public async Task AfterSave(ITriggerContext<NoneDicomStudyFile> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var subjectVisitId =await _repository.Where<NoneDicomStudy>(x=>x.Id== context.Entity.NoneDicomStudyId).Select(x=>x.SubjectVisitId).FirstOrDefaultAsync();
|
var subjectVisitId =await _noneDicomStudyRepository.Where(x=>x.Id== context.Entity.NoneDicomStudyId).Select(x=>x.SubjectVisitId).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (context.ChangeType == ChangeType.Deleted || context.ChangeType == ChangeType.Added)
|
if (context.ChangeType == ChangeType.Deleted || context.ChangeType == ChangeType.Added)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,14 +5,9 @@ using System.Linq.Dynamic.Core;
|
||||||
namespace IRaCIS.Core.Application.Triggers
|
namespace IRaCIS.Core.Application.Triggers
|
||||||
{
|
{
|
||||||
//病灶编号维护
|
//病灶编号维护
|
||||||
public class TableQuestionRowTrigger : IBeforeSaveTrigger<ReadingTableAnswerRowInfo>
|
public class TableQuestionRowTrigger(
|
||||||
|
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository) : IBeforeSaveTrigger<ReadingTableAnswerRowInfo>
|
||||||
{
|
{
|
||||||
private readonly IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository;
|
|
||||||
|
|
||||||
public TableQuestionRowTrigger(IRepository<ReadingQuestionTrial> readingQuestionTrialRepository, IRepository repository)
|
|
||||||
{
|
|
||||||
this._readingQuestionTrialRepository = readingQuestionTrialRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task BeforeSave(ITriggerContext<ReadingTableAnswerRowInfo> context, CancellationToken cancellationToken)
|
public async Task BeforeSave(ITriggerContext<ReadingTableAnswerRowInfo> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,20 +11,11 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
|
/// 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TrialCriterionSignTrigger : IBeforeSaveTrigger<ReadingQuestionCriterionTrial>
|
public class TrialCriterionSignTrigger(
|
||||||
{
|
IVisitTaskHelpeService _visitTaskHelpeService) : IBeforeSaveTrigger<ReadingQuestionCriterionTrial>
|
||||||
|
|
||||||
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
|
|
||||||
|
|
||||||
|
|
||||||
public TrialCriterionSignTrigger(
|
|
||||||
|
|
||||||
IVisitTaskHelpeService visitTaskHelpeService)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
_visitTaskHelpeService = visitTaskHelpeService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task BeforeSave(ITriggerContext<ReadingQuestionCriterionTrial> context, CancellationToken cancellationToken)
|
public async Task BeforeSave(ITriggerContext<ReadingQuestionCriterionTrial> context, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,16 +10,10 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Triggers
|
namespace IRaCIS.Core.Application.Triggers
|
||||||
{
|
{
|
||||||
public class UserLogTrigger : IBeforeSaveTrigger<UserLog>
|
public class UserLogTrigger(
|
||||||
|
ISearcher _searcher) : IBeforeSaveTrigger<UserLog>
|
||||||
{
|
{
|
||||||
public ISearcher _searcher;
|
|
||||||
|
|
||||||
public ILogger<UserLogTrigger> _logger;
|
|
||||||
public UserLogTrigger(ISearcher searcher,ILogger<UserLogTrigger> logger)
|
|
||||||
{
|
|
||||||
_searcher = searcher;
|
|
||||||
_logger= logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
//国家|区域|省份|城市|ISP 缺省的地域信息默认是0
|
//国家|区域|省份|城市|ISP 缺省的地域信息默认是0
|
||||||
//0|0|0|内网IP|内网IP
|
//0|0|0|内网IP|内网IP
|
||||||
|
|
|
@ -11,20 +11,12 @@ using System.Linq.Expressions;
|
||||||
namespace IRaCIS.Core.Application.Triggers
|
namespace IRaCIS.Core.Application.Triggers
|
||||||
{
|
{
|
||||||
|
|
||||||
public class VisitTaskIbeforeTrigger : IBeforeSaveTrigger<VisitTask>, IAfterSaveTrigger<VisitTask>
|
public class VisitTaskIbeforeTrigger(
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository) : IBeforeSaveTrigger<VisitTask>, IAfterSaveTrigger<VisitTask>
|
||||||
{
|
{
|
||||||
|
|
||||||
private readonly IRepository<VisitTask> _visitTaskRepository;
|
|
||||||
private readonly IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository;
|
|
||||||
|
|
||||||
public VisitTaskIbeforeTrigger(
|
|
||||||
|
|
||||||
IRepository<VisitTask> visitTaskRepository, IRepository<ReadingJudgeInfo> readingJudgeInfoRepository)
|
|
||||||
{
|
|
||||||
|
|
||||||
_visitTaskRepository = visitTaskRepository;
|
|
||||||
_readingJudgeInfoRepository = readingJudgeInfoRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
/// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
||||||
|
|
|
@ -12,34 +12,11 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
|
/// 维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class VisitTaskIsFrontTaskNeedSignButNotSignTrigger : IAfterSaveTrigger<VisitTask>
|
public class VisitTaskIsFrontTaskNeedSignButNotSignTrigger(
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository) : IAfterSaveTrigger<VisitTask>
|
||||||
{
|
{
|
||||||
|
|
||||||
private readonly IRepository<VisitTask> _visitTaskRepository;
|
|
||||||
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
|
||||||
|
|
||||||
private readonly IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository;
|
|
||||||
|
|
||||||
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
|
|
||||||
|
|
||||||
private readonly IRepository<SubjectAdditionalEvaluationResult> _subjectAdditionalEvaluationResultRepository;
|
|
||||||
private readonly IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository;
|
|
||||||
|
|
||||||
|
|
||||||
public VisitTaskIsFrontTaskNeedSignButNotSignTrigger(
|
|
||||||
|
|
||||||
IRepository<VisitTask> visitTaskRepository, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository
|
|
||||||
, IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository, IRepository<SubjectAdditionalEvaluationResult> subjectAdditionalEvaluationResultRepository, IRepository<ReadingJudgeInfo> readingJudgeInfoRepository)
|
|
||||||
{
|
|
||||||
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
|
||||||
|
|
||||||
_visitTaskRepository = visitTaskRepository;
|
|
||||||
_trialReadingQuestionRepository = trialReadingQuestionRepository;
|
|
||||||
|
|
||||||
_readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
|
|
||||||
_subjectAdditionalEvaluationResultRepository = subjectAdditionalEvaluationResultRepository;
|
|
||||||
_readingJudgeInfoRepository = readingJudgeInfoRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//添加任务的时候 如果需要签名 并且已经签名了 那么要维护该标准 该Subject IsFrontTaskNeedSignButNotSign字段
|
//添加任务的时候 如果需要签名 并且已经签名了 那么要维护该标准 该Subject IsFrontTaskNeedSignButNotSign字段
|
||||||
|
|
|
@ -53,5 +53,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public string HtmlPath { get; set; }=string.Empty;
|
public string HtmlPath { get; set; }=string.Empty;
|
||||||
|
|
||||||
|
public long? FileSize { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,5 +94,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public bool IsFromPACS { get; set; }
|
public bool IsFromPACS { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public int FailedFileCount { get; set; }
|
public int FailedFileCount { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public decimal FileSize { get; set; }
|
public long FileSize { get; set; }
|
||||||
|
|
||||||
public string IP { get; set; }
|
public string IP { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public string FileType { get; set; }
|
public string FileType { get; set; }
|
||||||
|
|
||||||
|
public decimal? FileSize { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -46,6 +46,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public bool Anonymize { get; set; }
|
public bool Anonymize { get; set; }
|
||||||
public string Path { get; set; } = string.Empty;
|
public string Path { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public long? FileSize { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,5 +52,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public string HtmlPath { get; set; }=string.Empty;
|
public string HtmlPath { get; set; }=string.Empty;
|
||||||
|
|
||||||
|
public long? FileSize { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ using Microsoft.Extensions.Localization;
|
||||||
namespace IRaCIS.Core.Infra.EFCore
|
namespace IRaCIS.Core.Infra.EFCore
|
||||||
{
|
{
|
||||||
|
|
||||||
#region 泛型通用版本
|
#region 泛型通用版本 非必要 禁止使用!!!
|
||||||
|
|
||||||
|
|
||||||
public interface IRepository
|
public interface IRepository
|
||||||
|
@ -68,9 +68,9 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
Task<bool> DeleteAsync<T>(T entity, bool autoSave = false) where T : Entity;
|
Task<bool> DeleteAsync<T>(T entity, bool autoSave = false) where T : Entity;
|
||||||
|
|
||||||
|
|
||||||
Task<bool> BatchDeleteAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity;
|
Task<bool> BatchDeleteNoTrackingAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity;
|
||||||
|
|
||||||
Task<bool> BatchUpdateAsync<T>(Expression<Func<T, bool>> where, Expression<Func<T, T>> updateFactory) where T : Entity;
|
Task<bool> BatchUpdateNoTrackingAsync<T>(Expression<Func<T, bool>> where, Expression<Func<T, T>> updateFactory) where T : Entity;
|
||||||
|
|
||||||
Task UpdatePartialFromQueryAsync<T>(Expression<Func<T, bool>> updateFilter,
|
Task UpdatePartialFromQueryAsync<T>(Expression<Func<T, bool>> updateFilter,
|
||||||
Expression<Func<T, T>> updateFactory,
|
Expression<Func<T, T>> updateFactory,
|
||||||
|
@ -407,12 +407,12 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public async Task<bool> BatchDeleteAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity
|
public async Task<bool> BatchDeleteNoTrackingAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity
|
||||||
{
|
{
|
||||||
return await _dbContext.BatchDeleteNoTrackingAsync(deleteFilter);
|
return await _dbContext.BatchDeleteNoTrackingAsync(deleteFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> BatchUpdateAsync<T>(Expression<Func<T, bool>> whereFilter, Expression<Func<T, T>> updateFactory) where T : Entity
|
public async Task<bool> BatchUpdateNoTrackingAsync<T>(Expression<Func<T, bool>> whereFilter, Expression<Func<T, T>> updateFactory) where T : Entity
|
||||||
{
|
{
|
||||||
|
|
||||||
return await _dbContext.BatchUpdateNoTrackingAsync(whereFilter, updateFactory, _userInfo.Id);
|
return await _dbContext.BatchUpdateNoTrackingAsync(whereFilter, updateFactory, _userInfo.Id);
|
||||||
|
|
|
@ -44,7 +44,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
_dbContext = dbContext;
|
_dbContext = dbContext;
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
_userInfo = userInfo;
|
_userInfo = userInfo;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using SharpCompress.Writers;
|
using SharpCompress.Writers;
|
||||||
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||||
{
|
{
|
||||||
|
@ -77,6 +79,37 @@ namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||||
|
|
||||||
return deserializedObj!;
|
return deserializedObj!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string DateTimeInternationalToString(DateTime? dateTime, string? clientZoneId=null)
|
||||||
|
{
|
||||||
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
|
if (dateTime.HasValue)
|
||||||
|
{
|
||||||
|
|
||||||
|
var needDealTime = dateTime.Value;
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(clientZoneId))
|
||||||
|
{
|
||||||
|
needDealTime = TimeZoneInfo.ConvertTime(needDealTime, TimeZoneInfo.Local, TimeZoneInfo.FindSystemTimeZoneById(clientZoneId));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEn_US)
|
||||||
|
{
|
||||||
|
//暂时保持一致,等需求确认,修改英文要展示的日期格式
|
||||||
|
return needDealTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return needDealTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue