发送邮件

Uat_Study
hang 2022-11-07 13:36:49 +08:00
parent 85028d2b3e
commit d279a737e1
7 changed files with 162 additions and 8 deletions

View File

@ -6991,13 +6991,20 @@
<param name="_dictionaryService"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetQCChallengeList_EXport(IRaCIS.Core.Application.Contracts.ChallengeQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService)">
<member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetQCChallengeList_Export(IRaCIS.Core.Application.Contracts.ChallengeQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService)">
<summary>
质疑列表
</summary>
<param name="challengeQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetSubjectList_Export(IRaCIS.Application.Contracts.SubjectQueryParam,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService)">
<summary>
受试者信息导出表
</summary>
<param name="param"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetCRCVisitList(IRaCIS.Core.Application.Contracts.CRCVisitSearchDTO)">
<summary>
CRC 访视上传列表

View File

@ -460,7 +460,20 @@ namespace IRaCIS.Core.Application.Service
}
else
{
throw new BusinessValidationFailedException("双重有序阅片 没有定义该仲裁规则处理逻辑,请联系业务和后台开发核查!");
//throw new BusinessValidationFailedException("双重有序阅片 没有定义该仲裁规则处理逻辑,请联系业务和后台开发核查!");
//只发第一个人
if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false &&
t.Id != visitTaskId && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId))
{
isNeedSend = false;
}
else
{
answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory);
}
}
@ -509,7 +522,20 @@ namespace IRaCIS.Core.Application.Service
}
else
{
throw new BusinessValidationFailedException("无序阅片配置有误(应为单重无仲裁对象,双重针对访视仲裁),请核查!");
//throw new BusinessValidationFailedException("无序阅片配置有误(应为单重无仲裁对象,双重针对访视仲裁),请核查!");
//只发第一个人
if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false &&
t.Id != visitTaskId && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId))
{
isNeedSend = false;
}
else
{
answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory);
}
}

View File

@ -118,6 +118,8 @@ namespace IRaCIS.Core.Application.Contracts
}
#region 导出模型
public class CRCVisitExportDTO
{
public ChallengeStateEnum ChallengeState { get; set; }
@ -201,7 +203,8 @@ namespace IRaCIS.Core.Application.Contracts
}
//public QCChanllengeReuploadEnum ReuploadEnum { get; set; }
[DictionaryTranslateAttribute("ReuploadEnum")]
public QCChanllengeReuploadEnum ReuploadEnum { get; set; }
//public SubmitStateEnum SubmitState { get; set; }
//public string? CurrentActionUserName { get; set; }
@ -222,6 +225,69 @@ namespace IRaCIS.Core.Application.Contracts
}
public class SubjectExportDTO
{
public string Code { get; set; } = String.Empty;
//public int? Age { get; set; }
//public string Sex { get; set; } = string.Empty;
//public Guid SiteId { get; set; }
//public Guid TrialId { get; set; }
//public string MedicalNo { get; set; } = string.Empty;
//public string ShortName { get; set; } = string.Empty;
//public string Height { get; set; } = string.Empty;
//public string Weight { get; set; } = string.Empty;
//public DateTime? BirthDate { get; set; }
//public DateTime? SignDate { get; set; }
//public bool IsUrgent { get; set; }
public DateTime? FirstGiveMedicineTime { get; set; }
public DateTime? OutEnrollmentTime { get; set; }
public DateTime? VisitOverTime { get; set; }
public SubjectStatus Status { get; set; }
public int? TotalVisitCount => OutPlanVisitCount + InPlanVisitCount;
public int? TotalVisitSubmmitCount => OutPlanVisitSubmmitCount + InPlanVisitSubmmitCount;
public int? OutPlanVisitCount { get; set; }
public int? OutPlanVisitSubmmitCount { get; set; }
public int? InPlanVisitCount { get; set; }
public int? InPlanVisitSubmmitCount { get; set; }
public string? FinalSubjectVisitName { get; set; }
public int? MissingSubmmitCount { get; set; }
public int? LostVisitCount { get; set; }
public string SiteName { get; set; } = string.Empty;
public string TrialSiteCode { get; set; } = string.Empty;
public string LatestVisitName { get; set; } = string.Empty;
public string LatestBlindName { get; set; } = string.Empty;
public bool IsMissingImages => MissingSubmmitCount > 0;
public int? RadiologyClinicalDataCount { get; set; }
public bool IsHaveRadiologyClinicalData => RadiologyClinicalDataCount != null && RadiologyClinicalDataCount > 0;
public int? OncologyClinicalDataCount { get; set; }
public bool IsHaveOncologyClinicalData => OncologyClinicalDataCount != null && OncologyClinicalDataCount > 0;
}
#endregion
public class QCCRCVisitViewModel : QCVisitBasicListViewModel

View File

@ -92,7 +92,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> GetQCChallengeList_EXport(ChallengeQuery challengeQuery,
public async Task<IActionResult> GetQCChallengeList_Export(ChallengeQuery challengeQuery,
[FromServices] IRepository<CommonDocument> _commonDocumentRepository,
[FromServices] IDictionaryService _dictionaryService)
@ -119,10 +119,40 @@ namespace IRaCIS.Core.Application.Image.QA
exportInfo.List = list;
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
}
/// <summary>
/// 受试者信息导出表
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> GetSubjectList_Export(SubjectQueryParam param,
[FromServices] IRepository<CommonDocument> _commonDocumentRepository,
[FromServices] IDictionaryService _dictionaryService)
{
var list =await _repository.Where<Subject>(u => u.TrialId == param.TrialId)
.WhereIf(!string.IsNullOrWhiteSpace(param.Code), t => t.Code.Contains(param.Code))
.WhereIf(!string.IsNullOrWhiteSpace(param.Name), t => t.ShortName.Contains(param.Name))
.WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex))
.WhereIf(param.Status != null, t => t.Status == param.Status)
.WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId)
// CRC 只负责他管理site的受试者
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
.ProjectTo<SubjectExportDTO>(_mapper.ConfigurationProvider).ToListAsync();
var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
exportInfo.List = list;
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
}
#endregion

View File

@ -4,6 +4,7 @@ using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Service
{
@ -36,6 +37,24 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.CreateUserName, u => u.MapFrom(s => s.CreateUser.UserName))
.ForMember(d => d.LatestReplyUserName, u => u.MapFrom(t => t.LatestReplyUser.UserName))
.ForMember(d => d.SubjectState, u => u.MapFrom(s => s.SubjectVisit.Subject.Status));
CreateMap<Subject, SubjectExportDTO>()
.ForMember(d => d.SiteName, u => u.MapFrom(s => s.TrialSite.Site.SiteName))
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
.ForMember(d => d.LatestBlindName, u => u.MapFrom(s => s.LatestSubjectVisit.BlindName))
.ForMember(d => d.LatestVisitName, u => u.MapFrom(s => s.LatestSubjectVisit.VisitName))
.ForMember(d => d.FinalSubjectVisitName, u => u.MapFrom(s => s.FinalSubjectVisit.VisitName))
.ForMember(d => d.InPlanVisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.InPlan)))
.ForMember(d => d.OutPlanVisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.InPlan == false)))
//执行不一定上传了 可能是失访 实际执行过了
.ForMember(d => d.MissingSubmmitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.VisitNum < s.LatestSubjectVisit.VisitNum && t.SubmitState != SubmitStateEnum.Submitted && t.IsLostVisit == false)))
.ForMember(d => d.InPlanVisitSubmmitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.SubmitState == SubmitStateEnum.Submitted && t.InPlan == true)))
.ForMember(d => d.LostVisitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.IsLostVisit)))
.ForMember(d => d.OutPlanVisitSubmmitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.SubmitState == SubmitStateEnum.Submitted && t.InPlan == false)))
.ForMember(d => d.RadiologyClinicalDataCount, u => u.MapFrom(s => s.ClinicalDataList.Count(t => t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead)))
.ForMember(d => d.OncologyClinicalDataCount, u => u.MapFrom(s => s.ClinicalDataList.Count(t => t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)));
#endregion

View File

@ -23,6 +23,10 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore]
public List<SubjectCanceDoctor> SubjectCanceDoctorList { get; set; }
[JsonIgnore]
public List<ReadingClinicalData> ClinicalDataList { get; set; }
[JsonIgnore]
[ForeignKey("FinalSubjectVisitId")]

View File

@ -126,6 +126,8 @@ public static class StaticData
public const string TrialCRCUploadImageList_Export = "TrialCRCUploadImageList_Export";
public const string TrialQCImageChanllengeList_Export = "TrialQCImageChanllengeList_Export";
public const string TrialSubjectList_Export = "TrialSubjectList_Export";
}