整理仓储
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-08-23 13:51:58 +08:00
parent e81e270d69
commit 7867a82e6e
37 changed files with 403 additions and 368 deletions

View File

@ -447,12 +447,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;
@ -460,7 +463,7 @@ namespace IRaCIS.Core.API.Controllers
var noneDicomStudyId = incommand.NoneDicomStudyId;
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
var sv = (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
@ -470,7 +473,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 });
}
var uploadFinishedTime = DateTime.Now;
@ -503,12 +506,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;
@ -530,7 +534,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;

View File

@ -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});
}

View File

@ -45,6 +45,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
IRepository<DicomInstance> _dicomInstanceRepository,
IRepository<DicomSeries> _dicomSeriesRepository,
IRepository<SubjectCanceDoctor> _subjectCanceDoctorRepository,
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository) : BaseService, IVisitTaskService
{
@ -277,7 +281,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();
@ -1555,7 +1559,7 @@ 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 });
@ -2537,9 +2541,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();

View File

@ -32,9 +32,13 @@ namespace IRaCIS.Core.Application.Service.Common
public class ExcelExportService(IRepository<TrialUser> _trialUserRepository,
IRepository<VisitTask> _visitTaskRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
IRepository<DicomStudy> _dicomStudyRepository,
IRepository<QCChallenge> _qcChallengeRepository,
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
IRepository<CommonDocument> _commonDocumentRepository,
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
IRepository<Subject> _subjectRepository) : BaseService
{
@ -349,7 +353,7 @@ namespace IRaCIS.Core.Application.Service.Common
.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()
@ -381,12 +385,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 _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()
{
@ -1448,7 +1452,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)
{

View File

@ -354,7 +354,7 @@ 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);

View File

@ -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();
}

View File

@ -184,7 +184,7 @@ namespace IRaCIS.Application.Services
attachment.IsOfficial = true;
}
await _repository.AddAsync(newAttachment);
await _attachmentrepository.AddAsync(newAttachment);
var success = await _repository.SaveChangesAsync();
return ResponseOutput.Result(success, attachment);
}

View File

@ -11,6 +11,7 @@ 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,
@ -95,7 +96,7 @@ 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>();
@ -364,7 +365,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));

View File

@ -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);
}
}

View File

@ -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,7 +79,7 @@ namespace IRaCIS.Application.Services
TrialExperienceId = trialExperience.Id
}));
await _repository.AddRangeAsync(criteriaList);
await _trialExperienceCriteriaRepository.AddRangeAsync(criteriaList);
var success = await _repository.SaveChangesAsync();
@ -93,7 +94,7 @@ namespace IRaCIS.Application.Services
_mapper.Map(trialExperienceViewModel, needUpdate);
await _repository.UpdateAsync(needUpdate);
await _repository.BatchDeleteAsync<TrialExperienceCriteria>(t => t.TrialExperienceId == needUpdate.Id);
await _trialExperienceCriteriaRepository.BatchDeleteNoTrackingAsync(t => t.TrialExperienceId == needUpdate.Id);
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
@ -119,7 +120,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 +134,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 +142,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 +156,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

View File

@ -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
{
@ -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()
{

View File

@ -25,8 +25,10 @@ namespace IRaCIS.Core.Application.Services
IRepository<Trial> _trialRepository,
ISystemDocumentService _systemDocumentService,
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
IRepository<SystemDocument> _systemDocumentRepository,
IRepository<TrialUser> _trialUserRepository,
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository) : BaseService, ITrialDocumentService
{
@ -60,7 +62,7 @@ namespace IRaCIS.Core.Application.Services
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
join trialUser in _trialUserRepository.Where(t => t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
join confirm in _repository.Where<TrialDocConfirmedUser>() on
join confirm in _trialDocConfirmedUserRepository.Where() on
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
from confirm in cc.DefaultIfEmpty()
@ -228,7 +230,7 @@ namespace IRaCIS.Core.Application.Services
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()
{
@ -261,7 +263,7 @@ namespace IRaCIS.Core.Application.Services
.WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
from confirm in cc.DefaultIfEmpty()
select new UnionDocumentWithConfirmInfoView()
@ -398,7 +400,7 @@ namespace IRaCIS.Core.Application.Services
.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()
@ -430,12 +432,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 _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()
{
@ -619,7 +621,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 });
}
@ -630,7 +632,7 @@ 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 });
}
@ -647,7 +649,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 });
}
@ -662,7 +664,7 @@ 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();
@ -806,8 +808,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,

View File

@ -42,6 +42,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
IRepository<VisitTask> _visitTaskRepository,
IRepository<TrialUser> _trialUserRepository,
IRepository<TrialEmailNoticeUser> _trialEmailNoticeUserRepository,
IRepository<Subject> _subjectRepository,
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
@ -1376,8 +1377,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>();

