质控导出
parent
dae5ee098a
commit
2541d08fba
|
@ -261,7 +261,7 @@ public static class ExcelExportHelper
|
|||
/// </summary>
|
||||
public int TempalteLastColumnIndex { get; set; }
|
||||
|
||||
public bool IsCDISCExport { get; set; }=false;
|
||||
public bool IsCDISCExport { get; set; } = false;
|
||||
|
||||
//public List<string> CDISCList { get; set; } = new List<string>();
|
||||
|
||||
|
@ -661,7 +661,7 @@ public static class ExcelExportHelper
|
|||
|
||||
var iteObjDic = itemObj.ToDictionary();
|
||||
|
||||
var itemDicName = iteObjDic[dynamicColumnConfig.DynamicItemDicName]?.ToString();
|
||||
var itemDicName = iteObjDic.ContainsKey(dynamicColumnConfig.DynamicItemDicName) ? iteObjDic[dynamicColumnConfig.DynamicItemDicName]?.ToString() : "";
|
||||
var itemValue = iteObjDic[dynamicColumnConfig.DynamicItemValueName]?.ToString();
|
||||
|
||||
//var writeIndex = itemList.IndexOf(itemObj) + dynamicColumnConfig.AutoColumnStartIndex;
|
||||
|
|
|
@ -3573,5 +3573,127 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 质控问题答案导出
|
||||
/// </summary>
|
||||
/// <param name="trialId"></param>
|
||||
/// <param name="_trialQCQuestionAnswerRepository"></param>
|
||||
/// <param name="_trialRepository"></param>
|
||||
/// <param name="_dictionaryService"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> GetTrialQCQuestionAnserList_Export(Guid trialId,
|
||||
[FromServices] IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||
[FromServices] IRepository<Trial> _trialRepository,
|
||||
[FromServices] IRepository<UserRole> _userRoleRepository,
|
||||
[FromServices] IRepository<TrialQCQuestion> _trialQCQuestionRepository,
|
||||
[FromServices] IDictionaryService _dictionaryService)
|
||||
{
|
||||
//var query = from sv in _subjectVisitRepository.Where(t => t.TrialId == trialId && t.AuditState == AuditStateEnum.QCPassed)
|
||||
|
||||
// join u in _userRoleRepository.AsQueryable() on sv.UpdateUserId equals u.Id
|
||||
// select new QCQuestionReusult_export()
|
||||
// {
|
||||
// TrialSiteCode = sv.TrialSite.TrialSiteCode,
|
||||
// SubjectCode = sv.Subject.Code,
|
||||
// VisitName = sv.VisitName,
|
||||
// SubjectVisitId = sv.Id,
|
||||
|
||||
// CurrentQCEnum = qa.CurrentQCEnum,
|
||||
// AuditTime = qa.UpdateTime,
|
||||
// SecondReviewTime = qa.SecondReviewTime,
|
||||
// AuditUserName = u.UserName,
|
||||
// AuditUserFullName = u.FullName,
|
||||
// QuesitonName = qa.TrialQCQuestionConfigure.QuestionName,
|
||||
|
||||
// ShowOrder = qa.TrialQCQuestionConfigure.ShowOrder,
|
||||
// Answer = qa.Answer
|
||||
|
||||
// }
|
||||
|
||||
|
||||
var query = from qa in _trialQCQuestionAnswerRepository.Where(t => t.SubjectVisit.TrialId == trialId &&
|
||||
(t.SubjectVisit.AuditState == AuditStateEnum.QCPassed ||
|
||||
(t.SubjectVisit.SecondReviewState == SecondReviewState.AuditPassed && t.SecondReviewTime <= t.SubjectVisit.Trial.QCQuestionConfirmedTime) ||
|
||||
(t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit && t.SecondReviewTime < t.SubjectVisit.Trial.QCQuestionConfirmedTime)))
|
||||
join u in _userRoleRepository.AsQueryable() on qa.UpdateUserId equals u.Id
|
||||
select new QCQuestionAnswerResult_export()
|
||||
{
|
||||
SubjectVisitId = qa.SubjectVisitId,
|
||||
SecondReviewTime = qa.SecondReviewTime,
|
||||
|
||||
VisitNum = qa.SubjectVisit.VisitNum,
|
||||
|
||||
TrialSiteCode = qa.SubjectVisit.TrialSite.TrialSiteCode,
|
||||
SubjectCode = qa.SubjectVisit.Subject.Code,
|
||||
VisitName = qa.SubjectVisit.VisitName,
|
||||
CurrentQCEnum = qa.CurrentQCEnum,
|
||||
|
||||
AuditTime = qa.CurrentQCEnum==CurrentQC.First?qa.SubjectVisit.PreliminaryAuditTime: (qa.CurrentQCEnum == CurrentQC.Second ? qa.SubjectVisit.ReviewAuditTime: qa.UpdateTime) ,
|
||||
AuditUserName = qa.CurrentQCEnum == CurrentQC.First ? qa.SubjectVisit.PreliminaryAuditUser.UserName : (qa.CurrentQCEnum == CurrentQC.Second ? qa.SubjectVisit.ReviewAuditUser.UserName : u.UserName) ,
|
||||
AuditUserFullName = qa.CurrentQCEnum == CurrentQC.First ? qa.SubjectVisit.PreliminaryAuditUser.FullName : (qa.CurrentQCEnum == CurrentQC.Second ? qa.SubjectVisit.ReviewAuditUser.FullName : u.FullName),,
|
||||
|
||||
QuestionId=qa.TrialQCQuestionConfigure.Id,
|
||||
QuesitonName = qa.TrialQCQuestionConfigure.QuestionName,
|
||||
ShowOrder = qa.TrialQCQuestionConfigure.ShowOrder,
|
||||
Answer = qa.Answer,
|
||||
|
||||
|
||||
};
|
||||
|
||||
var result = query.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
|
||||
|
||||
var list = result.GroupBy(t => new { t.SubjectVisitId, t.SecondReviewTime, t.TrialSiteCode, t.VisitNum, t.SubjectCode, t.VisitName, t.CurrentQCEnum })
|
||||
.Select(g => new QCQuestionResult_Export()
|
||||
{
|
||||
TrialSiteCode = g.Key.TrialSiteCode,
|
||||
SubjectCode = g.Key.SubjectCode,
|
||||
VisitName = g.Key.VisitName,
|
||||
CurrentQCEnum = g.Key.CurrentQCEnum,
|
||||
VisitNum = g.Key.VisitNum,
|
||||
|
||||
AuditTime = g.Select(t => t.AuditTime).First(),
|
||||
AuditUserName = g.Select(t => t.AuditUserName).First(),
|
||||
AuditUserFullName = g.Select(t => t.AuditUserFullName).First(),
|
||||
|
||||
QuestionAnswerList = g.Select(t => new QCQuestionAnswerExport() { Answer = t.Answer, QuestionName = t.QuesitonName, ShowOrder = t.ShowOrder ,QuestionId=t.QuestionId}).OrderBy(t => t.ShowOrder).ToList()
|
||||
|
||||
|
||||
}).OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
|
||||
|
||||
|
||||
var exportInfo = new ExcelExportInfo();
|
||||
|
||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||
|
||||
|
||||
var columNameList = _trialQCQuestionRepository.Where(t=>t.TrialId==trialId).OrderBy(t=>t.ShowOrder).Select(t=>new {t.QuestionName,t.Id}).ToList();
|
||||
|
||||
|
||||
var dynamicColumnConfig = new DynamicColumnConfig()
|
||||
{
|
||||
AutoColumnTitleRowIndex = 2,
|
||||
AutoColumnStartIndex = 7,
|
||||
TempalteLastColumnIndex = 6,
|
||||
DynamicItemDicName = "TranslateDicName",
|
||||
DynamicItemValueName = "Answer",
|
||||
DynamicItemTitleName = "QuestionName",
|
||||
DynamicListName = "QuestionAnswerList",
|
||||
DynamicItemTitleId = "QuestionId",
|
||||
RemoveColunmIndexList = new List<int>() { },
|
||||
ColumnIdNameList = columNameList.Select(t => new DynamicColumnConfig.ColumItem() { Id = t.Id, Name = t.QuestionName }).ToList(),
|
||||
TranslateDicNameList = new List<string>()
|
||||
};
|
||||
|
||||
|
||||
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.TrialQCResult_Export, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCQuestionResult_Export), dynamicColumnConfig: dynamicColumnConfig);
|
||||
|
||||
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
||||
{
|
||||
FileDownloadName = $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}_{fileName}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2235,5 +2235,67 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
}
|
||||
|
||||
|
||||
public class QCQuestionAnswerResult_export
|
||||
{
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
public string TrialSiteCode { get; set; }
|
||||
|
||||
public string SubjectCode { get; set; }
|
||||
|
||||
public string VisitName { get; set; }
|
||||
|
||||
public decimal VisitNum { get; set; }
|
||||
|
||||
public CurrentQC CurrentQCEnum { get; set; }
|
||||
|
||||
public string AuditUserName { get; set; }
|
||||
|
||||
public string AuditUserFullName { get; set; }
|
||||
|
||||
public string AuditUser => $"{AuditUserName}({AuditUserFullName})";
|
||||
|
||||
public DateTime? AuditTime { get; set; }
|
||||
|
||||
public DateTime? SecondReviewTime { get; set; }
|
||||
|
||||
public Guid QuestionId { get; set; }
|
||||
public string QuesitonName { get; set; }
|
||||
|
||||
public string Answer { get; set; }
|
||||
|
||||
public int ShowOrder { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class QCQuestionResult_Export
|
||||
{
|
||||
public string TrialSiteCode { get; set; }
|
||||
|
||||
public string SubjectCode { get; set; }
|
||||
|
||||
public string VisitName { get; set; }
|
||||
public decimal VisitNum { get; set; }
|
||||
public CurrentQC CurrentQCEnum { get; set; }
|
||||
|
||||
public string AuditUserName { get; set; }
|
||||
|
||||
public string AuditUserFullName { get; set; }
|
||||
|
||||
public string AuditUser => $"{AuditUserName}({AuditUserFullName})";
|
||||
|
||||
public DateTime? AuditTime { get; set; }
|
||||
|
||||
public List<QCQuestionAnswerExport> QuestionAnswerList { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class QCQuestionAnswerExport
|
||||
{
|
||||
public Guid QuestionId { get; set; }
|
||||
public string QuestionName { get; set; }
|
||||
|
||||
public string Answer { get; set; }
|
||||
|
||||
public int ShowOrder { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -300,6 +300,8 @@ public static class StaticData
|
|||
|
||||
public const string TriaVisitImageStat_Export = "TriaVisitImageStat_Export";
|
||||
|
||||
public const string TrialQCResult_Export = "TrialQCResult_Export";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue