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 IRepository _repository { get; set; }
|
||||
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
||||
|
@ -51,9 +50,6 @@ namespace IRaCIS.Core.SCP.Service
|
|||
[MemberNotNull(nameof(_userInfo))]
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_repository))]
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_localizer))]
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
||||
|
@ -75,8 +71,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
[MemberNotNull(nameof(_userInfo))]
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_repository))]
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
|
||||
[MemberNotNull(nameof(_localizer))]
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
@ -93,8 +88,6 @@ namespace IRaCIS.Core.SCP.Service
|
|||
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
||||
public static IResponseOutput Null404NotFound<TEntity>(TEntity? businessObject) where TEntity : class
|
||||
|
|
|
@ -301,7 +301,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
{
|
||||
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))
|
||||
{
|
||||
|
|
|
@ -12,6 +12,7 @@ using IRaCIS.Core.SCP.Service;
|
|||
using IRaCIS.Core.Infra.EFCore;
|
||||
using MassTransit;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using Serilog.Sinks.File;
|
||||
|
||||
namespace IRaCIS.Core.SCP.Service
|
||||
{
|
||||
|
@ -51,7 +52,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
/// <param name="dataset"></param>
|
||||
/// <returns></returns>
|
||||
/// <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 seriesInstanceUid = dataset.GetString(DicomTag.SeriesInstanceUID);
|
||||
|
@ -270,7 +271,10 @@ namespace IRaCIS.Core.SCP.Service
|
|||
WindowCenter = dataset.GetSingleValueOrDefault(DicomTag.WindowCenter, string.Empty),
|
||||
WindowWidth = dataset.GetSingleValueOrDefault(DicomTag.WindowWidth, string.Empty),
|
||||
|
||||
Path = fileRelativePath
|
||||
Path = fileRelativePath,
|
||||
|
||||
FileSize= fileSize,
|
||||
|
||||
};
|
||||
|
||||
++findStudy.InstanceCount;
|
||||
|
@ -300,7 +304,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
}
|
||||
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();
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
{
|
||||
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": {
|
||||
"RemoteNew": "Server=us-prod-mssql-service,1433;Database=US_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=us-prod-mssql-service,1433;Database=US_IRC_Hangfire;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=prod_mssql_standard,1433;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
|
||||
},
|
||||
|
||||
"BasicSystemConfig": {
|
||||
|
||||
"OpenUserComplexPassword": true,
|
||||
|
||||
"OpenSignDocumentBeforeWork": true,
|
||||
|
||||
"OpenTrialRelationDelete": true,
|
||||
|
||||
"OpenLoginLimit": true,
|
||||
"LoginMaxFailCount": 5,
|
||||
|
||||
"LoginFailLockMinutes": 30
|
||||
|
||||
},
|
||||
|
||||
"SystemEmailSendConfig": {
|
||||
"Port": 465,
|
||||
"Host": "smtp.qiye.aliyun.com",
|
||||
"FromEmail": "study@extimaging.com",
|
||||
"FromName": "研究单位阅片系统",
|
||||
"AuthorizationCode": "zhanying123",
|
||||
"SiteUrl": "https://study.extimaging.com/login"
|
||||
"DicomSCPServiceConfig": {
|
||||
"CalledAEList": [
|
||||
"STORESCP"
|
||||
],
|
||||
"ServerPort": 11112
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ using DocumentFormat.OpenXml.Spreadsheet;
|
|||
using AutoMapper.QueryableExtensions;
|
||||
using NetTopologySuite.Algorithm;
|
||||
using ZiggyCreatures.Caching.Fusion;
|
||||
using AlibabaCloud.SDK.Sts20150401;
|
||||
|
||||
namespace IRaCIS.Api.Controllers
|
||||
{
|
||||
|
@ -255,9 +256,9 @@ namespace IRaCIS.Api.Controllers
|
|||
// 验证阅片休息时间
|
||||
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")]
|
||||
public IResponseOutput GenerateSTS([FromServices] IOptionsMonitor<AliyunOSSOptions> options)
|
||||
|
@ -428,7 +467,7 @@ namespace IRaCIS.Api.Controllers
|
|||
|
||||
[HttpGet, Route("ip")]
|
||||
[AllowAnonymous]
|
||||
public IResponseOutput Get([FromServices] IHttpContextAccessor _context/*, [FromServices] IUserService _userService*/)
|
||||
public IResponseOutput Get([FromServices] IHttpContextAccessor _context)
|
||||
{
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
@ -449,7 +488,7 @@ namespace IRaCIS.Api.Controllers
|
|||
|
||||
[HttpGet, Route("ip2")]
|
||||
[AllowAnonymous]
|
||||
public IResponseOutput Get2([FromServices] IHttpContextAccessor _context, [FromServices] IRepository _userService)
|
||||
public IResponseOutput Get2([FromServices] IHttpContextAccessor _context)
|
||||
{
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
|
|
@ -19,18 +19,12 @@ namespace IRaCIS.Core.API.Controllers.Special
|
|||
//谨慎修改 涉及到财务模块
|
||||
|
||||
[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)]
|
||||
|
|
|
@ -26,78 +26,19 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
[ApiController, ApiExplorerSettings(GroupName = "Reviewer")]
|
||||
[UnitOfWork]
|
||||
public class InspectionController : ControllerBase
|
||||
public class InspectionController(
|
||||
ITrialDocumentService _trialDocumentService,
|
||||
IReadingImageTaskService _iReadingImageTaskService,
|
||||
ITrialConfigService _trialConfigService,
|
||||
IClinicalAnswerService _clinicalAnswerService,
|
||||
IReadingClinicalDataService _readingClinicalDataService,
|
||||
IQCOperationService _qCOperationService,
|
||||
IInspectionService _inspectionService,
|
||||
IReadingMedicalReviewService _readingMedicalReviewService,
|
||||
IReadingMedicineQuestionService _readingMedicineQuestionService
|
||||
) : ControllerBase
|
||||
{
|
||||
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,
|
||||
IHttpContextAccessor httpContext,
|
||||
IInspectionService sinspectionService,
|
||||
IReadingMedicalReviewService readingMedicalReviewService,
|
||||
IReadingMedicineQuestionService readingMedicineQuestionService,
|
||||
ITrialConfigService _trialConfigService,
|
||||
INoneDicomStudyService noneDicomStudyService,
|
||||
IClinicalAnswerService clinicalAnswerService,
|
||||
ISubjectService _subjectService,
|
||||
IReadingClinicalDataService _readingClinicalDataService,
|
||||
ISubjectVisitService subjectVisitService,
|
||||
IQCOperationService qCOperationService,
|
||||
IClinicalDataService clinicalDataService,
|
||||
IVisitPlanService visitPlanService
|
||||
)
|
||||
{
|
||||
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 获取稽查数据
|
||||
/// <summary>
|
||||
/// 获取稽查数据
|
||||
|
|
|
@ -228,36 +228,14 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
[ApiExplorerSettings(GroupName = "Image")]
|
||||
[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")]
|
||||
|
@ -390,7 +368,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
throw new BusinessValidationFailedException(_localizer["UploadDownLoad_RequestError"]);
|
||||
}
|
||||
|
||||
studyMonitor.FileSize = (decimal)HttpContext.Request.ContentLength;
|
||||
studyMonitor.FileSize = (long)HttpContext.Request.ContentLength;
|
||||
studyMonitor.FileCount = archiveResult.ReceivedFileCount;
|
||||
studyMonitor.FailedFileCount = archiveResult.ErrorFiles.Count;
|
||||
studyMonitor.IsDicomReUpload = archiveStudyCommand.AbandonStudyId != null;
|
||||
|
@ -467,12 +445,15 @@ namespace IRaCIS.Core.API.Controllers
|
|||
/// <param name="incommand"></param>
|
||||
/// <param name="_noneDicomStudyRepository"></param>
|
||||
/// <param name="_studyMonitorRepository"></param>
|
||||
/// <param name="_noneDicomStudyFileRepository"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
|
||||
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;
|
||||
|
@ -480,9 +461,9 @@ namespace IRaCIS.Core.API.Controllers
|
|||
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);
|
||||
|
||||
|
@ -490,7 +471,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
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;
|
||||
|
@ -509,7 +490,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
studyMonitor.IP = _userInfo.IP;
|
||||
studyMonitor.IsSuccess = true;
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _noneDicomStudyRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -523,12 +504,13 @@ namespace IRaCIS.Core.API.Controllers
|
|||
/// </summary>
|
||||
/// <param name="trialId"></param>
|
||||
/// <param name="oSSService"></param>
|
||||
/// <param name="_inspectionFileRepository"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||
[HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")]
|
||||
[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;
|
||||
|
@ -550,7 +532,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
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;
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AlibabaCloud.SDK.Sts20150401" Version="1.1.4" />
|
||||
<PackageReference Include="aliyun-net-sdk-sts" Version="3.1.2" />
|
||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.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
|
||||
diagnosticContext.Set("Host", request.Host);
|
||||
|
||||
diagnosticContext.Set("Protocol", request.Protocol);
|
||||
diagnosticContext.Set("Scheme", request.Scheme);
|
||||
|
||||
#region old 未用
|
||||
//这种获取的Ip不准 配置服务才行
|
||||
//diagnosticContext.Set("RequestIP", httpContext.Connection.RemoteIpAddress.ToString());
|
||||
|
||||
//这种方式可以,但是serilog提供了 就不用了
|
||||
//diagnosticContext.Set("TestIP", httpContext.GetUserIp());
|
||||
|
||||
diagnosticContext.Set("Protocol", request.Protocol);
|
||||
diagnosticContext.Set("Scheme", request.Scheme);
|
||||
|
||||
//这种方式不行 读取的body为空字符串 必须在中间件中读取
|
||||
//diagnosticContext.Set("RequestBody", await ReadRequestBody(httpContext.Request));
|
||||
//diagnosticContext.Set("RequestBody", RequestPayload);
|
||||
#endregion
|
||||
|
||||
// Only set it if available. You're not sending sensitive data in a querystring right?!
|
||||
if (request.QueryString.HasValue)
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.API
|
|||
{
|
||||
services.AddHttpContextAccessor();
|
||||
services.AddScoped<JSONTimeZoneConverter>();
|
||||
services.AddScoped<CustomStringConverter>();
|
||||
services.AddScoped<ObjectStorePathConvert>();
|
||||
services.AddScoped<IOSSService,OSSService>();
|
||||
|
||||
builder.AddNewtonsoftJson(options =>
|
||||
|
@ -31,11 +31,9 @@ namespace IRaCIS.Core.API
|
|||
|
||||
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<CustomStringConverter>());
|
||||
|
||||
|
||||
//IsoDateTimeConverter
|
||||
|
|
|
@ -9,15 +9,13 @@ using System.Text.RegularExpressions;
|
|||
|
||||
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||
{
|
||||
public class CustomStringConverter : JsonConverter<string>
|
||||
public class ObjectStorePathConvert : JsonConverter<string>
|
||||
{
|
||||
//private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
private readonly IOSSService _oSSService;
|
||||
|
||||
// 构造函数
|
||||
public CustomStringConverter(/*IHttpContextAccessor httpContextAccessor*/ IOSSService oSSService)
|
||||
public ObjectStorePathConvert( IOSSService oSSService)
|
||||
{
|
||||
//_httpContextAccessor = httpContextAccessor;
|
||||
_oSSService = oSSService;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,13 +31,13 @@ namespace IRaCIS.Core.API
|
|||
|
||||
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("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("request_path", httpContext.Request.Path));
|
||||
//logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("request_method", httpContext.Request.Method));
|
||||
|
|
|
@ -68,5 +68,10 @@
|
|||
"CompanyNameCN": "上海展影医疗科技有限公司",
|
||||
"CompanyShortName": "Extensive Imaging",
|
||||
"CompanyShortNameCN": "展影医疗"
|
||||
},
|
||||
"SystemPacsConfig": {
|
||||
"Port": "11113",
|
||||
"IP": "101.132.193.237"
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
||||
|
@ -52,8 +52,6 @@ namespace IRaCIS.Core.Application
|
|||
[MemberNotNull(nameof(_userInfo))]
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_repository))]
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_localizer))]
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
@ -79,9 +77,6 @@ namespace IRaCIS.Core.Application
|
|||
[MemberNotNull(nameof(_userInfo))]
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_repository))]
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
[MemberNotNull(nameof(_localizer))]
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
||||
|
@ -98,8 +93,6 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
public IUserInfo _userInfo { get; set; }
|
||||
|
||||
public IRepository _repository { get; set; }
|
||||
|
||||
public IStringLocalizer _localizer { get; set; }
|
||||
|
||||
public IFusionCache _fusionCache { get; set; }
|
||||
|
|
|
@ -69,8 +69,12 @@ namespace IRaCIS.Application.Services.BusinessFilter
|
|||
{
|
||||
var result = objectResult.Value as IResponseOutput;
|
||||
|
||||
//统一在这里记录国际化的日志信息
|
||||
_logger.LogWarning($"{result.LocalizedInfo}");
|
||||
if (!string.IsNullOrWhiteSpace(result.LocalizedInfo))
|
||||
{
|
||||
//统一在这里记录国际化的日志信息
|
||||
_logger.LogWarning($"{result.LocalizedInfo}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (statusCode != 200 && !(objectResult.Value is IResponseOutput))
|
||||
|
|
|
@ -42,9 +42,9 @@ namespace IRaCIS.Core.Application.Helper
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ using DocumentFormat.OpenXml.Spreadsheet;
|
|||
using DocumentFormat.OpenXml.Wordprocessing;
|
||||
using IRaCIS.Application.Contracts;
|
||||
using IRaCIS.Application.Interfaces;
|
||||
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
|
@ -14,6 +15,8 @@ using Newtonsoft.Json.Linq;
|
|||
using NPOI.HSSF.UserModel;
|
||||
using NPOI.XSSF.UserModel;
|
||||
using System.Collections;
|
||||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service;
|
||||
|
@ -23,19 +26,13 @@ public static class ExcelExportHelper
|
|||
//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)
|
||||
{
|
||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||
|
||||
//判断是否有字典翻译
|
||||
|
||||
object translateData = data;
|
||||
|
||||
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))
|
||||
.SelectMany(c =>
|
||||
|
@ -62,12 +59,18 @@ public static class ExcelExportHelper
|
|||
var newObjList = new List<object>();
|
||||
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();
|
||||
|
||||
//处理集合里面时间类型,根据当前语言将时间转变为字符串
|
||||
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)
|
||||
|
@ -79,7 +82,7 @@ public static class ExcelExportHelper
|
|||
{
|
||||
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();
|
||||
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -139,7 +143,7 @@ public static class ExcelExportHelper
|
|||
|
||||
if (sheetCount == 2)
|
||||
{
|
||||
if (data.IsEn_US)
|
||||
if (isEn_US)
|
||||
{
|
||||
workbook.RemoveSheetAt(0);
|
||||
}
|
||||
|
@ -149,7 +153,7 @@ public static class ExcelExportHelper
|
|||
}
|
||||
|
||||
var memoryStream2 = new MemoryStream();
|
||||
workbook.Write(memoryStream2,true);
|
||||
workbook.Write(memoryStream2, true);
|
||||
|
||||
memoryStream2.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
|
@ -160,14 +164,9 @@ public static class ExcelExportHelper
|
|||
//fileNmae = workbook.GetSheetName(0);
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#region MiniExcel
|
||||
|
||||
var memoryStream = new MemoryStream();
|
||||
var memoryStream = new MemoryStream();
|
||||
|
||||
var config = new OpenXmlConfiguration()
|
||||
{
|
||||
|
@ -181,29 +180,18 @@ public static class ExcelExportHelper
|
|||
|
||||
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
|
||||
|
||||
#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)
|
||||
{
|
||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||
//判断是否有字典翻译
|
||||
|
||||
object translateData = data;
|
||||
|
@ -211,11 +199,6 @@ public static class ExcelExportHelper
|
|||
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))
|
||||
.SelectMany(c =>
|
||||
|
@ -247,6 +230,15 @@ public static class ExcelExportHelper
|
|||
//var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
|
||||
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)
|
||||
{
|
||||
//翻译的属性依赖其他属性
|
||||
|
@ -256,7 +248,7 @@ public static class ExcelExportHelper
|
|||
{
|
||||
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();
|
||||
|
||||
|
||||
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 (data.IsEn_US)
|
||||
if (isEn_US)
|
||||
{
|
||||
workbook.RemoveSheetAt(0);
|
||||
}
|
||||
|
@ -320,7 +312,7 @@ public static class ExcelExportHelper
|
|||
}
|
||||
|
||||
var memoryStream2 = new MemoryStream();
|
||||
workbook.Write(memoryStream2,true);
|
||||
workbook.Write(memoryStream2, true);
|
||||
|
||||
memoryStream2.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
|
@ -355,4 +347,7 @@ public static class ExcelExportHelper
|
|||
#endregion
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -136,7 +136,7 @@ public static class FileStoreHelper
|
|||
{
|
||||
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)
|
||||
{
|
||||
//---数据库没有找到对应的数据模板文件,请联系系统运维人员。
|
||||
|
|
|
@ -21,6 +21,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
public class TaskAllocationRuleService(
|
||||
IRepository<TaskAllocationRule> _taskAllocationRuleRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<Enroll> _enrollRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||
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 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);
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -37,6 +37,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
IDistributedLockProvider _distributedLockProvider,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<TrialSite> _trialSiteRepository,
|
||||
IRepository<Enroll> _enrollRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<TrialVirtualSiteCodeUpdate> _trialVirtualSiteCodeUpdateRepository,
|
||||
IVisitTaskHelpeService _visitTaskCommonService) : BaseService, ITaskConsistentRuleService
|
||||
{
|
||||
|
@ -112,7 +114,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
#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);
|
||||
}
|
||||
|
@ -373,9 +375,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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))
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
|
||||
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))
|
||||
join user in _repository.Where<User>() 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 user in _userRepository.Where() on enroll.DoctorUserId equals user.Id
|
||||
join taskConsistentRule in _taskConsistentRuleRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.IsSelfAnalysis) on enroll.TrialId equals taskConsistentRule.TrialId
|
||||
select new TaskConsistentRuleView()
|
||||
{
|
||||
Id = taskConsistentRule.Id,
|
||||
|
|
|
@ -17,7 +17,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
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)
|
||||
.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});
|
||||
}
|
||||
|
|
|
@ -43,6 +43,16 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository,
|
||||
IRepository<SubjectCriteriaEvaluationVisitFilter> _subjectCriteriaEvaluationVisitFilterRepository,
|
||||
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
|
||||
{
|
||||
|
||||
|
@ -63,13 +73,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
TaskUrgentRemake = inDto.TaskUrgentRemake,
|
||||
|
||||
});
|
||||
|
||||
|
||||
return await _visitTaskRepository.SaveChangesAsync();
|
||||
}
|
||||
|
||||
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)
|
||||
.Select(t => new TrialReadingCriterionDto()
|
||||
|
@ -275,7 +285,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
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();
|
||||
|
||||
|
@ -1553,9 +1563,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
/// <returns></returns>
|
||||
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)
|
||||
{
|
||||
|
@ -2158,10 +2168,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
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)
|
||||
{
|
||||
|
@ -2169,21 +2179,21 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
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)
|
||||
{
|
||||
item.Id = Guid.Empty;
|
||||
item.VisitTaskId = newTask.Id;
|
||||
}
|
||||
_ = _repository.AddRangeAsync(readingTaskQuestionAnswerList).Result;
|
||||
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(readingTaskQuestionAnswerList).Result;
|
||||
|
||||
|
||||
|
||||
//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)
|
||||
{
|
||||
|
@ -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.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId);
|
||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.DicomSerie.IsDeleted);
|
||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.IsDeleted);
|
||||
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.DicomSerie.IsDeleted);
|
||||
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted);
|
||||
|
||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
|
@ -2870,7 +2880,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -29,7 +29,20 @@ namespace IRaCIS.Core.Application.Service.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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -174,8 +187,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
var exportInfo = data;
|
||||
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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
|
||||
)
|
||||
{
|
||||
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)
|
||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId)
|
||||
var trialDocQuery = from trialDocumentNeedConfirmedUserType in _trialDocNeedConfirmedUserTypeRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId)
|
||||
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.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
|
||||
from confirm in cc.DefaultIfEmpty()
|
||||
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)
|
||||
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()
|
||||
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();
|
||||
|
||||
exportInfo.List=list;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _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));
|
||||
|
@ -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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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 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(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
||||
.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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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)
|
||||
join trialReadingCriterion in _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId) on subject.TrialId equals trialReadingCriterion.TrialId
|
||||
var query = from subject in _subjectRepository.Where(u => u.TrialId == dto.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()
|
||||
{
|
||||
|
@ -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();
|
||||
|
||||
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.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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 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(!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)
|
||||
|
@ -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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
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();
|
||||
|
||||
|
@ -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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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 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(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||
.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 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(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression2)
|
||||
.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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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] 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)
|
||||
|
||||
.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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -1230,9 +1244,9 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
}
|
||||
//产生一致性分析的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) //一致性分析的结果 + 正常任务的结果 + 仅仅访视的结果 +去除基线
|
||||
|
||||
//.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();
|
||||
|
||||
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.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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] 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)
|
||||
{
|
||||
|
@ -1314,9 +1328,9 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
//产生组间一致性分析的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) //一致性分析的结果 + 正常任务的结果 +仅仅访视的结果
|
||||
|
||||
//.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();
|
||||
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.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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 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)
|
||||
{
|
||||
|
@ -1442,7 +1456,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -1632,7 +1646,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
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))
|
||||
|
@ -1665,8 +1679,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||
|
@ -1725,8 +1739,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
|
||||
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.TrialSiteId != null, t => t.Subject.TrialSiteId == queryVisitTask.TrialSiteId)
|
||||
|
@ -1814,8 +1828,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
//处理裁判标记
|
||||
list = DealJudgeMark(criterion.ArbitrationRule, list);
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId);
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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);
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId); ;
|
||||
exportInfo.IsEn_US = _userInfo.IsEn_Us;
|
||||
exportInfo.ClientZoneId = _userInfo.TimeZoneId;
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
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(
|
||||
IRepository<VerificationCode> _verificationCodeRepository,
|
||||
IRepository<SystemBasicData> _systemBasicDatarepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<TrialSite> _trialSiteRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<UserFeedBack> _userFeedBackRepository,
|
||||
ITokenService _tokenService,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<UserType> _userTypeRepository,
|
||||
IRepository<Doctor> _doctorTypeRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
|
||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IMailVerificationService
|
||||
|
@ -351,9 +356,9 @@ namespace IRaCIS.Application.Services
|
|||
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;
|
||||
|
@ -718,7 +723,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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();
|
||||
//发件地址
|
||||
|
@ -734,7 +739,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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();
|
||||
|
||||
|
||||
|
@ -749,10 +754,10 @@ namespace IRaCIS.Application.Services
|
|||
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 =>
|
||||
{
|
||||
|
@ -779,10 +784,10 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
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 =>
|
||||
{
|
||||
|
@ -810,10 +815,10 @@ namespace IRaCIS.Application.Services
|
|||
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 =>
|
||||
{
|
||||
|
|
|
@ -35,7 +35,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
[HttpGet("{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);
|
||||
|
||||
await _repository.AddRangeAsync(newAttachment);
|
||||
await _repository.SaveChangesAsync();
|
||||
await _attachmentrepository.AddRangeAsync(newAttachment);
|
||||
await _attachmentrepository.SaveChangesAsync();
|
||||
|
||||
//_doctorAttachmentRepository.AddRange(newAttachment);
|
||||
//_doctorAttachmentRepository.SaveChanges();
|
||||
|
@ -184,8 +184,8 @@ namespace IRaCIS.Application.Services
|
|||
attachment.IsOfficial = true;
|
||||
}
|
||||
|
||||
await _repository.AddAsync(newAttachment);
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
await _attachmentrepository.AddAsync(newAttachment);
|
||||
var success = await _attachmentrepository.SaveChangesAsync();
|
||||
return ResponseOutput.Result(success, attachment);
|
||||
}
|
||||
|
||||
|
@ -214,15 +214,14 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost("{doctorId:guid}/{attachmentId:guid}/{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)
|
||||
{
|
||||
if (item.Id == attachmentId) item.IsOfficial = true;
|
||||
else item.IsOfficial = false;
|
||||
await _repository.UpdateAsync(item);
|
||||
}
|
||||
|
||||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
||||
return ResponseOutput.Result(await _attachmentrepository.SaveChangesAsync());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -8,7 +8,11 @@ using Microsoft.AspNetCore.Mvc;
|
|||
namespace IRaCIS.Application.Services
|
||||
{
|
||||
[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)
|
||||
{
|
||||
//项目配置需要的医生过滤 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;
|
||||
// 临床项目经验 多选
|
||||
|
@ -97,7 +101,7 @@ namespace IRaCIS.Application.Services
|
|||
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();
|
||||
|
||||
result.CurrentPageData.ToList().ForEach(doctor =>
|
||||
|
@ -128,7 +132,7 @@ namespace IRaCIS.Application.Services
|
|||
ReviewerSubmissionQueryDTO inQuery)
|
||||
{
|
||||
|
||||
var doctorQuery = _repository.Where<Enroll>(x => x.TrialId == inQuery.TrialId)
|
||||
var doctorQuery = _enrollRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||
//提交CRO 以及下载简历列表
|
||||
.WhereIf(inQuery.IntoGroupSearchState == 1, t => t.EnrollStatus >= EnrollStatus.HasApplyDownloadResume)
|
||||
//CRO确认列表 状态为 已提交CRO
|
||||
|
@ -138,7 +142,7 @@ namespace IRaCIS.Application.Services
|
|||
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 以及下载简历列表
|
||||
.WhereIf(inQuery.IntoGroupSearchState == 1, t => t.EnrollStatus == EnrollStatus.HasCommittedToCRO)
|
||||
//CRO确认列表 状态为 已提交CRO
|
||||
|
@ -166,7 +170,7 @@ namespace IRaCIS.Application.Services
|
|||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM)
|
||||
{
|
||||
//SPM 要看到提交的时间 提交人
|
||||
var enrollCommitList = await _repository.Where<EnrollDetail>(x => x.TrialId == inQuery.TrialId)
|
||||
var enrollCommitList = await _enrollDetailRepository.Where(x => x.TrialId == inQuery.TrialId)
|
||||
//提交CRO 以及下载简历列表
|
||||
.WhereIf(inQuery.IntoGroupSearchState == 4, t => t.EnrollStatus == EnrollStatus.HasCommittedToCRO)
|
||||
.ProjectTo<DoctorStateModelDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
@ -195,7 +199,7 @@ namespace IRaCIS.Application.Services
|
|||
//public async Task<PageOutput<ConfirmationReviewerDTO>> GetSPMSubmissionOrApprovalReviewerList(
|
||||
// ReviewerSubmissionQueryDTO param)
|
||||
//{
|
||||
// var doctorQuery = _repository.Where<Enroll>(x => x.TrialId == param.TrialId)
|
||||
// var doctorQuery = _enrollRepository(x => x.TrialId == param.TrialId)
|
||||
// //提交CRO 以及下载简历列表
|
||||
// .WhereIf(param.IntoGroupSearchState == 1, t => t.EnrollStatus >= (int)EnrollStatus.HasApplyDownloadResume)
|
||||
// //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 enrollStateList = await _repository.Where<EnrollDetail>(x => x.TrialId == param.TrialId)
|
||||
// var enrollStateList = await _enrollDetailRepository.Where(x => x.TrialId == param.TrialId)
|
||||
// //提交CRO 以及下载简历列表
|
||||
// .WhereIf(param.IntoGroupSearchState == 1, t => t.EnrollStatus == (int)EnrollStatus.HasCommittedToCRO)
|
||||
// //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);
|
||||
|
||||
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();
|
||||
|
||||
|
||||
|
|
|
@ -11,10 +11,12 @@ namespace IRaCIS.Application.Services
|
|||
[ApiExplorerSettings(GroupName = "Reviewer")]
|
||||
public class DoctorService(
|
||||
IRepository<Doctor> _doctorRepository,
|
||||
IRepository<DoctorDictionary> _doctorDictionaryRepository,
|
||||
IRepository<Enroll> _enrollRepository,
|
||||
IRepository<Attachment> _attachmentRepository,
|
||||
IRepository<DoctorCriterionFile> _doctorCriterionFileRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<Vacation> _vacationRepository,
|
||||
IRepository<TrialPaymentPrice> _trialExtRepository
|
||||
) : BaseService, IDoctorService
|
||||
{
|
||||
|
@ -71,7 +73,7 @@ namespace IRaCIS.Application.Services
|
|||
//await _repository.AddAsync(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));
|
||||
|
||||
}
|
||||
|
@ -95,18 +97,18 @@ namespace IRaCIS.Application.Services
|
|||
var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException();
|
||||
|
||||
//删除中间表 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>();
|
||||
//重新插入新的 Title记录
|
||||
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);
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _doctorDictionaryRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success, basicInfoModel);
|
||||
|
||||
|
@ -295,7 +297,7 @@ namespace IRaCIS.Application.Services
|
|||
#endregion
|
||||
|
||||
|
||||
var entity = await _repository.InsertOrUpdateAsync<Doctor, EmploymentCommand>(doctorWorkInfoModel, true);
|
||||
var entity = await _doctorRepository.InsertOrUpdateAsync(doctorWorkInfoModel, true);
|
||||
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
@ -364,7 +366,7 @@ namespace IRaCIS.Application.Services
|
|||
//_doctorDictionaryRepository.Delete(t =>
|
||||
// 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));
|
||||
|
||||
|
||||
|
@ -388,11 +390,11 @@ namespace IRaCIS.Application.Services
|
|||
DictionaryId = subspecialityId
|
||||
}));
|
||||
|
||||
await _repository.AddRangeAsync(adddata);
|
||||
await _doctorDictionaryRepository.AddRangeAsync(adddata);
|
||||
|
||||
_mapper.Map(specialtyUpdateModel, doctor);
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _doctorDictionaryRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Result(success);
|
||||
|
||||
|
||||
|
@ -518,7 +520,7 @@ namespace IRaCIS.Application.Services
|
|||
var doctor = (await _doctorRepository
|
||||
.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;
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace IRaCIS.Application.Services
|
|||
break;
|
||||
}
|
||||
await _educationRepository.AddAsync(doctorEducationInfo);
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _educationRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success, doctorEducationInfo.Id.ToString());
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
_mapper.Map(educationInfoViewModel, needUpdate);
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _educationRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok(success);
|
||||
|
||||
|
@ -114,7 +114,7 @@ namespace IRaCIS.Application.Services
|
|||
//}
|
||||
#endregion
|
||||
|
||||
var entity = await _repository.InsertOrUpdateAsync<Postgraduate, PostgraduateCommand>(postgraduateViewModel, true);
|
||||
var entity = await _postgraduateRepository.InsertOrUpdateAsync(postgraduateViewModel, true);
|
||||
return ResponseOutput.Ok(entity.Id);
|
||||
}
|
||||
/// <summary>
|
||||
|
@ -126,7 +126,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpDelete("{doctorId:guid}")]
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||
namespace IRaCIS.Application.Services
|
||||
{
|
||||
[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}")]
|
||||
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();
|
||||
|
||||
return doctorScientificResearchInfo!;
|
||||
|
@ -28,7 +28,7 @@ namespace IRaCIS.Application.Services
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace IRaCIS.Application.Services
|
|||
public class TrialExperienceService(
|
||||
IRepository<TrialExperience> _trialExperienceRepository,
|
||||
IRepository<Doctor> _doctorRepository,
|
||||
IRepository<TrialExperienceCriteria> _trialExperienceCriteriaRepository,
|
||||
IRepository<Attachment> _attachmentRepository
|
||||
) : BaseService, ITrialExperienceService
|
||||
{
|
||||
|
@ -67,7 +68,7 @@ namespace IRaCIS.Application.Services
|
|||
var trialExperience =
|
||||
_mapper.Map<TrialExperience>(trialExperienceViewModel);
|
||||
|
||||
trialExperience = await _repository.AddAsync(trialExperience);
|
||||
trialExperience = await _trialExperienceRepository.AddAsync(trialExperience);
|
||||
|
||||
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
||||
trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria()
|
||||
|
@ -78,22 +79,20 @@ namespace IRaCIS.Application.Services
|
|||
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);
|
||||
}
|
||||
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 _repository.UpdateAsync(needUpdate);
|
||||
await _trialExperienceRepository.UpdateFromDTOAsync(trialExperienceViewModel);
|
||||
|
||||
await _repository.BatchDeleteAsync<TrialExperienceCriteria>(t => t.TrialExperienceId == needUpdate.Id);
|
||||
await _trialExperienceCriteriaRepository.BatchDeleteNoTrackingAsync(t => t.TrialExperienceId == needUpdate.Id);
|
||||
|
||||
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
||||
|
||||
|
@ -101,13 +100,13 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
DoctorId = trialExperienceViewModel.DoctorId,
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -119,7 +118,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpDelete, Route("{doctorId:guid}")]
|
||||
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);
|
||||
}
|
||||
/// <summary>
|
||||
|
@ -133,7 +132,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
//_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,
|
||||
GCPId = (updateGCPExperienceParam.GCP==0||updateGCPExperienceParam.GCPId==null)?Guid.Empty: updateGCPExperienceParam.GCPId!.Value
|
||||
|
@ -141,7 +140,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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());
|
||||
|
@ -155,7 +154,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
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,
|
||||
OtherClinicalExperienceCN = updateOtherClinicalExperience.OtherClinicalExperienceCN ?? string.Empty
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
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);
|
||||
|
||||
|
|
|
@ -37,6 +37,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
public class EmailSendService(
|
||||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||
IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig) : BaseService, IEmailSendService
|
||||
{
|
||||
|
||||
|
@ -66,7 +69,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
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.Trial.ResearchProgramNo,
|
||||
|
@ -124,10 +127,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
public async Task SendTrialImageQCTaskEmailAsync(Guid trialId)
|
||||
{
|
||||
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
|
||||
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();
|
||||
|
@ -177,10 +180,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
public async Task SendTrialQCQuestionEmailAsync(Guid trialId)
|
||||
{
|
||||
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
|
||||
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 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
|
||||
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 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))
|
||||
|
@ -332,7 +335,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
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();
|
||||
}
|
||||
|
@ -346,7 +349,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class SystemDocumentService(
|
||||
IRepository<SystemDocument> _systemDocumentRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository) : BaseService, ISystemDocumentService
|
||||
{
|
||||
|
||||
|
@ -124,7 +125,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
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"]);
|
||||
|
@ -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))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
||||
.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()
|
||||
|
||||
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()
|
||||
{
|
||||
|
|
|
@ -25,7 +25,11 @@ namespace IRaCIS.Core.Application.Services
|
|||
IRepository<Trial> _trialRepository,
|
||||
ISystemDocumentService _systemDocumentService,
|
||||
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
||||
IRepository<TrialDocNeedConfirmedUserType> _trialDocNeedConfirmedUserTypeRepository,
|
||||
IRepository<SystemDocument> _systemDocumentRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository) : BaseService, ITrialDocumentService
|
||||
{
|
||||
|
||||
|
@ -58,8 +62,8 @@ namespace IRaCIS.Core.Application.Services
|
|||
.WhereIf(inQuery.TrialId != null, t => t.TrialId == inQuery.TrialId)
|
||||
.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 confirm in _repository.Where<TrialDocConfirmedUser>() on
|
||||
join trialUser in _trialUserRepository.Where(t => t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
||||
join confirm in _trialDocConfirmedUserRepository.Where() on
|
||||
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||
|
||||
from confirm in cc.DefaultIfEmpty()
|
||||
|
@ -217,17 +221,17 @@ namespace IRaCIS.Core.Application.Services
|
|||
|
||||
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))
|
||||
.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)))
|
||||
|
||||
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
|
||||
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()
|
||||
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.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 confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
||||
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
|
||||
from confirm in cc.DefaultIfEmpty()
|
||||
select new UnionDocumentWithConfirmInfoView()
|
||||
|
@ -389,15 +393,15 @@ namespace IRaCIS.Core.Application.Services
|
|||
|
||||
#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)
|
||||
join trialUser in _repository.Where<TrialUser>(t => t.TrialId == inQuery.TrialId)
|
||||
var trialDocQuery = from trialDocumentNeedConfirmedUserType in _trialDocNeedConfirmedUserTypeRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId)
|
||||
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.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
|
||||
from confirm in cc.DefaultIfEmpty()
|
||||
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)
|
||||
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()
|
||||
select new UnionDocumentWithConfirmInfoView()
|
||||
{
|
||||
|
@ -494,7 +498,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
[HttpGet("{trialId:guid}")]
|
||||
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 })
|
||||
.ToListAsync();
|
||||
}
|
||||
|
@ -618,7 +622,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
{
|
||||
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))
|
||||
{
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -646,11 +650,11 @@ namespace IRaCIS.Core.Application.Services
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
@ -661,10 +665,10 @@ namespace IRaCIS.Core.Application.Services
|
|||
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);
|
||||
}
|
||||
|
@ -776,7 +780,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
[Obsolete]
|
||||
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()
|
||||
{
|
||||
UserId = t.UserId,
|
||||
|
@ -805,8 +809,8 @@ namespace IRaCIS.Core.Application.Services
|
|||
[Obsolete]
|
||||
public async Task<PageOutput<DocumentUnionWithUserStatView>> GetTrialSystemDocumentList(DocumentTrialUnionQuery inQuery)
|
||||
{
|
||||
var systemDocumentQueryable = _repository
|
||||
.WhereIf<SystemDocument>(!_userInfo.IsAdmin, t => t.IsDeleted == false)
|
||||
var systemDocumentQueryable = _systemDocumentRepository
|
||||
.WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false)
|
||||
.Select(t => new DocumentUnionWithUserStatView()
|
||||
{
|
||||
Id = t.Id,
|
||||
|
|
|
@ -40,10 +40,16 @@ namespace IRaCIS.Core.Application.Service
|
|||
IRepository<EmailNoticeConfig> _emailNoticeConfigRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||||
IRepository<ReadingGlobalTaskInfo> _readingGlobalTaskInfoRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IRepository<TrialEmailNoticeUser> _trialEmailNoticeUserRepository,
|
||||
IRepository<Subject> _subjectRepository,
|
||||
IRepository<ReadModule> _readModuleRepository,
|
||||
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||
IEmailSendService _emailSendService) : BaseService, ITrialEmailNoticeConfigService
|
||||
{
|
||||
|
||||
|
@ -308,7 +314,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//入组确认 根据每个标准配置的是否自动发送,发送邮件与否
|
||||
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))
|
||||
{
|
||||
answer = "是";
|
||||
|
@ -335,7 +341,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
if (answer == "是")
|
||||
{
|
||||
//把另外一个人的任务设置为不加急(如果项目加急是否 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)
|
||||
{
|
||||
|
@ -487,7 +493,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
// 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;
|
||||
// }
|
||||
|
@ -856,7 +862,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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();
|
||||
|
||||
// 项目双重
|
||||
|
@ -902,7 +908,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//仲裁在阅片期上
|
||||
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();
|
||||
|
||||
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();
|
||||
// if (existReadModule != null)
|
||||
// {
|
||||
|
@ -1071,20 +1077,20 @@ namespace IRaCIS.Core.Application.Service
|
|||
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;
|
||||
}
|
||||
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;
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -1093,7 +1099,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//{
|
||||
// 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;
|
||||
|
@ -1119,14 +1125,14 @@ namespace IRaCIS.Core.Application.Service
|
|||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -1134,7 +1140,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//{
|
||||
// //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;
|
||||
//}
|
||||
|
@ -1278,7 +1284,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
}).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);
|
||||
|
@ -1374,8 +1380,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
var id = (Guid)addOrEditTrialEmailNoticeConfig.Id;
|
||||
|
||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||
await _repository.BatchDeleteAsync<TrialEmailBlackUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||
await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||
await _trialEmailBlackUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||
|
||||
|
||||
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 });
|
||||
|
||||
}
|
||||
await _repository.AddRangeAsync(trialEmailNoticeUsers);
|
||||
await _trialEmailNoticeUserRepository.AddRangeAsync(trialEmailNoticeUsers);
|
||||
|
||||
foreach (var userid in addOrEditTrialEmailNoticeConfig.BlackUserIdList)
|
||||
{
|
||||
|
@ -1459,7 +1465,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
#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))
|
||||
// .Select(t => new { t.User.EMail, t.User.FullName }).ToListAsync();
|
||||
|
||||
|
|
|
@ -184,7 +184,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[NotDefault]
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
public decimal FileSize { get; set; }
|
||||
public long FileSize { get; set; }
|
||||
|
||||
public bool IsDicomReUpload { get; set; }
|
||||
|
||||
|
@ -206,7 +206,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
|
||||
public decimal FileSize { get; set; }
|
||||
public long FileSize { 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 HtmlPath { get; set; } = string.Empty;
|
||||
|
||||
public decimal FileFize { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
IRepository<DicomSeries> _seriesRepository,
|
||||
IRepository<DicomInstance> _instanceRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<SystemAnonymization> _systemAnonymizationRepository,
|
||||
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 ircFiledList = anonymizeList.Where(t => t.IsFixed == false).ToList();
|
||||
|
|
|
@ -36,7 +36,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IOSSService _oSSService,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||
IRepository<TaskStudy> _taskStudyRepository,
|
||||
IRepository<TaskSeries> _taskSeriesRepository,
|
||||
IRepository<TaskInstance> _taskInstanceRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService
|
||||
{
|
||||
|
||||
|
@ -99,7 +105,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
{
|
||||
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)
|
||||
.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]}";
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -237,7 +243,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
{
|
||||
#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,
|
||||
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
||||
|
@ -286,7 +292,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
using (await @lock.AcquireAsync())
|
||||
{
|
||||
//查询数据库获取最大的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));
|
||||
|
@ -313,7 +319,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
SpecialArchiveStudyDeal(study);
|
||||
modalitys = study.Modalities;
|
||||
|
||||
await _repository.AddAsync(study);
|
||||
await _taskStudyRepository.AddAsync(study);
|
||||
|
||||
|
||||
studyMonitor.StudyId = study.Id;
|
||||
|
@ -335,7 +341,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
||||
series.InstanceCount = seriesItem.InstanceList.Count;
|
||||
|
||||
await _repository.AddAsync(series);
|
||||
await _taskSeriesRepository.AddAsync(series);
|
||||
|
||||
foreach (var instanceItem in seriesItem.InstanceList)
|
||||
{
|
||||
|
@ -352,7 +358,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
||||
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 study = await _repository.FirstOrDefaultAsync<TaskStudy>(t => t.Id == studyId);
|
||||
var study = await _taskStudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
|
||||
|
||||
//重传的时候也要赋值检查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());
|
||||
|
||||
TaskSeries dicomSeries = await _repository.FirstOrDefaultAsync<TaskSeries>(t => t.Id == seriesId);
|
||||
TaskSeries dicomSeries = await _taskSeriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId);
|
||||
|
||||
//判断重复
|
||||
if (dicomSeries == null)
|
||||
|
@ -400,7 +406,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
//series.SubjectVisitId = incommand.SubjectVisitId;
|
||||
|
||||
|
||||
dicomSeries = await _repository.AddAsync(series);
|
||||
dicomSeries = await _taskSeriesRepository.AddAsync(series);
|
||||
|
||||
//新的序列 那么 检查的序列数量+1
|
||||
study.SeriesCount += 1;
|
||||
|
@ -422,7 +428,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
insntance.SubjectId = incommand.SubjectId;
|
||||
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())
|
||||
{
|
||||
await _repository.SaveChangesAsync();
|
||||
await _taskStudyRepository.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -465,9 +471,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
public async Task<IResponseOutput> DeleteTaskStudy(Guid visitTaskId)
|
||||
{
|
||||
|
||||
await _repository.BatchDeleteAsync<TaskStudy>(t => t.VisitTaskId == visitTaskId);
|
||||
await _repository.BatchDeleteAsync<TaskSeries>(t => t.VisitTaskId == visitTaskId);
|
||||
await _repository.BatchDeleteAsync<TaskInstance>(t => t.VisitTaskId == visitTaskId);
|
||||
await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||
await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||
await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||
|
||||
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();
|
||||
|
||||
|
@ -542,7 +548,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -19,7 +19,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public class NoneDicomStudyService(
|
||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IDistributedLockProvider _distributedLockProvider,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
QCCommon _qCCommon) : BaseService, INoneDicomStudyService
|
||||
{
|
||||
|
||||
|
@ -42,11 +44,11 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
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同意的时候 是可以删除的 | 普通提交后也不能删除
|
||||
|
||||
|
||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||
|
||||
await _noneDicomStudyRepository.DeleteFromQueryAsync(noneDicomStudyId);
|
||||
|
||||
|
@ -112,7 +114,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId, Guid subjectVisitId)
|
||||
{
|
||||
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||
|
||||
var noneDicomStudyFile = await _noneDicomStudyFileRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyFileId);
|
||||
|
||||
|
@ -141,7 +143,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpGet("{subjectVisitId:guid}")]
|
||||
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();
|
||||
}
|
||||
|
|
@ -14,7 +14,6 @@ using Microsoft.AspNetCore.Http;
|
|||
using Newtonsoft.Json;
|
||||
using System.Threading;
|
||||
using Medallion.Threading;
|
||||
using System.Reactive.Subjects;
|
||||
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
||||
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
||||
using ZiggyCreatures.Caching.Fusion;
|
||||
|
@ -28,7 +27,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||
IRepository<DicomStudy> _dicomstudyRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<DicomStudy> _dicomStudyRepository,
|
||||
IRepository<Subject> _subjectRepository,
|
||||
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||
IRepository<SystemAnonymization> _systemAnonymizationRepository,
|
||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IStudyService
|
||||
{
|
||||
|
||||
|
@ -345,7 +350,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
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(!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)
|
||||
|
@ -394,7 +399,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
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(!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)
|
||||
|
@ -456,7 +461,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
public async Task<PageOutput<UnionStudyMonitorModel>> GetDicomAndNoneDicomStudyMonitorList(StudyQuery inQuery)
|
||||
{
|
||||
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(!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)
|
||||
|
@ -576,9 +581,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
// };
|
||||
#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();
|
||||
|
||||
var list = query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList();
|
||||
|
@ -593,7 +598,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
[AllowAnonymous]
|
||||
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)
|
||||
{
|
||||
|
||||
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,
|
||||
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
||||
|
@ -632,7 +637,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -641,7 +646,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
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;
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -724,11 +729,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
[HttpPost]
|
||||
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 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 =>
|
||||
|
@ -768,7 +773,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
// 写入dicom 固定的信息,以及组织路径的信息 以及匿名化的信息
|
||||
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
|
||||
{
|
||||
|
@ -782,9 +787,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
private VerifyStudyUploadResult VerifyStudyUpload(string studyInstanceUid, Guid trialId, Guid currentSubjectVisitId, Guid SubjectId)
|
||||
{
|
||||
|
||||
var cacheUserId = _fusionCache.TryGet<Guid>(CacheKeys.TrialStudyUidUploading(trialId, studyInstanceUid));
|
||||
|
||||
var result = new VerifyStudyUploadResult();
|
||||
|
||||
if (_fusionCache.GetOrDefault<Guid>(CacheKeys.TrialStudyUidUploading(trialId, studyInstanceUid)) != _userInfo.Id)
|
||||
if (cacheUserId.GetValueOrDefault() != _userInfo.Id && cacheUserId.HasValue)
|
||||
{
|
||||
|
||||
result.AllowUpload = false;
|
||||
|
@ -797,7 +804,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
@ -830,7 +837,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
{
|
||||
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();
|
||||
}
|
||||
//不是同一个受试者
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// SystemAnonymizationService
|
||||
/// </summary>
|
||||
[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)
|
||||
{
|
||||
|
||||
var systemAnonymizationQueryable = systemAnonymizationRepository
|
||||
var systemAnonymizationQueryable = _systemAnonymizationRepository
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Group), t => t.Group.Contains(inQuery.Group))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Element), t => t.Element.Contains(inQuery.Element))
|
||||
.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)
|
||||
{
|
||||
|
||||
var entity = await _repository.InsertOrUpdateAsync<SystemAnonymization, SystemAnonymizationAddOrEdit>(addOrEditSystemAnonymization, true);
|
||||
var entity = await _systemAnonymizationRepository.InsertOrUpdateAsync(addOrEditSystemAnonymization, true);
|
||||
|
||||
|
||||
return ResponseOutput.Ok(entity.Id.ToString());
|
||||
|
@ -47,7 +47,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
[HttpDelete("{systemAnonymizationId:guid}")]
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -33,7 +33,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
IRepository<QCChallenge> _qCChallengeRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<CheckChallengeDialog> _checkChallengeDialogRepository) : BaseService, IFrontAuditConfigService
|
||||
IRepository<User> _userRepository,
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -942,8 +944,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
[HttpGet]
|
||||
public async Task<List<FrontAuditConfigDTO>> GetAuditConfigChildList(Guid frontAuditConfigId)
|
||||
{
|
||||
//var list = await (from data in _repository.GetQueryable<FrontAuditConfig>().Where(x => x.Id == frontAuditConfigId)
|
||||
// join childrenType in _repository.GetQueryable<FrontAuditConfig>() on data.Id equals childrenType.ParentId
|
||||
//var list = await (from data in _frontAuditConfigRepository.Where().Where(x => x.Id == frontAuditConfigId)
|
||||
// join childrenType in _frontAuditConfigRepository.Where() on data.Id equals childrenType.ParentId
|
||||
// select childrenType).OrderBy(x => x.Sort).ToListAsync();
|
||||
//return list;
|
||||
|
||||
|
@ -992,7 +994,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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(),
|
||||
TableConfigJsonStr = lst.Select(x => x.TableConfigJsonStr).FirstOrDefault(),
|
||||
|
@ -1063,9 +1066,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
});
|
||||
|
||||
|
||||
await _repository.UpdateRange(neewupdate);
|
||||
await _repository.AddRangeAsync(list);
|
||||
await _repository.SaveChangesAsync();
|
||||
await _frontAuditConfigRepository.AddRangeAsync(list);
|
||||
await _frontAuditConfigRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -1092,14 +1094,14 @@ namespace IRaCIS.Core.Application.Service
|
|||
[HttpPost]
|
||||
public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
|
||||
{
|
||||
var query = from data in _repository.GetQueryable<FrontAuditConfig>()
|
||||
join childrenType in _repository.GetQueryable<Dictionary>() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
|
||||
var query = from data in _frontAuditConfigRepository.Where()
|
||||
join childrenType in _dictionaryRepository.Where() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
|
||||
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()
|
||||
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()
|
||||
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()
|
||||
select new FrontAuditConfigView()
|
||||
{
|
||||
|
@ -1235,7 +1237,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//---存在子类 不能删除
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,15 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
|||
[NonDynamicWebApi]
|
||||
public class InspectionService(
|
||||
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
|
||||
{
|
||||
|
||||
|
@ -23,66 +32,66 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
|||
{
|
||||
//_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;
|
||||
|
||||
#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))
|
||||
|
||||
|
||||
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()
|
||||
|
||||
|
||||
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()
|
||||
|
||||
|
||||
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()
|
||||
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()
|
||||
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()
|
||||
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()
|
||||
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()
|
||||
|
||||
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()
|
||||
|
||||
//join trialCriterion in _repository.GetQueryable<ReadingQuestionCriterionTrial>().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion
|
||||
//from leftCriterion in criterion.DefaultIfEmpty()
|
||||
|
||||
//join moduleTyped in _repository.GetQueryable<Dictionary>().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 moduleTyped in _dictionaryRepository.Where().Where(x => x.Code == "ModuleType") on 1 equals 1
|
||||
//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 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 childrenTyped in _dictionaryRepository.Where().Where(x => x.Code == "ChildrenType") on 1 equals 1
|
||||
//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()
|
||||
|
||||
//join ObjectTyped in _repository.GetQueryable<Dictionary>().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 ObjectTyped in _dictionaryRepository.Where().Where(x => x.Code == "ObjectType") on 1 equals 1
|
||||
//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()
|
||||
|
||||
//join OptTyped in _repository.GetQueryable<Dictionary>().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 OptTyped in _dictionaryRepository.Where().Where(x => x.Code == "OptType") on 1 equals 1
|
||||
//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()
|
||||
|
||||
|
||||
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()
|
||||
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()
|
||||
equals
|
||||
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()
|
||||
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()
|
||||
|
||||
select new GetDataInspectionOutDto()
|
||||
|
@ -242,7 +251,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
|||
{
|
||||
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> ///
|
||||
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)
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["User_CheckNameOrPw"]);
|
||||
|
@ -268,9 +277,9 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
|||
/// <summary> 添加签名记录 </summary> ///
|
||||
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;
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ namespace IRaCIS.Application.Services
|
|||
IRepository<Site> _siteRepository,
|
||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||
IDistributedLockProvider _distributedLockProvider,
|
||||
IRepository<TrialSite> _trialSiteRepository,
|
||||
IRepository<Hospital> _hospitalRepository) : BaseService, ISiteService
|
||||
{
|
||||
|
||||
|
@ -46,7 +47,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
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.TrialCode), t => t.Trial.TrialCode.Contains(inQuery.TrialCode))
|
||||
.Select(t => new TrialSiteAddView()
|
||||
|
@ -100,7 +101,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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());
|
||||
|
|
|
@ -7,7 +7,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
[ApiExplorerSettings(GroupName = "Management")]
|
||||
public class MenuService(
|
||||
IRepository<Menu> menuRepository,
|
||||
IRepository<Menu> _menuRepository,
|
||||
IRepository<UserTypeMenu> _userTypeMenuRepository) : BaseService, IMenuService
|
||||
{
|
||||
|
||||
|
@ -26,7 +26,7 @@ namespace IRaCIS.Application.Services
|
|||
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());
|
||||
|
||||
|
@ -85,13 +85,13 @@ namespace IRaCIS.Application.Services
|
|||
[HttpDelete("{menuId:guid}")]
|
||||
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"]);
|
||||
}
|
||||
|
||||
var success =await menuRepository.BatchDeleteNoTrackingAsync(u => u.Id == menuId);
|
||||
var success =await _menuRepository.BatchDeleteNoTrackingAsync(u => u.Id == menuId);
|
||||
|
||||
return ResponseOutput.Result(success);
|
||||
}
|
||||
|
@ -104,7 +104,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpGet]
|
||||
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,
|
||||
(root, child) => child.ParentId == root.MenuId,
|
||||
|
@ -125,7 +125,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
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.IsEnable != null, t => t.IsEnable == menuQueyDTO.IsEnable)
|
||||
.WhereIf(menuQueyDTO.IsCache != null, t => t.IsCache == menuQueyDTO.IsCache)
|
||||
|
@ -146,7 +146,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpGet("{userTypeId:guid}")]
|
||||
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();
|
||||
|
||||
|
||||
|
@ -189,7 +189,7 @@ namespace IRaCIS.Application.Services
|
|||
.Where(t => t.UserTypeId == _userInfo.UserTypeId && t.Menu.MenuType == "F")
|
||||
.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);
|
||||
|
|
|
@ -19,7 +19,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// UserFeedBackService
|
||||
/// </summary>
|
||||
[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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
@ -86,7 +89,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -96,7 +99,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -32,6 +32,7 @@ namespace IRaCIS.Application.Services
|
|||
IRepository<UserPassWordLog> _userPassWordLogRepository,
|
||||
IDistributedLockProvider _distributedLockProvider,
|
||||
IEasyCachingProvider _cache,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
||||
|
||||
|
@ -814,7 +815,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
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 =
|
||||
_userLogRepository
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
/// UserTypeRoleService
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "Management")]
|
||||
public class UserTypeRoleService(IRepository<UserType> _userTypeRepository) : BaseService, IUserTypeService
|
||||
public class UserTypeRoleService(IRepository<UserType> _userTypeRepository, IRepository<User> _userRepository) : BaseService, IUserTypeService
|
||||
{
|
||||
|
||||
[HttpPost]
|
||||
|
@ -71,7 +71,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
await _userTypeRepository.EntityVerifyAsync(entity.Id, verifyExp1);
|
||||
}
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _userTypeRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok( entity.Id.ToString());
|
||||
|
||||
|
@ -81,7 +81,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpDelete("{userTypeId:guid}")]
|
||||
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"]);
|
||||
|
|
|
@ -34,7 +34,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
// 最完美方式 其中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();
|
||||
|
||||
return clinicalObj;
|
||||
|
@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpPost("{trialId:guid}")]
|
||||
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);
|
||||
return ResponseOutput.Ok(entity.Id);
|
||||
|
@ -64,7 +64,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousHistoryId:guid}")]
|
||||
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);
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpPost("{trialId:guid}")]
|
||||
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);
|
||||
return ResponseOutput.Ok(entity.Id);
|
||||
|
||||
|
@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousOtherId:guid}")]
|
||||
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);
|
||||
return ResponseOutput.Ok();
|
||||
|
@ -109,7 +109,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpPost("{trialId:guid}")]
|
||||
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);
|
||||
return ResponseOutput.Ok(entity.Id);
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousSurgeryId:guid}")]
|
||||
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);
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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);
|
||||
return ResponseOutput.Ok(entity.Id);
|
||||
|
||||
|
@ -144,7 +144,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousPDFId:guid}")]
|
||||
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);
|
||||
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.ViewModel;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
|
@ -8,6 +9,7 @@ using System.ComponentModel;
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Web;
|
||||
using static MassTransit.ValidationResultExtensions;
|
||||
|
||||
namespace IRaCIS.Core.Application.Contracts
|
||||
{
|
||||
|
@ -36,8 +38,8 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
public Guid? VisitId { get; set; }
|
||||
}
|
||||
public Guid? VisitId { get; set; }
|
||||
}
|
||||
|
||||
public class QCVisitSearchDTO : PageInput
|
||||
{
|
||||
|
@ -54,8 +56,8 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid TrialId { get; set; }
|
||||
public Guid? TrialSiteId { get; set; }
|
||||
|
||||
public Guid? VisitId { get; set; }
|
||||
public Guid? SubjectId { get; set; }
|
||||
public Guid? VisitId { get; set; }
|
||||
public Guid? SubjectId { get; set; }
|
||||
|
||||
public string SubjectInfo { get; set; } = String.Empty;
|
||||
|
||||
|
@ -132,7 +134,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
|
||||
|
||||
public string OutEnrollmentVisitName { get; set; } = String.Empty;
|
||||
public string OutEnrollmentVisitName { get; set; } = String.Empty;
|
||||
|
||||
public string BodyPartTypes { get; set; } = String.Empty;
|
||||
|
||||
|
@ -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? 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; }
|
||||
|
@ -294,7 +296,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public string Content { get; set; } = string.Empty;
|
||||
|
||||
[DictionaryTranslateAttribute("YesOrNo")]
|
||||
[DictionaryTranslateAttribute("ChallengeIsClosed")]
|
||||
public bool IsClosed { get; set; }
|
||||
|
||||
public DateTime? ClosedTime { get; set; }
|
||||
|
@ -317,10 +319,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
[DictionaryTranslateAttribute("ReuploadEnum")]
|
||||
public QCChanllengeReuploadEnum ReuploadEnum { get; set; }
|
||||
public List<DialogInfo> DialogList { get; set; }
|
||||
|
||||
|
||||
|
||||
public string DialogStr { 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 SubmitStateEnum SubmitState { 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
|
||||
{
|
||||
|
@ -636,7 +647,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public int FileCount { get; set; }
|
||||
|
||||
[DictionaryTranslateAttribute("YesOrNo")]
|
||||
public bool IsSuccess { get; set; }
|
||||
public bool IsSuccess { get; set; }
|
||||
|
||||
public string Note { get; set; } = string.Empty;
|
||||
|
||||
|
@ -717,7 +728,8 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
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; }
|
||||
|
||||
|
@ -792,7 +804,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public string? ReReadingNewTaskCode { get; set; }
|
||||
|
@ -988,7 +1000,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid VisitTaskId { get; set; }
|
||||
|
||||
public string Answer { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1218,17 +1230,17 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class GetNextCRCChallengeInDto
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// QCChallengeId
|
||||
/// </summary>
|
||||
public Guid QCChallengeId { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// QCChallengeId
|
||||
/// </summary>
|
||||
public Guid QCChallengeId { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class ChallengeQuery : PageInput
|
||||
public class ChallengeQuery : PageInput
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
@ -1247,7 +1259,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid? CreateUserId { get; set; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class QCCRCChallengeViewModel
|
||||
{
|
||||
|
@ -1438,7 +1450,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public List<CheckChanllengeDialogDTO> DialogList { get; set; }
|
||||
}
|
||||
|
||||
public class QCCheckWithModalityView: QCCheckViewModel
|
||||
public class QCCheckWithModalityView : QCCheckViewModel
|
||||
{
|
||||
public DateTime? EarliestScanDate { get; set; }
|
||||
|
||||
|
@ -1446,7 +1458,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public List<string> ModalityList { get; set; }
|
||||
|
||||
public string Modalitys =>string.Join(',', ModalityList);
|
||||
public string Modalitys => string.Join(',', ModalityList);
|
||||
}
|
||||
|
||||
public class QCCheckViewModel
|
||||
|
@ -1589,7 +1601,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public bool IsLostVisit { get; set; }
|
||||
|
||||
public string VisitImageZipPath { get; set; }
|
||||
public string VisitImageZipPath { get; set; }
|
||||
|
||||
public PackState PackState { get; set; }
|
||||
|
||||
|
@ -1599,7 +1611,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public DateTime? PreliminaryAuditTime { get; set; }
|
||||
|
||||
|
||||
public DateTime? AuditTime => QCProcessEnum == TrialQCProcess.SingleAudit ? PreliminaryAuditTime : (QCProcessEnum == TrialQCProcess.DoubleAudit ? ReviewAuditTime : null);
|
||||
public DateTime? AuditTime => QCProcessEnum == TrialQCProcess.SingleAudit ? PreliminaryAuditTime : (QCProcessEnum == TrialQCProcess.DoubleAudit ? ReviewAuditTime : null);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,24 +8,24 @@ namespace IRaCIS.Core.Application.Service
|
|||
public class QCCommon: BaseService
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人
|
||||
/// </summary>
|
||||
/// <param name="_repository"></param>
|
||||
/// <param name="_subjectVisitRepository"></param>
|
||||
/// <param name="_userInfo"></param>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
/// <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 (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))))
|
||||
{
|
||||
//---CRC 已提交影像,不能进行操作。
|
||||
|
@ -39,17 +39,17 @@ namespace IRaCIS.Core.Application.Service
|
|||
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)
|
||||
{
|
||||
subjectVisit = (await _repository.FirstOrDefaultAsync<SubjectVisit>(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||
subjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||
}
|
||||
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<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
||||
IRepository<DicomStudy> _dicomStudyRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||
IRepository<QCChallenge> _qcChallengeRepository,
|
||||
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 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.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && x.UploadRole == UploadRole.CRC);
|
||||
return ResponseOutput.Ok (pageList, config);
|
||||
|
@ -134,7 +139,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
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(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
||||
.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 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);
|
||||
|
||||
}
|
||||
|
@ -173,7 +178,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
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(inQuery.ReuploadEnum != null, t => t.ReuploadEnum == inQuery.ReuploadEnum)
|
||||
.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 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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -292,7 +297,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
.ProjectTo<QCCheckWithModalityView>(_mapper.ConfigurationProvider);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -371,7 +376,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
ExistsManual= (await _IReadingImageTaskService.GetManualList(new GetManualListInDto() { TrialId = sv.TrialId })).Count() > 0,
|
||||
SeriesList = temp.SeriesList,
|
||||
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)
|
||||
.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 导航属性不支持右连接
|
||||
|
||||
// 直接用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();
|
||||
|
||||
return list;
|
||||
}
|
||||
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}")]
|
||||
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)//复审的时候可以看到初审的质疑
|
||||
.ProjectTo<QCChallengeWithUser>(_mapper.ConfigurationProvider);
|
||||
var qaChallenges = await qaChallengeQuery.ToListAsync();
|
||||
|
@ -498,10 +503,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
[HttpGet("{subjectVisitId:guid}")]
|
||||
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 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();
|
||||
|
||||
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 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);
|
||||
|
||||
|
@ -540,7 +545,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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();
|
||||
|
||||
//利用automapper 运行时映射
|
||||
|
@ -562,7 +567,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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 });
|
||||
|
||||
var list = await qaChallengeQuery.ToListAsync();
|
||||
|
@ -581,7 +586,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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,
|
||||
Creator = t.User.UserName,
|
||||
|
@ -598,7 +603,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
[HttpGet("{trialId:guid}")]
|
||||
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,
|
||||
HandleUser = t.User.UserName,
|
||||
|
@ -613,9 +618,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[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);
|
||||
|
||||
return await query.ToPagedListAsync(inQuery);
|
||||
|
|
|
@ -29,9 +29,17 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||
IRepository<QCChallengeDialog> _qCChallengeDialogrepository,
|
||||
IRepository<CheckChallengeDialog> _checkChallengeDialogrepository,
|
||||
IRepository<CheckChallengeDialog> _checkChallengeDialogRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||
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
|
||||
{
|
||||
|
||||
|
@ -46,7 +54,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
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"]);
|
||||
|
@ -108,7 +116,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
else
|
||||
{
|
||||
|
||||
await _repository.UpdateFromDTOAsync<QCChallenge, QCChallengeCommand>(qaQuestionCommand, true);
|
||||
await _qcChallengeRepository.UpdateFromDTOAsync(qaQuestionCommand, true);
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
@ -183,7 +191,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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质疑已经回复。
|
||||
ResponseOutput.NotOk(_localizer["QCOperation_QuestionReplied"]);
|
||||
|
@ -195,7 +203,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
await _qcChallengeRepository.DeleteAsync(qaRecord);
|
||||
|
||||
|
||||
var success1 = await _repository.SaveChangesAsync();
|
||||
var success1 = await _qcChallengeRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success1 /*|| success2 || success3*/);
|
||||
}
|
||||
|
@ -216,7 +224,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
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;
|
||||
|
||||
|
@ -224,7 +232,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
dbQCChallenge.LatestReplyUserId = _userInfo.Id;
|
||||
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _qCChallengeDialogrepository.SaveChangesAsync();
|
||||
|
||||
|
||||
return ResponseOutput.Result(success, qaReply);
|
||||
|
@ -254,7 +262,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
||||
|
||||
await _repository.AddAsync(qaReply);
|
||||
await _checkChallengeDialogRepository.AddAsync(qaReply);
|
||||
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||
{
|
||||
|
@ -271,7 +279,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
throw new BusinessValidationFailedException(_localizer["QCOperation_NoPermissionReply"]);
|
||||
}
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success, qaReply.Id);
|
||||
}
|
||||
|
@ -298,7 +306,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
sv.CloseTheReason = input.CloseCheckChallenge;
|
||||
|
||||
sv.CheckChallengeState = CheckChanllengeTypeEnum.Closed;
|
||||
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
|
||||
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog()
|
||||
{
|
||||
SubjectVisitId = input.subjectVisitId,
|
||||
//---原因:
|
||||
|
@ -306,7 +314,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||
|
||||
});
|
||||
await _repository.SaveChangesAsync();
|
||||
await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
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();
|
||||
|
||||
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
|
||||
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog()
|
||||
{
|
||||
SubjectVisitId = subjectVisitId,
|
||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||
|
@ -425,7 +433,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
sv.RequestBackState = RequestBackStateEnum.PM_NotAgree;
|
||||
|
||||
//---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();
|
||||
|
||||
|
@ -499,12 +507,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
//_qcChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
||||
//_checkChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
||||
//---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 _repository.BatchDeleteAsync<DicomSeries>(t => t.IsDeleted);
|
||||
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.DicomSerie.IsDeleted);
|
||||
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted);
|
||||
|
||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
|
@ -547,7 +555,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
#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 =>
|
||||
{
|
||||
|
@ -567,7 +575,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
|
||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
||||
return ResponseOutput.Ok(await _trialQCQuestionAnswerRepository.SaveChangesAsync());
|
||||
}
|
||||
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; });
|
||||
|
||||
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);
|
||||
|
||||
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)
|
||||
|
@ -616,9 +624,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
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 =>
|
||||
//{
|
||||
|
@ -641,10 +649,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
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;
|
||||
|
||||
|
@ -653,7 +661,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
study.IsDeleted = study.SeriesCount == 0;
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
||||
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -685,20 +693,20 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
|
||||
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.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)
|
||||
{
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
@ -707,7 +715,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
}
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _subjectVisitRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
|
@ -722,7 +730,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
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"]);
|
||||
|
@ -765,10 +773,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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);
|
||||
|
||||
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();
|
||||
|
||||
//instancePathList.ForEach(path =>
|
||||
|
@ -796,13 +804,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
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)
|
||||
{
|
||||
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();
|
||||
|
||||
//找到符合配置的标准 确认的并且签名的、双重,有序,阅片期仲裁
|
||||
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.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.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)
|
||||
|
@ -1461,10 +1469,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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,
|
||||
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);
|
||||
|
||||
|
@ -1510,7 +1518,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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"]);
|
||||
|
@ -1520,7 +1528,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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"]);
|
||||
|
@ -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();
|
||||
|
||||
//维护统一状态
|
||||
|
@ -1561,7 +1569,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
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"]);
|
||||
|
@ -1608,7 +1616,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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"]);
|
||||
|
@ -1623,7 +1631,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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"]);
|
||||
|
@ -1719,7 +1727,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
dbSubjectVisit.CurrentActionUserId = null;
|
||||
dbSubjectVisit.CurrentActionUserExpireTime = null;
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
|
||||
return ResponseOutput.Result(true);
|
||||
|
@ -1745,7 +1753,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||
|
||||
sv.IsUrgent = setOrCancel;
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||
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();
|
||||
|
||||
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
||||
|
@ -1829,7 +1837,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
});
|
||||
|
||||
//双审 并且是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 填写的问题答案
|
||||
|
||||
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
|
||||
await _repository.BatchUpdateAsync<QCChallenge>(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 _qcChallengeRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new QCChallenge() { 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);
|
||||
|
|
|
@ -21,6 +21,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[ApiExplorerSettings(GroupName = "Image")]
|
||||
public class TrialQCQuestionConfigureService(
|
||||
IRepository<TrialQCQuestion> _trialQcQuestionRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
||||
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||
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 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
|
||||
{
|
||||
trial.QCProcessEnum,
|
||||
|
@ -132,7 +135,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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"]);
|
||||
|
@ -251,7 +254,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
await _trialQcQuestionRepository.AddRangeAsync(childList);
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _trialQcQuestionRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success);
|
||||
}
|
||||
|
@ -318,7 +321,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
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"]);
|
||||
|
|
|
@ -26,11 +26,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
|
||||
.ForMember(d => d.SubmitUserName, u => u.MapFrom(s => s.SubmitUser.FullName))
|
||||
.ForMember(d => d.ClinicalInformationTransmissionEnum, u => u.MapFrom(s => s.Trial.ClinicalInformationTransmissionEnum))
|
||||
|
||||
|
||||
.ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any()
|
||||
|| t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count > 0)
|
||||
|| t.PreviousSurgeryList.Any() : false))
|
||||
|
||||
|
||||
.ForMember(d => d.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count()))
|
||||
.ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any())));
|
||||
|
||||
|
@ -40,9 +40,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.CurrentActionUser.UserName))
|
||||
.ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.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>()
|
||||
|
||||
|
@ -53,7 +56,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
.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.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));
|
||||
|
||||
|
@ -96,7 +102,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
// .ForMember(d => d.ReadingStatus, u => u.MapFrom(s => s.VisitTaskList
|
||||
// .Count(t=>t.TaskState==TaskState.Effect && t.IsAnalysisCreate==false && t.ReadingCategory==ReadingCategory.Visit && t.ReadingTaskState==ReadingTaskState.HaveSigned)==s. s.ReadingStatus))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -111,13 +117,20 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.FirstGiveMedicineTime, u => u.MapFrom(s => s.Subject.FirstGiveMedicineTime))
|
||||
.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>()
|
||||
.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.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 =>
|
||||
(s.NoneDicomStudyList.Select(t => t.Modality)
|
||||
.Union(s.StudyList.Select(k => k.ModalityForEdit))).Distinct()))
|
||||
|
@ -155,13 +168,13 @@ namespace IRaCIS.Core.Application.Service
|
|||
.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.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>()
|
||||
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
|
||||
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindTrialSiteCode : u.Subject.TrialSite.TrialSiteCode))
|
||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code))
|
||||
|
||||
|
||||
;
|
||||
|
||||
|
||||
|
@ -173,8 +186,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
.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.EvaluateResult, t => t.MapFrom(u =>
|
||||
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.SourceSubjectVisit.IsBaseLine ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault()!.Answer
|
||||
: u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault()!.Answer))
|
||||
|
||||
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
|
||||
|
||||
|
@ -191,15 +204,15 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(o => o.JudgeArmEnum, t => t.MapFrom(u => u.JudgeResultTask.ArmEnum))
|
||||
|
||||
.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:
|
||||
u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).Select(t=>t.IsGlobalChange?t.GlobalChangeAnswer:t.Answer).FirstOrDefault())
|
||||
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())
|
||||
: criterionType == CriterionType.PCWG3 ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefault()!.Answer : String.Empty
|
||||
))
|
||||
|
||||
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode))
|
||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
||||
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName))
|
||||
//.ForMember(o => o.GlobalTaskAnswerList, t => t.MapFrom(u => u.GlobalVisitResultList.Where(t=>t.GlobalAnswerType== GlobalAnswerType.Question).Select(c=>new GlobalAnswerInfo() { GlobalTaskVisitNum=c.VisitTask.VisitTaskNum,VisitTaskId=c.TaskId ,Answer=c.Answer})))
|
||||
//.ForMember(o => o.GlobalTaskAnswerList, t => t.MapFrom(u => u.GlobalVisitResultList.Where(t=>t.GlobalAnswerType== GlobalAnswerType.Question).Select(c=>new GlobalAnswerInfo() { GlobalTaskVisitNum=c.VisitTask.VisitTaskNum,VisitTaskId=c.TaskId ,Answer=c.Answer})))
|
||||
|
||||
|
||||
;
|
||||
|
@ -220,14 +233,14 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
CreateMap<ReadingTableAnswerRowInfo, RECIST1Point1LessionInfo>()
|
||||
.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.LessionLocation, t =>
|
||||
//t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.Location).FirstOrDefault().Answer)
|
||||
t.MapFrom(u => isEn_Us ? u.OrganInfo.PartEN : u.OrganInfo.Part)
|
||||
|
||||
|
||||
)
|
||||
.ForMember(o => o.LessionOrgan, t =>
|
||||
//t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.Organ).FirstOrDefault().Answer)
|
||||
|
@ -239,7 +252,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.Location).FirstOrDefault()!.Answer : isEn_Us ? u.OrganInfo.TULATEN : u.OrganInfo.TULAT)
|
||||
t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.BodyPartDescription).FirstOrDefault()!.Answer)
|
||||
)
|
||||
|
||||
|
||||
.ForMember(o => o.LongDiameter, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis).FirstOrDefault()!.Answer))
|
||||
.ForMember(o => o.ShortDiameter, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis).FirstOrDefault()!.Answer))
|
||||
.ForMember(o => o.LessionState, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State).FirstOrDefault()!.Answer));
|
||||
|
@ -267,7 +280,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(o => o.BodyPartDescription, t =>
|
||||
//t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.Part).FirstOrDefault().Answer)
|
||||
t.MapFrom(u => isEn_Us ? u.OrganInfo.PartEN : u.OrganInfo.Part)
|
||||
)
|
||||
)
|
||||
.ForMember(o => o.LessionState, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State).FirstOrDefault()!.Answer));
|
||||
|
||||
#endregion
|
||||
|
@ -328,8 +341,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
CreateMap<TrialQCQuestion, TrialQCQuestionSelect>();
|
||||
|
||||
CreateMap<TrialQCQuestion, QCQuestionView>();
|
||||
CreateMap<QCQuestion, QCQuestionView>();
|
||||
CreateMap<TrialQCQuestion, QCQuestionView>();
|
||||
CreateMap<QCQuestion, QCQuestionView>();
|
||||
|
||||
|
||||
CreateMap<QCQuestion, QCQuestionConfigureView>()
|
||||
|
@ -385,10 +398,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum))
|
||||
.ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status))
|
||||
.ForMember(d => d.StudyCount, u => u.MapFrom(s => s.StudyList.Count()))
|
||||
|
||||
|
||||
.ForMember(d => d.SubmitUserName, u => u.MapFrom(s => s.SubmitUser.UserName))
|
||||
.ForMember(d => d.SubmitUserRealName, u => u.MapFrom(s => s.SubmitUser.FullName))
|
||||
|
||||
|
||||
.ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.CurrentActionUser.UserName))
|
||||
.ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.UserName))
|
||||
.ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName))
|
||||
|
@ -412,12 +425,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
.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.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.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.VisitNum, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitNum : t.VisitNum))
|
||||
//.ForMember(d => d.VisitDay, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitDay : t.VisitDay))
|
||||
|
@ -436,7 +449,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.ModalityList, c => c.MapFrom(s =>
|
||||
(s.NoneDicomStudyList.Select(t => t.Modality)
|
||||
.Union(s.StudyList.Select(k => k.ModalityForEdit))).Distinct()));
|
||||
|
||||
|
||||
|
||||
//一致性核查 质疑对话
|
||||
CreateMap<CheckChallengeDialog, CheckChanllengeDialogDTO>()
|
||||
|
@ -581,7 +594,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
CreateMap<NoneDicomStudy, NoneDicomStudyView>()
|
||||
//.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));
|
||||
|
||||
|
||||
|
|
|
@ -37,6 +37,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IVisitTaskHelpeService _IVisitTaskHelpeService,
|
||||
IRepository<DicomStudy> _dicomStudyRepository,
|
||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||||
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]
|
||||
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();
|
||||
|
||||
return list;
|
||||
|
@ -494,7 +496,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
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();
|
||||
|
||||
var generateVisitIdList = idList.Except(haveGenerateVisitIdList);
|
||||
|
@ -514,12 +516,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
[HttpPost]
|
||||
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 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
|
||||
from visitStudyFilter in d.DefaultIfEmpty()
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ namespace IRaCIS.Application.Services
|
|||
IRepository<PreviousPDF> _previousPDFRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||
IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository,
|
||||
IRepository<SystemClinicalQuestion> _systemClinicalQuestionRepository) : BaseService
|
||||
{
|
||||
|
@ -231,7 +232,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
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]
|
||||
//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(inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable)
|
||||
// .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 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();
|
||||
|
||||
|
||||
|
@ -419,7 +420,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
// 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();
|
||||
|
||||
|
||||
|
|
|
@ -354,9 +354,9 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
//如果先生成了任务,再签名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)
|
||||
.Select(u => u.TrialReadingCriterionId).Distinct().ToList();
|
||||
|
||||
|
@ -400,9 +400,9 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
// //如果先生成了任务,再签名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)
|
||||
// .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();
|
||||
|
||||
// 获取确认的项目标准 废弃 签名的时候 传递标准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 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<DicomInstance> _dicomInstanceRepository,
|
||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
||||
IRepository<ReadingPeriodSet> _readingPeriodSetRepository,
|
||||
IRepository<ReadModule> _readModuleRepository) : BaseService
|
||||
{
|
||||
|
@ -454,7 +455,7 @@ namespace IRaCIS.Application.Services
|
|||
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"]);
|
||||
|
|
|
@ -35,11 +35,15 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
IRepository<TrialSiteSurvey> _trialSiteSurveyRepository,
|
||||
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<TrialSite> _trialSiteRepository,
|
||||
IRepository<Doctor> _doctorRepository,
|
||||
IRepository<VerificationCode> _verificationCodeRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||
IDistributedLockProvider _distributedLockProvider,
|
||||
ITokenService _tokenService,
|
||||
IRepository<UserType> _userTypeRepository,
|
||||
IMailVerificationService _mailVerificationService,
|
||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : BaseService, ITrialSiteSurveyService
|
||||
{
|
||||
|
@ -80,7 +84,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[AllowAnonymous]
|
||||
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();
|
||||
|
||||
//检查数据库是否存在该验证码
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -138,7 +142,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
//验证码 6位
|
||||
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);
|
||||
|
||||
|
@ -165,7 +169,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
#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)
|
||||
{
|
||||
|
@ -179,7 +183,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
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 中找到已存在的 加到历史人员中
|
||||
addSurvey.TrialSiteUserSurveyList = userList;
|
||||
|
||||
currentEntity = await _repository.AddAsync(addSurvey);
|
||||
currentEntity = await _trialSiteSurveyRepository.AddAsync(addSurvey);
|
||||
|
||||
}
|
||||
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();
|
||||
|
||||
|
@ -527,7 +531,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[HttpGet("{trialId:guid}")]
|
||||
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;
|
||||
}
|
||||
|
@ -552,7 +556,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
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"]);
|
||||
|
@ -628,7 +632,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
survey.IsDeleted = true;
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _trialSiteSurveyRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
@ -745,7 +749,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -777,7 +781,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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;
|
||||
|
@ -829,7 +833,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
||||
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);
|
||||
|
||||
|
@ -850,7 +854,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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
|
||||
|
@ -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)
|
||||
|
@ -947,7 +951,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
||||
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);
|
||||
|
||||
|
@ -969,7 +973,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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
|
||||
|
|
|
@ -17,6 +17,8 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class TrialSiteUserSurveyService(
|
||||
IRepository<TrialSiteUserSurvey> _trialSiteUserSurveyRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<User> _userRepository,
|
||||
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 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 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)
|
||||
{
|
||||
|
@ -97,7 +99,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
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)
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace IRaCIS.Application.Contracts
|
|||
|
||||
}
|
||||
|
||||
public class TrialUserSelct: UserTrialCommand
|
||||
public class TrialUserSelct : UserTrialCommand
|
||||
{
|
||||
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 string CurrentTime => TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, TimeZoneInfo.FindSystemTimeZoneById(ClientZoneId)).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
public string CurrentTime { get; set; }
|
||||
|
||||
public bool IsEn_US { get; set; }
|
||||
|
||||
public string ClientZoneId { get; set; } = string.Empty;
|
||||
public object List { get; set; }
|
||||
|
||||
}
|
||||
|
@ -162,10 +158,10 @@ namespace IRaCIS.Application.Contracts
|
|||
{
|
||||
|
||||
public List<TrialSiteUserSummaryDto> TrialSiteUserList { get; set; } = new List<TrialSiteUserSummaryDto>();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class TrialSiteUserSummaryDto: TrialSiteUserSurveyView
|
||||
public class TrialSiteUserSummaryDto : TrialSiteUserSurveyView
|
||||
{
|
||||
|
||||
|
||||
|
@ -177,7 +173,7 @@ namespace IRaCIS.Application.Contracts
|
|||
|
||||
//public string IsGenerateAccountStr => IsGenerateAccount ? "是" : "否";
|
||||
|
||||
|
||||
|
||||
//public string StateStr => State.GetDescription();
|
||||
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ namespace IRaCIS.Core.Application
|
|||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||
IRepository<ReadingCriterionPage> _readingCriterionPageRepository,
|
||||
IOrganInfoService _iOrganInfoService,
|
||||
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
||||
IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository,
|
||||
IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository,
|
||||
IReadingQuestionService iReadingQuestionService,
|
||||
|
@ -47,6 +48,10 @@ namespace IRaCIS.Core.Application
|
|||
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
|
||||
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||
IRepository<SystemBasicData> _systemBasicDataRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IRepository<Enroll> _enrollRepository,
|
||||
IRepository<TrialStateChange> _trialStateChangeRepository,
|
||||
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService
|
||||
{
|
||||
|
||||
|
@ -725,7 +730,7 @@ namespace IRaCIS.Core.Application
|
|||
[HttpGet("{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)
|
||||
{
|
||||
|
@ -769,7 +774,7 @@ namespace IRaCIS.Core.Application
|
|||
.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();
|
||||
|
||||
if (trialConfig.QCProcessEnum ==
|
||||
|
@ -839,7 +844,7 @@ namespace IRaCIS.Core.Application
|
|||
.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();
|
||||
|
||||
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 });
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -1086,7 +1091,7 @@ namespace IRaCIS.Core.Application
|
|||
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 });
|
||||
}
|
||||
else //之前设置为加急的访视状态不变。后续提交的访视,为不加急。
|
||||
|
@ -1098,7 +1103,7 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
trialInfo.UpdateTime = DateTime.Now;
|
||||
|
||||
return ResponseOutput.Ok(await _repository.SaveChangesAsync());
|
||||
return ResponseOutput.Ok(await _trialRepository.SaveChangesAsync());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1178,7 +1183,7 @@ namespace IRaCIS.Core.Application
|
|||
//Paused、 添加工总量 算医生读片中
|
||||
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
|
||||
});
|
||||
|
@ -1189,7 +1194,7 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
await _fusionCache.SetAsync(CacheKeys.Trial(trial.Id.ToString()), trialStatusStr, TimeSpan.FromDays(7));
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _trialRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -1203,7 +1208,7 @@ namespace IRaCIS.Core.Application
|
|||
[HttpGet("{trialId:guid}")]
|
||||
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)
|
||||
{
|
||||
|
||||
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)
|
||||
.Select(t => t.Code).ToListAsync();
|
||||
|
||||
|
@ -1319,7 +1324,7 @@ namespace IRaCIS.Core.Application
|
|||
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<User> _userRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<UserType> _userTypeRepository,
|
||||
IMailVerificationService _mailVerificationService,
|
||||
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 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)
|
||||
{
|
||||
|
@ -127,13 +129,13 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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.Status = UserStateEnum.Disable;
|
||||
|
||||
var newAddUser = await _repository.AddAsync(generateUser);
|
||||
var newAddUser = await _userRepository.AddAsync(generateUser);
|
||||
|
||||
|
||||
addEntity.IsSystemUser = false;
|
||||
|
@ -254,7 +256,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
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 });
|
||||
|
||||
|
|
|
@ -16,44 +16,12 @@ namespace IRaCIS.Application.Services
|
|||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class TrialMaintenanceService(
|
||||
IRepository<TrialUser> _trialUseRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
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]
|
||||
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)
|
||||
|
@ -168,7 +136,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
|
||||
|
||||
var success = await _repository.SaveChangesAsync();
|
||||
var success = await _trialUseRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Result(success);
|
||||
}
|
||||
|
@ -187,7 +155,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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"]);
|
||||
|
@ -195,14 +163,14 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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);
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _trialUseRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
@ -223,7 +191,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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"]);
|
||||
|
@ -231,12 +199,12 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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 _repository.SaveChangesAsync();
|
||||
await _trialUseRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
|
|
@ -23,6 +23,16 @@ namespace IRaCIS.Application.Services
|
|||
public class TrialService(
|
||||
IRepository<Trial> _trialRepository,
|
||||
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
|
||||
{
|
||||
|
||||
|
@ -120,7 +130,7 @@ namespace IRaCIS.Application.Services
|
|||
[NonDynamicMethod]
|
||||
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}")]
|
||||
|
@ -203,23 +213,23 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
//如果是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 _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 = 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 = 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
|
||||
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();
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
@ -239,14 +249,14 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
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"]);
|
||||
|
||||
}
|
||||
// 判断项目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"]);
|
||||
|
@ -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对应的记录
|
||||
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == updateModel.Id);
|
||||
await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == updateModel.Id);
|
||||
|
||||
//重新插入新的 Title记录
|
||||
|
||||
|
@ -277,7 +287,7 @@ namespace IRaCIS.Application.Services
|
|||
trial.DeclarationTypes = $"|{string.Join('|', updateModel.DeclarationTypeEnumList.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
|
||||
await DealSponsorAndCROAsync(trial);
|
||||
|
@ -292,17 +302,17 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
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 (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)
|
||||
{
|
||||
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,
|
||||
AdjudicationIn24H = u.Adjudication,
|
||||
|
@ -326,7 +336,7 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
break;
|
||||
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,
|
||||
AdjudicationIn48H = u.Adjudication,
|
||||
|
@ -347,7 +357,7 @@ namespace IRaCIS.Application.Services
|
|||
switch (newState)
|
||||
{
|
||||
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,
|
||||
Adjudication = u.AdjudicationIn24H,
|
||||
|
@ -356,7 +366,7 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
break;
|
||||
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,
|
||||
AdjudicationIn48H = u.AdjudicationIn24H,
|
||||
|
@ -378,7 +388,7 @@ namespace IRaCIS.Application.Services
|
|||
switch (newState)
|
||||
{
|
||||
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,
|
||||
Adjudication = u.AdjudicationIn48H,
|
||||
|
@ -387,7 +397,7 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
break;
|
||||
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,
|
||||
AdjudicationIn24H = u.AdjudicationIn48H,
|
||||
|
@ -422,166 +432,132 @@ namespace IRaCIS.Application.Services
|
|||
if (_verifyConfig.CurrentValue.OpenTrialRelationDelete)
|
||||
{
|
||||
|
||||
#region 项目真删除废弃
|
||||
|
||||
//if (trial.VisitPlanConfirmed)
|
||||
//{
|
||||
// return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除");
|
||||
//}
|
||||
#region 真项目删除
|
||||
//await _repository.BatchDeleteNoTrackingAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
||||
//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))
|
||||
//{
|
||||
// return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除");
|
||||
//}
|
||||
//await _repository.BatchDeleteNoTrackingAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
||||
|
||||
//if (await _repository.AnyAsync<TrialSite>(u => u.TrialId == trialId))
|
||||
//{
|
||||
// return ResponseOutput.NotOk("该Trial下面有Site,无法删除");
|
||||
//}
|
||||
//await _repository.BatchDeleteNoTrackingAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
||||
//await _repository.BatchDeleteNoTrackingAsync<PaymentDetail>(t => t.TrialId == trialId);
|
||||
|
||||
////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))
|
||||
//{
|
||||
// return ResponseOutput.NotOk("该Trial下面有参与者,无法删除");
|
||||
//}
|
||||
//await _repository.BatchDeleteNoTrackingAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
||||
//await _repository.BatchDeleteNoTrackingAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
||||
//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
|
||||
|
||||
|
||||
|
||||
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();
|
||||
|
||||
|
@ -620,7 +596,7 @@ namespace IRaCIS.Application.Services
|
|||
/// </summary>
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -663,14 +639,14 @@ namespace IRaCIS.Application.Services
|
|||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
|
||||
{
|
||||
await _repository.AddAsync(new EnrollDetail()
|
||||
await _enrollDetailRepository.AddAsync(new EnrollDetail()
|
||||
{
|
||||
DoctorId = _userInfo.Id,
|
||||
TrialId = trialId,
|
||||
EnrollStatus = status,
|
||||
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
|
||||
}));
|
||||
|
|
|
@ -18,6 +18,8 @@ namespace IRaCIS.Core.Application.Services
|
|||
IRepository<TrialSite> _trialSiteRepository,
|
||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||
IRepository<Site> _siteRepository,
|
||||
IRepository<Subject> _subjectRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
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 (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.
|
||||
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.
|
||||
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))
|
||||
.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;
|
||||
}
|
||||
|
@ -295,21 +297,21 @@ namespace IRaCIS.Core.Application.Services
|
|||
var trialId = relation.TrialId;
|
||||
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.
|
||||
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.
|
||||
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<SubjectVisit> _subjectVisitRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<DicomStudy> _dicomStudyRepository,
|
||||
IRepository<SCPPatient> _scpPatientRepository,
|
||||
IRepository<SCPImageUpload> _scpImageUploadRepository,
|
||||
IDistributedLockProvider _distributedLockProvider) : BaseService
|
||||
{
|
||||
|
||||
|
@ -104,7 +107,7 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
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.CallingAEIP), t => t.CallingAEIP.Contains(inQuery.CallingAEIP))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE))
|
||||
|
@ -318,11 +321,11 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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 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;
|
||||
|
||||
|
@ -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 };
|
||||
|
||||
|
@ -436,7 +439,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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;
|
||||
|
||||
|
@ -450,7 +453,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
var newStuty = _mapper.Map<DicomStudy>(find.SCPStudy);
|
||||
|
||||
await _repository.AddAsync(newStuty);
|
||||
await _dicomStudyRepository.AddAsync(newStuty);
|
||||
|
||||
newStuty.SeqId = Guid.Empty;
|
||||
newStuty.Code = currentNextCodeInt;
|
||||
|
@ -471,7 +474,7 @@ namespace IRaCIS.Application.Services
|
|||
series.SubjectVisitId = subjectVisitId;
|
||||
}
|
||||
|
||||
await _repository.AddRangeAsync(newSeriesList);
|
||||
await _dicomSeriesRepository.AddRangeAsync(newSeriesList);
|
||||
|
||||
var newInstanceList = _mapper.Map<List<DicomInstance>>(find.InstanceList);
|
||||
|
||||
|
@ -483,13 +486,13 @@ namespace IRaCIS.Application.Services
|
|||
instance.SubjectVisitId = subjectVisitId;
|
||||
|
||||
}
|
||||
await _repository.AddRangeAsync(newInstanceList);
|
||||
await _dicomInstanceRepository.AddRangeAsync(newInstanceList);
|
||||
}
|
||||
|
||||
currentNextCodeInt++;
|
||||
|
||||
await _repository.BatchUpdateAsync<SCPPatient>(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 _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == find.SCPStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
||||
|
||||
|
||||
}
|
||||
|
@ -576,9 +579,8 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
}
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
||||
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||
await _scpStudyRepository.BatchUpdateNoTrackingAsync(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();
|
||||
|
|
|
@ -13,6 +13,7 @@ namespace IRaCIS.Application.Services
|
|||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class SubjectService(
|
||||
IRepository<Subject> _subjectRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository) : BaseService, ISubjectService
|
||||
{
|
||||
|
||||
|
@ -28,7 +29,7 @@ namespace IRaCIS.Application.Services
|
|||
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
||||
{
|
||||
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"]);
|
||||
|
@ -124,7 +125,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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);
|
||||
|
||||
|
|
|
@ -23,13 +23,17 @@ namespace IRaCIS.Core.Application.Services
|
|||
public class SubjectVisitService(
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IRepository<DicomStudy> _dicomStudyRepository,
|
||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||
IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||
IRepository<Subject> _subjectRepository,
|
||||
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||
IRepository<TaskStudy> _taskStudyRepository,
|
||||
IServiceProvider _serviceProvider,
|
||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository
|
||||
) : BaseService, ISubjectVisitService
|
||||
{
|
||||
|
@ -85,7 +89,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
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"]);
|
||||
|
@ -182,7 +186,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
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"]);
|
||||
|
@ -216,7 +220,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
[AllowAnonymous]
|
||||
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,
|
||||
Modalities = k.Modalities,
|
||||
|
@ -226,12 +230,12 @@ namespace IRaCIS.Core.Application.Services
|
|||
}).ToListAsync();
|
||||
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();
|
||||
|
||||
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)
|
||||
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
|
@ -275,9 +279,9 @@ namespace IRaCIS.Core.Application.Services
|
|||
[HttpPost]
|
||||
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();
|
||||
|
||||
|
||||
|
@ -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> ptseriesLists = await _repository.Where<DicomSeries>(s => ptseriesIds.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 _dicomSeriesRepository.Where(s => ptseriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
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();
|
||||
|
||||
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()
|
||||
{
|
||||
InstanceCount = k.InstanceCount,
|
||||
|
@ -446,7 +450,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
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)
|
||||
{
|
||||
|
@ -473,7 +477,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
|
||||
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(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||
.Select(k => new VisitStudyDTO()
|
||||
|
@ -487,10 +491,10 @@ namespace IRaCIS.Core.Application.Services
|
|||
}).ToListAsync();
|
||||
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();
|
||||
|
||||
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, 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();
|
||||
|
@ -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();
|
||||
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,
|
||||
|
||||
|
@ -572,7 +576,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
if (thisVisitTaskStudy != null)
|
||||
{
|
||||
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)
|
||||
.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();
|
||||
|
||||
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()
|
||||
{
|
||||
Id = k.Id,
|
||||
|
@ -613,7 +617,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
|
||||
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);
|
||||
thisVisitTaskStudy.SeriesList.Add(item);
|
||||
//thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
||||
|
|
|
@ -16,6 +16,7 @@ namespace IRaCIS.Application.Services
|
|||
IRepository<Trial> _trialRepository,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IRepository<VisitPlanInfluenceStudy> _influnceRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<Subject> _subjectRepository,
|
||||
IRepository<VisitPlanInfluenceStat> _visitPlanInfluenceStatRepository) : BaseService, IVisitPlanService
|
||||
{
|
||||
|
@ -43,9 +44,9 @@ namespace IRaCIS.Application.Services
|
|||
var query = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == trialId)
|
||||
.ProjectTo<VisitStageDTO>(_mapper.ConfigurationProvider).OrderBy(t => t.VisitNum);
|
||||
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()
|
||||
{
|
||||
VisitPlanList = list,
|
||||
|
@ -179,7 +180,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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"]);
|
||||
|
@ -497,13 +498,13 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
var visitPlan = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == id);
|
||||
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.
|
||||
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);
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ namespace IRaCIS.Application.Services
|
|||
IRepository<TrialRevenuesPrice> _trialRevenuesPriceRepository,
|
||||
IRepository<TrialRevenuesPriceVerification> _trialRevenuesPriceVerificationRepository,
|
||||
IRepository<EnrollReadingCriterion> _enrollReadingCriterionRepository,
|
||||
IRepository<VisitTask> _visitTaskRepository,
|
||||
IRepository<TaskAllocationRule> _taskAllocationRuleRepository) : BaseService, IDoctorWorkloadService
|
||||
{
|
||||
|
||||
|
@ -129,7 +130,7 @@ namespace IRaCIS.Application.Services
|
|||
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();
|
||||
|
|
|
@ -19,6 +19,8 @@ namespace IRaCIS.Application.Services
|
|||
IRepository<Doctor> _doctorRepository,
|
||||
IRepository<EnrollDetail> _enrollDetailRepository,
|
||||
IRepository<Workload> _workloadRepository,
|
||||
IRepository<User> _userRepository,
|
||||
IRepository<TrialUser> _trialUserRepository,
|
||||
IMailVerificationService _mailVerificationService) : BaseService, IEnrollService
|
||||
{
|
||||
|
||||
|
@ -140,7 +142,7 @@ namespace IRaCIS.Application.Services
|
|||
TrialId = trialId,
|
||||
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()
|
||||
|
@ -168,7 +170,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -33,73 +33,65 @@ using Xceed.Words.NET;
|
|||
namespace IRaCIS.Application.Services
|
||||
{
|
||||
[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;
|
||||
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>
|
||||
/// <param name="trialReadingCriterionId"></param>
|
||||
/// <param name="_taskConsistentRuleRepository"></param>
|
||||
/// <param name="_readingConsistentClinicalDataPDFRepository"></param>
|
||||
/// <param name="_readingConsistentClinicalDataRepository"></param>
|
||||
/// <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();
|
||||
}
|
||||
|
||||
|
||||
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()
|
||||
{
|
||||
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.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);
|
||||
}
|
||||
|
@ -155,7 +147,7 @@ namespace IRaCIS.Application.Services
|
|||
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);
|
||||
_logger.LogWarning($"我进来了当前值是:" + IntValue);
|
||||
|
@ -186,11 +178,11 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
await _repository.InsertOrUpdateAsync<Internationalization, InternationalizationAddOrEdit>(row);
|
||||
await _internationalizationRepository.InsertOrUpdateAsync(row);
|
||||
|
||||
}
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _internationalizationRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -199,7 +191,6 @@ namespace IRaCIS.Application.Services
|
|||
public async Task<string> Get()
|
||||
{
|
||||
|
||||
await _repository.Where<ReadingConsistentClinicalData>(t => t.SubjectId == Guid.Empty).Include(t => t.ReadingClinicalDataPDFList).ExecuteDeleteAsync();
|
||||
|
||||
// Generate RSA keys
|
||||
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();
|
||||
//CultureInfo culture = CultureInfo.CurrentUICulture;
|
||||
|
||||
|
@ -421,12 +412,12 @@ namespace IRaCIS.Application.Services
|
|||
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 list2 = _repository.Where<Subject>(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SubjectVisitTaskList).ToList();
|
||||
//var list3 = _visitTaskRepository.Where(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SourceSubjectVisit.VisitTaskList).ToList();
|
||||
//var list2 = _subjectRepository.Where(t => t.Id == Guid.NewGuid()).SelectMany(t => t.SubjectVisitTaskList).ToList();
|
||||
//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 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)
|
||||
{
|
||||
|
@ -447,10 +438,10 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
tempList.ForEach(t => t.TrialId = trialId);
|
||||
|
||||
await _repository.AddRangeAsync(tempList);
|
||||
await _trialBodyPartRepository.AddRangeAsync(tempList);
|
||||
}
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _dicRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
|
@ -462,7 +453,7 @@ namespace IRaCIS.Application.Services
|
|||
[AllowAnonymous]
|
||||
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)
|
||||
|
@ -484,12 +475,12 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -500,7 +491,7 @@ namespace IRaCIS.Application.Services
|
|||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
[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;
|
||||
|
@ -508,7 +499,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -549,9 +540,9 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
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 以获取下一页的数据
|
||||
|
@ -564,7 +555,7 @@ namespace IRaCIS.Application.Services
|
|||
Console.WriteLine($"Error: {ex.Message}");
|
||||
}
|
||||
|
||||
await _repository.SaveChangesAsync();
|
||||
await _dicomStudyRepository.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,19 +8,11 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace IRaCIS.Core.Application.Triggers
|
||||
{
|
||||
public class AddCRCCliniaclDataTrigger : 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;
|
||||
}
|
||||
public class AddCRCCliniaclDataTrigger(
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
IClinicalAnswerService _iClinicalAnswerService) : IAfterSaveTrigger<SubjectVisit>
|
||||
{
|
||||
|
||||
|
||||
//注意删除不能用扩展方法,必须用EF跟踪的实体 否则不能取到 SubjectVisitId
|
||||
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
||||
|
|
|
@ -8,28 +8,14 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
/// <summary>
|
||||
/// 添加访视计划 要给改项目下的所有Subject 添加该访视
|
||||
/// </summary>
|
||||
public class AddSubjectTrigger : IBeforeSaveTrigger<Subject>
|
||||
public class AddSubjectTrigger(
|
||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
|
||||
IRepository<VisitStage> _visitStageRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
IMapper _mapper) : IBeforeSaveTrigger<Subject>
|
||||
{
|
||||
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<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
|
||||
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
@ -21,7 +16,7 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
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)
|
||||
{
|
||||
|
@ -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 });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,18 +11,11 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
/// <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)
|
||||
{
|
||||
|
@ -39,7 +32,7 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
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>
|
||||
/// 处理 访视 末次评估 会影响Subject 状态
|
||||
/// </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)
|
||||
{
|
||||
|
@ -71,7 +41,7 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
|
|
@ -12,38 +12,18 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
/// <summary>
|
||||
/// 处理 访视 末次评估 会影响Subject 状态
|
||||
/// </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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
||||
|
|
|
@ -7,18 +7,14 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
/// <summary>
|
||||
/// 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期
|
||||
/// </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
|
||||
public async Task AfterSave(ITriggerContext<NoneDicomStudy> context, CancellationToken cancellationToken)
|
||||
|
@ -54,7 +50,7 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
|
||||
var studyId = context.Entity.Id;
|
||||
//处理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());
|
||||
|
||||
|
||||
|
@ -101,7 +97,7 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -5,15 +5,10 @@ using System.Linq.Dynamic.Core;
|
|||
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)
|
||||
{
|
||||
Dictionary<int, string> splitLesionDic = new Dictionary<int, string>()
|
||||
|
|
|
@ -11,20 +11,11 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
/// <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)
|
||||
{
|
||||
|
|
|
@ -10,16 +10,10 @@ using System.Threading.Tasks;
|
|||
|
||||
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
|
||||
//0|0|0|内网IP|内网IP
|
||||
|
|
|
@ -11,20 +11,12 @@ using System.Linq.Expressions;
|
|||
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>
|
||||
/// 因为维护状态先后顺序导致 裁判任务关联的 任务上的JudgeVisitTaskId==nulll 在这里需要重新设置下
|
||||
|
|
|
@ -12,35 +12,12 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
/// <summary>
|
||||
/// 维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
|
||||
/// </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字段
|
||||
public async Task AfterSave(ITriggerContext<VisitTask> context, CancellationToken cancellationToken)
|
||||
|
|
|
@ -53,5 +53,7 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
public string HtmlPath { get; set; }=string.Empty;
|
||||
|
||||
public long? FileSize { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,6 +93,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
public bool IsFromPACS { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public int FailedFileCount { get; set; }
|
||||
|
||||
|
||||
public decimal FileSize { get; set; }
|
||||
public long FileSize { get; set; }
|
||||
|
||||
public string IP { get; set; }
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
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 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 long? FileSize { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ using Microsoft.Extensions.Localization;
|
|||
namespace IRaCIS.Core.Infra.EFCore
|
||||
{
|
||||
|
||||
#region 泛型通用版本
|
||||
#region 泛型通用版本 非必要 禁止使用!!!
|
||||
|
||||
|
||||
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> 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,
|
||||
Expression<Func<T, T>> updateFactory,
|
||||
|
@ -407,12 +407,12 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
|
||||
#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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
|
|
@ -44,7 +44,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
_dbContext = dbContext;
|
||||
_mapper = mapper;
|
||||
_userInfo = userInfo;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -381,7 +380,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
|
||||
|
||||
|
||||
#region 保存 、忽略 、验证
|
||||
#region 保存 、忽略 、验证
|
||||
public async Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
|
||||
{
|
||||
var entity = _mapper.Map<TEntity>(from);
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using SharpCompress.Writers;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.Globalization;
|
||||
|
||||
namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
||||
{
|
||||
|
@ -77,6 +79,37 @@ namespace IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson
|
|||
|
||||
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