修改一版

Uat_Study
he 2022-04-11 14:01:08 +08:00
parent 1844a15879
commit 78c5af401a
10 changed files with 214 additions and 41 deletions

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper; using AutoMapper;
using Castle.Core.Internal; using Castle.Core.Internal;
using IRaCIS.Application.Contracts;
using IRaCIS.Application.Interfaces; using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Filter;
@ -34,6 +35,7 @@ namespace IRaCIS.Core.API.Controllers
private readonly ITrialConfigService _trialConfigService; private readonly ITrialConfigService _trialConfigService;
private readonly ISubjectService _subjectService; private readonly ISubjectService _subjectService;
private readonly ISubjectVisitService _subjectVisitService; private readonly ISubjectVisitService _subjectVisitService;
private readonly IVisitPlanService _visitPlanService;
private readonly IInspectionService _inspectionService; private readonly IInspectionService _inspectionService;
private readonly IRepository<DataInspection> _dataInspectionRepository; private readonly IRepository<DataInspection> _dataInspectionRepository;
private delegate Task<IResponseOutput> executionFun(dynamic data); private delegate Task<IResponseOutput> executionFun(dynamic data);
@ -47,7 +49,8 @@ namespace IRaCIS.Core.API.Controllers
IInspectionService sinspectionService, IInspectionService sinspectionService,
ITrialConfigService _trialConfigService, ITrialConfigService _trialConfigService,
ISubjectService _subjectService, ISubjectService _subjectService,
ISubjectVisitService subjectVisitService ISubjectVisitService subjectVisitService,
IVisitPlanService visitPlanService
) )
{ {
_repository = repository; _repository = repository;
@ -59,6 +62,7 @@ namespace IRaCIS.Core.API.Controllers
this._trialConfigService = _trialConfigService; this._trialConfigService = _trialConfigService;
this._subjectService = _subjectService; this._subjectService = _subjectService;
_subjectVisitService = subjectVisitService; _subjectVisitService = subjectVisitService;
this._visitPlanService = visitPlanService;
this._dataInspectionRepository = dataInspectionRepository; this._dataInspectionRepository = dataInspectionRepository;
} }
@ -72,8 +76,70 @@ namespace IRaCIS.Core.API.Controllers
return await _inspectionService.GetInspectionData(dto); return await _inspectionService.GetInspectionData(dto);
} }
#region 访视计划
/// <summary>
/// 新增或添加访视计划
/// </summary>
/// <param name="visitPlan"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/AddOrUpdateVisitStage")]
[UnitOfWork]
public async Task<IResponseOutput> AddOrUpdateVisitStage(DataInspectionDto<VisitPlanCommand> 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);
}
/// <summary>
/// 删除访视计划对象
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/DeleteVisitStage")]
[UnitOfWork]
public async Task<IResponseOutput> DeleteVisitStage(DataInspectionDto<IDDto> opt)
{
var fun = _visitPlanService.DeleteVisitStage;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 确认访视计划
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/ConfirmTrialVisitPlan")]
[UnitOfWork]
public async Task<IResponseOutput> ConfirmTrialVisitPlan(DataInspectionDto<IDDto> opt)
{
var fun = _visitPlanService.ConfirmTrialVisitPlan;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
/// <summary>
/// 下载访视计划
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/VisitPlan/DownloadInflunceStudyList")]
[UnitOfWork]
public async Task<IResponseOutput> DownloadInflunceStudyList(DataInspectionDto<IDDto> opt)
{
var fun = _visitPlanService.DownloadInflunceStudyList;
return await _inspectionService.Enforcement(opt.OptCommand.Id, opt.AuditInfo, opt.SignInfo, fun);
}
#endregion
#region 访视 #region 访视
[HttpPost, Route("Inspection/subjectVisit/addOrUpdateSV")] [HttpPost, Route("Inspection/subjectVisit/addOrUpdateSV")]

View File

@ -58,6 +58,34 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.AddOrUpdateVisitStage(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Application.Contracts.VisitPlanCommand})">
<summary>
新增或添加访视计划
</summary>
<param name="visitPlan"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.DeleteVisitStage(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.IDDto})">
<summary>
删除访视计划对象
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.ConfirmTrialVisitPlan(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.IDDto})">
<summary>
确认访视计划
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.DownloadInflunceStudyList(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.IDDto})">
<summary>
下载访视计划
</summary>
<param name="opt"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.ConfigTrialBasicInfo(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.BasicTrialConfig})"> <member name="M:IRaCIS.Core.API.Controllers.InspectionController.ConfigTrialBasicInfo(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.BasicTrialConfig})">
<summary> <summary>
配置 基础逻辑信息 配置 基础逻辑信息

