From 04a608c28b80b0d7757ecfb4c88cd8a17b2c6faf Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 25 Apr 2022 13:35:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InspectionController.cs | 24 ++++++++ .../Controllers/StudyController.cs | 3 +- IRaCIS.Core.API/IRaCIS.Core.API.xml | 7 +++ .../Service/Common/FrontAuditConfigService.cs | 4 ++ .../Interface/ITrialDocumentService.cs | 1 + .../Service/QC/NoneDicomStudyService.cs | 5 +- .../Service/QC/QCOperationService.cs | 12 ++-- .../Service/Visit/SubjectService.cs | 16 +++-- .../Service/Visit/SubjectVisitService.cs | 5 +- .../Service/Visit/VisitPlanService.cs | 59 +++++++++++-------- .../ConsistencyVerificationHandler.cs | 26 ++++---- IRaCIS.Core.Domain/Common/JsonConvert.cs | 27 +++++++++ 12 files changed, 133 insertions(+), 56 deletions(-) create mode 100644 IRaCIS.Core.Domain/Common/JsonConvert.cs diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 6c585bb0f..6efb789d6 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -82,6 +82,30 @@ namespace IRaCIS.Core.API.Controllers this._dataInspectionRepository = dataInspectionRepository; } + #region 文件管理 + + /// + /// + /// + /// 参数 + /// + [HttpPost, Route("Inspection/trialDocument/AddOrUpdateTrialDocument")] + [UnitOfWork] + public async Task AddOrUpdateTrialDocument(DataInspectionDto opt) + { + var fun = _trialDocumentService.AddOrUpdateTrialDocument; + return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); + } + + + [HttpPost, Route("Inspection/trialDocument/UserAbandonDoc")] + [UnitOfWork] + public async Task UserAbandonDoc(DataInspectionDto opt) + { + var fun = _trialDocumentService.UserAbandonDoc; + return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); + } + #endregion #region 获取稽查数据 /// diff --git a/IRaCIS.Core.API/Controllers/StudyController.cs b/IRaCIS.Core.API/Controllers/StudyController.cs index 490eae2f2..cbeaf3caa 100644 --- a/IRaCIS.Core.API/Controllers/StudyController.cs +++ b/IRaCIS.Core.API/Controllers/StudyController.cs @@ -22,6 +22,7 @@ using IRaCIS.Core.Application.Service.Inspection.Interface; using Newtonsoft.Json; using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Domain.Common; namespace IRaCIS.Api.Controllers { @@ -238,7 +239,7 @@ namespace IRaCIS.Api.Controllers TrialId = savedInfo.TrialId, SubjectVisitId = savedInfo.SubjectVisitId, Identification = "Edit|Visit|Status|Visit-Image Upload|Add Image", - JsonDetail = JsonConvert.SerializeObject(savedInfo) + JsonDetail = savedInfo.ToJcJson() }); await _inspectionService.AddListInspectionRecordAsync(datas); diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 5b1e0283d..18b148c95 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -57,6 +57,13 @@ Financials /Monthly Payment 列表查询接口 + + + + + 参数 + + 获取稽查数据 diff --git a/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs index 0f901b0b6..41bc81d83 100644 --- a/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs @@ -78,6 +78,8 @@ namespace IRaCIS.Core.Application.Service ModuleTypeId = additem?.ModuleTypeId, ObjectTypeId = additem?.ObjectTypeId, OptTypeId = additem?.OptTypeId, + DictionaryCode = lst.Max(x => x.DictionaryCode), + DictionaryType = lst.Max(x => x.DictionaryType), DateType = lst.Select(x => x.DateType).FirstOrDefault(), Id =Guid.NewGuid(), }).ToList(); @@ -101,6 +103,8 @@ namespace IRaCIS.Core.Application.Service { x.Code=x.Code.IsNullOrEmpty()?item.Code:x.Code; x.Value = x.Code.IsNullOrEmpty() ? item.Value : x.Value; + x.DictionaryType = x.DictionaryType.IsNullOrEmpty() ? item.DictionaryType : x.DictionaryType; + x.DictionaryCode = x.DictionaryCode.IsNullOrEmpty() ? item.DictionaryCode : x.DictionaryCode; } }); diff --git a/IRaCIS.Core.Application/Service/Document/Interface/ITrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/Interface/ITrialDocumentService.cs index 19a0dd636..b712a7198 100644 --- a/IRaCIS.Core.Application/Service/Document/Interface/ITrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/Interface/ITrialDocumentService.cs @@ -13,6 +13,7 @@ namespace IRaCIS.Core.Application.Contracts { public interface ITrialDocumentService { + Task UserAbandonDoc(Guid documentId, bool isSystemDoc); Task AddOrUpdateTrialDocument(AddOrEditTrialDocument addOrEditTrialDocument); Task DeleteTrialDocument(Guid trialDocumentId, Guid trialId); Task> GetDocumentConfirmList(DocumentTrialUnionQuery querySystemDocument); diff --git a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs index f28348a80..d26ac9d0d 100644 --- a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs @@ -14,6 +14,7 @@ using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Application.Service.Inspection.DTO; using Nito.AsyncEx; using IRaCIS.Application.Interfaces; +using IRaCIS.Core.Domain.Common; namespace IRaCIS.Core.Application.Contracts { @@ -138,7 +139,7 @@ namespace IRaCIS.Core.Application.Contracts TrialId = subvisit.TrialId, SubjectVisitId = subvisit.Id, Identification = "Edit|Visit|Status|Visit-Image Upload|Add Image", - JsonDetail = JsonConvert.SerializeObject(subvisit) + JsonDetail = subvisit.ToJcJson() }); await _inspectionService.AddListInspectionRecordAsync(datas); @@ -189,7 +190,7 @@ namespace IRaCIS.Core.Application.Contracts TrialId = subvisit.TrialId, SubjectVisitId = subvisit.Id, Identification = "Edit|Visit|Status|Visit-Image Upload|Add Image", - JsonDetail = JsonConvert.SerializeObject(subvisit) + JsonDetail = subvisit.ToJcJson() }); await _inspectionService.AddListInspectionRecordAsync(datas); diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index e585e9b27..9821e7b8d 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -22,6 +22,7 @@ using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Application.Service.Inspection.DTO; using Nito.AsyncEx; using IRaCIS.Application.Interfaces; +using IRaCIS.Core.Domain.Common; namespace IRaCIS.Core.Application.Image.QA { @@ -1051,7 +1052,7 @@ namespace IRaCIS.Core.Application.Image.QA TrialId = subvisit.TrialId, SubjectVisitId = subvisit.Id, Identification = "Edit|Visit|Status|Visit-Image Upload|Add Image", - JsonDetail = JsonConvert.SerializeObject(subvisit) + JsonDetail = subvisit.ToJcJson() }); await _inspectionService.AddListInspectionRecordAsync(datas); return ResponseOutput.Ok(); @@ -1363,12 +1364,7 @@ namespace IRaCIS.Core.Application.Image.QA TrialId = x.TrialId, SubjectVisitId = x.Id, Identification = "Edit|Visit|Status|Visit-Image Upload-1", - JsonDetail = JsonConvert.SerializeObject(new - { - SubmitState = "已提交", - AuditState="未审核", - - }) + JsonDetail = x.ToJcJson(), }); }); @@ -1883,7 +1879,7 @@ namespace IRaCIS.Core.Application.Image.QA IsSign = false, Identification = "Edit|Subject|Info|Subject", CreateTime = DateTime.Now.AddSeconds(1), - JsonDetail = JsonConvert.SerializeObject(command) + JsonDetail = command.ToJcJson() }); } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index b659cd347..1059ab65e 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Infrastructure; using Newtonsoft.Json; +using IRaCIS.Core.Domain.Common; namespace IRaCIS.Application.Services { @@ -34,6 +35,7 @@ namespace IRaCIS.Application.Services [TypeFilter(typeof(TrialResourceFilter))] public async Task> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand) { + var svlist = new List(); if (await _repository.AnyAsync(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed)) { return ResponseOutput.NotOk("The trial visit plan has not been confirmed yet.Please contact the project manager to confirm the visit plan before adding subject."); @@ -60,7 +62,7 @@ namespace IRaCIS.Application.Services //添加受试者的时候,获取访视计划列表,添加到受试者访视表。 var visitPlan = await _repository.Where(t => t.TrialId == subjectCommand.TrialId).ToListAsync(); - var svlist = _mapper.Map>(visitPlan); + svlist = _mapper.Map>(visitPlan); var IsEnrollementQualificationConfirm = await _repository.Where(t => t.Id == mapedSubject.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync(); @@ -109,8 +111,14 @@ namespace IRaCIS.Application.Services // }) //}); + + JsonSerializerSettings settings = new JsonSerializerSettings(); + settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects; + settings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; + //var jsonData = JsonConvert.SerializeObject(info, settings); + var visittime = createtime.AddSeconds(1); - foreach (var item in mapedSubject.SubjectVisitList) + foreach (var item in svlist) { // 添加访视 datas.Add(new DataInspection() @@ -125,7 +133,7 @@ namespace IRaCIS.Application.Services IsSign = false, CreateTime = visittime, Identification = "Add|Visit|Info|Visit-Image Upload", - JsonDetail = JsonConvert.SerializeObject(item) + JsonDetail = item.ToJcJson() }); // 初始化访视 @@ -142,7 +150,7 @@ namespace IRaCIS.Application.Services IsSign = false, CreateTime = visittime.AddSeconds(1), Identification = "Init|Visit|Status|Visit-Image Upload", - JsonDetail = JsonConvert.SerializeObject(item) + JsonDetail = item.ToJcJson() }); } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 5152aa440..b173a46e2 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -10,6 +10,7 @@ using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.Service.Inspection.Interface; using Newtonsoft.Json; using IRaCIS.Core.Infrastructure; +using IRaCIS.Core.Domain.Common; namespace IRaCIS.Core.Application.Services { @@ -138,7 +139,7 @@ namespace IRaCIS.Core.Application.Services IsSign = false, Identification = "Edit|Subject|Info|Subject", CreateTime = DateTime.Now.AddSeconds(1), - JsonDetail = JsonConvert.SerializeObject(subject) + JsonDetail = subject.ToJcJson(), }); await _inspectionService.AddListInspectionRecordAsync(datas); } @@ -179,7 +180,7 @@ namespace IRaCIS.Core.Application.Services IsSign = false, CreateTime = DateTime.Now.AddSeconds(1), Identification = "Init|Visit|Status|Visit-Image Upload", - JsonDetail = JsonConvert.SerializeObject(svCommand) + JsonDetail = svCommand.ToJcJson() }); await _inspectionService.AddListInspectionRecordAsync(dataInspection); diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index b4be96fa4..8ebd6e3a6 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -13,6 +13,7 @@ using IRaCIS.Core.Application.Service.Inspection.Interface; using Newtonsoft.Json; using IRaCIS.Core.Infrastructure; using MassTransit; +using IRaCIS.Core.Domain.Common; namespace IRaCIS.Application.Services { @@ -266,6 +267,7 @@ namespace IRaCIS.Application.Services t.VisitNum, t.IsBaseLine, t.BlindName, + t.Description, IsConfirmed = true, }).ToListAsync(); @@ -283,7 +285,7 @@ namespace IRaCIS.Application.Services //SubjectVisitName = x.VisitName, VisitStageId = x.Id, TrialId = x.TrialId, - JsonDetail = JsonConvert.SerializeObject(x), + JsonDetail = x.ToJcJson(), Identification = "Confirm|Visit Plan Template|Data|Trial Setting-Visit Plan", }); @@ -430,7 +432,7 @@ namespace IRaCIS.Application.Services VisitName = changedItem.VisitName, VisitNum = changedItem.VisitNum, VisitDay = changedItem.VisitDay, - SubmitState = "未提交", + SubmitState = x.SubmitState, VisitWindowLeft = changedItem.VisitWindowLeft, VisitWindowRight = changedItem.VisitWindowRight }), @@ -456,7 +458,8 @@ namespace IRaCIS.Application.Services x.SiteId, x.Id, x.IsEnrollment, - x.IsUrgent + x.IsUrgent, + }); @@ -471,8 +474,26 @@ namespace IRaCIS.Application.Services { subjectsids.ForEach(y => { + + + Guid dataindtid = NewId.NextGuid(); Guid guid = NewId.NextGuid(); + + SubjectVisit subjectVisit = new SubjectVisit() + { + SiteId = y.SiteId, + SubjectId = y.Id, + Id = guid, + VisitName = x.VisitName, + + BlindName = x.BlindName, + IsBaseLine = x.IsBaseLine, + IsCheckBack = x.IsBaseLine, + IsUrgent = trial.IsSubjectExpeditedView, + }; + subjectVisits.Add(subjectVisit); + // datas.Add(new DataInspection() { @@ -492,14 +513,14 @@ namespace IRaCIS.Application.Services VisitName = x.VisitName, VisitNum = x.VisitNum, VisitDay = x.VisitDay, - VisitExecuted = false, + VisitExecuted = subjectVisit.VisitExecuted, BlindName = x.BlindName, VisitWindowLeft = x.VisitWindowLeft, VisitWindowRight = x.VisitWindowRight, IsEnrollment = y.IsEnrollment, IsUrgent = trial.IsSubjectExpeditedView, - IsFinalVisit = false, - IsLostVisit = false, + IsFinalVisit = subjectVisit.IsFinalVisit, + IsLostVisit = subjectVisit.IsLostVisit, PDState = trial.IsPDProgressView, }), }); @@ -522,37 +543,23 @@ namespace IRaCIS.Application.Services { BlindName = x.BlindName, VisitName = x.VisitName, - SubmitState = "未提交", - AuditState = "未审核", + SubmitState = subjectVisit.SubmitState, + AuditState = subjectVisit.AuditState, IsBaseLine = x.IsBaseLine, IsEnrollment = y.IsEnrollment, IsUrgent = y.IsUrgent, VisitNum = x.VisitNum, VisitDay = x.VisitDay, - VisitExecuted = false, + VisitExecuted = subjectVisit.VisitExecuted, VisitWindowLeft = x.VisitWindowLeft, VisitWindowRight = x.VisitWindowRight, - IsFinalVisit = false, - IsLostVisit = false, + IsFinalVisit = subjectVisit.IsFinalVisit, + IsLostVisit = subjectVisit.IsLostVisit, PDState = trial.IsPDProgressView, }), }); - subjectVisits.Add(new SubjectVisit() - { - - SiteId = y.SiteId, - SubjectId = y.Id, - Id = guid, - VisitName = x.VisitName, - - BlindName = x.BlindName, - IsBaseLine = x.IsBaseLine, - IsCheckBack = x.IsBaseLine, - IsUrgent = trial.IsSubjectExpeditedView, - - - }); + }); diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index e134c1b8b..af2b6a39b 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -145,13 +145,13 @@ namespace IRaCIS.Core.Application.MediatR.Handlers Identification = "Add|Consistency Check Query|Data|Visit-Consistency Check", JsonDetail = JsonConvert.SerializeObject(new { - SubmitState = "已提交", - AuditState = "通过", - CheckState = dbSV.CheckState == CheckStateEnum.CVIng ? "核查中" : "未核查", + SubmitState = dbSV.SubmitState, + AuditState = dbSV.AuditState, + CheckState = dbSV.CheckState, CheckResult= dbSV.CheckResult, TalkContent= dbSV.CheckResult, - RequestBackState=dbSV.RequestBackState==RequestBackStateEnum.PM_AgressBack?"已回退":"未回退", - CheckChallengeState = dbSV.CheckChallengeState == CheckChanllengeTypeEnum.Closed?"已关闭":"已回复", + RequestBackState= dbSV.RequestBackState, + CheckChallengeState = dbSV.CheckChallengeState, }) }); @@ -169,13 +169,13 @@ namespace IRaCIS.Core.Application.MediatR.Handlers Identification = "Edit|Consistency Check Query|Data|Visit-Consistency Check|Send", JsonDetail = JsonConvert.SerializeObject(new { - SubmitState = "已提交", - AuditState = "通过", - CheckState = dbSV.CheckState == CheckStateEnum.CVIng ? "核查中" : "未核查", + SubmitState = dbSV.SubmitState, + AuditState = dbSV.AuditState, + CheckState = dbSV.CheckState, CheckResult = dbSV.CheckResult, TalkContent = dbSV.CheckResult, - RequestBackState = dbSV.RequestBackState == RequestBackStateEnum.PM_AgressBack ? "已回退" : "未回退", - CheckChallengeState = dbSV.CheckChallengeState == CheckChanllengeTypeEnum.Closed ? "已关闭" : "已回复", + RequestBackState = dbSV.RequestBackState, + CheckChallengeState = dbSV.CheckChallengeState, }) }); @@ -204,9 +204,9 @@ namespace IRaCIS.Core.Application.MediatR.Handlers Identification = "Add|Visit|Status|Visit-Consistency Check", JsonDetail = JsonConvert.SerializeObject(new { - SubmitState = "已提交", - AuditState= "通过", - CheckState = dbSV.CheckState== CheckStateEnum.CVIng? "核查中": "核查通过", + SubmitState = dbSV.SubmitState, + AuditState= dbSV.AuditState, + CheckState = dbSV.CheckState, }) }); diff --git a/IRaCIS.Core.Domain/Common/JsonConvert.cs b/IRaCIS.Core.Domain/Common/JsonConvert.cs new file mode 100644 index 000000000..d6d77c826 --- /dev/null +++ b/IRaCIS.Core.Domain/Common/JsonConvert.cs @@ -0,0 +1,27 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Domain.Common +{ + public static class JJsonConvert + { + /// + /// 将对象序列化成Json字符串 + /// + /// 需要序列化的对象 + /// + /// 是否忽略值未null的字段 + /// + public static string ToJcJson(this object obj) + { + JsonSerializerSettings settings = new JsonSerializerSettings(); + settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects; + settings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; + return JsonConvert.SerializeObject(obj, settings); + } + } +}