View File

@ -39,6 +39,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
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
{
@ -316,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;
@ -338,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)
{
@ -355,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);
}
}
@ -403,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;
@ -425,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);
}
@ -468,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();
}

View File

@ -944,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;
@ -1094,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()
{
@ -1237,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);
}

View File

@ -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 });
}
}
@ -268,7 +277,7 @@ 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();

View File

@ -15,6 +15,7 @@ namespace IRaCIS.Application.Services
IRepository<Site> _siteRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository,
IDistributedLockProvider _distributedLockProvider,
IRepository<TrialSite> _trialSiteRepository,
IRepository<Hospital> _hospitalRepository) : BaseService, ISiteService
{
@ -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());

View File

@ -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();

View File

@ -44,7 +44,7 @@ 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 ( _trialRepository.Where(t => t.Id == addOrEditNoneDicomStudy.TrialId).Any(t => t.IsVerifyVisitImageDate==true))
{
@ -94,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);
@ -114,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);

View File

@ -18,14 +18,14 @@ namespace IRaCIS.Core.Application.Service
/// <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 已提交影像,不能进行操作。

View File

@ -446,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();
}
}
@ -618,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);

View File

@ -29,10 +29,16 @@ 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
{
@ -48,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"]);
@ -256,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)
{
@ -300,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,
//---原因:
@ -381,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,
@ -427,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();
@ -501,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();
@ -549,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 =>
{
@ -620,7 +626,7 @@ namespace IRaCIS.Core.Application.Image.QA
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 =>
//{
@ -646,7 +652,7 @@ namespace IRaCIS.Core.Application.Image.QA
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;
@ -694,7 +700,7 @@ namespace IRaCIS.Core.Application.Image.QA
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)
{
@ -767,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});
@ -779,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 =>
@ -804,7 +810,7 @@ namespace IRaCIS.Core.Application.Image.QA
{
if (_repository.Where<SCPPatient>(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 });
}
}
@ -1463,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,
@ -1512,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"]);
@ -1542,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();
//维护统一状态
@ -1563,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"]);
@ -1610,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"]);
@ -1625,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"]);
@ -1855,11 +1861,11 @@ 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 });

View File

@ -22,6 +22,8 @@ namespace IRaCIS.Core.Application.Contracts
public class TrialQCQuestionConfigureService(
IRepository<TrialQCQuestion> _trialQcQuestionRepository,
IRepository<Trial> _trialRepository,
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
IRepository<QCQuestion> _qCQuestionRepository) : BaseService, ITrialQCQuestionConfigureService
{
@ -56,7 +58,7 @@ 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 _trialRepository.Where(t => t.Id == queryTrialQCQuestionConfigure.TrialId)
@ -133,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"]);
@ -319,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"]);

View File

@ -354,7 +354,7 @@ 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)
.SelectMany(t => t.TrialClinicalDataSetCriteriaList)
@ -400,7 +400,7 @@ 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)
// .SelectMany(t => t.TrialClinicalDataSetCriteriaList)

View File

@ -37,6 +37,7 @@ namespace IRaCIS.Core.Application.Contracts
IRepository<User> _userRepository,
IRepository<Trial> _trialRepository,
IRepository<TrialSite> _trialSiteRepository,
IRepository<VerificationCode> _verificationCodeRepository,
IRepository<TrialUser> _trialUserRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository,
IDistributedLockProvider _distributedLockProvider,
@ -81,7 +82,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();
//检查数据库是否存在该验证码
@ -102,7 +103,7 @@ 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();
@ -139,7 +140,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);
@ -180,7 +181,7 @@ namespace IRaCIS.Core.Application.Contracts
else
{
//删除验证码历史记录
await _repository.BatchDeleteAsync<VerificationCode>(t => t.Id == verifyRecord.Id);
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verifyRecord.Id);
//验证码正确 不处理
}
@ -206,7 +207,7 @@ namespace IRaCIS.Core.Application.Contracts
//从项目site 中找到已存在的 加到历史人员中
addSurvey.TrialSiteUserSurveyList = userList;
currentEntity = await _repository.AddAsync(addSurvey);
currentEntity = await _trialSiteSurveyRepository.AddAsync(addSurvey);
}
else
@ -310,7 +311,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();
@ -553,7 +554,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"]);
@ -830,7 +831,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);
@ -851,7 +852,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
@ -948,7 +949,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);
@ -970,7 +971,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

View File

@ -47,6 +47,9 @@ namespace IRaCIS.Core.Application
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
IRepository<SystemBasicData> _systemBasicDataRepository,
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Enroll> _enrollRepository,
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService
{
@ -725,7 +728,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 +772,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 +842,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 ==
@ -1086,7 +1089,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 //之前设置为加急的访视状态不变。后续提交的访视,为不加急。
@ -1178,7 +1181,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
});

