diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 6a5c40753..b0447d89a 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -91,6 +91,45 @@ namespace IRaCIS.Core.API.Controllers return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); } + + + [HttpPost, Route("Inspection/subjectVisit/SetSubjectVisitUrgent")] + public async Task SetSubjectVisitUrgent(DataInspectionDto opt) + { + + var fun = await _subjectVisitService.SetSubjectVisitUrgent(opt.OptCommand.subjectVisitId,opt.OptCommand.isUrgent); + if (!fun.IsSuccess) + { + return ResponseOutput.NotOk(fun.ErrorMessage); + } + return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + } + + + [HttpPost, Route("Inspection/subjectVisit/DeleteSV")] + public async Task DeleteSV(DataInspectionDto opt) + { + + var fun = await _subjectVisitService.DeleteSV(opt.OptCommand.Id); + if (!fun.IsSuccess) + { + return ResponseOutput.NotOk(fun.ErrorMessage); + } + return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + } + + [HttpPost, Route("Inspection/subjectVisit/SetSVExecuted")] + public async Task SetSVExecuted(DataInspectionDto opt) + { + + var fun = await _subjectVisitService.SetSVExecuted(opt.OptCommand.Id); + if (!fun.IsSuccess) + { + return ResponseOutput.NotOk(fun.ErrorMessage); + } + return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + } + #endregion #region 配置项目信息 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index b2a47a637..f5861d832 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -386,6 +386,16 @@ FrontAuditConfigView 列表视图模型 + + + 是否有签名 + + + + + 是否有原因 + + 是否向前站位 @@ -430,6 +440,16 @@ 标识 + + + 是否有签名 + + + + + 是否有原因 + + SystemAnonymizationView 列表视图模型 diff --git a/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs b/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs index b6d55098c..a97fc757b 100644 --- a/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs +++ b/IRaCIS.Core.Application/Service/Common/DTO/FrontAuditConfigViewModel.cs @@ -58,6 +58,16 @@ namespace IRaCIS.Core.Application.ViewModel public string ByTrialConfig { get; set; } = string.Empty; + /// + /// 是否有签名 + /// + public bool? IsHaveSign { get; set; } + + /// + /// 是否有原因 + /// + public bool? IsHaveReason { get; set; } + /// /// 是否向前站位 @@ -179,6 +189,18 @@ namespace IRaCIS.Core.Application.ViewModel + /// + /// 是否有签名 + /// + public bool? IsHaveSign { get; set; } + + /// + /// 是否有原因 + /// + public bool? IsHaveReason { get; set; } + + + } diff --git a/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs index be8b26df8..0d614685b 100644 --- a/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Common/FrontAuditConfigService.cs @@ -111,7 +111,7 @@ namespace IRaCIS.Core.Application.Service from leftOptTypeId in OptTypeIdtemp.DefaultIfEmpty() join ObjectTypeId in _repository.GetQueryable() on data.ObjectTypeId equals ObjectTypeId.Id.ToString() into ObjectTypeIdtemp from leftObjectTypeIdtemp in ObjectTypeIdtemp.DefaultIfEmpty() - select new FrontAuditConfigView() + select new FrontAuditConfigView() { IsShowParent = data.IsShowParent, @@ -148,6 +148,8 @@ namespace IRaCIS.Core.Application.Service ByTrialConfig=data.ByTrialConfig, IsForwardPosition=data.IsForwardPosition, Identification=data.Identification, + IsHaveReason=data.IsHaveReason, + IsHaveSign=data.IsHaveSign, }; query = query diff --git a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs index 7001c87f4..c3eaa9916 100644 --- a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs @@ -212,8 +212,13 @@ namespace IRaCIS.Core.Application.Service.Inspection { try { - var value = data.GetType().GetProperty(item).GetValue(data); - mapData.GetType().GetProperty(item).SetValue(mapData, value); + var i = mapData.GetType().GetProperty(item).GetValue(mapData); + if (i == null) + { + var value = data.GetType().GetProperty(item).GetValue(data); + mapData.GetType().GetProperty(item).SetValue(mapData, value); + } + } catch (Exception) { diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index 7f080d304..c31d41951 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -43,6 +43,19 @@ namespace IRaCIS.Core.Application.Contracts } + + public class DeleteSVCommand + { + public Guid Id { get; set; } + } + + public class SetSubjectVisitUrgentCommand + { + public Guid subjectVisitId { get; set; } + + + public bool isUrgent { get; set; } + } public class SubjectVisitDTO : SubjectVisitCommand { public SubjectStatus SubjectStatus { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/Interface/ISubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/Interface/ISubjectVisitService.cs index 667edf92d..67be25a04 100644 --- a/IRaCIS.Core.Application/Service/Visit/Interface/ISubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/Interface/ISubjectVisitService.cs @@ -8,5 +8,7 @@ namespace IRaCIS.Core.Application.Interfaces Task DeleteSV(Guid id); Task> GetVisitStudyList(Guid trialId, Guid sujectVisitId, int isReading); Task SetSVExecuted(Guid subjectVisitId); + + Task SetSubjectVisitUrgent(Guid subjectVisitId, bool isUrgent); } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index 872b01d03..5dcfb42b6 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -31,7 +31,7 @@ namespace IRaCIS.Application.Services [TypeFilter(typeof(TrialResourceFilter))] public async Task> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand) { - + bool isadd = false; 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."); @@ -43,16 +43,13 @@ namespace IRaCIS.Application.Services VerifyMsg = "A subjects with the same subject ID already existed in this trial." }; - - var mapedSubject = await _subjectRepository.InsertOrUpdateAsync(subjectCommand, false, verifyExp1/*, verifyExp2*/); if (subjectCommand.Id == null) //insert { + isadd = true; var IsEnrollementQualificationConfirm = await _repository.Where(t => t.Id == mapedSubject.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync(); - - //添加受试者的时候,获取访视计划列表,添加到受试者访视表。 var visitPlan = await _repository.Where(t => t.TrialId == subjectCommand.TrialId).ToListAsync(); @@ -101,7 +98,7 @@ namespace IRaCIS.Application.Services var createtime = DateTime.Now.AddSeconds(1); // 添加稽查记录 - if (subjectCommand.Id == null) + if (isadd) { List datas = new List(); datas.Add(new DataInspection() @@ -130,13 +127,38 @@ namespace IRaCIS.Application.Services SubjectVisitId= item.Id, SubjectVisitName=item.VisitName, IsSign = false, - CreateTime = createtime, - Identification = "Subject|Init|Subject|Status", + CreateTime = visittime, + Identification = "Add|Visit|Info|Visit-Image Upload", JsonDetail = JsonConvert.SerializeObject(new { VisitName = item.VisitName, VisitNum = item.VisitNum, IsBaseLine=item.IsBaseLine, + VisitExecuted= false, + IsFinalVisit=item.IsFinalVisit, + PDState="None", + IsLostVisit=item.IsLostVisit, + + }) + }); + datas.Add(new DataInspection() + { + TrialId = subjectCommand.TrialId, + SiteId = subjectCommand.SiteId, + SubjectId = subjectCommand.Id, + SubjectCode = subjectCommand.Code, + SubjectVisitId = item.Id, + SubjectVisitName = item.VisitName, + IsSign = false, + CreateTime = visittime.AddSeconds(1), + Identification = "Init|Visit|Status|Visit-Image Upload", + JsonDetail = JsonConvert.SerializeObject(new + { + VisitName = item.VisitName, + SubmitState = "", + AuditState = "", + + }) }); } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 18ebf71b6..7c9f92199 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -7,6 +7,8 @@ using Microsoft.AspNetCore.Authorization; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Interfaces; +using IRaCIS.Core.Application.Service.Inspection.Interface; +using Newtonsoft.Json; namespace IRaCIS.Core.Application.Services { @@ -14,10 +16,12 @@ namespace IRaCIS.Core.Application.Services public class SubjectVisitService : BaseService, ISubjectVisitService { private readonly IRepository _subjectVisitRepository; + private readonly IInspectionService _inspectionService; - public SubjectVisitService(IRepository subjectVisitRepository) + public SubjectVisitService(IRepository subjectVisitRepository, IInspectionService inspectionService) { _subjectVisitRepository = subjectVisitRepository; + this._inspectionService = inspectionService; } [HttpPost] @@ -25,6 +29,12 @@ namespace IRaCIS.Core.Application.Services [UnitOfWork] public async Task> AddOrUpdateSV(SubjectVisitCommand svCommand) { + bool isadd=false; + + if (svCommand.Id != null) + { + isadd=true; + } var verifyExp1 = new EntityVerifyExp() { @@ -123,7 +133,33 @@ namespace IRaCIS.Core.Application.Services await _repository.SaveChangesAsync(); - //if(svCommand.) + if (isadd) + { + List dataInspection=new List(); + + dataInspection.Add(new DataInspection() + { + TrialId = svCommand.TrialId, + SiteId = svCommand.SiteId, + SubjectId = svCommand.Id, + + SubjectVisitId = svCommand.Id, + SubjectVisitName = svCommand.VisitName, + IsSign = false, + CreateTime = DateTime.Now.AddSeconds(1), + Identification = "Init|Visit|Status|Visit-Image Upload", + JsonDetail = JsonConvert.SerializeObject(new + { + VisitName = svCommand.VisitName, + SubmitState = "", + AuditState = "", + + + }) + }); + + await _inspectionService.AddListInspectionRecordAsync(dataInspection); + } // 保存数据后,重新算下是否缺失影像 应对状态撤回 //if (svCommand.IsLostVisit == false) diff --git a/IRaCIS.Core.Domain/Common/FrontAuditConfig.cs b/IRaCIS.Core.Domain/Common/FrontAuditConfig.cs index a625583b9..b7bae9b92 100644 --- a/IRaCIS.Core.Domain/Common/FrontAuditConfig.cs +++ b/IRaCIS.Core.Domain/Common/FrontAuditConfig.cs @@ -127,6 +127,17 @@ namespace IRaCIS.Core.Domain.Models public string Identification { get; set; } + /// + /// 是否有签名 + /// + public bool? IsHaveSign { get; set; } + + /// + /// 是否有原因 + /// + public bool? IsHaveReason { get; set; } + + }