修改QC 删除影像逻辑

Uat_Study
hang 2022-11-14 16:06:14 +08:00
parent c477aed30c
commit 998a2177ff
5 changed files with 68 additions and 32 deletions

View File

@ -47,9 +47,9 @@ public static class ExcelExportHelper
foreach (var needTranslateProperty in needTranslatePropertyList)
{
var beforeValue = itemDic[needTranslateProperty.Name].ToString();
var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue.ToLower()).FirstOrDefault()?.ValueCN??String.Empty;
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).FirstOrDefault()?.ValueCN??String.Empty;
}
itemDic.Add("No", no++);

View File

@ -308,6 +308,7 @@ namespace IRaCIS.Core.Application.Contracts
public string TrialSiteCode { get; set; }
[DictionaryTranslateAttribute("Subject_Visit_Status")]
public SubjectStatus SubjectStatus { get; set; }
@ -332,7 +333,7 @@ namespace IRaCIS.Core.Application.Contracts
public class UnionStudyExportDTO
{
public string Modalities { get; set; } = string.Empty;
public string Modality { get; set; } = string.Empty;
public DateTime? StudyTime { get; set; }
@ -352,6 +353,10 @@ namespace IRaCIS.Core.Application.Contracts
[DictionaryTranslateAttribute("YesOrNo")]
public bool IsDicom { get; set; }
[DictionaryTranslateAttribute("CheckState")]
public CheckStateEnum CheckState { get; set; }
}
@ -394,6 +399,11 @@ namespace IRaCIS.Core.Application.Contracts
public bool? IsCheckBack { get; set; }
public string CheckResult { get; set; } = String.Empty;
public string CheckDialogStr { get; set; }
public DateTime? CheckBackTime { get; set; }
}

View File