View File

@ -29,6 +29,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<User> _userRepository,
IRepository<TrialUser> _trialUserRepository,
IRepository<Trial> _trialRepository,
IRepository<UserType> _userTypeRepository,
IMailVerificationService _mailVerificationService,
IDistributedLockProvider _distributedLockProvider) : BaseService, ITrialExternalUserService
{
@ -128,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;
@ -255,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 });

View File

@ -17,6 +17,8 @@ namespace IRaCIS.Application.Services
public class TrialMaintenanceService(
IRepository<TrialUser> _trialUseRepository,
IRepository<User> _userRepository,
IRepository<TrialSiteUser> _trialSiteUserRepository,
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Trial> _trialRepository) : BaseService, ITrialMaintenanceService
{
@ -188,7 +190,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"]);
@ -196,7 +198,7 @@ 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 });
}
}
@ -224,7 +226,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"]);
@ -232,7 +234,7 @@ 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 });

View File

@ -23,9 +23,15 @@ 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,
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig) : BaseService, ITrialService
{
@ -206,14 +212,14 @@ 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();
@ -242,14 +248,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"]);
@ -257,11 +263,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记录
@ -295,17 +301,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 });
}
}
}
@ -320,7 +326,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,
@ -329,7 +335,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,
@ -350,7 +356,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,
@ -359,7 +365,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,
@ -381,7 +387,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,
@ -390,7 +396,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,
@ -425,166 +431,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();
@ -666,14 +638,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
}));

View File

@ -18,6 +18,7 @@ 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
{
@ -129,7 +130,7 @@ namespace IRaCIS.Core.Application.Services
}
}
await _repository.AddRangeAsync(addArray);
await _trialSiteRepository.AddRangeAsync(addArray);
return ResponseOutput.Result(await _repository.SaveChangesAsync());
@ -157,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"]);
@ -296,13 +297,13 @@ 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"]);

View File

@ -54,6 +54,7 @@ namespace IRaCIS.Application.Services
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<Dictionary> _dictionaryRepository,
IRepository<DicomStudy> _dicomStudyRepository,
IRepository<SCPPatient> _scpPatientRepository,
IDistributedLockProvider _distributedLockProvider) : BaseService
{
@ -451,7 +452,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;
@ -472,7 +473,7 @@ namespace IRaCIS.Application.Services
series.SubjectVisitId = subjectVisitId;
}
await _repository.AddRangeAsync(newSeriesList);
await _dicomSeriesRepository.AddRangeAsync(newSeriesList);
var newInstanceList = _mapper.Map<List<DicomInstance>>(find.InstanceList);
@ -484,13 +485,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 });
}
@ -578,8 +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 });
}

View File

@ -29,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"]);

View File

@ -30,6 +30,7 @@ namespace IRaCIS.Core.Application.Services
IRepository<ReadingCustomTag> _readingCustomTagRepository,
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
IRepository<Subject> _subjectRepository,
IRepository<DicomInstance> _dicomInstanceRepository,
IServiceProvider _serviceProvider,
IRepository<DicomSeries> _dicomSeriesRepository,
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository
@ -87,7 +88,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"]);
@ -228,7 +229,7 @@ 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)
@ -279,7 +280,7 @@ namespace IRaCIS.Core.Application.Services
{
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();
@ -367,7 +368,7 @@ namespace IRaCIS.Core.Application.Services
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();
@ -489,7 +490,7 @@ 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 _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
@ -584,7 +585,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,

View File

@ -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,
@ -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);

View File

@ -38,9 +38,14 @@ namespace IRaCIS.Application.Services
IRepository<Trial> _trialRepository,
IOptionsMonitor<SystemEmailSendConfig> _systemEmailConfig,
IOptionsMonitor<ServiceVerifyConfigOption> _basicConfig,
IRepository<SystemDocument> _systemDocumentRepository,
IRepository<TrialClinicalDataSetCriterion> _trialClinicalDataSetCriterionRepository,
IRepository<DicomInstance> _dicomInstanceRepository,
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
IRepository<DicomStudy> _dicomStudyRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<VisitTask> _visitTaskRepository,
IRepository<DicomSeries> _dicomSeriesRepository,
IRepository<User> _userRepository,
IDistributedLockProvider _distributedLockProvider,
ILogger<TestService> _logger) : BaseService
@ -50,21 +55,28 @@ namespace IRaCIS.Application.Services
/// 清理一致性分析任务
/// </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 = _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();
@ -74,9 +86,9 @@ namespace IRaCIS.Application.Services
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,
@ -461,7 +473,7 @@ 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 });
}
}
}
@ -526,9 +538,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 以获取下一页的数据

View File

@ -33,7 +33,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 });

View File

@ -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);