View File

@ -1560,6 +1560,13 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.ConfigTrialBasicInfo(IRaCIS.Core.Application.Contracts.BasicTrialConfig)">
<summary>
配置 基础逻辑信息
</summary>
<param name="trialConfig"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.UpdateTrialState(System.Guid,System.String,System.Guid,System.String,EasyCaching.Core.IEasyCachingProvider)"> <member name="M:IRaCIS.Core.Application.TrialConfigService.UpdateTrialState(System.Guid,System.String,System.Guid,System.String,EasyCaching.Core.IEasyCachingProvider)">
<summary> <summary>
更新项目状态 更新项目状态
@ -1594,13 +1601,6 @@
<param name="trialId"></param> <param name="trialId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.ConfigTrialBasicInfo(IRaCIS.Core.Application.Contracts.BasicTrialConfig)">
<summary>
配置 基础逻辑信息
</summary>
<param name="trialConfig"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.ConfigTrialProcessInfo(IRaCIS.Core.Application.Contracts.TrialProcessConfig)"> <member name="M:IRaCIS.Core.Application.TrialConfigService.ConfigTrialProcessInfo(IRaCIS.Core.Application.Contracts.TrialProcessConfig)">
<summary> <summary>
配置流程 配置流程

View File

@ -191,11 +191,6 @@ namespace IRaCIS.Core.Application.Service.Inspection
// 判断是否需要前面 // 判断是否需要前面
await AddInspectionRecordAsync(AuditInfo, signId); await AddInspectionRecordAsync(AuditInfo, signId);
if (bResult.IsSuccess == false)
{
return bResult;
}
return bResult; return bResult;
} }

View File

@ -145,6 +145,28 @@ namespace IRaCIS.Core.Application
/// <summary>
/// 配置 基础逻辑信息
/// </summary>
/// <param name="trialConfig"></param>
/// <returns></returns>
[HttpPut]
public async Task<IResponseOutput> 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());
}
/// <summary> /// <summary>
/// 更新项目状态 /// 更新项目状态
/// </summary> /// </summary>
@ -251,27 +273,7 @@ namespace IRaCIS.Core.Application
} }
/// <summary>
/// 配置 基础逻辑信息
/// </summary>
/// <param name="trialConfig"></param>
/// <returns></returns>
[HttpPut]
public async Task<IResponseOutput> 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());
}
/// <summary> /// <summary>
/// 配置流程 /// 配置流程

View File

