From f1768d5bd94b1365d04798d898493e403eae5883 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 9 Nov 2022 13:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BD=B1=E5=93=8D=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/ExcelExportHelper.cs | 2 +- .../IRaCIS.Core.Application.xml | 58 ++++++++++++++++++- .../Service/Allocation/VisitTaskService.cs | 5 +- .../Service/QC/DTO/QCListViewModel.cs | 43 ++++++++++++++ .../Service/QC/QCListService.cs | 29 +++++++++- .../Service/QC/QCOperationService.cs | 1 + .../Service/QC/_MapConfig.cs | 6 ++ IRaCIS.Core.Domain/Visit/SubjectVisit.cs | 2 + IRaCIS.Core.Domain/_Config/_StaticData.cs | 2 + 9 files changed, 143 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs index eda03b99e..40aab24a1 100644 --- a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs +++ b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs @@ -49,7 +49,7 @@ public static class ExcelExportHelper { var beforeValue = itemDic[needTranslateProperty.Name].ToString(); - itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue.ToLower()).FirstOrDefault()?.ValueCN; + itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue.ToLower()).FirstOrDefault()?.ValueCN??String.Empty; } itemDic.Add("No", no++); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index f1b633343..2c6f63f5a 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -3582,6 +3582,26 @@ IsBaseUse + + + 是否必须全局阅片 + + + + + DictionaryId + + + + + IsBaseLineUse + + + + + IsBaseUse + + 表格问题类型 @@ -3753,6 +3773,11 @@ 是否完成配置 + + + 表单类型 + + @@ -4791,6 +4816,20 @@ 项目标准Id + + + 设置系统全局阅片阅片信息 + + + + + + + 获取系统全局阅片信息 + + + + 获取系统肿瘤信息 @@ -6427,6 +6466,11 @@ 仲裁阅片 + + + 是否必须全局阅片 + + 肿瘤学阅片 原字段 IsClinicalReading @@ -6602,6 +6646,11 @@ 阅片信息签名时间 + + + 是否必须全局阅片 + + 修约小数点 @@ -7019,11 +7068,18 @@ - 一致性核查表 + 一致性核查 检查信息表 + + + 一致性核查记录表 + + + + CRC 访视上传列表 diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 04d33e922..e3bea6e2b 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -2142,6 +2142,7 @@ namespace IRaCIS.Core.Application.Service.Allocation //回退后,回退状态恢复 sv.RequestBackState = RequestBackStateEnum.NotRequest; sv.IsCheckBack = false; + sv.CheckBackTime = null; sv.CheckState = CheckStateEnum.None; sv.CheckChallengeState = CheckChanllengeTypeEnum.None; @@ -2200,14 +2201,14 @@ namespace IRaCIS.Core.Application.Service.Allocation if (isReReading) { - filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId); + //IR 申请 PM 同意 仅仅影响自己 if ((_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId != null && await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.IndependentReviewer)) || (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer && applyId == null)) { - + filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId); //当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务 diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index bef7a96b2..5d58fabfe 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -245,6 +245,9 @@ namespace IRaCIS.Core.Application.Contracts public DateTime? OutEnrollmentTime { get; set; } public DateTime? VisitOverTime { get; set; } + + [DictionaryTranslateAttribute("Subject_Visit_Status")] + public SubjectStatus Status { get; set; } @@ -350,6 +353,46 @@ namespace IRaCIS.Core.Application.Contracts [DictionaryTranslateAttribute("YesOrNo")] public bool IsDicom { get; set; } } + + + public class PMKCheckEXportDTO + { + public string? TalkContent { get; set; } = String.Empty; + public string BlindName { get; set; } = String.Empty; + public bool IsUrgent { get; set; } + + public DateTime? CheckPassedTime { get; set; } + + public AuditStateEnum AuditState { get; set; } + + public CheckStateEnum CheckState { get; set; } + public String TrialSiteCode { get; set; } = String.Empty; + public string SubjectCode { get; set; } = String.Empty; + + [DictionaryTranslateAttribute("Subject_Visit_Status")] + public SubjectStatus SubjectStatus { get; set; } + + public decimal VisitNum { get; set; } + public string VisitName { get; set; } = string.Empty; + + public Guid SubjectId { get; set; } + public Guid SiteId { get; set; } + + [DictionaryTranslateAttribute("RequestBackState")] + public RequestBackStateEnum RequestBackState { get; set; } + + public DateTime? CheckTime { get; set; } + + + [DictionaryTranslateAttribute("CheckChallengeState")] + public CheckChanllengeTypeEnum CheckChallengeState { get; set; } + + [DictionaryTranslateAttribute("YesOrNo")] + public bool? IsCheckBack { get; set; } + + public string CheckResult { get; set; } = String.Empty; + } + #endregion diff --git a/IRaCIS.Core.Application/Service/QC/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs index 75044331e..727c44882 100644 --- a/IRaCIS.Core.Application/Service/QC/QCListService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs @@ -179,7 +179,7 @@ namespace IRaCIS.Core.Application.Image.QA } /// - /// 一致性核查表 + /// 一致性核查 检查信息表 /// /// /// @@ -256,7 +256,34 @@ namespace IRaCIS.Core.Application.Image.QA } + /// + /// 一致性核查记录表 + /// + /// + /// + [HttpPost] + public async Task GetConsistencyVerificationList_Export(CheckQuery checkQuery, + [FromServices] IRepository _commonDocumentRepository, + [FromServices] IDictionaryService _dictionaryService) + { + var svExpression = QCCommon.GetSubjectVisitFilter(checkQuery.VisitPlanArray); + + var list = await _subjectVisitRepository.Where(x => x.TrialId == checkQuery.TrialId) + .Where(x => x.AuditState == AuditStateEnum.QCPassed) //一致性核查中的,或者还没一致性核查的 + .WhereIf(checkQuery.CheckState != null, t => t.CheckState == checkQuery.CheckState) + .WhereIf(checkQuery.SiteId != null, t => t.SiteId == checkQuery.SiteId) + .WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo)) + .WhereIf(checkQuery.VisitPlanArray != null && checkQuery.VisitPlanArray?.Length > 0, svExpression) + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + var exportInfo = (await _trialRepository.Where(t => t.Id == checkQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); + + exportInfo.List = list; + + return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO)); + } #endregion diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 959cd32c6..897c74f57 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -472,6 +472,7 @@ namespace IRaCIS.Core.Application.Image.QA //回退后,回退状态恢复 sv.RequestBackState = RequestBackStateEnum.NotRequest; sv.IsCheckBack = true; + sv.CheckBackTime = DateTime.Now; sv.CheckState = CheckStateEnum.None; sv.CheckChallengeState = CheckChanllengeTypeEnum.None; diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index 821064043..4519e2043 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -70,6 +70,12 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.FirstGiveMedicineTime, u => u.MapFrom(s => s.Subject.FirstGiveMedicineTime)) .ForMember(d => d.TrialReadingCriterionName, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionName)); + + CreateMap() + .ForMember(d => d.TalkContent, u => u.MapFrom(s => s.CheckChallengeDialogList.OrderByDescending(y => y.CreateTime).Select(x => x.TalkContent).FirstOrDefault())) + .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) + .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)); + #endregion diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs index 6dec0d5bc..5aae51bc9 100644 --- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs +++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs @@ -107,6 +107,8 @@ namespace IRaCIS.Core.Domain.Models //是否一致性核查回退 public bool? IsCheckBack { get; set; } + public DateTime? CheckBackTime { get; set; } + public CheckChanllengeTypeEnum CheckChallengeState { get; set; } public PDStateEnum PDState { get; set; } = PDStateEnum.None; diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs index 0236b4fe5..3a0a87724 100644 --- a/IRaCIS.Core.Domain/_Config/_StaticData.cs +++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs @@ -133,6 +133,8 @@ public static class StaticData public const string TrialStudyList_Export = "TrialStudyList_Export"; + public const string TrialSubjectVisitCheckList_Export = "TrialSubjectVisitCheckList_Export"; + }