From 7867a82e6e59e8f553bdbac151f2e4606f5cfd43 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 23 Aug 2024 13:51:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=93=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 14 +- .../TaskMedicalReviewRuleService.cs | 5 +- .../Service/Allocation/VisitTaskService.cs | 14 +- .../Service/Common/ExcelExportService.cs | 12 +- .../Service/Common/MailService.cs | 2 +- .../Service/Common/SystemBasicDataService.cs | 2 +- .../Service/Doctor/AttachmentService.cs | 2 +- .../Service/Doctor/DoctorService.cs | 5 +- .../Service/Doctor/EducationService.cs | 2 +- .../Service/Doctor/TrialExperienceService.cs | 15 +- .../Service/Document/SystemDocumentService.cs | 5 +- .../Service/Document/TrialDocumentService.cs | 26 +- .../Document/TrialEmailNoticeConfigService.cs | 5 +- .../ImageAndDoc/DownloadAndUploadService.cs | 19 +- .../Inspection/FrontAuditConfigService.cs | 16 +- .../Service/Inspection/InspectionService.cs | 57 ++-- .../Service/Institution/SiteService.cs | 3 +- .../Service/QC/ClinicalDataService.cs | 16 +- .../Service/QC/NoneDicomStudyService.cs | 6 +- .../Service/QC/QCCommon.cs | 4 +- .../Service/QC/QCListService.cs | 10 +- .../Service/QC/QCOperationService.cs | 62 ++-- .../Service/QC/TrialQCQuestionService.cs | 8 +- .../ReadingClinicalDataService.cs | 4 +- .../SiteSurvey/TrialSiteSurveyService.cs | 23 +- .../TrialSiteUser/TrialConfigService.cs | 13 +- .../TrialSiteUser/TrialExternalUserService.cs | 7 +- .../TrialSiteUser/TrialMaintenanceService.cs | 10 +- .../Service/TrialSiteUser/TrialService.cs | 310 ++++++++---------- .../Service/TrialSiteUser/TrialSiteService.cs | 11 +- .../Service/Visit/PatientService.cs | 15 +- .../Service/Visit/SubjectService.cs | 2 +- .../Service/Visit/SubjectVisitService.cs | 13 +- .../Service/Visit/VisitPlanService.cs | 9 +- IRaCIS.Core.Application/TestService.cs | 34 +- .../Triggers/SubjectStateTrigger.cs | 2 +- .../Repository/IRepository.cs | 8 +- 37 files changed, 403 insertions(+), 368 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 49de3bae4..e39cfc363 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -447,12 +447,15 @@ namespace IRaCIS.Core.API.Controllers /// /// /// + /// /// [HttpPost("NoneDicomStudy/UploadNoneDicomFile")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task UploadNoneDicomFile(UploadNoneDicomFileCommand incommand, - [FromServices] IRepository _noneDicomStudyRepository, [FromServices] IRepository _studyMonitorRepository) + [FromServices] IRepository _noneDicomStudyRepository, + [FromServices] IRepository _studyMonitorRepository, + [FromServices] IRepository _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 /// /// /// + /// /// /// [HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - public async Task UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService) + public async Task UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService, [FromServices] IRepository _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; diff --git a/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewRuleService.cs b/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewRuleService.cs index 88bc85642..e76863049 100644 --- a/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewRuleService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewRuleService.cs @@ -17,7 +17,8 @@ namespace IRaCIS.Core.Application.Service /// [ApiExplorerSettings(GroupName = "Trial")] public class TaskMedicalReviewRuleService( - IRepository _taskMedicalReviewRuleRepository) : BaseService, ITaskMedicalReviewRuleService + IRepository _taskMedicalReviewRuleRepository, + IRepository _trialUserRepository) : BaseService, ITaskMedicalReviewRuleService { @@ -30,7 +31,7 @@ namespace IRaCIS.Core.Application.Service var taskTaskMedicalReviewRuleQueryable = _taskMedicalReviewRuleRepository.Where(t => t.TrialId == inQuery.TrialId) .ProjectTo(_mapper.ConfigurationProvider); - var isHaveMIM = await _repository.AnyAsync(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}); } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 9d8042060..facd2ed87 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -45,6 +45,10 @@ namespace IRaCIS.Core.Application.Service.Allocation IRepository _trialReadingCriterionRepository, IRepository _readingQuestionCriterionTrialRepository, IRepository _readingTaskQuestionAnswerRepository, + IRepository _dicomInstanceRepository, + IRepository _dicomSeriesRepository, + IRepository _subjectCanceDoctorRepository, + IRepository _trialQCQuestionAnswerRepository, IRepository _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 /// private async Task PMReReadingConfirmOrBackInfluenceAnalysisAsync(Guid subjectId) { - if (await _repository.AnyAsync(t => t.IsAnalysisCreate && t.SubjectId == subjectId)) + if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.SubjectId == subjectId)) { await _repository.UpdatePartialFromQueryAsync(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(t => t.SubjectVisitId == subjectVisitId); - await _repository.BatchDeleteAsync(t => t.DicomSerie.IsDeleted); - await _repository.BatchDeleteAsync(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(); diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 66cf4e6ab..9b0689521 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -32,9 +32,13 @@ namespace IRaCIS.Core.Application.Service.Common public class ExcelExportService(IRepository _trialUserRepository, IRepository _visitTaskRepository, IRepository _readingQuestionCriterionTrialRepository, + IRepository _systemDocNeedConfirmedUserTypeRepository, IRepository _dicomStudyRepository, IRepository _qcChallengeRepository, IRepository _noneDicomStudyRepository, + IRepository _commonDocumentRepository, + IRepository _systemDocConfirmedUserRepository, + IRepository _trialDocConfirmedUserRepository, IRepository _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(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(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() 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(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) { diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs index 59fa8360e..4d37789c0 100644 --- a/IRaCIS.Core.Application/Service/Common/MailService.cs +++ b/IRaCIS.Core.Application/Service/Common/MailService.cs @@ -354,7 +354,7 @@ namespace IRaCIS.Application.Services messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - var trialInfo = await _repository.FirstOrDefaultAsync(t => t.Id == trialSiteSurvey.TrialId); + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurvey.TrialId); var siteInfo = await _repository.FirstOrDefaultAsync(t => t.TrialId == trialSiteSurvey.TrialId && t.Id == trialSiteSurvey.TrialSiteId, true); diff --git a/IRaCIS.Core.Application/Service/Common/SystemBasicDataService.cs b/IRaCIS.Core.Application/Service/Common/SystemBasicDataService.cs index f8e36c680..108f6f5ab 100644 --- a/IRaCIS.Core.Application/Service/Common/SystemBasicDataService.cs +++ b/IRaCIS.Core.Application/Service/Common/SystemBasicDataService.cs @@ -35,7 +35,7 @@ namespace IRaCIS.Core.Application.Services [HttpGet("{code}")] public async Task GetSystemBasicData(string code) { - return (await _repository.Where(t => t.Code == code).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); + return (await _systemBasicDataRepository.Where(t => t.Code == code).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); } diff --git a/IRaCIS.Core.Application/Service/Doctor/AttachmentService.cs b/IRaCIS.Core.Application/Service/Doctor/AttachmentService.cs index 2cf06c747..e9fd44333 100644 --- a/IRaCIS.Core.Application/Service/Doctor/AttachmentService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/AttachmentService.cs @@ -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); } diff --git a/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs b/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs index 3a280e2f6..9ac5f36f1 100644 --- a/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs @@ -11,6 +11,7 @@ namespace IRaCIS.Application.Services [ApiExplorerSettings(GroupName = "Reviewer")] public class DoctorService( IRepository _doctorRepository, + IRepository _doctorDictionaryRepository, IRepository _enrollRepository, IRepository _attachmentRepository, IRepository _doctorCriterionFileRepository, @@ -95,7 +96,7 @@ namespace IRaCIS.Application.Services var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException(); //删除中间表 Title对应的记录 - await _repository.BatchDeleteAsync(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(); @@ -364,7 +365,7 @@ namespace IRaCIS.Application.Services //_doctorDictionaryRepository.Delete(t => // t.DoctorId == specialtyUpdateModel.Id && t.KeyName == StaticData.ReadingType); - await _repository.BatchDeleteAsync(t => + await _doctorDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.DoctorId == specialtyUpdateModel.Id && (t.KeyName == StaticData.Subspeciality || t.KeyName == StaticData.ReadingType)); diff --git a/IRaCIS.Core.Application/Service/Doctor/EducationService.cs b/IRaCIS.Core.Application/Service/Doctor/EducationService.cs index ccc9d5ec1..a72dccbcd 100644 --- a/IRaCIS.Core.Application/Service/Doctor/EducationService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/EducationService.cs @@ -126,7 +126,7 @@ namespace IRaCIS.Application.Services [HttpDelete("{doctorId:guid}")] public async Task DeletePostgraduateInfo(Guid doctorId) { - var success = await _repository.BatchDeleteAsync(o => o.Id == doctorId); + var success = await _postgraduateRepository.BatchDeleteNoTrackingAsync(o => o.Id == doctorId); return ResponseOutput.Result(success); } } diff --git a/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs b/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs index f38ce1fd8..6591d0663 100644 --- a/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs @@ -8,6 +8,7 @@ namespace IRaCIS.Application.Services public class TrialExperienceService( IRepository _trialExperienceRepository, IRepository _doctorRepository, + IRepository _trialExperienceCriteriaRepository, IRepository _attachmentRepository ) : BaseService, ITrialExperienceService { @@ -67,7 +68,7 @@ namespace IRaCIS.Application.Services var trialExperience = _mapper.Map(trialExperienceViewModel); - trialExperience = await _repository.AddAsync(trialExperience); + trialExperience = await _trialExperienceRepository.AddAsync(trialExperience); List criteriaList = new List(); 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(t => t.TrialExperienceId == needUpdate.Id); + await _trialExperienceCriteriaRepository.BatchDeleteNoTrackingAsync(t => t.TrialExperienceId == needUpdate.Id); List criteriaList = new List(); @@ -119,7 +120,7 @@ namespace IRaCIS.Application.Services [HttpDelete, Route("{doctorId:guid}")] public async Task DeleteTrialExperience(Guid doctorId) { - var success = await _repository.BatchDeleteAsync(o => o.Id == doctorId); + var success = await _trialExperienceRepository.BatchDeleteNoTrackingAsync(o => o.Id == doctorId); return ResponseOutput.Result(success); } /// @@ -133,7 +134,7 @@ namespace IRaCIS.Application.Services { //_attachmentRepository.Delete(t => t.DoctorId == updateGCPExperienceParam.Id && t.Type == StaticData.GCP); - var successs = await _repository.BatchUpdateAsync(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(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 UpdateOtherExperience(ClinicalExperienceCommand updateOtherClinicalExperience) { - var success = await _repository.BatchUpdateAsync(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 diff --git a/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs b/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs index 3a77e41a1..8ea2c4670 100644 --- a/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs @@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Services [ApiExplorerSettings(GroupName = "Trial")] public class SystemDocumentService( IRepository _systemDocumentRepository, + IRepository _userRepository, IRepository _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() 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() on _userInfo.Id equals user.Id + join user in _userRepository.Where() on _userInfo.Id equals user.Id select new UnionDocumentWithConfirmInfoView() { diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs index b44940f98..a1f2d1e69 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs @@ -25,8 +25,10 @@ namespace IRaCIS.Core.Application.Services IRepository _trialRepository, ISystemDocumentService _systemDocumentService, IRepository _systemDocConfirmedUserRepository, + IRepository _systemDocNeedConfirmedUserTypeRepository, IRepository _systemDocumentRepository, IRepository _trialUserRepository, + IRepository _trialDocConfirmedUserRepository, IRepository _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() 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() 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(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(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(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() 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> GetTrialSystemDocumentList(DocumentTrialUnionQuery inQuery) { - var systemDocumentQueryable = _repository - .WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false) + var systemDocumentQueryable = _systemDocumentRepository + .WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false) .Select(t => new DocumentUnionWithUserStatView() { Id = t.Id, diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index ccb0c0ba5..785697baa 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -42,6 +42,7 @@ namespace IRaCIS.Core.Application.Service IRepository _taskMedicalReviewRepository, IRepository _visitTaskRepository, IRepository _trialUserRepository, + IRepository _trialEmailNoticeUserRepository, IRepository _subjectRepository, IRepository _subjectVisitRepository, IRepository _readingTaskQuestionAnswerRepository, @@ -1376,8 +1377,8 @@ namespace IRaCIS.Core.Application.Service { var id = (Guid)addOrEditTrialEmailNoticeConfig.Id; - await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id); - await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id); + await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id); + await _trialEmailBlackUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id); List trialEmailNoticeUsers = new List(); diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index bafb7fc8c..484a08e17 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -39,6 +39,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc IRepository _dictionaryRepository, IRepository _trialRepository, IRepository _studyMonitorRepository, + IRepository _taskStudyRepository, + IRepository _taskSeriesRepository, + IRepository _taskInstanceRepository, IRepository _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 DeleteTaskStudy(Guid visitTaskId) { - await _repository.BatchDeleteAsync(t => t.VisitTaskId == visitTaskId); - await _repository.BatchDeleteAsync(t => t.VisitTaskId == visitTaskId); - await _repository.BatchDeleteAsync(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(); } diff --git a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs index 4a434413e..0ef5a9930 100644 --- a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs @@ -944,8 +944,8 @@ namespace IRaCIS.Core.Application.Service [HttpGet] public async Task> GetAuditConfigChildList(Guid frontAuditConfigId) { - //var list = await (from data in _repository.GetQueryable().Where(x => x.Id == frontAuditConfigId) - // join childrenType in _repository.GetQueryable() 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> GetFrontAuditConfigList(FrontAuditConfigQuery iq) { - var query = from data in _repository.GetQueryable() - join childrenType in _repository.GetQueryable() 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() 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() 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() 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(t => t.Id == frontAuditConfigId); + var success = await _frontAuditConfigRepository.BatchDeleteNoTrackingAsync(t => t.Id == frontAuditConfigId); return ResponseOutput.Result(success); } diff --git a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs index 0f0112510..2e09c4465 100644 --- a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs @@ -13,6 +13,15 @@ namespace IRaCIS.Core.Application.Service.Inspection [NonDynamicWebApi] public class InspectionService( IRepository _dataInspectionRepository, + IRepository _dictionaryRepository, + IRepository _trialSignRepository, + IRepository _userRepository, + IRepository _trialSiteRepository, + IRepository _trialRepository, + IRepository _subjectRepository, + IRepository _subjectVisitRepository, + IRepository _userTypeRepository, + IRepository _visitTaskRepository, IRepository _frontAuditConfigRepository) : BaseService, IInspectionService { @@ -23,66 +32,66 @@ namespace IRaCIS.Core.Application.Service.Inspection { //_repository.GetQueryable.GetQueryable < DataInspection > - var trialData = await _repository.GetQueryable().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() + 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().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().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().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().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() 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().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().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().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().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion //from leftCriterion in criterion.DefaultIfEmpty() - //join moduleTyped in _repository.GetQueryable().Where(x => x.Code == "ModuleType") on 1 equals 1 - //join moduleTypec in _repository.GetQueryable() 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().Where(x => x.Code == "ChildrenType") on 1 equals 1 - //join childrenTypec in _repository.GetQueryable() 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().Where(x => x.Code == "ObjectType") on 1 equals 1 - //join ObjectTypec in _repository.GetQueryable() 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().Where(x => x.Code == "OptType") on 1 equals 1 - //join OptTypec in _repository.GetQueryable() 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().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().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() 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() 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(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 /// 添加签名记录 /// public async Task AddSignRecordAsync(SignDTO signDTO) { - var add = await _repository.AddAsync(_mapper.Map(signDTO)); + var add = await _trialSignRepository.AddAsync(_mapper.Map(signDTO)); var success = await _repository.SaveChangesAsync(); diff --git a/IRaCIS.Core.Application/Service/Institution/SiteService.cs b/IRaCIS.Core.Application/Service/Institution/SiteService.cs index 4076898c0..46083fb42 100644 --- a/IRaCIS.Core.Application/Service/Institution/SiteService.cs +++ b/IRaCIS.Core.Application/Service/Institution/SiteService.cs @@ -15,6 +15,7 @@ namespace IRaCIS.Application.Services IRepository _siteRepository, IRepository _trialSiteUserRepository, IDistributedLockProvider _distributedLockProvider, + IRepository _trialSiteRepository, IRepository _hospitalRepository) : BaseService, ISiteService { @@ -100,7 +101,7 @@ namespace IRaCIS.Application.Services if (siteCommand.TrialSiteId != null) { - await _repository.BatchUpdateAsync(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()); diff --git a/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs b/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs index fabc87882..6ac863684 100644 --- a/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/QC/ClinicalDataService.cs @@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Contracts [HttpPost("{trialId:guid}")] public async Task> 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 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> 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 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> 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 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 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 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(); diff --git a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs index f9d7d1b9a..e5baa7e12 100644 --- a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs @@ -44,7 +44,7 @@ namespace IRaCIS.Core.Application.Contracts public async Task> 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 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); diff --git a/IRaCIS.Core.Application/Service/QC/QCCommon.cs b/IRaCIS.Core.Application/Service/QC/QCCommon.cs index 9ab3cfa79..45feef04e 100644 --- a/IRaCIS.Core.Application/Service/QC/QCCommon.cs +++ b/IRaCIS.Core.Application/Service/QC/QCCommon.cs @@ -18,14 +18,14 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task VerifyIsCRCSubmmitAsync(IRepository _repository, IUserInfo _userInfo, Guid? subjectVisitId = null) + public async Task VerifyIsCRCSubmmitAsync(IRepository _subjectVisitRepository, IUserInfo _userInfo, Guid? subjectVisitId = null) { if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator) { //添加的时候不验证 if (subjectVisitId != null) { - if (await _repository.AnyAsync(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 已提交影像,不能进行操作。 diff --git a/IRaCIS.Core.Application/Service/QC/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs index 256299f77..c6f841f1e 100644 --- a/IRaCIS.Core.Application/Service/QC/QCListService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs @@ -446,16 +446,16 @@ namespace IRaCIS.Core.Application.Image.QA //https://github.com/dotnet/efcore/issues/26833 ef core 导航属性不支持右连接 // 直接用ProjectTo的方式 多做一次查询 代码简洁很多 特别是连表多,字段多的情况 - if (await _repository.AnyAsync(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(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(_mapper.ConfigurationProvider).ToListAsync(); return list; } else { - return await _repository.Where(t => t.IsEnable == true && t.TrialId == trialId).OrderBy(t => t.ShowOrder).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + return await _trialQCQuestionRepository.Where(t => t.IsEnable == true && t.TrialId == trialId).OrderBy(t => t.ShowOrder).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } } @@ -618,9 +618,9 @@ namespace IRaCIS.Core.Application.Image.QA /// /// [HttpPost] - public async Task> GetConsistencyCheckFile(GetConsistencyCheckFileInDto inQuery) + public async Task> GetConsistencyCheckFile(GetConsistencyCheckFileInDto inQuery, [FromServices] IRepository _inspectionFileRepository) { - var query = _repository.Where(t => t.TrialId == inQuery.TrialId) + var query = _inspectionFileRepository.Where(t => t.TrialId == inQuery.TrialId) .ProjectTo(_mapper.ConfigurationProvider); return await query.ToPagedListAsync(inQuery); diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index aa7ed7efd..78e811ce9 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -29,10 +29,16 @@ namespace IRaCIS.Core.Application.Image.QA IRepository _readingClinicalDataRepository, IRepository _clinicalDataTrialSetRepository, IRepository _qCChallengeDialogrepository, - IRepository _checkChallengeDialogrepository, + IRepository _checkChallengeDialogRepository, IRepository _trialRepository, IRepository _dicomSeriesRepository, IRepository _visitTaskRepository, + IRepository _scpPatientRepository, + IRepository _scpStudyRepository, + IRepository _trialUserRepository, + IRepository _readModuleRepository, + IRepository _dicomInstanceRepository, + IRepository _trialQCQuestionAnswerRepository, IRepository _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(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(t => t.SubjectVisitId == subjectVisitId); + await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId); - await _repository.BatchDeleteAsync(t => t.DicomSerie.IsDeleted); - await _repository.BatchDeleteAsync(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(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(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(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(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(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(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(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(t=>t.Id== patientId).Any(t => t.SCPStudyList.Count() == t.SCPStudyList.Where(t => t.SubjectVisitId == null).Count())) { - await _repository.BatchUpdateAsync(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(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 QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState) { - if (!await _repository.AnyAsync(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(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(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(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(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(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(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new QCChallenge() { CurrentQCEnum = CurrentQC.First }); - await _repository.BatchUpdateAsync(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 }); diff --git a/IRaCIS.Core.Application/Service/QC/TrialQCQuestionService.cs b/IRaCIS.Core.Application/Service/QC/TrialQCQuestionService.cs index 19a586a74..42979d9ec 100644 --- a/IRaCIS.Core.Application/Service/QC/TrialQCQuestionService.cs +++ b/IRaCIS.Core.Application/Service/QC/TrialQCQuestionService.cs @@ -22,6 +22,8 @@ namespace IRaCIS.Core.Application.Contracts public class TrialQCQuestionConfigureService( IRepository _trialQcQuestionRepository, IRepository _trialRepository, + IRepository _trialQCQuestionRepository, + IRepository _trialQCQuestionAnswerRepository, IRepository _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(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(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(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId)) + if (await _trialQCQuestionAnswerRepository.AnyAsync(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId)) { //---该审核问题已被影像质控过程引用,不允许删除 return ResponseOutput.NotOk(_localizer["TrialQCQuestion_ReferencedByQCProcess"]); diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 107ec975a..a0b47be22 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -354,7 +354,7 @@ namespace IRaCIS.Application.Services //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护 - if (await _repository.AnyAsync(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(t => t.Id == data.ClinicalDataTrialSetId) .SelectMany(t => t.TrialClinicalDataSetCriteriaList) @@ -400,7 +400,7 @@ namespace IRaCIS.Application.Services // //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护 - // if (await _repository.AnyAsync(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(t => t.Id == data.ClinicalDataTrialSetId) // .SelectMany(t => t.TrialClinicalDataSetCriteriaList) diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index 26c924924..4d7b7cf0f 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -37,6 +37,7 @@ namespace IRaCIS.Core.Application.Contracts IRepository _userRepository, IRepository _trialRepository, IRepository _trialSiteRepository, + IRepository _verificationCodeRepository, IRepository _trialUserRepository, IRepository _trialSiteUserRepository, IDistributedLockProvider _distributedLockProvider, @@ -81,7 +82,7 @@ namespace IRaCIS.Core.Application.Contracts [AllowAnonymous] public async Task VerifyEmialGetDoctorInfo(VerifyEmialGetDoctorInfoInDto inDto) { - var verificationRecord = await _repository.GetQueryable().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(t => t.Id == verificationRecord.Id); + await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id); var dockerInfo = await _repository.Where(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(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(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(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(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 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 22d77b8b4..2d6a4f3dc 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -47,6 +47,9 @@ namespace IRaCIS.Core.Application IRepository _readingTaskQuestionAnswer, IRepository _readingTableQuestionAnswerRepository, IRepository _readingTableAnswerRowInfoRepository, + IRepository _systemBasicDataRepository, + IRepository _subjectVisitRepository, + IRepository _enrollRepository, IRepository _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService { @@ -725,7 +728,7 @@ namespace IRaCIS.Core.Application [HttpGet("{signCode}")] public async Task GetSignText(string signCode) { - var signRawText = await _repository.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(); + 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(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(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(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(u => u.TrialId == trialId, e => new Enroll + await _enrollRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialId, e => new Enroll { EnrollStatus = EnrollStatus.Finished }); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs index 53921aa14..3b1fea4d3 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs @@ -29,6 +29,7 @@ namespace IRaCIS.Core.Application.Service IRepository _userRepository, IRepository _trialUserRepository, IRepository _trialRepository, + IRepository _userTypeRepository, IMailVerificationService _mailVerificationService, IDistributedLockProvider _distributedLockProvider) : BaseService, ITrialExternalUserService { @@ -128,13 +129,13 @@ namespace IRaCIS.Core.Application.Service generateUser.UserName = generateUser.UserCode; - generateUser.UserTypeEnum = _repository.Where(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 }); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs index f0e900098..54470350d 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs @@ -17,6 +17,8 @@ namespace IRaCIS.Application.Services public class TrialMaintenanceService( IRepository _trialUseRepository, IRepository _userRepository, + IRepository _trialSiteUserRepository, + IRepository _subjectVisitRepository, IRepository _trialRepository) : BaseService, ITrialMaintenanceService { @@ -188,7 +190,7 @@ namespace IRaCIS.Application.Services if (updateTrialUserCommand.IsDeleted) { - if (await _repository.AnyAsync(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(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(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(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 }); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index cf0ebde5c..7c6ac366c 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -23,9 +23,15 @@ namespace IRaCIS.Application.Services public class TrialService( IRepository _trialRepository, IRepository _trialUserRepository, + IRepository _croRepository, IRepository _enrollDetailRepository, IRepository _dictionaryRepository, IRepository _enrollRepository, + IRepository _workloadRepository, + IRepository _sponsorRepository, + IRepository _visitStageRepository, + IRepository _trialPaymentPriceRepository, + IRepository _trialDictionaryRepository, IOptionsMonitor _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(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(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(t => t.Id == updateModel.Id); + var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id); //删除中间表 Title对应的记录 - await _repository.BatchDeleteAsync(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(t => t.Id == trial.SponsorId && t.IsTrialLevel)) + if (await _sponsorRepository.AnyAsync(t => t.Id == trial.SponsorId && t.IsTrialLevel)) { - await _repository.BatchUpdateAsync(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(t => t.Id == trial.CROId && t.IsTrialLevel)) + if (await _croRepository.AnyAsync(t => t.Id == trial.CROId && t.IsTrialLevel)) { - await _repository.BatchUpdateAsync(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(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(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(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(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(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(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(o => o.SubjectVisit.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(o => o.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(o => o.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(o => o.TrialReadingCriterion.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(o => o.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.Enroll.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.NoneDicomStudy.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); - //if (await _repository.AnyAsync(u => u.TrialId == trialId)) - //{ - // return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除"); - //} + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); - //if (await _repository.AnyAsync(u => u.TrialId == trialId)) - //{ - // return ResponseOutput.NotOk("该Trial下面有Site,无法删除"); - //} + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(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(o => o.Id == trialId) || - // await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - // return ResponseOutput.Result(success1); - // } - //} - //if (await _repository.AnyAsync(u => u.TrialId == trialId)) - //{ - // return ResponseOutput.NotOk("该Trial下面有参与者,无法删除"); - //} + //await _repository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == trialId); + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.QCChallenge.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.ReadingClinicalData.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TaskMedicalReview.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TaskMedicalReview.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.VisitTask.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.ReadingPeriodSet.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.VisitTask.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.Subject.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _subjectVisitRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.InfluenceTask.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + //await _repository.BatchDeleteNoTrackingAsync(o => o.Id == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialDocument.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialDocument.TrialId == trialId); + + //await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId); + + ////await _repository.BatchDeleteAsync(t => t.TrialId == trialId) ; + //await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialSiteSurvey.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialSiteSurvey.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + + //await _repository.BatchDeleteNoTrackingAsync(t => t.OriginalReReadingTask.TrialId == trialId); + //await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); + //await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId); #endregion - await _repository.BatchDeleteAsync(o => o.SubjectVisit.TrialId == trialId); - await _repository.BatchDeleteAsync(o => o.TrialId == trialId); - await _repository.BatchDeleteAsync(o => o.TrialId == trialId); - await _repository.BatchDeleteAsync(o => o.TrialReadingCriterion.TrialId == trialId); - await _repository.BatchDeleteAsync(o => o.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.Enroll.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.NoneDicomStudy.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - - - await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId); - - - await _repository.BatchDeleteAsync(t => t.QCChallenge.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - - await _repository.BatchDeleteAsync(t => t.ReadingClinicalData.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - await _repository.BatchDeleteAsync(t => t.TaskMedicalReview.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TaskMedicalReview.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - await _repository.BatchDeleteAsync(t => t.VisitTask.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.ReadingPeriodSet.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.VisitTask.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.Subject.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.InfluenceTask.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - await _repository.BatchDeleteAsync(o => o.Id == trialId); - await _repository.BatchDeleteAsync(t => t.TrialReadingCriterion.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialReadingCriterion.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId); - - //await _repository.BatchDeleteAsync(t => t.TrialId == trialId) ; - await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - await _repository.BatchDeleteAsync(t => t.OriginalReReadingTask.TrialId == trialId); - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - await _repository.BatchDeleteAsync(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 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(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 })); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index d81a4b6d4..41fc1c5ab 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -18,6 +18,7 @@ namespace IRaCIS.Core.Application.Services IRepository _trialSiteRepository, IRepository _trialSiteUserRepository, IRepository _siteRepository, + IRepository _subjectRepository, IRepository _visitTaskRepository, IRepository _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(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(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(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(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"]); diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 02aede7c8..ff9d85f72 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -54,6 +54,7 @@ namespace IRaCIS.Application.Services IRepository _subjectVisitRepository, IRepository _dictionaryRepository, IRepository _dicomStudyRepository, + IRepository _scpPatientRepository, IDistributedLockProvider _distributedLockProvider) : BaseService { @@ -451,7 +452,7 @@ namespace IRaCIS.Application.Services { var newStuty = _mapper.Map(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>(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(t => t.Id == find.SCPStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId }); - await _repository.BatchUpdateAsync(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(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId }); - await _repository.BatchUpdateAsync(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 }); } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index eb5df2263..857722353 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -29,7 +29,7 @@ namespace IRaCIS.Application.Services public async Task> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand) { var svlist = new List(); - if (await _repository.AnyAsync(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed)) + if (await _trialRepository.AnyAsync(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed)) { //---项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。 return ResponseOutput.NotOk(_localizer["Subject_NoConfirmedPlan"]); diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index d6a5f2723..dc58f47d8 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -30,6 +30,7 @@ namespace IRaCIS.Core.Application.Services IRepository _readingCustomTagRepository, IRepository _noneDicomStudyFileRepository, IRepository _subjectRepository, + IRepository _dicomInstanceRepository, IServiceProvider _serviceProvider, IRepository _dicomSeriesRepository, IRepository _trialReadingCriterionRepository @@ -87,7 +88,7 @@ namespace IRaCIS.Core.Application.Services throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]); } - if (await _repository.AnyAsync(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(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(_mapper.ConfigurationProvider).FirstNotNullAsync(); - var instanceList = await _repository.Where(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(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(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 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(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, diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index 19e0c9162..812c5902c 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -16,6 +16,7 @@ namespace IRaCIS.Application.Services IRepository _trialRepository, IRepository _subjectVisitRepository, IRepository _influnceRepository, + IRepository _visitTaskRepository, IRepository _subjectRepository, IRepository _visitPlanInfluenceStatRepository) : BaseService, IVisitPlanService { @@ -43,9 +44,9 @@ namespace IRaCIS.Application.Services var query = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == trialId) .ProjectTo(_mapper.ConfigurationProvider).OrderBy(t => t.VisitNum); var list = await query.ToListAsync(); - var trial = (await _repository.FirstOrDefaultAsync(t => t.Id == trialId)).IfNullThrowException(); + var trial = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId)).IfNullThrowException(); - var isHaveGeneratedTask = (await _repository.AnyAsync(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(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(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); diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index b39f9fd6b..8eb6f2bce 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -38,9 +38,14 @@ namespace IRaCIS.Application.Services IRepository _trialRepository, IOptionsMonitor _systemEmailConfig, IOptionsMonitor _basicConfig, + IRepository _systemDocumentRepository, + IRepository _trialClinicalDataSetCriterionRepository, + IRepository _dicomInstanceRepository, + IRepository _systemDocConfirmedUserRepository, IRepository _dicomStudyRepository, IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository, + IRepository _dicomSeriesRepository, IRepository _userRepository, IDistributedLockProvider _distributedLockProvider, ILogger _logger) : BaseService @@ -50,21 +55,28 @@ namespace IRaCIS.Application.Services /// 清理一致性分析任务 /// /// + /// + /// + /// /// - public async Task DeleteConsistentDate(Guid trialReadingCriterionId) + public async Task DeleteConsistentDate(Guid trialReadingCriterionId, + [FromServices] IRepository _taskConsistentRuleRepository, + [FromServices] IRepository _readingConsistentClinicalDataPDFRepository, + [FromServices] IRepository _readingConsistentClinicalDataRepository + ) { var consistentSubjectIdList = _visitTaskRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true).Select(t => t.SubjectId).ToList(); - await _repository.BatchDeleteAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId); + await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId); - await _repository.BatchDeleteAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true); + await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true); - await _repository.BatchDeleteAsync(t => consistentSubjectIdList.Contains(t.ReadingConsistentClinicalData.SubjectId)); + await _readingConsistentClinicalDataPDFRepository.BatchDeleteNoTrackingAsync(t => consistentSubjectIdList.Contains(t.ReadingConsistentClinicalData.SubjectId)); - await _repository.BatchDeleteAsync(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 TestEFcore8() { - var systemDocQuery = from sysDoc in _repository.GetQueryable() + var systemDocQuery = from sysDoc in _systemDocumentRepository.Where() - join confirm in _repository.GetQueryable().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, @@ -416,7 +428,7 @@ namespace IRaCIS.Application.Services var needAddBodyPartList = searchList.Select(t => new TrialBodyPart() { Code = t.Code, Name = t.Value, NameCN = t.ValueCN }); - var trialIds = _trialRepository.Where(t => !t.TrialBodyPartList.Any()).Select(t => t.Id).ToList(); + var trialIds = _trialRepository.Where(t => !t.TrialBodyPartList.Any()).Select(t => t.Id).ToList(); foreach (var trialId in trialIds) { @@ -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(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(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key }); + await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key }); } // 设置 NextMarker 以获取下一页的数据 diff --git a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs index cb45fed4c..aeaba6f90 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs @@ -33,7 +33,7 @@ namespace IRaCIS.Core.Application.Triggers var trialSiteId = context.Entity.TrialSiteId; - await _repository.BatchUpdateAsync(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId }); + await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId }); diff --git a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs index 616d242ca..62cb6f3b5 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs @@ -68,9 +68,9 @@ namespace IRaCIS.Core.Infra.EFCore Task DeleteAsync(T entity, bool autoSave = false) where T : Entity; - Task BatchDeleteAsync(Expression> deleteFilter) where T : Entity; + Task BatchDeleteNoTrackingAsync(Expression> deleteFilter) where T : Entity; - Task BatchUpdateAsync(Expression> where, Expression> updateFactory) where T : Entity; + Task BatchUpdateNoTrackingAsync(Expression> where, Expression> updateFactory) where T : Entity; Task UpdatePartialFromQueryAsync(Expression> updateFilter, Expression> updateFactory, @@ -407,12 +407,12 @@ namespace IRaCIS.Core.Infra.EFCore #endregion - public async Task BatchDeleteAsync(Expression> deleteFilter) where T : Entity + public async Task BatchDeleteNoTrackingAsync(Expression> deleteFilter) where T : Entity { return await _dbContext.BatchDeleteNoTrackingAsync(deleteFilter); } - public async Task BatchUpdateAsync(Expression> whereFilter, Expression> updateFactory) where T : Entity + public async Task BatchUpdateNoTrackingAsync(Expression> whereFilter, Expression> updateFactory) where T : Entity { return await _dbContext.BatchUpdateNoTrackingAsync(whereFilter, updateFactory, _userInfo.Id);