From 78c5af401ab34c442bff55664ccf703099f2235e Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 11 Apr 2022 14:01:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InspectionController.cs | 70 ++++++++++++++++- IRaCIS.Core.API/IRaCIS.Core.API.xml | 28 +++++++ .../IRaCIS.Core.Application.xml | 14 ++-- .../Service/Inspection/InspectionService.cs | 5 -- .../TrialSiteUser/DTO/TrialConfigDTO.cs | 2 +- .../TrialSiteUser/TrialConfigService.cs | 44 ++++++----- .../Service/Visit/DTO/VisitPointViewModel.cs | 6 ++ .../Visit/Interface/IVisitPlanService.cs | 4 +- .../Service/Visit/VisitPlanService.cs | 77 ++++++++++++++++++- .../Repository/Repository.cs | 5 ++ 10 files changed, 214 insertions(+), 41 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 03a5812fc..3bb1f8a6f 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using AutoMapper; using Castle.Core.Internal; +using IRaCIS.Application.Contracts; using IRaCIS.Application.Interfaces; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Filter; @@ -34,6 +35,7 @@ namespace IRaCIS.Core.API.Controllers private readonly ITrialConfigService _trialConfigService; private readonly ISubjectService _subjectService; private readonly ISubjectVisitService _subjectVisitService; + private readonly IVisitPlanService _visitPlanService; private readonly IInspectionService _inspectionService; private readonly IRepository _dataInspectionRepository; private delegate Task executionFun(dynamic data); @@ -47,7 +49,8 @@ namespace IRaCIS.Core.API.Controllers IInspectionService sinspectionService, ITrialConfigService _trialConfigService, ISubjectService _subjectService, - ISubjectVisitService subjectVisitService + ISubjectVisitService subjectVisitService, + IVisitPlanService visitPlanService ) { _repository = repository; @@ -59,6 +62,7 @@ namespace IRaCIS.Core.API.Controllers this._trialConfigService = _trialConfigService; this._subjectService = _subjectService; _subjectVisitService = subjectVisitService; + this._visitPlanService = visitPlanService; this._dataInspectionRepository = dataInspectionRepository; } @@ -72,7 +76,69 @@ namespace IRaCIS.Core.API.Controllers return await _inspectionService.GetInspectionData(dto); } - + #region 访视计划 + /// + /// 新增或添加访视计划 + /// + /// + /// + [HttpPost, Route("Inspection/VisitPlan/AddOrUpdateVisitStage")] + [UnitOfWork] + public async Task AddOrUpdateVisitStage(DataInspectionDto opt) + { + var fun = await _visitPlanService.AddOrUpdateVisitStage(opt.OptCommand); + if (!fun.IsSuccess) + { + return ResponseOutput.NotOk(fun.ErrorMessage); + } + return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun); + } + + + + + /// + /// 删除访视计划对象 + /// + /// + /// + [HttpPost, Route("Inspection/VisitPlan/DeleteVisitStage")] + [UnitOfWork] + public async Task DeleteVisitStage(DataInspectionDto opt) + { + var fun = _visitPlanService.DeleteVisitStage; + + return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); + } + + /// + /// 确认访视计划 + /// + /// + /// + [HttpPost, Route("Inspection/VisitPlan/ConfirmTrialVisitPlan")] + [UnitOfWork] + public async Task ConfirmTrialVisitPlan(DataInspectionDto opt) + { + var fun = _visitPlanService.ConfirmTrialVisitPlan; + return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); + } + + + + /// + /// 下载访视计划 + /// + /// + /// + [HttpPost, Route("Inspection/VisitPlan/DownloadInflunceStudyList")] + [UnitOfWork] + public async Task DownloadInflunceStudyList(DataInspectionDto opt) + { + var fun = _visitPlanService.DownloadInflunceStudyList; + return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun); + } + #endregion #region 访视 diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index afa1db360..c207c1160 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -58,6 +58,34 @@ + + + 新增或添加访视计划 + + + + + + + 删除访视计划对象 + + + + + + + 确认访视计划 + + + + + + + 下载访视计划 + + + + 配置 基础逻辑信息 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 9e4fcdb00..064129d91 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1560,6 +1560,13 @@ + + + 配置 基础逻辑信息 + + + + 更新项目状态 @@ -1594,13 +1601,6 @@ - - - 配置 基础逻辑信息 - - - - 配置流程 diff --git a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs index cbd59344b..d52648cc8 100644 --- a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs @@ -191,11 +191,6 @@ namespace IRaCIS.Core.Application.Service.Inspection // 判断是否需要前面 await AddInspectionRecordAsync(AuditInfo, signId); - - if (bResult.IsSuccess == false) - { - return bResult; - } return bResult; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs index 72bc2dfd4..94523b711 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs @@ -167,7 +167,7 @@ namespace IRaCIS.Core.Application.Contracts public Guid SignId { get; set; } - [NotDefault] + [NotDefault] public string SignCode { get; set; } = string.Empty; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 19665f279..6af055f28 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -145,6 +145,28 @@ namespace IRaCIS.Core.Application + /// + /// 配置 基础逻辑信息 + /// + /// + /// + [HttpPut] + public async Task ConfigTrialBasicInfo(BasicTrialConfig trialConfig) + { + if (!await _trialRepository.Where(t => t.Id == trialConfig.TrialId).IgnoreQueryFilters().AnyAsync(t => t.TrialStatusStr == StaticData.TrialOngoing || t.TrialStatusStr == StaticData.TrialInitializing)) + { + return ResponseOutput.NotOk(" only in Initializing or Ongoing State can operate "); + } + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialConfig.TrialId); + + if (trialInfo == null) return Null404NotFound(trialInfo); + + _mapper.Map(trialConfig, trialInfo); + + return ResponseOutput.Ok(await _repository.SaveChangesAsync()); + } + /// /// 更新项目状态 /// @@ -251,27 +273,7 @@ namespace IRaCIS.Core.Application } - /// - /// 配置 基础逻辑信息 - /// - /// - /// - [HttpPut] - public async Task ConfigTrialBasicInfo(BasicTrialConfig trialConfig) - { - if (!await _trialRepository.Where(t => t.Id == trialConfig.TrialId).IgnoreQueryFilters().AnyAsync(t => t.TrialStatusStr == StaticData.TrialOngoing || t.TrialStatusStr == StaticData.TrialInitializing)) - { - return ResponseOutput.NotOk(" only in Initializing or Ongoing State can operate "); - } - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialConfig.TrialId); - - if (trialInfo == null) return Null404NotFound(trialInfo); - - _mapper.Map(trialConfig, trialInfo); - - return ResponseOutput.Ok(await _repository.SaveChangesAsync()); - } + /// /// 配置流程 diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index 5f6b621c0..40e3c3a9d 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -44,6 +44,12 @@ namespace IRaCIS.Core.Application.Contracts } + public class IDDto + { + public Guid Id { get; set; } + + } + public class DeleteSVCommand { public Guid SubjectVisitId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs index 3bf54f4bb..cad9d1878 100644 --- a/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs @@ -7,9 +7,9 @@ namespace IRaCIS.Application.Interfaces public interface IVisitPlanService { Task AddOrUpdateVisitStage(VisitPlanCommand visitPlan); - Task ConfirmTrialVisitPlan(Guid trialId, [FromServices] IRepository _influnceStatRepository); + Task ConfirmTrialVisitPlan(Guid trialId); Task DeleteVisitStage(Guid id); - Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId, [FromServices] IRepository _influnceRepository); + Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId); Task> GetInfluenceHistoryList(Guid trialId, [FromServices] IRepository _influnceStatRepository); Task> GetTrialVisitStageList(VisitPlanQueryDTO param); Task> GetTrialVisitStageSelect(Guid trialId); diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index b97275b22..c1efecce1 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -19,12 +19,22 @@ namespace IRaCIS.Application.Services { private readonly IRepository _visitStageRepository; private readonly IRepository _trialRepository; + private readonly IRepository _subjectVisitRepository; + private readonly IRepository _influnceStatRepository; + private readonly IRepository _influnceRepository; private readonly IInspectionService _inspectionService; - public VisitPlanService(IRepository visitStageRepository,IRepository trialRepository, IInspectionService inspectionService) + public VisitPlanService(IRepository visitStageRepository,IRepository trialRepository, IRepository subjectVisitRepository, + IRepository influnceStatRepository, + IRepository visitPlanInfluenceStudy, + + IInspectionService inspectionService) { _visitStageRepository = visitStageRepository; _trialRepository = trialRepository; + this._subjectVisitRepository = subjectVisitRepository; + this._influnceStatRepository = influnceStatRepository; + this._influnceRepository = visitPlanInfluenceStudy; this._inspectionService = inspectionService; } @@ -258,8 +268,35 @@ namespace IRaCIS.Application.Services return ResponseOutput.NotOk("The visit plan has been assigned to the subjects and executed."); } + + var list = await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName).ToListAsync(); + + + List datas = new List(); + var createtime = DateTime.Now.AddSeconds(1); + list.ForEach(x => + { + datas.Add(new DataInspection() + { + BlindName = x.BlindName, + IsSign = false, + SiteId = x.SiteId, + SubjectId = x.SubjectId, + SubjectVisitId = x.Id, + CreateTime = createtime, + SubjectVisitName = x.VisitName, + TrialId = x.TrialId, + JsonDetail = JsonConvert.SerializeObject(x), + Identification = "Delete|Visit|Data|Visit-Image Upload" + }); + }); + + + await _inspectionService.AddListInspectionRecordAsync(datas); await _repository.DeleteFromQueryAsync(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName); + + var result = await _visitStageRepository.DeleteFromQueryAsync(u => u.Id == id); @@ -271,7 +308,7 @@ namespace IRaCIS.Application.Services [HttpPost("{trialId:guid}")] [TrialAudit(AuditType.TrialAudit, AuditOptType.ConfirmTrialVisitPlan)] - public async Task ConfirmTrialVisitPlan(Guid trialId, [FromServices] IRepository _influnceStatRepository) + public async Task ConfirmTrialVisitPlan(Guid trialId) { if (!await _trialRepository.AnyAsync(t => t.Id == trialId &&( t.TrialStatusStr==StaticData.TrialInitializing || t.TrialStatusStr == StaticData.TrialOngoing))) { @@ -419,6 +456,40 @@ namespace IRaCIS.Application.Services }); } + + List datas = new List(); + var createtime = DateTime.Now.AddSeconds(1); + + var list = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.VisitStageId == changedItem.Id).ToListAsync(); + list.ForEach(x => + { + datas.Add(new DataInspection() + { + BlindName = x.BlindName, + IsSign = false, + SiteId = x.SiteId, + SubjectId = x.SubjectId, + SubjectVisitId = x.Id, + CreateTime = createtime, + SubjectVisitName = x.VisitName, + TrialId = x.TrialId, + JsonDetail = JsonConvert.SerializeObject(new { + + IsBaseLine = changedItem.IsBaseLine, + VisitName = changedItem.VisitName, + VisitNum = changedItem.VisitNum, + VisitDay = changedItem.VisitDay, + VisitWindowLeft = changedItem.VisitWindowLeft, + VisitWindowRight = changedItem.VisitWindowRight + }), + Identification = "Edit|Visit|Info|Visit-Image Upload" + }); + }); + + + await _inspectionService.AddListInspectionRecordAsync(datas); + + //变更某一访视计划Item 受试者访视相关字段 await _repository.UpdateFromQueryAsync(t => t.TrialId == trialId && t.VisitStageId == changedItem.Id, k => new SubjectVisit() { @@ -451,7 +522,7 @@ namespace IRaCIS.Application.Services } [HttpGet("{visitPlanInfluenceStatId:guid}")] - public async Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId, [FromServices] IRepository _influnceRepository) + public async Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId) { var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) .ProjectTo(_mapper.ConfigurationProvider).ToList(); diff --git a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs index cce6fea06..b30848e43 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs @@ -25,12 +25,17 @@ namespace IRaCIS.Core.Infra.EFCore public Repository(IRaCISDBContext dbContext, IMapper mapper) { + //if (typeof(TEntity) = typeof(DataInspection)) + //{ + + //} _dbContext = dbContext; _mapper = mapper; } #region 异步部分 + public async Task InsertOrUpdateAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) {