@ -44,6 +44,12 @@ namespace IRaCIS.Core.Application.Contracts
} }
public class IDDto
{
public Guid Id { get; set; }
}
public class DeleteSVCommand public class DeleteSVCommand
{ {
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }

View File

@ -7,9 +7,9 @@ namespace IRaCIS.Application.Interfaces
public interface IVisitPlanService public interface IVisitPlanService
{ {
Task<IResponseOutput> AddOrUpdateVisitStage(VisitPlanCommand visitPlan); Task<IResponseOutput> AddOrUpdateVisitStage(VisitPlanCommand visitPlan);
Task<IResponseOutput> ConfirmTrialVisitPlan(Guid trialId, [FromServices] IRepository<VisitPlanInfluenceStat> _influnceStatRepository); Task<IResponseOutput> ConfirmTrialVisitPlan(Guid trialId);
Task<IResponseOutput> DeleteVisitStage(Guid id); Task<IResponseOutput> DeleteVisitStage(Guid id);
Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId, [FromServices] IRepository<VisitPlanInfluenceStudy> _influnceRepository); Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId);
Task<List<VisitPlanInfluenceSubjectVisitStatDTO>> GetInfluenceHistoryList(Guid trialId, [FromServices] IRepository<VisitPlanInfluenceStat> _influnceStatRepository); Task<List<VisitPlanInfluenceSubjectVisitStatDTO>> GetInfluenceHistoryList(Guid trialId, [FromServices] IRepository<VisitPlanInfluenceStat> _influnceStatRepository);
Task<PageOutput<VisitStageDTO>> GetTrialVisitStageList(VisitPlanQueryDTO param); Task<PageOutput<VisitStageDTO>> GetTrialVisitStageList(VisitPlanQueryDTO param);
Task<IEnumerable<VisitStageSelectDTO>> GetTrialVisitStageSelect(Guid trialId); Task<IEnumerable<VisitStageSelectDTO>> GetTrialVisitStageSelect(Guid trialId);

View File

@ -19,12 +19,22 @@ namespace IRaCIS.Application.Services
{ {
private readonly IRepository<VisitStage> _visitStageRepository; private readonly IRepository<VisitStage> _visitStageRepository;
private readonly IRepository<Trial> _trialRepository; private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<VisitPlanInfluenceStat> _influnceStatRepository;
private readonly IRepository<VisitPlanInfluenceStudy> _influnceRepository;
private readonly IInspectionService _inspectionService; private readonly IInspectionService _inspectionService;
public VisitPlanService(IRepository<VisitStage> visitStageRepository,IRepository<Trial> trialRepository, IInspectionService inspectionService) public VisitPlanService(IRepository<VisitStage> visitStageRepository,IRepository<Trial> trialRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<VisitPlanInfluenceStat> influnceStatRepository,
IRepository<VisitPlanInfluenceStudy> visitPlanInfluenceStudy,
IInspectionService inspectionService)
{ {
_visitStageRepository = visitStageRepository; _visitStageRepository = visitStageRepository;
_trialRepository = trialRepository; _trialRepository = trialRepository;
this._subjectVisitRepository = subjectVisitRepository;
this._influnceStatRepository = influnceStatRepository;
this._influnceRepository = visitPlanInfluenceStudy;
this._inspectionService = inspectionService; 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."); 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<DataInspection> datas = new List<DataInspection>();
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<SubjectVisit>(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName); await _repository.DeleteFromQueryAsync<SubjectVisit>(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName);
var result = await _visitStageRepository.DeleteFromQueryAsync(u => u.Id == id); var result = await _visitStageRepository.DeleteFromQueryAsync(u => u.Id == id);
@ -271,7 +308,7 @@ namespace IRaCIS.Application.Services
[HttpPost("{trialId:guid}")] [HttpPost("{trialId:guid}")]
[TrialAudit(AuditType.TrialAudit, AuditOptType.ConfirmTrialVisitPlan)] [TrialAudit(AuditType.TrialAudit, AuditOptType.ConfirmTrialVisitPlan)]
public async Task<IResponseOutput> ConfirmTrialVisitPlan(Guid trialId, [FromServices] IRepository<VisitPlanInfluenceStat> _influnceStatRepository) public async Task<IResponseOutput> ConfirmTrialVisitPlan(Guid trialId)
{ {
if (!await _trialRepository.AnyAsync(t => t.Id == trialId &&( t.TrialStatusStr==StaticData.TrialInitializing || t.TrialStatusStr == StaticData.TrialOngoing))) 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<DataInspection> datas = new List<DataInspection>();
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 受试者访视相关字段 //变更某一访视计划Item 受试者访视相关字段
await _repository.UpdateFromQueryAsync<SubjectVisit>(t => t.TrialId == trialId && t.VisitStageId == changedItem.Id, k => new SubjectVisit() await _repository.UpdateFromQueryAsync<SubjectVisit>(t => t.TrialId == trialId && t.VisitStageId == changedItem.Id, k => new SubjectVisit()
{ {
@ -451,7 +522,7 @@ namespace IRaCIS.Application.Services
} }
[HttpGet("{visitPlanInfluenceStatId:guid}")] [HttpGet("{visitPlanInfluenceStatId:guid}")]
public async Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId, [FromServices] IRepository<VisitPlanInfluenceStudy> _influnceRepository) public async Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId)
{ {
var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId)
.ProjectTo<VisitPlanInfluenceSubjectVisitDTO>(_mapper.ConfigurationProvider).ToList(); .ProjectTo<VisitPlanInfluenceSubjectVisitDTO>(_mapper.ConfigurationProvider).ToList();

View File

@ -25,6 +25,10 @@ namespace IRaCIS.Core.Infra.EFCore
public Repository(IRaCISDBContext dbContext, IMapper mapper) public Repository(IRaCISDBContext dbContext, IMapper mapper)
{ {
//if (typeof(TEntity) = typeof(DataInspection))
//{
//}
_dbContext = dbContext; _dbContext = dbContext;
_mapper = mapper; _mapper = mapper;
} }
@ -32,6 +36,7 @@ namespace IRaCIS.Core.Infra.EFCore
#region 异步部分 #region 异步部分
public async Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify) public async Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
{ {
var entity = _mapper.Map<TEntity>(from); var entity = _mapper.Map<TEntity>(from);