整理仓储
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
e81e270d69
commit
7867a82e6e
|
@ -447,12 +447,15 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
/// <param name="incommand"></param>
|
/// <param name="incommand"></param>
|
||||||
/// <param name="_noneDicomStudyRepository"></param>
|
/// <param name="_noneDicomStudyRepository"></param>
|
||||||
/// <param name="_studyMonitorRepository"></param>
|
/// <param name="_studyMonitorRepository"></param>
|
||||||
|
/// <param name="_noneDicomStudyFileRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
|
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
|
|
||||||
public async Task<IResponseOutput> UploadNoneDicomFile(UploadNoneDicomFileCommand incommand,
|
public async Task<IResponseOutput> UploadNoneDicomFile(UploadNoneDicomFileCommand incommand,
|
||||||
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository, [FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
|
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
|
[FromServices] IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
|
[FromServices] IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
var subjectVisitId = incommand.SubjectVisitId;
|
var subjectVisitId = incommand.SubjectVisitId;
|
||||||
|
@ -460,7 +463,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
var noneDicomStudyId = incommand.NoneDicomStudyId;
|
var noneDicomStudyId = incommand.NoneDicomStudyId;
|
||||||
|
|
||||||
|
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
var sv = (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
|
var sv = (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.TrialSiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
|
||||||
|
|
||||||
|
@ -470,7 +473,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
foreach (var item in incommand.UploadedFileList)
|
foreach (var item in incommand.UploadedFileList)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId,FileType=item.FileType });
|
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId,FileType=item.FileType });
|
||||||
|
|
||||||
}
|
}
|
||||||
var uploadFinishedTime = DateTime.Now;
|
var uploadFinishedTime = DateTime.Now;
|
||||||
|
@ -503,12 +506,13 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="trialId"></param>
|
/// <param name="trialId"></param>
|
||||||
/// <param name="oSSService"></param>
|
/// <param name="oSSService"></param>
|
||||||
|
/// <param name="_inspectionFileRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
[HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")]
|
[HttpPost("QCOperation/UploadVisitCheckExcel/{trialId:guid}")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
|
|
||||||
public async Task<IResponseOutput> UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService)
|
public async Task<IResponseOutput> UploadVisitCheckExcel(Guid trialId, [FromServices] IOSSService oSSService, [FromServices] IRepository<InspectionFile> _inspectionFileRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
var fileName = string.Empty;
|
var fileName = string.Empty;
|
||||||
|
@ -530,7 +534,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/Check", realFileName);
|
var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, "InspectionUpload/Check", realFileName);
|
||||||
|
|
||||||
await _repository.AddAsync(new InspectionFile() { FileName = realFileName, RelativePath = ossRelativePath, TrialId = trialId });
|
await _inspectionFileRepository.AddAsync(new InspectionFile() { FileName = realFileName, RelativePath = ossRelativePath, TrialId = trialId });
|
||||||
|
|
||||||
return ossRelativePath;
|
return ossRelativePath;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class TaskMedicalReviewRuleService(
|
public class TaskMedicalReviewRuleService(
|
||||||
IRepository<TaskMedicalReviewRule> _taskMedicalReviewRuleRepository) : BaseService, ITaskMedicalReviewRuleService
|
IRepository<TaskMedicalReviewRule> _taskMedicalReviewRuleRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository) : BaseService, ITaskMedicalReviewRuleService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var taskTaskMedicalReviewRuleQueryable = _taskMedicalReviewRuleRepository.Where(t => t.TrialId == inQuery.TrialId)
|
var taskTaskMedicalReviewRuleQueryable = _taskMedicalReviewRuleRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.ProjectTo<TaskMedicalReviewRuleView>(_mapper.ConfigurationProvider);
|
.ProjectTo<TaskMedicalReviewRuleView>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
var isHaveMIM = await _repository.AnyAsync<TrialUser>(t => t.User.UserTypeEnum == Domain.Share.UserTypeEnum.MIM && t.TrialId==inQuery.TrialId);
|
var isHaveMIM = await _trialUserRepository.AnyAsync(t => t.User.UserTypeEnum == Domain.Share.UserTypeEnum.MIM && t.TrialId==inQuery.TrialId);
|
||||||
|
|
||||||
return (await taskTaskMedicalReviewRuleQueryable.ToListAsync(),new {IsHaveMIM=isHaveMIM});
|
return (await taskTaskMedicalReviewRuleQueryable.ToListAsync(),new {IsHaveMIM=isHaveMIM});
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
|
IRepository<SubjectCanceDoctor> _subjectCanceDoctorRepository,
|
||||||
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository) : BaseService, IVisitTaskService
|
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository) : BaseService, IVisitTaskService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -277,7 +281,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
var subjectId = cancelCommand.CancelList.First().SubjectId;
|
var subjectId = cancelCommand.CancelList.First().SubjectId;
|
||||||
|
|
||||||
await _repository.AddAsync(new SubjectCanceDoctor() { SubjectId = subjectId, Note = cancelCommand.Note, TrialReadingCriterionId = cancelCommand.TrialReadingCriterionId });
|
await _subjectCanceDoctorRepository.AddAsync(new SubjectCanceDoctor() { SubjectId = subjectId, Note = cancelCommand.Note, TrialReadingCriterionId = cancelCommand.TrialReadingCriterionId });
|
||||||
|
|
||||||
await _visitTaskRepository.SaveChangesAsync();
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -1555,7 +1559,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task PMReReadingConfirmOrBackInfluenceAnalysisAsync(Guid subjectId)
|
private async Task PMReReadingConfirmOrBackInfluenceAnalysisAsync(Guid subjectId)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<VisitTask>(t => t.IsAnalysisCreate && t.SubjectId == subjectId))
|
if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.SubjectId == subjectId))
|
||||||
{
|
{
|
||||||
await _repository.UpdatePartialFromQueryAsync<Subject>(t => t.Id == subjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = true });
|
await _repository.UpdatePartialFromQueryAsync<Subject>(t => t.Id == subjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = true });
|
||||||
|
|
||||||
|
@ -2537,9 +2541,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
//await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = "PM/APM同意一致性核查回退。", UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
//await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = "PM/APM同意一致性核查回退。", UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.DicomSerie.IsDeleted);
|
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.DicomSerie.IsDeleted);
|
||||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.IsDeleted);
|
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted);
|
||||||
|
|
||||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,13 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
public class ExcelExportService(IRepository<TrialUser> _trialUserRepository,
|
public class ExcelExportService(IRepository<TrialUser> _trialUserRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
|
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
||||||
IRepository<DicomStudy> _dicomStudyRepository,
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
IRepository<QCChallenge> _qcChallengeRepository,
|
IRepository<QCChallenge> _qcChallengeRepository,
|
||||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
|
IRepository<CommonDocument> _commonDocumentRepository,
|
||||||
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||||
|
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
|
||||||
IRepository<Subject> _subjectRepository) : BaseService
|
IRepository<Subject> _subjectRepository) : BaseService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -349,7 +353,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
||||||
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
|
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new TrainingRecordExportDTO()
|
select new TrainingRecordExportDTO()
|
||||||
|
@ -381,12 +385,12 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var systemDocQuery = from needConfirmEdUserType in _repository.WhereIf<SystemDocNeedConfirmedUserType>(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
var systemDocQuery = from needConfirmEdUserType in _systemDocNeedConfirmedUserTypeRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
||||||
|
|
||||||
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||||
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new TrainingRecordExportDTO()
|
select new TrainingRecordExportDTO()
|
||||||
{
|
{
|
||||||
|
@ -1448,7 +1452,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = _repository.Where<CommonDocument>(t => list.Select(c => c.Code).Contains(t.Code)).Select(c => new ExportDocumentDes() { Code = c.Code, FileName = _userInfo.IsEn_Us ? c.Name : c.NameCN }).ToList();
|
var result = _commonDocumentRepository.Where(t => list.Select(c => c.Code).Contains(t.Code)).Select(c => new ExportDocumentDes() { Code = c.Code, FileName = _userInfo.IsEn_Us ? c.Name : c.NameCN }).ToList();
|
||||||
|
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
|
|
|
@ -354,7 +354,7 @@ namespace IRaCIS.Application.Services
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
|
||||||
|
|
||||||
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == trialSiteSurvey.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurvey.TrialId);
|
||||||
|
|
||||||
var siteInfo = await _repository.FirstOrDefaultAsync<TrialSite>(t => t.TrialId == trialSiteSurvey.TrialId && t.Id == trialSiteSurvey.TrialSiteId, true);
|
var siteInfo = await _repository.FirstOrDefaultAsync<TrialSite>(t => t.TrialId == trialSiteSurvey.TrialId && t.Id == trialSiteSurvey.TrialSiteId, true);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[HttpGet("{code}")]
|
[HttpGet("{code}")]
|
||||||
public async Task<SystemBasicDataView> GetSystemBasicData(string code)
|
public async Task<SystemBasicDataView> GetSystemBasicData(string code)
|
||||||
{
|
{
|
||||||
return (await _repository.Where<SystemBasicData>(t => t.Code == code).ProjectTo<SystemBasicDataView>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
return (await _systemBasicDataRepository.Where(t => t.Code == code).ProjectTo<SystemBasicDataView>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,7 @@ namespace IRaCIS.Application.Services
|
||||||
attachment.IsOfficial = true;
|
attachment.IsOfficial = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.AddAsync(newAttachment);
|
await _attachmentrepository.AddAsync(newAttachment);
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _repository.SaveChangesAsync();
|
||||||
return ResponseOutput.Result(success, attachment);
|
return ResponseOutput.Result(success, attachment);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ namespace IRaCIS.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Reviewer")]
|
[ApiExplorerSettings(GroupName = "Reviewer")]
|
||||||
public class DoctorService(
|
public class DoctorService(
|
||||||
IRepository<Doctor> _doctorRepository,
|
IRepository<Doctor> _doctorRepository,
|
||||||
|
IRepository<DoctorDictionary> _doctorDictionaryRepository,
|
||||||
IRepository<Enroll> _enrollRepository,
|
IRepository<Enroll> _enrollRepository,
|
||||||
IRepository<Attachment> _attachmentRepository,
|
IRepository<Attachment> _attachmentRepository,
|
||||||
IRepository<DoctorCriterionFile> _doctorCriterionFileRepository,
|
IRepository<DoctorCriterionFile> _doctorCriterionFileRepository,
|
||||||
|
@ -95,7 +96,7 @@ namespace IRaCIS.Application.Services
|
||||||
var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException();
|
var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException();
|
||||||
|
|
||||||
//删除中间表 Title对应的记录
|
//删除中间表 Title对应的记录
|
||||||
await _repository.BatchDeleteAsync<DoctorDictionary>(t => t.DoctorId == updateModel.Id && t.KeyName == StaticData.Title);
|
await _doctorDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.DoctorId == updateModel.Id && t.KeyName == StaticData.Title);
|
||||||
|
|
||||||
|
|
||||||
var adddata = new List<DoctorDictionary>();
|
var adddata = new List<DoctorDictionary>();
|
||||||
|
@ -364,7 +365,7 @@ namespace IRaCIS.Application.Services
|
||||||
//_doctorDictionaryRepository.Delete(t =>
|
//_doctorDictionaryRepository.Delete(t =>
|
||||||
// t.DoctorId == specialtyUpdateModel.Id && t.KeyName == StaticData.ReadingType);
|
// t.DoctorId == specialtyUpdateModel.Id && t.KeyName == StaticData.ReadingType);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<DoctorDictionary>(t =>
|
await _doctorDictionaryRepository.BatchDeleteNoTrackingAsync(t =>
|
||||||
t.DoctorId == specialtyUpdateModel.Id && (t.KeyName == StaticData.Subspeciality || t.KeyName == StaticData.ReadingType));
|
t.DoctorId == specialtyUpdateModel.Id && (t.KeyName == StaticData.Subspeciality || t.KeyName == StaticData.ReadingType));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpDelete("{doctorId:guid}")]
|
[HttpDelete("{doctorId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePostgraduateInfo(Guid doctorId)
|
public async Task<IResponseOutput> DeletePostgraduateInfo(Guid doctorId)
|
||||||
{
|
{
|
||||||
var success = await _repository.BatchDeleteAsync<Postgraduate>(o => o.Id == doctorId);
|
var success = await _postgraduateRepository.BatchDeleteNoTrackingAsync(o => o.Id == doctorId);
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ namespace IRaCIS.Application.Services
|
||||||
public class TrialExperienceService(
|
public class TrialExperienceService(
|
||||||
IRepository<TrialExperience> _trialExperienceRepository,
|
IRepository<TrialExperience> _trialExperienceRepository,
|
||||||
IRepository<Doctor> _doctorRepository,
|
IRepository<Doctor> _doctorRepository,
|
||||||
|
IRepository<TrialExperienceCriteria> _trialExperienceCriteriaRepository,
|
||||||
IRepository<Attachment> _attachmentRepository
|
IRepository<Attachment> _attachmentRepository
|
||||||
) : BaseService, ITrialExperienceService
|
) : BaseService, ITrialExperienceService
|
||||||
{
|
{
|
||||||
|
@ -67,7 +68,7 @@ namespace IRaCIS.Application.Services
|
||||||
var trialExperience =
|
var trialExperience =
|
||||||
_mapper.Map<TrialExperience>(trialExperienceViewModel);
|
_mapper.Map<TrialExperience>(trialExperienceViewModel);
|
||||||
|
|
||||||
trialExperience = await _repository.AddAsync(trialExperience);
|
trialExperience = await _trialExperienceRepository.AddAsync(trialExperience);
|
||||||
|
|
||||||
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
||||||
trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria()
|
trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria()
|
||||||
|
@ -78,7 +79,7 @@ namespace IRaCIS.Application.Services
|
||||||
TrialExperienceId = trialExperience.Id
|
TrialExperienceId = trialExperience.Id
|
||||||
}));
|
}));
|
||||||
|
|
||||||
await _repository.AddRangeAsync(criteriaList);
|
await _trialExperienceCriteriaRepository.AddRangeAsync(criteriaList);
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _repository.SaveChangesAsync();
|
||||||
|
@ -93,7 +94,7 @@ namespace IRaCIS.Application.Services
|
||||||
_mapper.Map(trialExperienceViewModel, needUpdate);
|
_mapper.Map(trialExperienceViewModel, needUpdate);
|
||||||
await _repository.UpdateAsync(needUpdate);
|
await _repository.UpdateAsync(needUpdate);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialExperienceCriteria>(t => t.TrialExperienceId == needUpdate.Id);
|
await _trialExperienceCriteriaRepository.BatchDeleteNoTrackingAsync(t => t.TrialExperienceId == needUpdate.Id);
|
||||||
|
|
||||||
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
List<TrialExperienceCriteria> criteriaList = new List<TrialExperienceCriteria>();
|
||||||
|
|
||||||
|
@ -119,7 +120,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpDelete, Route("{doctorId:guid}")]
|
[HttpDelete, Route("{doctorId:guid}")]
|
||||||
public async Task<IResponseOutput> DeleteTrialExperience(Guid doctorId)
|
public async Task<IResponseOutput> DeleteTrialExperience(Guid doctorId)
|
||||||
{
|
{
|
||||||
var success = await _repository.BatchDeleteAsync<TrialExperience>(o => o.Id == doctorId);
|
var success = await _trialExperienceRepository.BatchDeleteNoTrackingAsync(o => o.Id == doctorId);
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -133,7 +134,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
//_attachmentRepository.Delete(t => t.DoctorId == updateGCPExperienceParam.Id && t.Type == StaticData.GCP);
|
//_attachmentRepository.Delete(t => t.DoctorId == updateGCPExperienceParam.Id && t.Type == StaticData.GCP);
|
||||||
|
|
||||||
var successs = await _repository.BatchUpdateAsync<Doctor>(o => o.Id == updateGCPExperienceParam.Id, u => new Doctor()
|
var successs = await _doctorRepository.BatchUpdateNoTrackingAsync(o => o.Id == updateGCPExperienceParam.Id, u => new Doctor()
|
||||||
{
|
{
|
||||||
GCP = updateGCPExperienceParam.GCP,
|
GCP = updateGCPExperienceParam.GCP,
|
||||||
GCPId = (updateGCPExperienceParam.GCP==0||updateGCPExperienceParam.GCPId==null)?Guid.Empty: updateGCPExperienceParam.GCPId!.Value
|
GCPId = (updateGCPExperienceParam.GCP==0||updateGCPExperienceParam.GCPId==null)?Guid.Empty: updateGCPExperienceParam.GCPId!.Value
|
||||||
|
@ -141,7 +142,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (updateGCPExperienceParam.GCP == 0 )
|
if (updateGCPExperienceParam.GCP == 0 )
|
||||||
{
|
{
|
||||||
await _repository.BatchDeleteAsync<Attachment>(a => a.DoctorId == updateGCPExperienceParam.Id && a.Type=="GCP");
|
await _attachmentRepository.BatchDeleteNoTrackingAsync(a => a.DoctorId == updateGCPExperienceParam.Id && a.Type=="GCP");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseOutput.Result(successs, updateGCPExperienceParam.GCPId.ToString());
|
return ResponseOutput.Result(successs, updateGCPExperienceParam.GCPId.ToString());
|
||||||
|
@ -155,7 +156,7 @@ namespace IRaCIS.Application.Services
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> UpdateOtherExperience(ClinicalExperienceCommand updateOtherClinicalExperience)
|
public async Task<IResponseOutput> UpdateOtherExperience(ClinicalExperienceCommand updateOtherClinicalExperience)
|
||||||
{
|
{
|
||||||
var success = await _repository.BatchUpdateAsync<Doctor>(o => o.Id == updateOtherClinicalExperience.DoctorId, u => new Doctor()
|
var success = await _doctorRepository.BatchUpdateNoTrackingAsync(o => o.Id == updateOtherClinicalExperience.DoctorId, u => new Doctor()
|
||||||
{
|
{
|
||||||
OtherClinicalExperience = updateOtherClinicalExperience.OtherClinicalExperience ?? string.Empty,
|
OtherClinicalExperience = updateOtherClinicalExperience.OtherClinicalExperience ?? string.Empty,
|
||||||
OtherClinicalExperienceCN = updateOtherClinicalExperience.OtherClinicalExperienceCN ?? string.Empty
|
OtherClinicalExperienceCN = updateOtherClinicalExperience.OtherClinicalExperienceCN ?? string.Empty
|
||||||
|
|
|
@ -17,6 +17,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[ApiExplorerSettings(GroupName = "Trial")]
|
[ApiExplorerSettings(GroupName = "Trial")]
|
||||||
public class SystemDocumentService(
|
public class SystemDocumentService(
|
||||||
IRepository<SystemDocument> _systemDocumentRepository,
|
IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository) : BaseService, ISystemDocumentService
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository) : BaseService, ISystemDocumentService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -146,10 +147,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var query = from sysDoc in _systemDocumentRepository.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
var query = from sysDoc in _systemDocumentRepository.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
||||||
.WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId)
|
.WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId)
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = _userInfo.Id, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = _userInfo.Id, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
|
|
||||||
join user in _repository.GetQueryable<User>() on _userInfo.Id equals user.Id
|
join user in _userRepository.Where() on _userInfo.Id equals user.Id
|
||||||
|
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,8 +25,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
ISystemDocumentService _systemDocumentService,
|
ISystemDocumentService _systemDocumentService,
|
||||||
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||||
|
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
||||||
IRepository<SystemDocument> _systemDocumentRepository,
|
IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<TrialDocConfirmedUser> _trialDocConfirmedUserRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository) : BaseService, ITrialDocumentService
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository) : BaseService, ITrialDocumentService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -60,7 +62,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
|
.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 trialUser in _trialUserRepository.Where(t => t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>() on
|
join confirm in _trialDocConfirmedUserRepository.Where() on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
|
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
|
@ -228,7 +230,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id)
|
||||||
on needConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on needConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmedUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmedUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
@ -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)))
|
.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 trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserId == _userInfo.Id) on trialDoc.TrialId equals trialUser.TrialId
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
|
@ -398,7 +400,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
.WhereIf(inQuery.UserTypeId != null, t => t.User.UserTypeId == inQuery.UserTypeId)
|
||||||
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
|
|
||||||
join confirm in _repository.Where<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on
|
||||||
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
|
@ -430,12 +432,12 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var systemDocQuery = from needConfirmEdUserType in _repository.WhereIf<SystemDocNeedConfirmedUserType>(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
var systemDocQuery = from needConfirmEdUserType in _systemDocNeedConfirmedUserTypeRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime)
|
||||||
|
|
||||||
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
join trialUser in _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
.WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId)
|
||||||
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
on needConfirmEdUserType.NeedConfirmUserTypeId equals trialUser.User.UserTypeId
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmEdUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc
|
||||||
from confirm in cc.DefaultIfEmpty()
|
from confirm in cc.DefaultIfEmpty()
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
|
@ -619,7 +621,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,7 +632,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,7 +649,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _systemDocConfirmedUserRepository.AnyAsync(t => t.SystemDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _systemDocConfirmedUserRepository.AddAsync(new SystemDocConfirmedUser() { SystemDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,7 +664,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
if (!await _trialDocUserTypeConfirmedUserRepository.AnyAsync(t => t.TrialDocumentId == documentId && t.ConfirmUserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
await _trialDocConfirmedUserRepository.AddAsync(new TrialDocConfirmedUser() { TrialDocumentId = documentId, ConfirmUserId = _userInfo.Id, SignFirstViewTime = DateTime.Now });
|
||||||
|
|
||||||
}
|
}
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _repository.SaveChangesAsync();
|
||||||
|
@ -806,8 +808,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
public async Task<PageOutput<DocumentUnionWithUserStatView>> GetTrialSystemDocumentList(DocumentTrialUnionQuery inQuery)
|
public async Task<PageOutput<DocumentUnionWithUserStatView>> GetTrialSystemDocumentList(DocumentTrialUnionQuery inQuery)
|
||||||
{
|
{
|
||||||
var systemDocumentQueryable = _repository
|
var systemDocumentQueryable = _systemDocumentRepository
|
||||||
.WhereIf<SystemDocument>(!_userInfo.IsAdmin, t => t.IsDeleted == false)
|
.WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false)
|
||||||
.Select(t => new DocumentUnionWithUserStatView()
|
.Select(t => new DocumentUnionWithUserStatView()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
|
|
|
@ -42,6 +42,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<TrialEmailNoticeUser> _trialEmailNoticeUserRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
|
||||||
|
@ -1376,8 +1377,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var id = (Guid)addOrEditTrialEmailNoticeConfig.Id;
|
var id = (Guid)addOrEditTrialEmailNoticeConfig.Id;
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||||
await _repository.BatchDeleteAsync<TrialEmailBlackUser>(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
await _trialEmailBlackUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id);
|
||||||
|
|
||||||
|
|
||||||
List<TrialEmailNoticeUser> trialEmailNoticeUsers = new List<TrialEmailNoticeUser>();
|
List<TrialEmailNoticeUser> trialEmailNoticeUsers = new List<TrialEmailNoticeUser>();
|
||||||
|
|
|
@ -39,6 +39,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<StudyMonitor> _studyMonitorRepository,
|
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
|
IRepository<TaskStudy> _taskStudyRepository,
|
||||||
|
IRepository<TaskSeries> _taskSeriesRepository,
|
||||||
|
IRepository<TaskInstance> _taskInstanceRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService
|
||||||
{
|
{
|
||||||
|
@ -316,7 +319,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
SpecialArchiveStudyDeal(study);
|
SpecialArchiveStudyDeal(study);
|
||||||
modalitys = study.Modalities;
|
modalitys = study.Modalities;
|
||||||
|
|
||||||
await _repository.AddAsync(study);
|
await _taskStudyRepository.AddAsync(study);
|
||||||
|
|
||||||
|
|
||||||
studyMonitor.StudyId = study.Id;
|
studyMonitor.StudyId = study.Id;
|
||||||
|
@ -338,7 +341,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
||||||
series.InstanceCount = seriesItem.InstanceList.Count;
|
series.InstanceCount = seriesItem.InstanceList.Count;
|
||||||
|
|
||||||
await _repository.AddAsync(series);
|
await _taskSeriesRepository.AddAsync(series);
|
||||||
|
|
||||||
foreach (var instanceItem in seriesItem.InstanceList)
|
foreach (var instanceItem in seriesItem.InstanceList)
|
||||||
{
|
{
|
||||||
|
@ -355,7 +358,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
isntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
isntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
||||||
|
|
||||||
await _repository.AddAsync(isntance);
|
await _taskInstanceRepository.AddAsync(isntance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -403,7 +406,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//series.SubjectVisitId = incommand.SubjectVisitId;
|
//series.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
|
|
||||||
|
|
||||||
dicomSeries = await _repository.AddAsync(series);
|
dicomSeries = await _taskSeriesRepository.AddAsync(series);
|
||||||
|
|
||||||
//新的序列 那么 检查的序列数量+1
|
//新的序列 那么 检查的序列数量+1
|
||||||
study.SeriesCount += 1;
|
study.SeriesCount += 1;
|
||||||
|
@ -425,7 +428,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
insntance.SubjectId = incommand.SubjectId;
|
insntance.SubjectId = incommand.SubjectId;
|
||||||
insntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
insntance.VisitTaskId = findOriginStudy.VisitTaskId;
|
||||||
|
|
||||||
await _repository.AddAsync(insntance);
|
await _taskInstanceRepository.AddAsync(insntance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -468,9 +471,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
public async Task<IResponseOutput> DeleteTaskStudy(Guid visitTaskId)
|
public async Task<IResponseOutput> DeleteTaskStudy(Guid visitTaskId)
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TaskStudy>(t => t.VisitTaskId == visitTaskId);
|
await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||||
await _repository.BatchDeleteAsync<TaskSeries>(t => t.VisitTaskId == visitTaskId);
|
await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||||
await _repository.BatchDeleteAsync<TaskInstance>(t => t.VisitTaskId == visitTaskId);
|
await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId);
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
|
@ -944,8 +944,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<List<FrontAuditConfigDTO>> GetAuditConfigChildList(Guid frontAuditConfigId)
|
public async Task<List<FrontAuditConfigDTO>> GetAuditConfigChildList(Guid frontAuditConfigId)
|
||||||
{
|
{
|
||||||
//var list = await (from data in _repository.GetQueryable<FrontAuditConfig>().Where(x => x.Id == frontAuditConfigId)
|
//var list = await (from data in _frontAuditConfigRepository.Where().Where(x => x.Id == frontAuditConfigId)
|
||||||
// join childrenType in _repository.GetQueryable<FrontAuditConfig>() on data.Id equals childrenType.ParentId
|
// join childrenType in _frontAuditConfigRepository.Where() on data.Id equals childrenType.ParentId
|
||||||
// select childrenType).OrderBy(x => x.Sort).ToListAsync();
|
// select childrenType).OrderBy(x => x.Sort).ToListAsync();
|
||||||
//return list;
|
//return list;
|
||||||
|
|
||||||
|
@ -1094,14 +1094,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
|
public async Task<List<FrontAuditConfigView>> GetFrontAuditConfigList(FrontAuditConfigQuery iq)
|
||||||
{
|
{
|
||||||
var query = from data in _repository.GetQueryable<FrontAuditConfig>()
|
var query = from data in _frontAuditConfigRepository.Where()
|
||||||
join childrenType in _repository.GetQueryable<Dictionary>() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
|
join childrenType in _dictionaryRepository.Where() on data.ChildrenTypeId equals childrenType.Id into childrenTypetemp
|
||||||
from leftchildrenType in childrenTypetemp.DefaultIfEmpty()
|
from leftchildrenType in childrenTypetemp.DefaultIfEmpty()
|
||||||
join ModuleType in _repository.GetQueryable<Dictionary>() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp
|
join ModuleType in _dictionaryRepository.Where() on data.ModuleTypeId equals ModuleType.Id into ModuleTypetemp
|
||||||
from leftModuleType in ModuleTypetemp.DefaultIfEmpty()
|
from leftModuleType in ModuleTypetemp.DefaultIfEmpty()
|
||||||
join OptTypeId in _repository.GetQueryable<Dictionary>() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp
|
join OptTypeId in _dictionaryRepository.Where() on data.OptTypeId equals OptTypeId.Id into OptTypeIdtemp
|
||||||
from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty()
|
from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty()
|
||||||
join ObjectTypeId in _repository.GetQueryable<Dictionary>() on data.ObjectTypeId equals ObjectTypeId.Id into ObjectTypeIdtemp
|
join ObjectTypeId in _dictionaryRepository.Where() on data.ObjectTypeId equals ObjectTypeId.Id into ObjectTypeIdtemp
|
||||||
from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty()
|
from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty()
|
||||||
select new FrontAuditConfigView()
|
select new FrontAuditConfigView()
|
||||||
{
|
{
|
||||||
|
@ -1237,7 +1237,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//---存在子类 不能删除
|
//---存在子类 不能删除
|
||||||
return ResponseOutput.NotOk(_localizer["FrontAudit_CannotDelSub"]);
|
return ResponseOutput.NotOk(_localizer["FrontAudit_CannotDelSub"]);
|
||||||
}
|
}
|
||||||
var success = await _repository.BatchDeleteAsync<FrontAuditConfig>(t => t.Id == frontAuditConfigId);
|
var success = await _frontAuditConfigRepository.BatchDeleteNoTrackingAsync(t => t.Id == frontAuditConfigId);
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,15 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
[NonDynamicWebApi]
|
[NonDynamicWebApi]
|
||||||
public class InspectionService(
|
public class InspectionService(
|
||||||
IRepository<DataInspection> _dataInspectionRepository,
|
IRepository<DataInspection> _dataInspectionRepository,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<TrialSign> _trialSignRepository,
|
||||||
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<UserType> _userTypeRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<FrontAuditConfig> _frontAuditConfigRepository) : BaseService, IInspectionService
|
IRepository<FrontAuditConfig> _frontAuditConfigRepository) : BaseService, IInspectionService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -23,66 +32,66 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
{
|
{
|
||||||
//_repository.GetQueryable.GetQueryable < DataInspection >
|
//_repository.GetQueryable.GetQueryable < DataInspection >
|
||||||
|
|
||||||
var trialData = await _repository.GetQueryable<Trial>().Where(x => x.Id == inQuery.TrialId).AsNoTracking().FirstNotNullAsync();
|
var trialData = await _trialRepository.Where(x => x.Id == inQuery.TrialId).AsNoTracking().FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
trialData.TrialFinishTime = trialData.TrialFinishTime == null ? DateTime.Now : trialData.TrialFinishTime;
|
trialData.TrialFinishTime = trialData.TrialFinishTime == null ? DateTime.Now : trialData.TrialFinishTime;
|
||||||
|
|
||||||
#region 逻辑代码
|
#region 逻辑代码
|
||||||
var query = from data in _repository.GetQueryable<DataInspection>()
|
var query = from data in _dataInspectionRepository.Where()
|
||||||
//.Where(x => (x.TrialId == dto.TrialId)||(x.TrialId==null&&x.CreateTime>= trialData.CreateTime && x.CreateTime <= trialData.TrialFinishTime))
|
//.Where(x => (x.TrialId == dto.TrialId)||(x.TrialId==null&&x.CreateTime>= trialData.CreateTime && x.CreateTime <= trialData.TrialFinishTime))
|
||||||
|
|
||||||
|
|
||||||
join trial in _repository.GetQueryable<Trial>().IgnoreQueryFilters() on data.TrialId equals trial.Id into trialtemp
|
join trial in _trialRepository.Where().IgnoreQueryFilters() on data.TrialId equals trial.Id into trialtemp
|
||||||
from leftrial in trialtemp.DefaultIfEmpty()
|
from leftrial in trialtemp.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
||||||
join trialSite in _repository.GetQueryable<TrialSite>().IgnoreQueryFilters() on data.TrialSiteId equals trialSite.Id into trialSitetemp
|
join trialSite in _trialSiteRepository.Where().IgnoreQueryFilters() on data.TrialSiteId equals trialSite.Id into trialSitetemp
|
||||||
from lefttrialSite in trialSitetemp.DefaultIfEmpty()
|
from lefttrialSite in trialSitetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
||||||
join subject in _repository.GetQueryable<Subject>().IgnoreQueryFilters() on data.SubjectId equals subject.Id into subtemp
|
join subject in _subjectRepository.Where().IgnoreQueryFilters() on data.SubjectId equals subject.Id into subtemp
|
||||||
from leftsubject in subtemp.DefaultIfEmpty()
|
from leftsubject in subtemp.DefaultIfEmpty()
|
||||||
join subjectVisit in _repository.GetQueryable<SubjectVisit>().IgnoreQueryFilters() on data.SubjectVisitId equals subjectVisit.Id into subjectVisittemp
|
join subjectVisit in _subjectVisitRepository.Where().IgnoreQueryFilters() on data.SubjectVisitId equals subjectVisit.Id into subjectVisittemp
|
||||||
from leftsubjectVisit in subjectVisittemp.DefaultIfEmpty()
|
from leftsubjectVisit in subjectVisittemp.DefaultIfEmpty()
|
||||||
join parent in _repository.GetQueryable<DataInspection>() on data.ParentId equals parent.Id into parenttemp
|
join parent in _dataInspectionRepository.Where() on data.ParentId equals parent.Id into parenttemp
|
||||||
from leftparent in parenttemp.DefaultIfEmpty()
|
from leftparent in parenttemp.DefaultIfEmpty()
|
||||||
join user in _repository.GetQueryable<User>().IgnoreQueryFilters() on data.CreateUserId equals user.Id into usertemp
|
join user in _userRepository.Where().IgnoreQueryFilters() on data.CreateUserId equals user.Id into usertemp
|
||||||
from leftuser in usertemp.DefaultIfEmpty()
|
from leftuser in usertemp.DefaultIfEmpty()
|
||||||
join usertype in _repository.GetQueryable<UserType>().IgnoreQueryFilters() on leftuser.UserTypeId equals usertype.Id into usertypetemp
|
join usertype in _userTypeRepository.Where().IgnoreQueryFilters() on leftuser.UserTypeId equals usertype.Id into usertypetemp
|
||||||
from leftusertype in usertypetemp.DefaultIfEmpty()
|
from leftusertype in usertypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
join visttask in _repository.GetQueryable<VisitTask>().IgnoreQueryFilters() on data.VisitTaskId equals visttask.Id into visttasktemp
|
join visttask in _visitTaskRepository.Where().IgnoreQueryFilters() on data.VisitTaskId equals visttask.Id into visttasktemp
|
||||||
from leftvisttask in visttasktemp.DefaultIfEmpty()
|
from leftvisttask in visttasktemp.DefaultIfEmpty()
|
||||||
|
|
||||||
//join trialCriterion in _repository.GetQueryable<ReadingQuestionCriterionTrial>().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion
|
//join trialCriterion in _repository.GetQueryable<ReadingQuestionCriterionTrial>().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion
|
||||||
//from leftCriterion in criterion.DefaultIfEmpty()
|
//from leftCriterion in criterion.DefaultIfEmpty()
|
||||||
|
|
||||||
//join moduleTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ModuleType") on 1 equals 1
|
//join moduleTyped in _dictionaryRepository.Where().Where(x => x.Code == "ModuleType") on 1 equals 1
|
||||||
//join moduleTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = moduleTyped.Id, ModuleType = data.ModuleType } equals new { ParentId = moduleTypec.ParentId.Value, ModuleType = moduleTypec.Value } into moduleTypectemp
|
//join moduleTypec in _dictionaryRepository.Where() on new { ParentId = moduleTyped.Id, ModuleType = data.ModuleType } equals new { ParentId = moduleTypec.ParentId.Value, ModuleType = moduleTypec.Value } into moduleTypectemp
|
||||||
|
|
||||||
//join childrenTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ChildrenType") on 1 equals 1
|
//join childrenTyped in _dictionaryRepository.Where().Where(x => x.Code == "ChildrenType") on 1 equals 1
|
||||||
//join childrenTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = childrenTyped.Id, ModuleType = data.ChildrenType } equals new { ParentId = childrenTypec.ParentId.Value, ModuleType = childrenTypec.Value } into childrenTypectemp
|
//join childrenTypec in _dictionaryRepository.Where() on new { ParentId = childrenTyped.Id, ModuleType = data.ChildrenType } equals new { ParentId = childrenTypec.ParentId.Value, ModuleType = childrenTypec.Value } into childrenTypectemp
|
||||||
//from leftchildrenTypec in childrenTypectemp.DefaultIfEmpty()
|
//from leftchildrenTypec in childrenTypectemp.DefaultIfEmpty()
|
||||||
|
|
||||||
//join ObjectTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ObjectType") on 1 equals 1
|
//join ObjectTyped in _dictionaryRepository.Where().Where(x => x.Code == "ObjectType") on 1 equals 1
|
||||||
//join ObjectTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = ObjectTyped.Id, ModuleType = data.ObjectType } equals new { ParentId = ObjectTypec.ParentId.Value, ModuleType = ObjectTypec.Value } into objectTypetemp
|
//join ObjectTypec in _dictionaryRepository.Where() on new { ParentId = ObjectTyped.Id, ModuleType = data.ObjectType } equals new { ParentId = ObjectTypec.ParentId.Value, ModuleType = ObjectTypec.Value } into objectTypetemp
|
||||||
//from leftObjectType in objectTypetemp.DefaultIfEmpty()
|
//from leftObjectType in objectTypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
//join OptTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "OptType") on 1 equals 1
|
//join OptTyped in _dictionaryRepository.Where().Where(x => x.Code == "OptType") on 1 equals 1
|
||||||
//join OptTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = OptTyped.Id, ModuleType = data.OptType } equals new { ParentId = OptTypec.ParentId.Value, ModuleType = OptTypec.Value } into optTypetemp
|
//join OptTypec in _dictionaryRepository.Where() on new { ParentId = OptTyped.Id, ModuleType = data.OptType } equals new { ParentId = OptTypec.ParentId.Value, ModuleType = OptTypec.Value } into optTypetemp
|
||||||
//from leftOptType in optTypetemp.DefaultIfEmpty()
|
//from leftOptType in optTypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
|
|
||||||
join trialSign in _repository.GetQueryable<TrialSign>().IgnoreQueryFilters() on data.SignId equals trialSign.Id into trialSigntemp
|
join trialSign in _trialSignRepository.Where().IgnoreQueryFilters() on data.SignId equals trialSign.Id into trialSigntemp
|
||||||
from lefttrialSign in trialSigntemp.DefaultIfEmpty()
|
from lefttrialSign in trialSigntemp.DefaultIfEmpty()
|
||||||
join leftfrontAuditConfig in _repository.GetQueryable<FrontAuditConfig>().Where(x => x.ConfigType == "M" && x.Identification != null && x.IsEnable == true) on
|
join leftfrontAuditConfig in _frontAuditConfigRepository.Where().Where(x => x.ConfigType == "M" && x.Identification != null && x.IsEnable == true) on
|
||||||
data.Identification.ToLower()
|
data.Identification.ToLower()
|
||||||
equals
|
equals
|
||||||
leftfrontAuditConfig.Identification.ToLower()
|
leftfrontAuditConfig.Identification.ToLower()
|
||||||
join moduleTypec in _repository.GetQueryable<Dictionary>() on new { ModuleType = leftfrontAuditConfig.ModuleTypeId!.Value } equals new { ModuleType = moduleTypec.Id } into moduleTypectemp
|
join moduleTypec in _dictionaryRepository.Where() on new { ModuleType = leftfrontAuditConfig.ModuleTypeId!.Value } equals new { ModuleType = moduleTypec.Id } into moduleTypectemp
|
||||||
from leftmoduleTypec in moduleTypectemp.DefaultIfEmpty()
|
from leftmoduleTypec in moduleTypectemp.DefaultIfEmpty()
|
||||||
join OptTypec in _repository.GetQueryable<Dictionary>() on new { ModuleType = leftfrontAuditConfig.OptTypeId!.Value } equals new { ModuleType = OptTypec.Id } into optTypetemp
|
join OptTypec in _dictionaryRepository.Where() on new { ModuleType = leftfrontAuditConfig.OptTypeId!.Value } equals new { ModuleType = OptTypec.Id } into optTypetemp
|
||||||
from leftOptType in optTypetemp.DefaultIfEmpty()
|
from leftOptType in optTypetemp.DefaultIfEmpty()
|
||||||
|
|
||||||
select new GetDataInspectionOutDto()
|
select new GetDataInspectionOutDto()
|
||||||
|
@ -242,7 +251,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
{
|
{
|
||||||
if (response.IsSuccess)
|
if (response.IsSuccess)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
|
await _trialSignRepository.BatchUpdateNoTrackingAsync(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +277,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
|
||||||
/// <summary> 添加签名记录 </summary> ///
|
/// <summary> 添加签名记录 </summary> ///
|
||||||
public async Task<Guid> AddSignRecordAsync(SignDTO signDTO)
|
public async Task<Guid> AddSignRecordAsync(SignDTO signDTO)
|
||||||
{
|
{
|
||||||
var add = await _repository.AddAsync(_mapper.Map<TrialSign>(signDTO));
|
var add = await _trialSignRepository.AddAsync(_mapper.Map<TrialSign>(signDTO));
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _repository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Site> _siteRepository,
|
IRepository<Site> _siteRepository,
|
||||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
IRepository<Hospital> _hospitalRepository) : BaseService, ISiteService
|
IRepository<Hospital> _hospitalRepository) : BaseService, ISiteService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (siteCommand.TrialSiteId != null)
|
if (siteCommand.TrialSiteId != null)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<TrialSite>(t => t.Id == siteCommand.TrialSiteId, u => new TrialSite() { SiteId = site.Id });
|
await _trialSiteRepository.BatchUpdateNoTrackingAsync(t => t.Id == siteCommand.TrialSiteId, u => new TrialSite() { SiteId = site.Id });
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseOutput.Ok(site.Id.ToString());
|
return ResponseOutput.Ok(site.Id.ToString());
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousHistory(PreviousHistoryAddOrEdit addOrEditPreviousHistory)
|
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousHistory(PreviousHistoryAddOrEdit addOrEditPreviousHistory)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousHistory.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousHistory.SubjectVisitId);
|
||||||
|
|
||||||
var entity = await _previousHistoryRepository.InsertOrUpdateAsync(addOrEditPreviousHistory, true);
|
var entity = await _previousHistoryRepository.InsertOrUpdateAsync(addOrEditPreviousHistory, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
@ -64,7 +64,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousHistoryId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousHistoryId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousHistory(Guid previousHistoryId,Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousHistory(Guid previousHistoryId,Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
await _previousHistoryRepository.DeleteFromQueryAsync(t => t.Id == previousHistoryId,true);
|
await _previousHistoryRepository.DeleteFromQueryAsync(t => t.Id == previousHistoryId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousOther(PreviousOtherAddOrEdit addOrEditPreviousOther)
|
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousOther(PreviousOtherAddOrEdit addOrEditPreviousOther)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousOther.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousOther.SubjectVisitId);
|
||||||
var entity = await _previousOtherRepository.InsertOrUpdateAsync(addOrEditPreviousOther, true);
|
var entity = await _previousOtherRepository.InsertOrUpdateAsync(addOrEditPreviousOther, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousOtherId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousOtherId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousOther(Guid previousOtherId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousOther(Guid previousOtherId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
await _previousOtherRepository.DeleteFromQueryAsync(t => t.Id == previousOtherId,true);
|
await _previousOtherRepository.DeleteFromQueryAsync(t => t.Id == previousOtherId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
@ -109,7 +109,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousSurgery(PreviousSurgeryAddOrEdit addOrEditPreviousSurgery)
|
public async Task<IResponseOutput<Guid>> AddOrUpdatePreviousSurgery(PreviousSurgeryAddOrEdit addOrEditPreviousSurgery)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousSurgery.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousSurgery.SubjectVisitId);
|
||||||
var entity = await _previousSurgeryRepository.InsertOrUpdateAsync(addOrEditPreviousSurgery, true);
|
var entity = await _previousSurgeryRepository.InsertOrUpdateAsync(addOrEditPreviousSurgery, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousSurgeryId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousSurgeryId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousSurgery(Guid previousSurgeryId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousSurgery(Guid previousSurgeryId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
var success = await _previousSurgeryRepository.DeleteFromQueryAsync(t => t.Id == previousSurgeryId,true);
|
var success = await _previousSurgeryRepository.DeleteFromQueryAsync(t => t.Id == previousSurgeryId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public async Task<IResponseOutput> AddOrUpdatePreviousPDF(PreviousPDFAddOrEdit addOrEditPreviousPDF)
|
public async Task<IResponseOutput> AddOrUpdatePreviousPDF(PreviousPDFAddOrEdit addOrEditPreviousPDF)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditPreviousPDF.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditPreviousPDF.SubjectVisitId);
|
||||||
var entity = await _previousPdfRepository.InsertOrUpdateAsync(addOrEditPreviousPDF, true);
|
var entity = await _previousPdfRepository.InsertOrUpdateAsync(addOrEditPreviousPDF, true);
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousPDFId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{previousPDFId:guid}")]
|
||||||
public async Task<IResponseOutput> DeletePreviousPDF(Guid previousPDFId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeletePreviousPDF(Guid previousPDFId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
await _previousPdfRepository.DeleteFromQueryAsync(t => t.Id == previousPDFId,true);
|
await _previousPdfRepository.DeleteFromQueryAsync(t => t.Id == previousPDFId,true);
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public async Task<IResponseOutput<NoneDicomStudyAddReturnDto>> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy)
|
public async Task<IResponseOutput<NoneDicomStudyAddReturnDto>> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy)
|
||||||
{
|
{
|
||||||
|
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, addOrEditNoneDicomStudy.SubjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, addOrEditNoneDicomStudy.SubjectVisitId);
|
||||||
|
|
||||||
if ( _trialRepository.Where(t => t.Id == addOrEditNoneDicomStudy.TrialId).Any(t => t.IsVerifyVisitImageDate==true))
|
if ( _trialRepository.Where(t => t.Id == addOrEditNoneDicomStudy.TrialId).Any(t => t.IsVerifyVisitImageDate==true))
|
||||||
{
|
{
|
||||||
|
@ -94,7 +94,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
||||||
|
|
||||||
|
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
await _noneDicomStudyRepository.DeleteFromQueryAsync(noneDicomStudyId);
|
await _noneDicomStudyRepository.DeleteFromQueryAsync(noneDicomStudyId);
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId, Guid subjectVisitId)
|
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
|
||||||
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
|
await _qCCommon.VerifyIsCRCSubmmitAsync(_subjectVisitRepository, _userInfo, subjectVisitId);
|
||||||
|
|
||||||
var noneDicomStudyFile = await _noneDicomStudyFileRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyFileId);
|
var noneDicomStudyFile = await _noneDicomStudyFileRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyFileId);
|
||||||
|
|
||||||
|
|
|
@ -18,14 +18,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// <param name="subjectVisitId"></param>
|
/// <param name="subjectVisitId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
public async Task VerifyIsCRCSubmmitAsync(IRepository _repository, IUserInfo _userInfo, Guid? subjectVisitId = null)
|
public async Task VerifyIsCRCSubmmitAsync(IRepository<SubjectVisit> _subjectVisitRepository, IUserInfo _userInfo, Guid? subjectVisitId = null)
|
||||||
{
|
{
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||||
{
|
{
|
||||||
//添加的时候不验证
|
//添加的时候不验证
|
||||||
if (subjectVisitId != null)
|
if (subjectVisitId != null)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<SubjectVisit>(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted &&
|
if (await _subjectVisitRepository.AnyAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted &&
|
||||||
(!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))))
|
(!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))))
|
||||||
{
|
{
|
||||||
//---CRC 已提交影像,不能进行操作。
|
//---CRC 已提交影像,不能进行操作。
|
||||||
|
|
|
@ -446,16 +446,16 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
//https://github.com/dotnet/efcore/issues/26833 ef core 导航属性不支持右连接
|
//https://github.com/dotnet/efcore/issues/26833 ef core 导航属性不支持右连接
|
||||||
|
|
||||||
// 直接用ProjectTo的方式 多做一次查询 代码简洁很多 特别是连表多,字段多的情况
|
// 直接用ProjectTo的方式 多做一次查询 代码简洁很多 特别是连表多,字段多的情况
|
||||||
if (await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType))
|
if (await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType))
|
||||||
{
|
{
|
||||||
var list = await _repository.Where<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType).OrderBy(t => t.TrialQCQuestionConfigure.ShowOrder)
|
var list = await _trialQCQuestionAnswerRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType).OrderBy(t => t.TrialQCQuestionConfigure.ShowOrder)
|
||||||
.ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return await _repository.Where<TrialQCQuestion>(t => t.IsEnable == true && t.TrialId == trialId).OrderBy(t => t.ShowOrder).ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
return await _trialQCQuestionRepository.Where(t => t.IsEnable == true && t.TrialId == trialId).OrderBy(t => t.ShowOrder).ProjectTo<QCQuestionAnswerItemDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -618,9 +618,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<PageOutput<GetUserUploadFileDto>> GetConsistencyCheckFile(GetConsistencyCheckFileInDto inQuery)
|
public async Task<PageOutput<GetUserUploadFileDto>> GetConsistencyCheckFile(GetConsistencyCheckFileInDto inQuery, [FromServices] IRepository<InspectionFile> _inspectionFileRepository)
|
||||||
{
|
{
|
||||||
var query = _repository.Where<InspectionFile>(t => t.TrialId == inQuery.TrialId)
|
var query = _inspectionFileRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
.ProjectTo<GetUserUploadFileDto>(_mapper.ConfigurationProvider);
|
.ProjectTo<GetUserUploadFileDto>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
return await query.ToPagedListAsync(inQuery);
|
return await query.ToPagedListAsync(inQuery);
|
||||||
|
|
|
@ -29,10 +29,16 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
IRepository<ReadingClinicalData> _readingClinicalDataRepository,
|
||||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||||
IRepository<QCChallengeDialog> _qCChallengeDialogrepository,
|
IRepository<QCChallengeDialog> _qCChallengeDialogrepository,
|
||||||
IRepository<CheckChallengeDialog> _checkChallengeDialogrepository,
|
IRepository<CheckChallengeDialog> _checkChallengeDialogRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<SCPPatient> _scpPatientRepository,
|
||||||
|
IRepository<SCPStudy> _scpStudyRepository,
|
||||||
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<ReadModule> _readModuleRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService) : BaseService, IQCOperationService
|
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService) : BaseService, IQCOperationService
|
||||||
{
|
{
|
||||||
|
@ -48,7 +54,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
await VerifyIsCanQCAsync(null, subjectVisitId);
|
await VerifyIsCanQCAsync(null, subjectVisitId);
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == currentQCType))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == currentQCType))
|
||||||
{
|
{
|
||||||
//---请先核查图像,并保存审核问题,然后再发质疑。
|
//---请先核查图像,并保存审核问题,然后再发质疑。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_CheckFirst"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_CheckFirst"]);
|
||||||
|
@ -256,7 +262,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
||||||
|
|
||||||
await _repository.AddAsync(qaReply);
|
await _checkChallengeDialogRepository.AddAsync(qaReply);
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||||
{
|
{
|
||||||
|
@ -300,7 +306,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
sv.CloseTheReason = input.CloseCheckChallenge;
|
sv.CloseTheReason = input.CloseCheckChallenge;
|
||||||
|
|
||||||
sv.CheckChallengeState = CheckChanllengeTypeEnum.Closed;
|
sv.CheckChallengeState = CheckChanllengeTypeEnum.Closed;
|
||||||
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog()
|
||||||
{
|
{
|
||||||
SubjectVisitId = input.subjectVisitId,
|
SubjectVisitId = input.subjectVisitId,
|
||||||
//---原因:
|
//---原因:
|
||||||
|
@ -381,7 +387,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
|
var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
|
||||||
|
|
||||||
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog()
|
||||||
{
|
{
|
||||||
SubjectVisitId = subjectVisitId,
|
SubjectVisitId = subjectVisitId,
|
||||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||||
|
@ -427,7 +433,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
sv.RequestBackState = RequestBackStateEnum.PM_NotAgree;
|
sv.RequestBackState = RequestBackStateEnum.PM_NotAgree;
|
||||||
|
|
||||||
//---PM/APM拒绝一致性核查回退
|
//---PM/APM拒绝一致性核查回退
|
||||||
await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMReject"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMReject"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
||||||
|
|
||||||
await _subjectVisitRepository.SaveChangesAsync();
|
await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -501,12 +507,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
//_qcChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
//_qcChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
||||||
//_checkChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
//_checkChallengeDialogRepository.Delete(t => t.SubjectVisitId == subjectVisitId);
|
||||||
//---PM/APM同意一致性核查回退。
|
//---PM/APM同意一致性核查回退。
|
||||||
await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMAPMConsistency"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
await _checkChallengeDialogRepository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = _localizer["QCOperation_PMAPMConsistency"], UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.DicomSerie.IsDeleted);
|
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.DicomSerie.IsDeleted);
|
||||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.IsDeleted);
|
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted);
|
||||||
|
|
||||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -549,7 +555,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
#region 先查询再更新
|
#region 先查询再更新
|
||||||
|
|
||||||
var questionAnswerList = await _repository.Where<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType, true).ToListAsync();
|
var questionAnswerList = await _trialQCQuestionAnswerRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess && t.CurrentQCEnum == currentQCType, true).ToListAsync();
|
||||||
|
|
||||||
qcQuestionAnswerCommands.ToList().ForEach(t =>
|
qcQuestionAnswerCommands.ToList().ForEach(t =>
|
||||||
{
|
{
|
||||||
|
@ -620,7 +626,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var study = (await _dicomStudyRepository.Where(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
var study = (await _dicomStudyRepository.Where(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
var instanceIdList = await _repository.Where<DicomInstance>(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
var instanceIdList = await _dicomInstanceRepository.Where(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
||||||
|
|
||||||
//instanceIdList.ForEach(t =>
|
//instanceIdList.ForEach(t =>
|
||||||
//{
|
//{
|
||||||
|
@ -646,7 +652,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
var study = (await _dicomStudyRepository.Where(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
var study = (await _dicomStudyRepository.Where(t => t.Id == studyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
var instanceIdList = await _repository.Where<DicomInstance>(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
var instanceIdList = await _dicomInstanceRepository.Where(t => t.SeriesId == seriesId).Select(t => t.Id).ToListAsync();
|
||||||
|
|
||||||
study.InstanceCount = study.InstanceCount + instanceIdList.Count;
|
study.InstanceCount = study.InstanceCount + instanceIdList.Count;
|
||||||
|
|
||||||
|
@ -694,7 +700,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
study.ModalityForEdit = updateModalityCommand.Modality;
|
study.ModalityForEdit = updateModalityCommand.Modality;
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<DicomSeries>(t => t.StudyId == studyId, r => new DicomSeries() { BodyPartForEdit = updateModalityCommand.BodyPart });
|
await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.StudyId == studyId, r => new DicomSeries() { BodyPartForEdit = updateModalityCommand.BodyPart });
|
||||||
}
|
}
|
||||||
else if (updateModalityCommand.Type == 2)
|
else if (updateModalityCommand.Type == 2)
|
||||||
{
|
{
|
||||||
|
@ -767,10 +773,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
await _dicomStudyRepository.DeleteAsync(study);
|
await _dicomStudyRepository.DeleteAsync(study);
|
||||||
|
|
||||||
|
|
||||||
var succeess2 = await _repository.BatchDeleteAsync<DicomInstance>(t => t.StudyId == id);
|
var succeess2 = await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
|
||||||
var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
|
var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == id,u=>new SCPStudy() { SubjectVisitId=null});
|
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == id,u=>new SCPStudy() { SubjectVisitId=null});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -779,7 +785,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
//删除 物理文件
|
//删除 物理文件
|
||||||
|
|
||||||
//var instancePathList = await _repository.Where<DicomInstance>(t => t.StudyId == id)
|
//var instancePathList = await _dicomInstanceRepository.Where(t => t.StudyId == id)
|
||||||
// .Select(t => t.Path).ToListAsync();
|
// .Select(t => t.Path).ToListAsync();
|
||||||
|
|
||||||
//instancePathList.ForEach(path =>
|
//instancePathList.ForEach(path =>
|
||||||
|
@ -804,7 +810,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
if (_repository.Where<SCPPatient>(t=>t.Id== patientId).Any(t => t.SCPStudyList.Count() == t.SCPStudyList.Where(t => t.SubjectVisitId == null).Count()))
|
if (_repository.Where<SCPPatient>(t=>t.Id== patientId).Any(t => t.SCPStudyList.Count() == t.SCPStudyList.Where(t => t.SubjectVisitId == null).Count()))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == patientId, u => new SCPPatient() { SubjectId = null });
|
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == patientId, u => new SCPPatient() { SubjectId = null });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1463,10 +1469,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
foreach (var trialReadingCriterionId in trialReadingCriterionIdList)
|
foreach (var trialReadingCriterionId in trialReadingCriterionIdList)
|
||||||
{
|
{
|
||||||
//不存在该阅片期 (重传、回退都会重新提交)
|
//不存在该阅片期 (重传、回退都会重新提交)
|
||||||
if (!await _repository.Where<ReadModule>(t => t.SubjectVisitId == dbSubjectVisit.Id && t.ReadingSetType == ReadingSetType.ImageReading && t.TrialReadingCriterionId == trialReadingCriterionId).AnyAsync())
|
if (!await _readModuleRepository.Where(t => t.SubjectVisitId == dbSubjectVisit.Id && t.ReadingSetType == ReadingSetType.ImageReading && t.TrialReadingCriterionId == trialReadingCriterionId).AnyAsync())
|
||||||
{
|
{
|
||||||
|
|
||||||
var newReadModule = await _repository.AddAsync(new ReadModule()
|
var newReadModule = await _readModuleRepository.AddAsync(new ReadModule()
|
||||||
{
|
{
|
||||||
TrialReadingCriterionId = trialReadingCriterionId,
|
TrialReadingCriterionId = trialReadingCriterionId,
|
||||||
ReadingSetType = ReadingSetType.ImageReading,
|
ReadingSetType = ReadingSetType.ImageReading,
|
||||||
|
@ -1512,7 +1518,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialUser>(t => t.TrialId == trialId && t.UserId == _userInfo.Id))
|
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == _userInfo.Id))
|
||||||
{
|
{
|
||||||
//---您已经被移出项目,没有操作权限。
|
//---您已经被移出项目,没有操作权限。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_RemoveItem"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_RemoveItem"]);
|
||||||
|
@ -1542,7 +1548,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
//删除 软删除的物理文件
|
//删除 软删除的物理文件
|
||||||
var instancePathList = await _repository.Where<DicomInstance>(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)
|
var instancePathList = await _dicomInstanceRepository.Where(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)
|
||||||
.Select(t => t.Path).ToListAsync();
|
.Select(t => t.Path).ToListAsync();
|
||||||
|
|
||||||
//维护统一状态
|
//维护统一状态
|
||||||
|
@ -1563,7 +1569,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
||||||
{
|
{
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题没有保存,不能进行此操作。
|
//---影像质控审核问题没有保存,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||||
|
@ -1610,7 +1616,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
if (dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题没有保存,不能进行此操作。
|
//---影像质控审核问题没有保存,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||||
|
@ -1625,7 +1631,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
else if (dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC)
|
else if (dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.Second))
|
if (!await _trialQCQuestionAnswerRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.Second))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题没有保存,不能进行此操作。
|
//---影像质控审核问题没有保存,不能进行此操作。
|
||||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||||
|
@ -1855,11 +1861,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
//删除1QC 填写的问题答案
|
//删除1QC 填写的问题答案
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.First);
|
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.First);
|
||||||
|
|
||||||
//2QC 数据变为1QC
|
//2QC 数据变为1QC
|
||||||
await _repository.BatchUpdateAsync<QCChallenge>(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new QCChallenge() { CurrentQCEnum = CurrentQC.First });
|
await _qcChallengeRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new QCChallenge() { CurrentQCEnum = CurrentQC.First });
|
||||||
await _repository.BatchUpdateAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new TrialQCQuestionAnswer() { CurrentQCEnum = CurrentQC.First });
|
await _trialQCQuestionAnswerRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisitId == qcChallenge.SubjectVisitId && t.CurrentQCEnum == CurrentQC.Second, k => new TrialQCQuestionAnswer() { CurrentQCEnum = CurrentQC.First });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public class TrialQCQuestionConfigureService(
|
public class TrialQCQuestionConfigureService(
|
||||||
IRepository<TrialQCQuestion> _trialQcQuestionRepository,
|
IRepository<TrialQCQuestion> _trialQcQuestionRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
||||||
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<QCQuestion> _qCQuestionRepository) : BaseService, ITrialQCQuestionConfigureService
|
IRepository<QCQuestion> _qCQuestionRepository) : BaseService, ITrialQCQuestionConfigureService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -56,7 +58,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
var list = await trialQCQuestionQueryable.OrderByDescending(x=>x.LanguageType).ThenBy(t => t.ShowOrder).ToListAsync();
|
var list = await trialQCQuestionQueryable.OrderByDescending(x=>x.LanguageType).ThenBy(t => t.ShowOrder).ToListAsync();
|
||||||
|
|
||||||
var isHaveQCQuestion = _repository.Where<TrialQCQuestion>(t => t.TrialId == queryTrialQCQuestionConfigure.TrialId).Any();
|
var isHaveQCQuestion = _trialQCQuestionRepository.Where(t => t.TrialId == queryTrialQCQuestionConfigure.TrialId).Any();
|
||||||
|
|
||||||
|
|
||||||
var signInfo = await _trialRepository.Where(t => t.Id == queryTrialQCQuestionConfigure.TrialId)
|
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)
|
public async Task VerifyIsQCConfirmedAsync(Guid trialId)
|
||||||
{
|
{
|
||||||
if (!await _repository.AnyAsync<Trial>(t => t.Id == trialId && t.QCQuestionConfirmedUserId == null))
|
if (!await _trialRepository.AnyAsync(t => t.Id == trialId && t.QCQuestionConfirmedUserId == null))
|
||||||
{
|
{
|
||||||
//---影像质控审核问题模板已经确认,不允许操作。
|
//---影像质控审核问题模板已经确认,不允许操作。
|
||||||
throw new BusinessValidationFailedException(_localizer["TrialQCQuestion_TemplateConfirmed"]);
|
throw new BusinessValidationFailedException(_localizer["TrialQCQuestion_TemplateConfirmed"]);
|
||||||
|
@ -319,7 +321,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_DeleteChildFirst"]);
|
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_DeleteChildFirst"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId))
|
if (await _trialQCQuestionAnswerRepository.AnyAsync(t => t.TrialQCQuestionConfigureId == trialQCQuestionConfigureId))
|
||||||
{
|
{
|
||||||
//---该审核问题已被影像质控过程引用,不允许删除
|
//---该审核问题已被影像质控过程引用,不允许删除
|
||||||
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_ReferencedByQCProcess"]);
|
return ResponseOutput.NotOk(_localizer["TrialQCQuestion_ReferencedByQCProcess"]);
|
||||||
|
|
|
@ -354,7 +354,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
//如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
//如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
||||||
|
|
||||||
if (await _repository.AnyAsync<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)))
|
if (await _clinicalDataTrialSetRepository.AnyAsync(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)))
|
||||||
{
|
{
|
||||||
var needDealTrialReadingCriterionIdList = _repository.Where<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId)
|
var needDealTrialReadingCriterionIdList = _repository.Where<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId)
|
||||||
.SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
.SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
||||||
|
@ -400,7 +400,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
// //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
// //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护
|
||||||
|
|
||||||
// if (await _repository.AnyAsync<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && t.ClinicalDataLevel == ClinicalLevel.Subject))
|
// if (await _clinicalDataTrialSetRepository.AnyAsync(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && t.ClinicalDataLevel == ClinicalLevel.Subject))
|
||||||
// {
|
// {
|
||||||
// var needDealTrialReadingCriterionIdList = _repository.Where<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId)
|
// var needDealTrialReadingCriterionIdList = _repository.Where<ClinicalDataTrialSet>(t => t.Id == data.ClinicalDataTrialSetId)
|
||||||
// .SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
// .SelectMany(t => t.TrialClinicalDataSetCriteriaList)
|
||||||
|
|
|
@ -37,6 +37,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<TrialSite> _trialSiteRepository,
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
|
IRepository<VerificationCode> _verificationCodeRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
|
@ -81,7 +82,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<VerifyEmialGetDoctorInfoOutDto> VerifyEmialGetDoctorInfo(VerifyEmialGetDoctorInfoInDto inDto)
|
public async Task<VerifyEmialGetDoctorInfoOutDto> VerifyEmialGetDoctorInfo(VerifyEmialGetDoctorInfoInDto inDto)
|
||||||
{
|
{
|
||||||
var verificationRecord = await _repository.GetQueryable<VerificationCode>().OrderByDescending(x => x.ExpirationTime).Where(t => (t.EmailOrPhone == inDto.EmailOrPhone) && t.Code == inDto.VerificationCode && t.CodeType == VerifyType.Email).FirstOrDefaultAsync();
|
var verificationRecord = await _verificationCodeRepository.Where().OrderByDescending(x => x.ExpirationTime).Where(t => (t.EmailOrPhone == inDto.EmailOrPhone) && t.Code == inDto.VerificationCode && t.CodeType == VerifyType.Email).FirstOrDefaultAsync();
|
||||||
VerifyEmialGetDoctorInfoOutDto result = new VerifyEmialGetDoctorInfoOutDto();
|
VerifyEmialGetDoctorInfoOutDto result = new VerifyEmialGetDoctorInfoOutDto();
|
||||||
|
|
||||||
//检查数据库是否存在该验证码
|
//检查数据库是否存在该验证码
|
||||||
|
@ -102,7 +103,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
|
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _repository.BatchDeleteAsync<VerificationCode>(t => t.Id == verificationRecord.Id);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verificationRecord.Id);
|
||||||
|
|
||||||
var dockerInfo = await _repository.Where<Doctor>(t => t.EMail == inDto.EmailOrPhone || t.Phone == inDto.EmailOrPhone).FirstOrDefaultAsync();
|
var dockerInfo = await _repository.Where<Doctor>(t => t.EMail == inDto.EmailOrPhone || t.Phone == inDto.EmailOrPhone).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
@ -139,7 +140,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//验证码 6位
|
//验证码 6位
|
||||||
int verificationCode = new Random().Next(100000, 1000000);
|
int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
var trialInfo = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == userInfo.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == userInfo.TrialId);
|
||||||
|
|
||||||
await _mailVerificationService.AnolymousSendEmail(trialInfo.ResearchProgramNo, userInfo.Email, verificationCode);
|
await _mailVerificationService.AnolymousSendEmail(trialInfo.ResearchProgramNo, userInfo.Email, verificationCode);
|
||||||
|
|
||||||
|
@ -180,7 +181,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _repository.BatchDeleteAsync<VerificationCode>(t => t.Id == verifyRecord.Id);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.Id == verifyRecord.Id);
|
||||||
|
|
||||||
//验证码正确 不处理
|
//验证码正确 不处理
|
||||||
}
|
}
|
||||||
|
@ -206,7 +207,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//从项目site 中找到已存在的 加到历史人员中
|
//从项目site 中找到已存在的 加到历史人员中
|
||||||
addSurvey.TrialSiteUserSurveyList = userList;
|
addSurvey.TrialSiteUserSurveyList = userList;
|
||||||
|
|
||||||
currentEntity = await _repository.AddAsync(addSurvey);
|
currentEntity = await _trialSiteSurveyRepository.AddAsync(addSurvey);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -310,7 +311,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
|
|
||||||
//删除验证码历史记录
|
//删除验证码历史记录
|
||||||
await _repository.BatchDeleteAsync<VerificationCode>(t => t.EmailOrPhone == userInfo.EmailOrPhone && t.Code == userInfo.verificationCode && t.CodeType == userInfo.verificationType);
|
await _verificationCodeRepository.BatchDeleteNoTrackingAsync(t => t.EmailOrPhone == userInfo.EmailOrPhone && t.Code == userInfo.verificationCode && t.CodeType == userInfo.verificationType);
|
||||||
|
|
||||||
await _trialSiteSurveyRepository.SaveChangesAsync();
|
await _trialSiteSurveyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -553,7 +554,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteSurvey>(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
|
if (await _trialSiteSurveyRepository.AnyAsync(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
|
||||||
{
|
{
|
||||||
//---中心调研已锁定,不允许操作。
|
//---中心调研已锁定,不允许操作。
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
||||||
|
@ -830,7 +831,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
||||||
if (findTrialUser == null)
|
if (findTrialUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
|
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, joinCommand.BaseUrl, joinCommand.RouteUrl);
|
||||||
|
|
||||||
|
@ -851,7 +852,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (findTrialSiteUser == null)
|
if (findTrialSiteUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -948,7 +949,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
var findTrialUser = await _trialUserRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.UserId == userId, true);
|
||||||
if (findTrialUser == null)
|
if (findTrialUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, baseUrl, routeUrl);
|
await _mailVerificationService.SiteSurveyUserJoinEmail(trialId, userId, baseUrl, routeUrl);
|
||||||
|
|
||||||
|
@ -970,7 +971,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (findTrialSiteUser == null)
|
if (findTrialSiteUser == null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
await _trialSiteUserRepository.AddAsync(new TrialSiteUser() { TrialId = trialId, TrialSiteId = trialSiteId, UserId = userId });
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -47,6 +47,9 @@ namespace IRaCIS.Core.Application
|
||||||
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
|
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer,
|
||||||
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
|
||||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||||
|
IRepository<SystemBasicData> _systemBasicDataRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
|
IRepository<Enroll> _enrollRepository,
|
||||||
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService
|
IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository) : BaseService, ITrialConfigService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -725,7 +728,7 @@ namespace IRaCIS.Core.Application
|
||||||
[HttpGet("{signCode}")]
|
[HttpGet("{signCode}")]
|
||||||
public async Task<IResponseOutput> GetSignText(string signCode)
|
public async Task<IResponseOutput> GetSignText(string signCode)
|
||||||
{
|
{
|
||||||
var signRawText = await _repository.Where<SystemBasicData>(t => t.Code == signCode).Select(t => new { t.Code, t.Value, t.ValueCN, t.Id, ParentValue = t.Parent.Value, ParentValueCN = t.Parent.ValueCN }).FirstOrDefaultAsync();
|
var signRawText = await _systemBasicDataRepository.Where(t => t.Code == signCode).Select(t => new { t.Code, t.Value, t.ValueCN, t.Id, ParentValue = t.Parent.Value, ParentValueCN = t.Parent.ValueCN }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (signRawText == null)
|
if (signRawText == null)
|
||||||
{
|
{
|
||||||
|
@ -769,7 +772,7 @@ namespace IRaCIS.Core.Application
|
||||||
.IfNullThrowException();
|
.IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
var showOrderList = await _repository.Where<TrialQCQuestion>(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
var showOrderList = await _trialQCQuestionRepository.Where(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
||||||
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
||||||
|
|
||||||
if (trialConfig.QCProcessEnum ==
|
if (trialConfig.QCProcessEnum ==
|
||||||
|
@ -839,7 +842,7 @@ namespace IRaCIS.Core.Application
|
||||||
.IfNullThrowException();
|
.IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
var showOrderList = await _repository.Where<TrialQCQuestion>(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
var showOrderList = await _trialQCQuestionRepository.Where(t => t.TrialId == signConfirmDTO.TrialId).Select(t =>
|
||||||
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
new { t.ShowOrder, ParentShowOrder = (int?)t.ParentQCQuestion.ShowOrder }).ToListAsync();
|
||||||
|
|
||||||
if (trialConfig.QCProcessEnum ==
|
if (trialConfig.QCProcessEnum ==
|
||||||
|
@ -1086,7 +1089,7 @@ namespace IRaCIS.Core.Application
|
||||||
if (trialConfig.IsUrgent)
|
if (trialConfig.IsUrgent)
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.TrialId == trialInfo.Id && t.SubmitState == SubmitStateEnum.Submitted && t.ForwardState < ForwardStateEnum.Forwarded,
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialInfo.Id && t.SubmitState == SubmitStateEnum.Submitted && t.ForwardState < ForwardStateEnum.Forwarded,
|
||||||
s => new SubjectVisit() { IsUrgent = trialConfig.IsUrgent });
|
s => new SubjectVisit() { IsUrgent = trialConfig.IsUrgent });
|
||||||
}
|
}
|
||||||
else //之前设置为加急的访视状态不变。后续提交的访视,为不加急。
|
else //之前设置为加急的访视状态不变。后续提交的访视,为不加急。
|
||||||
|
@ -1178,7 +1181,7 @@ namespace IRaCIS.Core.Application
|
||||||
//Paused、 添加工总量 算医生读片中
|
//Paused、 添加工总量 算医生读片中
|
||||||
if (trialStatusStr.Contains(StaticData.TrialState.TrialCompleted))
|
if (trialStatusStr.Contains(StaticData.TrialState.TrialCompleted))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<Enroll>(u => u.TrialId == trialId, e => new Enroll
|
await _enrollRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialId, e => new Enroll
|
||||||
{
|
{
|
||||||
EnrollStatus = EnrollStatus.Finished
|
EnrollStatus = EnrollStatus.Finished
|
||||||
});
|
});
|
||||||
|
|
|
@ -29,6 +29,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
|
IRepository<UserType> _userTypeRepository,
|
||||||
IMailVerificationService _mailVerificationService,
|
IMailVerificationService _mailVerificationService,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService, ITrialExternalUserService
|
IDistributedLockProvider _distributedLockProvider) : BaseService, ITrialExternalUserService
|
||||||
{
|
{
|
||||||
|
@ -128,13 +129,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
generateUser.UserName = generateUser.UserCode;
|
generateUser.UserName = generateUser.UserCode;
|
||||||
|
|
||||||
generateUser.UserTypeEnum = _repository.Where<UserType>(t => t.Id == generateUser.UserTypeId).Select(t => t.UserTypeEnum).First();
|
generateUser.UserTypeEnum = _userTypeRepository.Where(t => t.Id == generateUser.UserTypeId).Select(t => t.UserTypeEnum).First();
|
||||||
|
|
||||||
generateUser.Password = MD5Helper.Md5("123456");
|
generateUser.Password = MD5Helper.Md5("123456");
|
||||||
|
|
||||||
generateUser.Status = UserStateEnum.Disable;
|
generateUser.Status = UserStateEnum.Disable;
|
||||||
|
|
||||||
var newAddUser = await _repository.AddAsync(generateUser);
|
var newAddUser = await _userRepository.AddAsync(generateUser);
|
||||||
|
|
||||||
|
|
||||||
addEntity.IsSystemUser = false;
|
addEntity.IsSystemUser = false;
|
||||||
|
@ -255,7 +256,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true))
|
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true))
|
||||||
{
|
{
|
||||||
|
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
|
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ namespace IRaCIS.Application.Services
|
||||||
public class TrialMaintenanceService(
|
public class TrialMaintenanceService(
|
||||||
IRepository<TrialUser> _trialUseRepository,
|
IRepository<TrialUser> _trialUseRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<Trial> _trialRepository) : BaseService, ITrialMaintenanceService
|
IRepository<Trial> _trialRepository) : BaseService, ITrialMaintenanceService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -188,7 +190,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (updateTrialUserCommand.IsDeleted)
|
if (updateTrialUserCommand.IsDeleted)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
||||||
{
|
{
|
||||||
// ----人员已加入现场维护
|
// ----人员已加入现场维护
|
||||||
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
||||||
|
@ -196,7 +198,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -224,7 +226,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (trialUser == null) return Null404NotFound(trialUser);
|
if (trialUser == null) return Null404NotFound(trialUser);
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId))
|
||||||
{
|
{
|
||||||
//---人员已加入现场维护
|
//---人员已加入现场维护
|
||||||
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]);
|
||||||
|
@ -232,7 +234,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete)
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.CurrentActionUserId == trialUser.UserId && t.TrialId == trialUser.TrialId && t.IsTake, u => new SubjectVisit() { CurrentActionUserId = null, CurrentActionUserExpireTime = null, IsTake = false });
|
||||||
}
|
}
|
||||||
|
|
||||||
await _trialUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialUser() { IsDeleted = isDelete, RemoveTime = isDelete ? DateTime.Now : null });
|
await _trialUseRepository.BatchUpdateNoTrackingAsync(t => t.Id == id, u => new TrialUser() { IsDeleted = isDelete, RemoveTime = isDelete ? DateTime.Now : null });
|
||||||
|
|
|
@ -23,9 +23,15 @@ namespace IRaCIS.Application.Services
|
||||||
public class TrialService(
|
public class TrialService(
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
|
IRepository<CRO> _croRepository,
|
||||||
IRepository<EnrollDetail> _enrollDetailRepository,
|
IRepository<EnrollDetail> _enrollDetailRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<Enroll> _enrollRepository,
|
IRepository<Enroll> _enrollRepository,
|
||||||
|
IRepository<Workload> _workloadRepository,
|
||||||
|
IRepository<Sponsor> _sponsorRepository,
|
||||||
|
IRepository<VisitStage> _visitStageRepository,
|
||||||
|
IRepository<TrialPaymentPrice> _trialPaymentPriceRepository,
|
||||||
|
IRepository<TrialDictionary> _trialDictionaryRepository,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig) : BaseService, ITrialService
|
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig) : BaseService, ITrialService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -206,14 +212,14 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
//如果是PM, 则需要将该人员添加到 运维人员表
|
//如果是PM, 则需要将该人员添加到 运维人员表
|
||||||
//添加运维人员PM
|
//添加运维人员PM
|
||||||
await _repository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now });
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now });
|
||||||
|
|
||||||
// 添加扩展信息表记录
|
// 添加扩展信息表记录
|
||||||
await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
|
await _trialPaymentPriceRepository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
|
||||||
|
|
||||||
//添加访视
|
//添加访视
|
||||||
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Baseline", IsBaseLine = true, VisitWindowLeft = -28, VisitWindowRight = 0 });
|
await _visitStageRepository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Baseline", IsBaseLine = true, VisitWindowLeft = -28, VisitWindowRight = 0 });
|
||||||
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1", VisitWindowLeft = -5, VisitWindowRight = 5 });
|
await _visitStageRepository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1", VisitWindowLeft = -5, VisitWindowRight = 5 });
|
||||||
|
|
||||||
|
|
||||||
var success = await _repository.SaveChangesAsync();
|
var success = await _repository.SaveChangesAsync();
|
||||||
|
@ -242,14 +248,14 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
var updateModel = trialAddModel;
|
var updateModel = trialAddModel;
|
||||||
|
|
||||||
if (!await _repository.AnyAsync<Trial>(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
if (!await _trialRepository.AnyAsync(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
||||||
{
|
{
|
||||||
//---项目状态只有处于:初始化或者进行中时,才允许操作。
|
//---项目状态只有处于:初始化或者进行中时,才允许操作。
|
||||||
throw new BusinessValidationFailedException(_localizer["Trial_InvalidProjectStatus"]);
|
throw new BusinessValidationFailedException(_localizer["Trial_InvalidProjectStatus"]);
|
||||||
|
|
||||||
}
|
}
|
||||||
// 判断项目Id 是否已经存在
|
// 判断项目Id 是否已经存在
|
||||||
if (await _repository.AnyAsync<Trial>(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id))
|
if (await _trialRepository.AnyAsync(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id))
|
||||||
{
|
{
|
||||||
//---已经存在相同的项目编号。
|
//---已经存在相同的项目编号。
|
||||||
throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]);
|
throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]);
|
||||||
|
@ -257,11 +263,11 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var trial = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == updateModel.Id);
|
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id);
|
||||||
|
|
||||||
|
|
||||||
//删除中间表 Title对应的记录
|
//删除中间表 Title对应的记录
|
||||||
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == updateModel.Id);
|
await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == updateModel.Id);
|
||||||
|
|
||||||
//重新插入新的 Title记录
|
//重新插入新的 Title记录
|
||||||
|
|
||||||
|
@ -295,17 +301,17 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
if (trial.SponsorId != null)
|
if (trial.SponsorId != null)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<Sponsor>(t => t.Id == trial.SponsorId && t.IsTrialLevel))
|
if (await _sponsorRepository.AnyAsync(t => t.Id == trial.SponsorId && t.IsTrialLevel))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<Sponsor>(t => t.Id == trial.SponsorId, u => new Sponsor() { TrialId = trial.Id });
|
await _sponsorRepository.BatchUpdateNoTrackingAsync(t => t.Id == trial.SponsorId, u => new Sponsor() { TrialId = trial.Id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trial.CROId != null)
|
if (trial.CROId != null)
|
||||||
{
|
{
|
||||||
if (await _repository.AnyAsync<CRO>(t => t.Id == trial.CROId && t.IsTrialLevel))
|
if (await _croRepository.AnyAsync(t => t.Id == trial.CROId && t.IsTrialLevel))
|
||||||
{
|
{
|
||||||
await _repository.BatchUpdateAsync<CRO>(t => t.Id == trial.CROId, u => new CRO() { TrialId = trial.Id });
|
await _croRepository.BatchUpdateNoTrackingAsync(t => t.Id == trial.CROId, u => new CRO() { TrialId = trial.Id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -320,7 +326,7 @@ namespace IRaCIS.Application.Services
|
||||||
switch (newState)
|
switch (newState)
|
||||||
{
|
{
|
||||||
case (int)TrialExpedited.ExpeditedIn24H:
|
case (int)TrialExpedited.ExpeditedIn24H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn24H = u.Timepoint,
|
TimepointIn24H = u.Timepoint,
|
||||||
AdjudicationIn24H = u.Adjudication,
|
AdjudicationIn24H = u.Adjudication,
|
||||||
|
@ -329,7 +335,7 @@ namespace IRaCIS.Application.Services
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case (int)TrialExpedited.ExpeditedIn48H:
|
case (int)TrialExpedited.ExpeditedIn48H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn48H = u.Timepoint,
|
TimepointIn48H = u.Timepoint,
|
||||||
AdjudicationIn48H = u.Adjudication,
|
AdjudicationIn48H = u.Adjudication,
|
||||||
|
@ -350,7 +356,7 @@ namespace IRaCIS.Application.Services
|
||||||
switch (newState)
|
switch (newState)
|
||||||
{
|
{
|
||||||
case (int)TrialExpedited.None:
|
case (int)TrialExpedited.None:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
Timepoint = u.TimepointIn24H,
|
Timepoint = u.TimepointIn24H,
|
||||||
Adjudication = u.AdjudicationIn24H,
|
Adjudication = u.AdjudicationIn24H,
|
||||||
|
@ -359,7 +365,7 @@ namespace IRaCIS.Application.Services
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case (int)TrialExpedited.ExpeditedIn48H:
|
case (int)TrialExpedited.ExpeditedIn48H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn48H = u.TimepointIn24H,
|
TimepointIn48H = u.TimepointIn24H,
|
||||||
AdjudicationIn48H = u.AdjudicationIn24H,
|
AdjudicationIn48H = u.AdjudicationIn24H,
|
||||||
|
@ -381,7 +387,7 @@ namespace IRaCIS.Application.Services
|
||||||
switch (newState)
|
switch (newState)
|
||||||
{
|
{
|
||||||
case (int)TrialExpedited.None:
|
case (int)TrialExpedited.None:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
Timepoint = u.TimepointIn48H,
|
Timepoint = u.TimepointIn48H,
|
||||||
Adjudication = u.AdjudicationIn48H,
|
Adjudication = u.AdjudicationIn48H,
|
||||||
|
@ -390,7 +396,7 @@ namespace IRaCIS.Application.Services
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case (int)TrialExpedited.ExpeditedIn24H:
|
case (int)TrialExpedited.ExpeditedIn24H:
|
||||||
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
||||||
{
|
{
|
||||||
TimepointIn24H = u.TimepointIn48H,
|
TimepointIn24H = u.TimepointIn48H,
|
||||||
AdjudicationIn24H = u.AdjudicationIn48H,
|
AdjudicationIn24H = u.AdjudicationIn48H,
|
||||||
|
@ -425,166 +431,132 @@ namespace IRaCIS.Application.Services
|
||||||
if (_verifyConfig.CurrentValue.OpenTrialRelationDelete)
|
if (_verifyConfig.CurrentValue.OpenTrialRelationDelete)
|
||||||
{
|
{
|
||||||
|
|
||||||
#region 项目真删除废弃
|
|
||||||
|
|
||||||
//if (trial.VisitPlanConfirmed)
|
#region 真项目删除
|
||||||
//{
|
//await _repository.BatchDeleteNoTrackingAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
||||||
// return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除");
|
//await _repository.BatchDeleteNoTrackingAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
||||||
//}
|
//await _repository.BatchDeleteNoTrackingAsync<InspectionFile>(o => o.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<DataInspection>(o => o.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<DicomStudy>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<StudyMonitor>(t => t.TrialId == trialId);
|
||||||
|
//await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<EnrollReadingCategory>(t => t.Enroll.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<Enroll>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<EnrollDetail>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<NoneDicomStudyFile>(t => t.NoneDicomStudy.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<NoneDicomStudy>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
//if (await _repository.AnyAsync<Enroll>(u => u.TrialId == trialId))
|
//await _repository.BatchDeleteNoTrackingAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
||||||
//{
|
|
||||||
// return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除");
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if (await _repository.AnyAsync<TrialSite>(u => u.TrialId == trialId))
|
//await _repository.BatchDeleteNoTrackingAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
||||||
//{
|
//await _repository.BatchDeleteNoTrackingAsync<PaymentDetail>(t => t.TrialId == trialId);
|
||||||
// return ResponseOutput.NotOk("该Trial下面有Site,无法删除");
|
|
||||||
//}
|
|
||||||
|
|
||||||
////PM 可以删除项目 仅仅在没有site 参与者只有他自己的时候
|
|
||||||
//if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
|
|
||||||
//{
|
|
||||||
// //参与者仅有他自己时,可以删除
|
|
||||||
// if (await _trialUserRepository.CountAsync(t => t.TrialId == trialId) == 1)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// var success1 = await _repository.BatchDeleteAsync<Trial>(o => o.Id == trialId) ||
|
|
||||||
// await _repository.BatchDeleteAsync<TrialUser>(t => t.TrialId == trialId) ||
|
|
||||||
// await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
// return ResponseOutput.Result(success1);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if (await _repository.AnyAsync<TrialUser>(u => u.TrialId == trialId))
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
||||||
//{
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
||||||
// return ResponseOutput.NotOk("该Trial下面有参与者,无法删除");
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousPDF>(t => t.SubjectVisit.TrialId == trialId);
|
||||||
//}
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<QCChallengeDialog>(t => t.QCChallenge.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<QCChallenge>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingClinicalDataPDF>(t => t.ReadingClinicalData.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingClinicalData>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingGlobalTaskInfo>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingJudgeInfo>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicalReviewDialog>(t => t.TaskMedicalReview.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicineQuestionAnswer>(t => t.TaskMedicalReview.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicineTrialQuestion>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingOncologyTaskInfo>(t => t.VisitTask.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingPeriodPlan>(t => t.ReadingPeriodSet.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingPeriodSet>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingQuestionTrial>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionTrial>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadModule>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<SubjectCanceDoctor>(t => t.Subject.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<SubjectUser>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<Subject>(t => t.TrialId == trialId);
|
||||||
|
//await _subjectVisitRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskAllocationRule>(t => t.TrialId == trialId);
|
||||||
|
//await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskInfluence>(t => t.InfluenceTask.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskMedicalReview>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TaskMedicalReviewRule>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialStateChange>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<Trial>(o => o.Id == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialClinicalDataSetCriterion>(t => t.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialCriterionDictionaryCode>(t => t.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId);
|
||||||
|
//await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocument>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
||||||
|
|
||||||
|
////await _repository.BatchDeleteAsync<TrialExperience>(t => t.TrialId == trialId) ;
|
||||||
|
//await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialEmailNoticeConfig>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialExternalUser>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialRevenuesPrice>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialRevenuesPriceVerification>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSign>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSite>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteSurvey>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteUserSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialUser>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteUser>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitStage>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<VisitTaskReReading>(t => t.OriginalReReadingTask.TrialId == trialId);
|
||||||
|
//await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
||||||
|
//await _repository.BatchDeleteNoTrackingAsync<TrialStateChange>(t => t.TrialId == trialId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<InspectionFile>(o => o.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DataInspection>(o => o.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DicomStudy>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<StudyMonitor>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DicomSeries>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<DicomInstance>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<EnrollReadingCategory>(t => t.Enroll.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<Enroll>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<EnrollDetail>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<NoneDicomStudyFile>(t => t.NoneDicomStudy.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<NoneDicomStudy>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<PaymentDetail>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<PreviousPDF>(t => t.SubjectVisit.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<QCChallengeDialog>(t => t.QCChallenge.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<QCChallenge>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingClinicalDataPDF>(t => t.ReadingClinicalData.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingClinicalData>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingGlobalTaskInfo>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingJudgeInfo>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingMedicalReviewDialog>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingMedicineQuestionAnswer>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingMedicineTrialQuestion>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingOncologyTaskInfo>(t => t.VisitTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingPeriodPlan>(t => t.ReadingPeriodSet.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingPeriodSet>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingQuestionTrial>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTableQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTableQuestionTrial>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadModule>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<SubjectCanceDoctor>(t => t.Subject.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<SubjectUser>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<Subject>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<SubjectVisit>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TaskAllocationRule>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskConsistentRule>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskInfluence>(t => t.InfluenceTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskMedicalReview>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TaskMedicalReviewRule>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<Trial>(o => o.Id == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialClinicalDataSetCriterion>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialCriterionDictionaryCode>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialDocument>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
||||||
|
|
||||||
//await _repository.BatchDeleteAsync<TrialExperience>(t => t.TrialId == trialId) ;
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialEmailNoticeConfig>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialExternalUser>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialRevenuesPrice>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialRevenuesPriceVerification>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialSign>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSite>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteSurvey>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteUserSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialUser>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialSiteUser>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitStage>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<VisitTaskReReading>(t => t.OriginalReReadingTask.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<VisitTask>(t => t.TrialId == trialId);
|
|
||||||
await _repository.BatchDeleteAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
||||||
|
@ -666,14 +638,14 @@ namespace IRaCIS.Application.Services
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
|
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new EnrollDetail()
|
await _enrollDetailRepository.AddAsync(new EnrollDetail()
|
||||||
{
|
{
|
||||||
DoctorId = _userInfo.Id,
|
DoctorId = _userInfo.Id,
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
EnrollStatus = status,
|
EnrollStatus = status,
|
||||||
OptUserType = (int)SystemUserType.DoctorUser,
|
OptUserType = (int)SystemUserType.DoctorUser,
|
||||||
});
|
});
|
||||||
return ResponseOutput.Result(await _repository.BatchUpdateAsync<Enroll>(u => u.TrialId == trialId && u.DoctorId == _userInfo.Id, e => new Enroll
|
return ResponseOutput.Result(await _enrollRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialId && u.DoctorId == _userInfo.Id, e => new Enroll
|
||||||
{
|
{
|
||||||
EnrollStatus = status
|
EnrollStatus = status
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -18,6 +18,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<TrialSite> _trialSiteRepository,
|
IRepository<TrialSite> _trialSiteRepository,
|
||||||
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
IRepository<TrialSiteUser> _trialSiteUserRepository,
|
||||||
IRepository<Site> _siteRepository,
|
IRepository<Site> _siteRepository,
|
||||||
|
IRepository<Subject> _subjectRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<Trial> _trialRepository) : BaseService, ITrialSiteService
|
IRepository<Trial> _trialRepository) : BaseService, ITrialSiteService
|
||||||
{
|
{
|
||||||
|
@ -129,7 +130,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.AddRangeAsync(addArray);
|
await _trialSiteRepository.AddRangeAsync(addArray);
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
||||||
|
@ -157,13 +158,13 @@ namespace IRaCIS.Core.Application.Services
|
||||||
if (editTrialSiteCommand.IsDeleted)
|
if (editTrialSiteCommand.IsDeleted)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
||||||
{
|
{
|
||||||
//---The site has been associated with CRC, and couldn't be deleted.
|
//---The site has been associated with CRC, and couldn't be deleted.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<Subject>(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
if (await _subjectRepository.AnyAsync(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
||||||
{
|
{
|
||||||
//---The subjects has been added to this site, and couldn't be disable.
|
//---The subjects has been added to this site, and couldn't be disable.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_ParticipantJoined"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_ParticipantJoined"]);
|
||||||
|
@ -296,13 +297,13 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var trialId = relation.TrialId;
|
var trialId = relation.TrialId;
|
||||||
var trialSiteId = relation.Id;
|
var trialSiteId = relation.Id;
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteUser>(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
if (await _trialSiteUserRepository.AnyAsync(t => t.TrialId == trialId && t.TrialSiteId == trialSiteId))
|
||||||
{
|
{
|
||||||
//---The site has been associated with CRC, and couldn't be deleted.
|
//---The site has been associated with CRC, and couldn't be deleted.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<Subject>(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
if (await _subjectRepository.AnyAsync(t => t.TrialSiteId == trialSiteId && t.TrialId == trialId))
|
||||||
{
|
{
|
||||||
//---The subjects has been added to this site, and couldn't be deleted.
|
//---The subjects has been added to this site, and couldn't be deleted.
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedSubject"]);
|
return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedSubject"]);
|
||||||
|
|
|
@ -54,6 +54,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<Dictionary> _dictionaryRepository,
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<DicomStudy> _dicomStudyRepository,
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
IRepository<SCPPatient> _scpPatientRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider) : BaseService
|
IDistributedLockProvider _distributedLockProvider) : BaseService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -451,7 +452,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
var newStuty = _mapper.Map<DicomStudy>(find.SCPStudy);
|
var newStuty = _mapper.Map<DicomStudy>(find.SCPStudy);
|
||||||
|
|
||||||
await _repository.AddAsync(newStuty);
|
await _dicomStudyRepository.AddAsync(newStuty);
|
||||||
|
|
||||||
newStuty.SeqId = Guid.Empty;
|
newStuty.SeqId = Guid.Empty;
|
||||||
newStuty.Code = currentNextCodeInt;
|
newStuty.Code = currentNextCodeInt;
|
||||||
|
@ -472,7 +473,7 @@ namespace IRaCIS.Application.Services
|
||||||
series.SubjectVisitId = subjectVisitId;
|
series.SubjectVisitId = subjectVisitId;
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.AddRangeAsync(newSeriesList);
|
await _dicomSeriesRepository.AddRangeAsync(newSeriesList);
|
||||||
|
|
||||||
var newInstanceList = _mapper.Map<List<DicomInstance>>(find.InstanceList);
|
var newInstanceList = _mapper.Map<List<DicomInstance>>(find.InstanceList);
|
||||||
|
|
||||||
|
@ -484,13 +485,13 @@ namespace IRaCIS.Application.Services
|
||||||
instance.SubjectVisitId = subjectVisitId;
|
instance.SubjectVisitId = subjectVisitId;
|
||||||
|
|
||||||
}
|
}
|
||||||
await _repository.AddRangeAsync(newInstanceList);
|
await _dicomInstanceRepository.AddRangeAsync(newInstanceList);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentNextCodeInt++;
|
currentNextCodeInt++;
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == find.SCPStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == find.SCPStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -578,8 +579,8 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _repository.SaveChangesAsync();
|
||||||
await _repository.BatchUpdateAsync<SCPPatient>(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
await _scpPatientRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
|
||||||
await _repository.BatchUpdateAsync<SCPStudy>(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
await _scpStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace IRaCIS.Application.Services
|
||||||
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
||||||
{
|
{
|
||||||
var svlist = new List<SubjectVisit>();
|
var svlist = new List<SubjectVisit>();
|
||||||
if (await _repository.AnyAsync<Trial>(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed))
|
if (await _trialRepository.AnyAsync(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed))
|
||||||
{
|
{
|
||||||
//---项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。
|
//---项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。
|
||||||
return ResponseOutput.NotOk(_localizer["Subject_NoConfirmedPlan"]);
|
return ResponseOutput.NotOk(_localizer["Subject_NoConfirmedPlan"]);
|
||||||
|
|
|
@ -30,6 +30,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
||||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
IServiceProvider _serviceProvider,
|
IServiceProvider _serviceProvider,
|
||||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository
|
||||||
|
@ -87,7 +88,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]);
|
throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<VisitTask>(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder))
|
if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder))
|
||||||
{
|
{
|
||||||
//---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退
|
//---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退
|
||||||
throw new BusinessValidationFailedException(_localizer["Visit_FinishedTasksNoAdd"]);
|
throw new BusinessValidationFailedException(_localizer["Visit_FinishedTasksNoAdd"]);
|
||||||
|
@ -228,7 +229,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
foreach (var t in studyList)
|
foreach (var t in studyList)
|
||||||
|
@ -279,7 +280,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
DicomSeriesDTO series = await _dicomSeriesRepository.Where(s => s.Id == inDto.SeriesId).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
DicomSeriesDTO series = await _dicomSeriesRepository.Where(s => s.Id == inDto.SeriesId).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => t.SeriesId == inDto.SeriesId)
|
var instanceList = await _dicomInstanceRepository.Where(t => t.SeriesId == inDto.SeriesId)
|
||||||
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.SliceLocation }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.SliceLocation }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
@ -367,7 +368,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集
|
var seriesIds = ctseriesIds.Union(ptseriesIds).ToList(); //并集
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => seriesIds.Contains(t.SeriesId))
|
var instanceList = await _dicomInstanceRepository.Where(t => seriesIds.Contains(t.SeriesId))
|
||||||
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.StudyId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
var studyIds = instanceList.Select(x => x.StudyId).Distinct().ToList();
|
var studyIds = instanceList.Select(x => x.StudyId).Distinct().ToList();
|
||||||
|
@ -489,7 +490,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var instanceList = await _repository.Where<DicomInstance>(t => studyIds.Contains(t.StudyId))
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
||||||
|
|
||||||
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
||||||
|
@ -584,7 +585,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList();
|
var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList();
|
||||||
|
|
||||||
item.InstanceInfoList = await _repository.Where<DicomInstance>(t => markInstanceIdList.Contains(t.Id)).OrderBy(t => t.InstanceNumber).Select(k =>
|
item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).OrderBy(t => t.InstanceNumber).Select(k =>
|
||||||
new InstanceBasicInfo()
|
new InstanceBasicInfo()
|
||||||
{
|
{
|
||||||
Id = k.Id,
|
Id = k.Id,
|
||||||
|
|
|
@ -16,6 +16,7 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<VisitPlanInfluenceStudy> _influnceRepository,
|
IRepository<VisitPlanInfluenceStudy> _influnceRepository,
|
||||||
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
IRepository<VisitPlanInfluenceStat> _visitPlanInfluenceStatRepository) : BaseService, IVisitPlanService
|
IRepository<VisitPlanInfluenceStat> _visitPlanInfluenceStatRepository) : BaseService, IVisitPlanService
|
||||||
{
|
{
|
||||||
|
@ -43,9 +44,9 @@ namespace IRaCIS.Application.Services
|
||||||
var query = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == trialId)
|
var query = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == trialId)
|
||||||
.ProjectTo<VisitStageDTO>(_mapper.ConfigurationProvider).OrderBy(t => t.VisitNum);
|
.ProjectTo<VisitStageDTO>(_mapper.ConfigurationProvider).OrderBy(t => t.VisitNum);
|
||||||
var list = await query.ToListAsync();
|
var list = await query.ToListAsync();
|
||||||
var trial = (await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == trialId)).IfNullThrowException();
|
var trial = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId)).IfNullThrowException();
|
||||||
|
|
||||||
var isHaveGeneratedTask = (await _repository.AnyAsync<VisitTask>(t => t.TrialId == trialId));
|
var isHaveGeneratedTask = (await _visitTaskRepository.AnyAsync(t => t.TrialId == trialId));
|
||||||
return new VisitPlanView()
|
return new VisitPlanView()
|
||||||
{
|
{
|
||||||
VisitPlanList = list,
|
VisitPlanList = list,
|
||||||
|
@ -497,13 +498,13 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var visitPlan = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == id);
|
var visitPlan = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == id);
|
||||||
if (visitPlan == null) return Null404NotFound(visitPlan);
|
if (visitPlan == null) return Null404NotFound(visitPlan);
|
||||||
if (await _repository.AnyAsync<SubjectVisit>(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId && t.VisitExecuted == VisitExecutedEnum.Executed))
|
if (await _subjectVisitRepository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId && t.VisitExecuted == VisitExecutedEnum.Executed))
|
||||||
{
|
{
|
||||||
//---The visit plan has been assigned to the subjects and executed.
|
//---The visit plan has been assigned to the subjects and executed.
|
||||||
return ResponseOutput.NotOk(_localizer["VisitPlan_Assigned"]);
|
return ResponseOutput.NotOk(_localizer["VisitPlan_Assigned"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<SubjectVisit>(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName);
|
await _subjectVisitRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName);
|
||||||
|
|
||||||
var result = await _visitStageRepository.BatchDeleteNoTrackingAsync(u => u.Id == id);
|
var result = await _visitStageRepository.BatchDeleteNoTrackingAsync(u => u.Id == id);
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,14 @@ namespace IRaCIS.Application.Services
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> _systemEmailConfig,
|
IOptionsMonitor<SystemEmailSendConfig> _systemEmailConfig,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _basicConfig,
|
IOptionsMonitor<ServiceVerifyConfigOption> _basicConfig,
|
||||||
|
IRepository<SystemDocument> _systemDocumentRepository,
|
||||||
|
IRepository<TrialClinicalDataSetCriterion> _trialClinicalDataSetCriterionRepository,
|
||||||
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
|
IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository,
|
||||||
IRepository<DicomStudy> _dicomStudyRepository,
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||||
IRepository<User> _userRepository,
|
IRepository<User> _userRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider,
|
IDistributedLockProvider _distributedLockProvider,
|
||||||
ILogger<TestService> _logger) : BaseService
|
ILogger<TestService> _logger) : BaseService
|
||||||
|
@ -50,21 +55,28 @@ namespace IRaCIS.Application.Services
|
||||||
/// 清理一致性分析任务
|
/// 清理一致性分析任务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="trialReadingCriterionId"></param>
|
/// <param name="trialReadingCriterionId"></param>
|
||||||
|
/// <param name="_taskConsistentRuleRepository"></param>
|
||||||
|
/// <param name="_readingConsistentClinicalDataPDFRepository"></param>
|
||||||
|
/// <param name="_readingConsistentClinicalDataRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IResponseOutput> DeleteConsistentDate(Guid trialReadingCriterionId)
|
public async Task<IResponseOutput> DeleteConsistentDate(Guid trialReadingCriterionId,
|
||||||
|
[FromServices] IRepository<TaskConsistentRule> _taskConsistentRuleRepository,
|
||||||
|
[FromServices] IRepository<ReadingConsistentClinicalDataPDF> _readingConsistentClinicalDataPDFRepository,
|
||||||
|
[FromServices] IRepository<ReadingConsistentClinicalData> _readingConsistentClinicalDataRepository
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var consistentSubjectIdList = _visitTaskRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true).Select(t => t.SubjectId).ToList();
|
var consistentSubjectIdList = _visitTaskRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true).Select(t => t.SubjectId).ToList();
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TaskConsistentRule>(t => t.TrialReadingCriterionId == trialReadingCriterionId);
|
await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<VisitTask>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true);
|
await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == true);
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingConsistentClinicalDataPDF>(t => consistentSubjectIdList.Contains(t.ReadingConsistentClinicalData.SubjectId));
|
await _readingConsistentClinicalDataPDFRepository.BatchDeleteNoTrackingAsync(t => consistentSubjectIdList.Contains(t.ReadingConsistentClinicalData.SubjectId));
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<ReadingConsistentClinicalData>(t => consistentSubjectIdList.Contains(t.SubjectId));
|
await _readingConsistentClinicalDataRepository.BatchDeleteNoTrackingAsync(t => consistentSubjectIdList.Contains(t.SubjectId));
|
||||||
|
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
await _repository.SaveChangesAsync();
|
||||||
|
@ -74,9 +86,9 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
public async Task<IResponseOutput> TestEFcore8()
|
public async Task<IResponseOutput> TestEFcore8()
|
||||||
{
|
{
|
||||||
var systemDocQuery = from sysDoc in _repository.GetQueryable<SystemDocument>()
|
var systemDocQuery = from sysDoc in _systemDocumentRepository.Where()
|
||||||
|
|
||||||
join confirm in _repository.GetQueryable<SystemDocConfirmedUser>().Where(t => t.ConfirmTime != null) on sysDoc.Id equals confirm.SystemDocumentId
|
join confirm in _systemDocConfirmedUserRepository.Where().Where(t => t.ConfirmTime != null) on sysDoc.Id equals confirm.SystemDocumentId
|
||||||
select new UnionDocumentWithConfirmInfoView()
|
select new UnionDocumentWithConfirmInfoView()
|
||||||
{
|
{
|
||||||
IsSystemDoc = true,
|
IsSystemDoc = true,
|
||||||
|
@ -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 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)
|
foreach (var trialId in trialIds)
|
||||||
{
|
{
|
||||||
|
@ -461,7 +473,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (find != null)
|
if (find != null)
|
||||||
{
|
{
|
||||||
await _repository.AddAsync(new TrialClinicalDataSetCriterion() { TrialClinicalDataSetId = needAddTrial.Id, TrialReadingCriterionId = find.Id });
|
await _trialClinicalDataSetCriterionRepository.AddAsync(new TrialClinicalDataSetCriterion() { TrialClinicalDataSetId = needAddTrial.Id, TrialReadingCriterionId = find.Id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -526,9 +538,9 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
foreach (var jpg in jpgInfoList)
|
foreach (var jpg in jpgInfoList)
|
||||||
{
|
{
|
||||||
var seriesId = _repository.Where<DicomInstance>(t => t.Id == jpg.InstanceId).Select(t => t.SeriesId).FirstOrDefault();
|
var seriesId = _dicomInstanceRepository.Where(t => t.Id == jpg.InstanceId).Select(t => t.SeriesId).FirstOrDefault();
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<DicomSeries>(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key });
|
await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == seriesId, t => new DicomSeries() { ImageResizePath = "/" + jpg.Key });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置 NextMarker 以获取下一页的数据
|
// 设置 NextMarker 以获取下一页的数据
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
var trialSiteId = context.Entity.TrialSiteId;
|
var trialSiteId = context.Entity.TrialSiteId;
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -68,9 +68,9 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
Task<bool> DeleteAsync<T>(T entity, bool autoSave = false) where T : Entity;
|
Task<bool> DeleteAsync<T>(T entity, bool autoSave = false) where T : Entity;
|
||||||
|
|
||||||
|
|
||||||
Task<bool> BatchDeleteAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity;
|
Task<bool> BatchDeleteNoTrackingAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity;
|
||||||
|
|
||||||
Task<bool> BatchUpdateAsync<T>(Expression<Func<T, bool>> where, Expression<Func<T, T>> updateFactory) where T : Entity;
|
Task<bool> BatchUpdateNoTrackingAsync<T>(Expression<Func<T, bool>> where, Expression<Func<T, T>> updateFactory) where T : Entity;
|
||||||
|
|
||||||
Task UpdatePartialFromQueryAsync<T>(Expression<Func<T, bool>> updateFilter,
|
Task UpdatePartialFromQueryAsync<T>(Expression<Func<T, bool>> updateFilter,
|
||||||
Expression<Func<T, T>> updateFactory,
|
Expression<Func<T, T>> updateFactory,
|
||||||
|
@ -407,12 +407,12 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public async Task<bool> BatchDeleteAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity
|
public async Task<bool> BatchDeleteNoTrackingAsync<T>(Expression<Func<T, bool>> deleteFilter) where T : Entity
|
||||||
{
|
{
|
||||||
return await _dbContext.BatchDeleteNoTrackingAsync(deleteFilter);
|
return await _dbContext.BatchDeleteNoTrackingAsync(deleteFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> BatchUpdateAsync<T>(Expression<Func<T, bool>> whereFilter, Expression<Func<T, T>> updateFactory) where T : Entity
|
public async Task<bool> BatchUpdateNoTrackingAsync<T>(Expression<Func<T, bool>> whereFilter, Expression<Func<T, T>> updateFactory) where T : Entity
|
||||||
{
|
{
|
||||||
|
|
||||||
return await _dbContext.BatchUpdateNoTrackingAsync(whereFilter, updateFactory, _userInfo.Id);
|
return await _dbContext.BatchUpdateNoTrackingAsync(whereFilter, updateFactory, _userInfo.Id);
|
||||||
|
|
Loading…
Reference in New Issue