@ -172,6 +172,7 @@ namespace IRaCIS.Core.Application.Image.QA
.ProjectTo<ReadPeriodExportDto>(_mapper.ConfigurationProvider).ToListAsync();
list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ToList();
var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
@ -205,7 +206,7 @@ namespace IRaCIS.Core.Application.Image.QA
VisitNum = t.SubjectVisit.VisitNum,
IsDicom = true,
SubjectCode = t.Subject.Code,
Modalities = t.Modalities,
Modality = t.Modalities,
StudyCode = t.StudyCode,
StudyTime = t.StudyTime,
@ -213,6 +214,7 @@ namespace IRaCIS.Core.Application.Image.QA
TrialSiteCode = t.TrialSite.TrialSiteCode,
CheckState=t.SubjectVisit.CheckState,
//Uploader = t.Uploader.UserName,
//UploadTime = t.CreateTime
@ -233,7 +235,7 @@ namespace IRaCIS.Core.Application.Image.QA
VisitNum = t.SubjectVisit.VisitNum,
IsDicom = false,
SubjectCode = t.Subject.Code,
Modalities = t.Modality,
Modality = t.Modality,
StudyCode = t.StudyCode,
StudyTime = t.ImageDate,
@ -241,6 +243,8 @@ namespace IRaCIS.Core.Application.Image.QA
TrialSiteCode = t.TrialSite.TrialSiteCode,
CheckState = t.SubjectVisit.CheckState,
//Uploader = t.CreateUser.UserName,
//UploadTime = t.CreateTime
@ -251,6 +255,8 @@ namespace IRaCIS.Core.Application.Image.QA
var list = await dicomStudyQuery.Union(nodeDicomStudyQuery)
.ToListAsync();
list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t=>t.VisitNum).ToList();
var exportInfo = (await _trialRepository.Where(t => t.Id == studyQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
exportInfo.List = list;
@ -281,6 +287,8 @@ namespace IRaCIS.Core.Application.Image.QA
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
.ProjectTo<PMKCheckEXportDTO>(_mapper.ConfigurationProvider).ToListAsync();
list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
var exportInfo = (await _trialRepository.Where(t => t.Id == checkQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
exportInfo.List = list;

View File

@ -1323,6 +1323,10 @@ namespace IRaCIS.Core.Application.Image.QA
await VerifyIsCanQCAsync(dbSubjectVisit);
//删除 软删除的物理文件
var instanceIdList = await _repository.Where<DicomInstance>(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)
.Select(t => new { InstanceId = t.Id, t.SeriesId, t.StudyId, t.SubjectId, t.SiteId }).ToListAsync();
//维护统一状态
dbSubjectVisit.ReadingStatus = ReadingStatusEnum.ConsistencyCheck;
@ -1356,12 +1360,29 @@ namespace IRaCIS.Core.Application.Image.QA
//维护统一状态
dbSubjectVisit.ReadingStatus = trialConfig.IsImageConsistencyVerification ? ReadingStatusEnum.ConsistencyCheck : ReadingStatusEnum.TaskAllocate;
//删除影像
instanceIdList.ForEach(t =>
{
var dicomStudy = new DicomStudy() { Id = t.StudyId, SubjectId = t.SubjectId, TrialId = trialId, SiteId = t.SiteId, SubjectVisitId = subjectVisitId };
var path =
FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, t.InstanceId);
if (System.IO.File.Exists(path))
{
File.Delete(path);
}
});
}
else
{
return ResponseOutput.NotOk("项目配置影像质控为单审,当前访视影像质控任务不能从当前审核状态变更到 审核通过。");
}
}
else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit)
{
@ -1402,6 +1423,21 @@ namespace IRaCIS.Core.Application.Image.QA
//维护统一状态
dbSubjectVisit.ReadingStatus = trialConfig.IsImageConsistencyVerification ? ReadingStatusEnum.ConsistencyCheck : ReadingStatusEnum.TaskAllocate;
//删除影像
instanceIdList.ForEach(t =>
{
var dicomStudy = new DicomStudy() { Id = t.StudyId, SubjectId = t.SubjectId, TrialId = trialId, SiteId = t.SiteId, SubjectVisitId = subjectVisitId };
var path =
FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, t.InstanceId);
if (System.IO.File.Exists(path))
{
File.Delete(path);
}
});
}
else
{
@ -1460,31 +1496,8 @@ namespace IRaCIS.Core.Application.Image.QA
dbSubjectVisit.CurrentActionUserId = null;
dbSubjectVisit.CurrentActionUserExpireTime = null;
//删除 软删除的物理文件
var instanceIdList = await _repository.Where<DicomInstance>(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)
.Select(t => new { InstanceId = t.Id, t.SeriesId, t.StudyId, t.SubjectId, t.SiteId }).ToListAsync();
instanceIdList.ForEach(t =>
{
var dicomStudy = new DicomStudy() { Id = t.StudyId, SubjectId = t.SubjectId, TrialId = trialId, SiteId = t.SiteId, SubjectVisitId = subjectVisitId };
var path =
FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, t.InstanceId);
if (System.IO.File.Exists(path))
{
File.Delete(path);
}
});
await _repository.SaveChangesAsync();
//var success = await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
return ResponseOutput.Result(true);
@ -1492,6 +1505,8 @@ namespace IRaCIS.Core.Application.Image.QA
}
/// <summary>
/// 设置、取消 访视紧急
/// </summary>

View File

@ -37,7 +37,7 @@ 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.DialogStr,u=>u.MapFrom(t=> string.Join('|', t.DialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " " + c.CreateTime.ToString("yyyy-mm-dd hh:mm:ss") + " :" + c.TalkContent)) ))
.ForMember(d=>d.DialogStr,u=>u.MapFrom(t=> string.Join(" | ", t.DialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " " + c.CreateTime.ToString("yyyy-mm-dd hh:mm:ss") + " :" + c.TalkContent)) ))
.ForMember(d => d.SubjectState, u => u.MapFrom(s => s.SubjectVisit.Subject.Status));
@ -81,7 +81,10 @@ namespace IRaCIS.Core.Application.Service
CreateMap<SubjectVisit, PMKCheckEXportDTO>()
.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));
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
.ForMember(d => d.CheckDialogStr, u => u.MapFrom(t => string.Join(" | ", t.CheckChallengeDialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " " + c.CreateTime.ToString("yyyy-mm-dd hh:mm:ss") + " :" + c.TalkContent))))
;
CreateMap<VisitTask, ReadingTaskExportDto>()
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))