From c7517b56da4edca88e2c6797c4d209d70d0d4403 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 10 Mar 2023 14:38:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E8=87=B4=E6=80=A7?= =?UTF-8?q?=E6=A0=B8=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 6 +- .../Service/TrialSiteUser/TrialService.cs | 209 ++++++++++++++---- .../ConsistencyVerificationRequest.cs | 10 +- .../ReadingMedicineQuestionAnswer.cs | 8 +- .../ReadingCriterion/CriterionNidus.cs | 7 +- .../TrialCriterionDictionaryCode.cs | 15 +- .../ReadingCriterionDictionary.cs | 7 +- .../ReadingFormAnswer/ReadingTaskRelation.cs | 6 + 8 files changed, 200 insertions(+), 68 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index c7ef073f1..cd7ab7fbd 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -791,7 +791,7 @@ namespace IRaCIS.Core.API.Controllers if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); - if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); + //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); @@ -819,7 +819,7 @@ namespace IRaCIS.Core.API.Controllers if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); - if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); + //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); @@ -896,7 +896,7 @@ namespace IRaCIS.Core.API.Controllers var dt = DateTime.Now; - etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty && t.SiteCode == string.Empty && t.SubjectCode == string.Empty && t.VisitName == string.Empty && t.StudyDate == string.Empty && DateTime.TryParse(t.StudyDate, out dt))).ToList(); + etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty ||! DateTime.TryParse(t.StudyDate, out dt))).ToList(); if (etcCheckList.Count == 0) { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index cd5c8b42a..f9fbf7ccf 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -7,6 +7,8 @@ using Microsoft.AspNetCore.Mvc; using Panda.DynamicWebApi.Attributes; using IRaCIS.Core.Infrastructure; using Microsoft.Extensions.Options; +using static IRaCIS.Core.Domain.Share.StaticData; +using Microsoft.AspNetCore.Authorization; namespace IRaCIS.Application.Services { @@ -139,7 +141,7 @@ namespace IRaCIS.Application.Services } //测试用户 只能创建非正式项目 - if(_userInfo.IsTestUser && trialAddModel.TrialType != TrialType.NoneOfficial) + if (_userInfo.IsTestUser && trialAddModel.TrialType != TrialType.NoneOfficial) { throw new BusinessValidationFailedException("测试用户 只能创建非正式项目"); } @@ -162,7 +164,7 @@ namespace IRaCIS.Application.Services var yearStr = DateTime.Now.Year.ToString(); trial.Code = currentYearMaxCodeNext; - trial.TrialCode = (trial.TrialType == TrialType.NoneOfficial ? "T0" :yearStr.Substring(yearStr.Length - 2)) + trial.TrialCode + currentYearMaxCodeNext.ToString("D3"); + trial.TrialCode = (trial.TrialType == TrialType.NoneOfficial ? "T0" : yearStr.Substring(yearStr.Length - 2)) + trial.TrialCode + currentYearMaxCodeNext.ToString("D3"); //多选信息 @@ -350,10 +352,10 @@ namespace IRaCIS.Application.Services { - var trial = (await _trialRepository.FirstOrDefaultAsync(u => u.Id == trialId,true)).IfNullThrowException(); + var trial = (await _trialRepository.FirstOrDefaultAsync(u => u.Id == trialId, true)).IfNullThrowException(); - if (_verifyConfig.CurrentValue.OpenTrialRelationDelete ) + if (_verifyConfig.CurrentValue.OpenTrialRelationDelete) { #region 项目真删除废弃 @@ -396,60 +398,139 @@ namespace IRaCIS.Application.Services - var success = await _repository.BatchDeleteAsync(o => o.Id == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + var success = await _repository.BatchDeleteAsync(o => o.SubjectVisit.TrialId == trialId) || + await _repository.BatchDeleteAsync(o => o.TrialId == trialId) || + await _repository.BatchDeleteAsync(o => o.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(o => o.TrialReadingCriterion.TrialId == trialId) || + await _repository.BatchDeleteAsync(o => o.TrialReadingCriterion.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId) || - - - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - - - - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId) || - - - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - + await _repository.BatchDeleteAsync(o => o.TrialId == trialId) || await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.Enroll.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.NoneDicomStudy.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId) || await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId) || await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.NoneDicomStudy.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) + + + await _repository.BatchDeleteAsync(t => t.QCChallenge.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + + await _repository.BatchDeleteAsync(t => t.ReadingClinicalData.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TaskMedicalReview.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TaskMedicalReview.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.VisitTask.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.ReadingPeriodSet.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.VisitTask.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.Subject.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.InfluenceTask.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(o => o.Id == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialReadingCriterion.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialReadingCriterion.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId) || + + //await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.OriginalReReadingTask.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) + + + + ; return ResponseOutput.Result(success); @@ -464,7 +545,41 @@ namespace IRaCIS.Application.Services } + [AllowAnonymous] + [HttpDelete, Route("{trialId:guid}")] + public async Task DeleteTrialTaskData(Guid trialId) + { + //await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + + + //await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + + + // await _repository.BatchDeleteAsync(t => t.TaskMedicalReview.TrialId == trialId); + // await _repository.BatchDeleteAsync(t => t.TaskMedicalReview.TrialId == trialId); + + + // await _repository.BatchDeleteAsync(t => t.VisitTask.TrialId == trialId); + + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId) ; + + // await _repository.BatchDeleteAsync(t => t.VisitTask.TrialId == trialId); + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + + // await _repository.BatchDeleteAsync(t => t.OriginalReReadingTask.TrialId == trialId); + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + + return ResponseOutput.Ok(); + } [HttpPost] public async Task> GetReviewerTrialListByEnrollmentStatus(TrialByStatusQueryDTO param) @@ -528,7 +643,7 @@ namespace IRaCIS.Application.Services /// [HttpPost("{trialId:guid}/{status:int}")] - [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task UpdateEnrollStatus(Guid trialId, EnrollStatus status) { await _repository.AddAsync(new EnrollDetail() diff --git a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs index 561694bd3..9e17b0f90 100644 --- a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs +++ b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs @@ -71,25 +71,25 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries public class CheckViewModel { - [Required(ErrorMessage = "中心编号不能为空")] + //[Required(ErrorMessage = "中心编号不能为空")] [ImporterHeader(Name = "中心编号", AutoTrim = true)] [ExcelColumnName("中心编号")] public string SiteCode { get; set; } = string.Empty; - [Required(ErrorMessage = "受试者筛选号不能为空")] + //[Required(ErrorMessage = "受试者筛选号不能为空")] [ImporterHeader(Name = "受试者筛选号", AutoTrim = true)] [ExcelColumnName("受试者筛选号")] public string SubjectCode { get; set; } = string.Empty; - [Required(ErrorMessage = "访视名称不能为空")] + //[Required(ErrorMessage = "访视名称不能为空")] [ImporterHeader(Name = "访视名称", AutoTrim = true)] [ExcelColumnName("访视名称")] public string VisitName { get; set; } = string.Empty; - [Required(ErrorMessage = "检查日期不能为空")] + //[Required(ErrorMessage = "检查日期不能为空")] [CanConvertToTime(ErrorMessage = "检查日期格式有问题")] [ImporterHeader(Name = "检查日期", AutoTrim = true)] @@ -98,7 +98,7 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries - [Required(ErrorMessage = "Modality不能为空")] + //[Required(ErrorMessage = "Modality不能为空")] [ImporterHeader(Name = "检查技术", AutoTrim = true)] [ExcelColumnName("检查技术")] public string Modality { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Domain/Reading/MedicalAudit/ReadingMedicineQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/MedicalAudit/ReadingMedicineQuestionAnswer.cs index e750b513c..4214d5ad9 100644 --- a/IRaCIS.Core.Domain/Reading/MedicalAudit/ReadingMedicineQuestionAnswer.cs +++ b/IRaCIS.Core.Domain/Reading/MedicalAudit/ReadingMedicineQuestionAnswer.cs @@ -59,8 +59,12 @@ namespace IRaCIS.Core.Domain.Models /// public Guid UpdateUserId { get; set; } - - } + + [JsonIgnore] + [ForeignKey("TaskMedicalReviewId")] + public TaskMedicalReview TaskMedicalReview { get; set; } + + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/CriterionNidus.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/CriterionNidus.cs index 4428629b3..dfe935bc5 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterion/CriterionNidus.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/CriterionNidus.cs @@ -49,7 +49,12 @@ namespace IRaCIS.Core.Domain.Models public bool IsSystemCriterion { get; set; } - } + [ForeignKey("CriterionId")] + [JsonIgnore] + public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } + + + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionDictionaryCode.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionDictionaryCode.cs index f36055fca..cd9a2cd8d 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionDictionaryCode.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionDictionaryCode.cs @@ -15,17 +15,14 @@ namespace IRaCIS.Core.Domain.Models [Table("TrialCriterionDictionaryCode")] public class TrialCriterionDictionaryCode : Entity, IAuditAdd { - - /// - /// Id - /// - [Required] - public Guid Id { get; set; } - - /// + [ForeignKey("TrialCriterionId")] + [JsonIgnore] + public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } + + /// /// TrialCriterionId /// - [Required] + [Required] public Guid TrialCriterionId { get; set; } /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingCriterionDictionary.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingCriterionDictionary.cs index 16b6bb0ec..f899b4544 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingCriterionDictionary.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingCriterionDictionary.cs @@ -58,7 +58,12 @@ namespace IRaCIS.Core.Domain.Models [ForeignKey("DictionaryId")] public Dictionary Dictionary { get; set; } - } + [ForeignKey("CriterionId")] + [JsonIgnore] + public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } + + + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskRelation.cs b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskRelation.cs index 85838f8c4..3915730ce 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskRelation.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskRelation.cs @@ -15,6 +15,10 @@ namespace IRaCIS.Core.Domain.Models [Table("ReadingTaskRelation")] public class ReadingTaskRelation : Entity, IAuditAdd { + + [ForeignKey("TaskId")] + [JsonIgnore] + public VisitTask VisitTask { get; set; } /// /// 任务ID /// @@ -39,6 +43,8 @@ namespace IRaCIS.Core.Domain.Models /// CreateUserId /// public Guid CreateUserId { get; set; } + + }