Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						6996ab51b4
					
				| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using IRaCIS.Application.Interfaces;
 | 
			
		||||
using DocumentFormat.OpenXml.Drawing.Diagrams;
 | 
			
		||||
using IRaCIS.Application.Interfaces;
 | 
			
		||||
using IRaCIS.Core.Application.Helper;
 | 
			
		||||
using IRaCIS.Core.Domain.Share;
 | 
			
		||||
using Microsoft.AspNetCore.Hosting;
 | 
			
		||||
| 
						 | 
				
			
			@ -83,10 +84,12 @@ public static class ExcelExportHelper
 | 
			
		|||
                        }
 | 
			
		||||
 | 
			
		||||
                        itemDic.Add("No", no++);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        newObjList.Add(itemDic);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    dic[key] = newObjList;
 | 
			
		||||
                    dic[key] =  newObjList ;
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -143,22 +146,32 @@ public static class ExcelExportHelper
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static async Task<MemoryStream> DataExport_NpoiTestAsync(string code, object data, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
 | 
			
		||||
    public static async Task<(MemoryStream,string)> DataExport_NpoiTestAsync(string code, object data,  IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService = null, Type? translateType = null, CriterionType? criterionType = null)
 | 
			
		||||
    {
 | 
			
		||||
        //判断是否有字典翻译
 | 
			
		||||
 | 
			
		||||
        if (_dictionaryService != null && translateType != null)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            ////只标注单个的时候
 | 
			
		||||
            //var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
 | 
			
		||||
            //    .Select(c => new { c.Name, DicParentCode = ((DictionaryTranslateAttribute?)c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false)[0])?.DicParentCode }).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //一个值 对应不同的字典翻译
 | 
			
		||||
            var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), true))
 | 
			
		||||
                .SelectMany(c =>
 | 
			
		||||
                c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false).Select(f => (DictionaryTranslateAttribute?)f).Where(t => t.CriterionType == criterionType || t.CriterionType == null).Select(k => new { c.Name, k.DicParentCode })
 | 
			
		||||
                c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false).Select(f => (DictionaryTranslateAttribute?)f).Where(t => t.CriterionType == criterionType || t.CriterionType == null)
 | 
			
		||||
                .Select(k => new { c.Name, k.DicParentCode, k.IsTranslateDenpendOtherProperty, k.DependPropertyName, k.DependPropertyValueStr })
 | 
			
		||||
                ).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //字典表查询出所有需要翻译的数据
 | 
			
		||||
 | 
			
		||||
            var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).Distinct().ToArray());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var dic = JsonConvert.DeserializeObject<IDictionary<string, object>>(data.ToJsonNotIgnoreNull());
 | 
			
		||||
 | 
			
		||||
            foreach (var key in dic.Keys)
 | 
			
		||||
| 
						 | 
				
			
			@ -174,11 +187,30 @@ public static class ExcelExportHelper
 | 
			
		|||
                    {
 | 
			
		||||
                        var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonNotIgnoreNull());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        foreach (var needTranslateProperty in needTranslatePropertyList)
 | 
			
		||||
                        {
 | 
			
		||||
                            var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
 | 
			
		||||
                            //翻译的属性依赖其他属性
 | 
			
		||||
                            if (needTranslateProperty.IsTranslateDenpendOtherProperty)
 | 
			
		||||
                            {
 | 
			
		||||
                                if (item[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower())
 | 
			
		||||
                                {
 | 
			
		||||
                                    var beforeValue = itemDic[needTranslateProperty.Name]?.ToString();
 | 
			
		||||
 | 
			
		||||
                                    itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue?.ToLower()).FirstOrDefault()?.ValueCN ?? String.Empty;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            //普通翻译 或者某一标准翻译
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                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++);
 | 
			
		||||
| 
						 | 
				
			
			@ -197,12 +229,9 @@ public static class ExcelExportHelper
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        var (physicalPath, fileName) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        var (physicalPath, fileNmae) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
        //模板路径
 | 
			
		||||
        var tplPath = physicalPath;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -220,9 +249,9 @@ public static class ExcelExportHelper
 | 
			
		|||
        memoryStream.Seek(0, SeekOrigin.Begin);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return memoryStream;
 | 
			
		||||
        return (memoryStream, fileName);
 | 
			
		||||
 | 
			
		||||
       //var wb = new HSSFWorkbook(memoryStream);
 | 
			
		||||
        //var wb = new HSSFWorkbook(memoryStream);
 | 
			
		||||
 | 
			
		||||
        //var  sheet = wb.GetSheetAt(0);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,14 +77,14 @@
 | 
			
		|||
		<PackageReference Include="Hangfire" Version="1.7.31">
 | 
			
		||||
		  <TreatAsUsed>true</TreatAsUsed>
 | 
			
		||||
		</PackageReference>
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Core" Version="2.6.9" />
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Csv" Version="2.6.9">
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Core" Version="2.7.4.2" />
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Csv" Version="2.7.4.2">
 | 
			
		||||
		  <TreatAsUsed>true</TreatAsUsed>
 | 
			
		||||
		</PackageReference>
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Excel" Version="2.6.9">
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Excel" Version="2.7.4.2">
 | 
			
		||||
		  <TreatAsUsed>true</TreatAsUsed>
 | 
			
		||||
		</PackageReference>
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Excel.AspNetCore" Version="2.6.9" />
 | 
			
		||||
		<PackageReference Include="Magicodes.IE.Excel.AspNetCore" Version="2.7.4.2" />
 | 
			
		||||
		<PackageReference Include="MailKit" Version="3.4.2" />
 | 
			
		||||
		<PackageReference Include="MediatR" Version="11.0.0" />
 | 
			
		||||
		<PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.10" />
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@
 | 
			
		|||
		  <TreatAsUsed>true</TreatAsUsed>
 | 
			
		||||
		</PackageReference>
 | 
			
		||||
		<PackageReference Include="MimeKit" Version="3.4.2" />
 | 
			
		||||
		<PackageReference Include="MiniExcel" Version="1.28.1" />
 | 
			
		||||
		<PackageReference Include="MiniExcel" Version="1.30.1" />
 | 
			
		||||
		<PackageReference Include="MiniWord" Version="0.6.1" />
 | 
			
		||||
		<PackageReference Include="My.Extensions.Localization.Json" Version="3.0.0">
 | 
			
		||||
		  <TreatAsUsed>true</TreatAsUsed>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -469,6 +469,16 @@
 | 
			
		|||
            <param name="_dictionaryService"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetSubjectProgress_Export(IRaCIS.Core.Application.Contracts.SubjectProgressQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            Subject 进展表 --new
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="dto"></param>
 | 
			
		||||
            <param name="_commonDocumentRepository"></param>
 | 
			
		||||
            <param name="_dictionaryService"></param>
 | 
			
		||||
            <param name="_trialRepository"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetReadingPeriodList_Export(IRaCIS.Core.Application.Contracts.ReadPeriodQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            阅片期信息表
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,22 @@
 | 
			
		|||
using DocumentFormat.OpenXml.Office2010.ExcelAc;
 | 
			
		||||
using DocumentFormat.OpenXml.Spreadsheet;
 | 
			
		||||
using IRaCIS.Application.Contracts;
 | 
			
		||||
using IRaCIS.Application.Interfaces;
 | 
			
		||||
using IRaCIS.Core.Application.Contracts;
 | 
			
		||||
using IRaCIS.Core.Application.Service.Reading.Dto;
 | 
			
		||||
using IRaCIS.Core.Application.ViewModel;
 | 
			
		||||
using IRaCIS.Core.Domain.Share;
 | 
			
		||||
using IRaCIS.Core.Infra.EFCore.Common;
 | 
			
		||||
using Microsoft.AspNetCore.Authorization;
 | 
			
		||||
using Microsoft.AspNetCore.Mvc;
 | 
			
		||||
using MiniExcelLibs;
 | 
			
		||||
using MiniExcelLibs.OpenXml;
 | 
			
		||||
using NPOI.HPSF;
 | 
			
		||||
using NPOI.HSSF.UserModel;
 | 
			
		||||
using NPOI.XSSF.UserModel;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +75,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +120,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +153,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository , _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -181,10 +189,153 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Subject 进展表 --new
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="dto"></param>
 | 
			
		||||
        /// <param name="_commonDocumentRepository"></param>
 | 
			
		||||
        /// <param name="_dictionaryService"></param>
 | 
			
		||||
        /// <param name="_trialRepository"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
 | 
			
		||||
        [HttpPost]
 | 
			
		||||
        public async Task<IActionResult> GetSubjectProgress_Export(SubjectProgressQuery dto,
 | 
			
		||||
        [FromServices] IRepository<CommonDocument> _commonDocumentRepository,
 | 
			
		||||
        [FromServices] IDictionaryService _dictionaryService,
 | 
			
		||||
         [FromServices] IRepository<Trial> _trialRepository)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var query = from subject in _repository.Where<Subject>(u => u.TrialId == dto.TrialId)
 | 
			
		||||
                        join trialReadingCriterion in _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId) on subject.TrialId equals trialReadingCriterion.TrialId
 | 
			
		||||
 | 
			
		||||
                        select new SubjectProgressDto()
 | 
			
		||||
                        {
 | 
			
		||||
                            TrialSiteCode = subject.TrialSite.TrialSiteCode,
 | 
			
		||||
                            SubjectCode = subject.Code,
 | 
			
		||||
                            SubjectStatus = subject.Status,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            VisitList = subject.SubjectVisitList.Where(t => t.VisitExecuted != VisitExecutedEnum.Unavailable).Select(t => new SubjectProgressDto.MouduleProgress()
 | 
			
		||||
                            {
 | 
			
		||||
                                TaskName = t.VisitName,
 | 
			
		||||
                                VisitTaskNum = t.VisitNum,
 | 
			
		||||
                                Inplan = t.InPlan,
 | 
			
		||||
                                IsFinalVisit = t.IsFinalVisit,
 | 
			
		||||
                                IsLostVisit = t.IsLostVisit,
 | 
			
		||||
                                ReadingStatus =
 | 
			
		||||
                                t.VisitTaskList.Where(t => t.TaskState == TaskState.Effect && t.TrialReadingCriterionId==dto.TrialReadingCriterionId && t.TaskAllocationState == TaskAllocationState.Allocated && t.IsAnalysisCreate == false && t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == (int)trialReadingCriterion.ReadingType ?
 | 
			
		||||
                                ReadingStatusEnum.ReadCompleted : t.VisitTaskList.Where(t => t.TaskState == TaskState.Effect && t.TrialReadingCriterionId == dto.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.ReadingCategory == ReadingCategory.Visit && t.TaskAllocationState == TaskAllocationState.Allocated).Count() == (int)trialReadingCriterion.ReadingType ? ReadingStatusEnum.ImageReading :
 | 
			
		||||
                                t.ReadingStatus
 | 
			
		||||
                            }).ToList(),
 | 
			
		||||
 | 
			
		||||
                            ModuleList = subject.ReadModuleList.Where(t=>t.TrialReadingCriterionId==dto.TrialReadingCriterionId).Select(t => new SubjectProgressDto.MouduleProgress()
 | 
			
		||||
                            {
 | 
			
		||||
                                TaskName = t.ModuleName,
 | 
			
		||||
                                VisitTaskNum = t.ReadingSetType == ReadingSetType.ImageReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : ReadingCommon.TaskNumDic[ReadingCategory.Oncology] + t.SubjectVisit.VisitNum,
 | 
			
		||||
                                ReadingSetType = t.ReadingSetType,
 | 
			
		||||
                                ReadingStatus = t.ModuleTaskList.Where(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && (t.ReadingCategory == ReadingCategory.Oncology || t.ReadingCategory == ReadingCategory.Global) && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == (int)trialReadingCriterion.ReadingType ?
 | 
			
		||||
                                 ReadingStatusEnum.ReadCompleted : t.ModuleTaskList.Where(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && (t.ReadingCategory == ReadingCategory.Oncology || t.ReadingCategory == ReadingCategory.Global) && t.TaskAllocationState == TaskAllocationState.Allocated).Count() == (int)trialReadingCriterion.ReadingType ?
 | 
			
		||||
                                 ReadingStatusEnum.ImageReading : t.ReadingStatus
 | 
			
		||||
                            }).ToList()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
               ;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var list = query.ToList();
 | 
			
		||||
            //.ProjectTo<SubjectProgressDto>(_mapper.ConfigurationProvider).ToListAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var exportInfo = (await _trialRepository.Where(t => t.Id == dto.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
            exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == dto.TrialId && u.IsConfirm && u.Id == dto.TrialReadingCriterionId).Select(t=>t.CriterionName).FirstOrDefaultAsync();  
 | 
			
		||||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(StaticData.Export.TrialSubjectProgressList_Export, exportInfo, /*"", */_commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectProgressDto));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            // 使用NPOI  进行二次处理
 | 
			
		||||
 | 
			
		||||
            var wb = new XSSFWorkbook(memoryStream);
 | 
			
		||||
 | 
			
		||||
            var sheet = wb.GetSheetAt(0);
 | 
			
		||||
 | 
			
		||||
            foreach (var subject in list)
 | 
			
		||||
            {
 | 
			
		||||
                var index = list.IndexOf(subject);
 | 
			
		||||
                var row = sheet.GetRow(index + 4);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                foreach (var item in subject.TotalList)
 | 
			
		||||
                {
 | 
			
		||||
                    //从第五列开始动态写
 | 
			
		||||
                    var visitIndex = subject.TotalList.IndexOf(item) + 4;
 | 
			
		||||
 | 
			
		||||
                    var cell = row.CreateCell(visitIndex);
 | 
			
		||||
 | 
			
		||||
                    if (item.IsLostVisit == true)
 | 
			
		||||
                    {
 | 
			
		||||
                        cell.CellStyle = sheet.GetRow(1).GetCell(7).CellStyle;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        switch (item.ReadingStatus)
 | 
			
		||||
                        {
 | 
			
		||||
                            case ReadingStatusEnum.ImageNotSubmit:
 | 
			
		||||
 | 
			
		||||
                                cell.CellStyle = sheet.GetRow(1).GetCell(1).CellStyle;
 | 
			
		||||
 | 
			
		||||
                                break;
 | 
			
		||||
                            case ReadingStatusEnum.ImageQuality:
 | 
			
		||||
                                cell.CellStyle = sheet.GetRow(1).GetCell(2).CellStyle;
 | 
			
		||||
                                break;
 | 
			
		||||
                            case ReadingStatusEnum.ConsistencyCheck:
 | 
			
		||||
                                cell.CellStyle = sheet.GetRow(1).GetCell(3).CellStyle;
 | 
			
		||||
                                break;
 | 
			
		||||
                            case ReadingStatusEnum.TaskAllocate:
 | 
			
		||||
                                cell.CellStyle = sheet.GetRow(1).GetCell(4).CellStyle;
 | 
			
		||||
                                break;
 | 
			
		||||
                            case ReadingStatusEnum.ImageReading:
 | 
			
		||||
                                cell.CellStyle = sheet.GetRow(1).GetCell(5).CellStyle;
 | 
			
		||||
                                break;
 | 
			
		||||
                            case ReadingStatusEnum.ReadCompleted:
 | 
			
		||||
                                cell.CellStyle = sheet.GetRow(1).GetCell(6).CellStyle;
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            default:
 | 
			
		||||
                                break;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    cell.SetCellValue(item.TaskName);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var memoryStream2 = new MemoryStream();
 | 
			
		||||
            wb.Write(memoryStream2);
 | 
			
		||||
            memoryStream2.Seek(0, SeekOrigin.Begin);
 | 
			
		||||
 | 
			
		||||
            return new FileStreamResult(memoryStream2, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
 | 
			
		||||
            {
 | 
			
		||||
                FileDownloadName = $"{exportInfo.TrialCode}_{exportInfo.CriterionName}_{fileName.Substring(startIndex: 0, fileName.LastIndexOf('.'))}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 阅片期信息表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +358,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectReadingPeriodList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectReadingPeriodList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +442,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyExportDTO));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyExportDTO));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +476,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -372,7 +523,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReadingTaskList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadingTaskExportDto));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReadingTaskList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadingTaskExportDto));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -419,7 +570,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReReadingTaskList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReReadingTaskExportDto));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReReadingTaskList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReReadingTaskExportDto));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +608,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -474,9 +625,9 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
                [FromServices] IRepository<Trial> _trialRepository)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var criterionType = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
 | 
			
		||||
            var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
            if (criterionType != CriterionType.RECIST1Pointt1)
 | 
			
		||||
            if (criterion.CriterionType != CriterionType.RECIST1Pointt1)
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception("当前标准导出还未支持");
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -533,9 +684,10 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
            exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSelfAnalysisList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SelftAnalysisExport));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSelfAnalysisList_Export, exportInfo, $"{exportInfo.TrialCode}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SelftAnalysisExport));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -550,9 +702,9 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
                [FromServices] IDictionaryService _dictionaryService,
 | 
			
		||||
                [FromServices] IRepository<Trial> _trialRepository)
 | 
			
		||||
        {
 | 
			
		||||
            var criterionType = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
 | 
			
		||||
            var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
            if (criterionType != CriterionType.RECIST1Pointt1)
 | 
			
		||||
            if (criterion.CriterionType != CriterionType.RECIST1Pointt1)
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception("当前标准导出还未支持");
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -630,10 +782,10 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
            var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
            exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync();
 | 
			
		||||
            exportInfo.List = newList;
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialGroupAnalysisList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(GroupAnalysisExport));
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialGroupAnalysisList_Export, exportInfo, $"{exportInfo.TrialCode}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(GroupAnalysisExport));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -643,14 +795,14 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
            public string FileName { get; set; }
 | 
			
		||||
 | 
			
		||||
            public ExportCatogory ExportCatogory { get;set; }
 | 
			
		||||
            public ExportCatogory ExportCatogory { get; set; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public enum ExportCatogory
 | 
			
		||||
        {
 | 
			
		||||
           // 整体肿瘤评估
 | 
			
		||||
            OverallTumorEvaluation =1,
 | 
			
		||||
            // 整体肿瘤评估
 | 
			
		||||
            OverallTumorEvaluation = 1,
 | 
			
		||||
 | 
			
		||||
            //肿瘤疗效评估
 | 
			
		||||
            EvaluationOfTumorEfficacy = 2,
 | 
			
		||||
| 
						 | 
				
			
			@ -670,16 +822,16 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
        {
 | 
			
		||||
 | 
			
		||||
            var list = new List<ExportDocumentDes>();
 | 
			
		||||
            var criterionType = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == trialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
 | 
			
		||||
            var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == trialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
            if (criterionType == CriterionType.RECIST1Pointt1)
 | 
			
		||||
            if (criterion.CriterionType == CriterionType.RECIST1Pointt1)
 | 
			
		||||
            {
 | 
			
		||||
                list.Add( new ExportDocumentDes() { Code= StaticData.Export.OverallTumorEvaluation_Export ,ExportCatogory=ExportCatogory.OverallTumorEvaluation}  );
 | 
			
		||||
                list.Add(new ExportDocumentDes() { Code = StaticData.Export.OverallTumorEvaluation_Export, ExportCatogory = ExportCatogory.OverallTumorEvaluation });
 | 
			
		||||
                list.Add(new ExportDocumentDes() { Code = StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, ExportCatogory = ExportCatogory.EvaluationOfTumorEfficacy });
 | 
			
		||||
                list.Add(new ExportDocumentDes() { Code = StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });  
 | 
			
		||||
                list.Add(new ExportDocumentDes() { Code = StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var result = _repository.Where<CommonDocument>(t => list.Select(c=>c.Code).Contains(t.Code)).Select(c => new ExportDocumentDes() { Code = c.Code, FileName = c.Name }).ToList();
 | 
			
		||||
            var result = _repository.Where<CommonDocument>(t => list.Select(c => c.Code).Contains(t.Code)).Select(c => new ExportDocumentDes() { Code = c.Code, FileName = c.Name }).ToList();
 | 
			
		||||
 | 
			
		||||
            foreach (var item in list)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -708,9 +860,9 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
            //每次查询必须是单标准的
 | 
			
		||||
            var criterionType = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
 | 
			
		||||
            var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
            if (criterionType != CriterionType.RECIST1Pointt1)
 | 
			
		||||
            if (criterion.CriterionType != CriterionType.RECIST1Pointt1)
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception("当前标准导出还未支持");
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -735,16 +887,17 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
               .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
 | 
			
		||||
               .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
 | 
			
		||||
               .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
 | 
			
		||||
               .ProjectTo<OverallTumorEvaluationExport>(_mapper.ConfigurationProvider, new { criterionType = criterionType }).ToListAsync();
 | 
			
		||||
               .ProjectTo<OverallTumorEvaluationExport>(_mapper.ConfigurationProvider, new { criterionType = criterion.CriterionType }).ToListAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
            exportInfo.CriterionName = await _repository.Where<ReadingQuestionCriterionTrial>(u => u.TrialId == queryVisitTask.TrialId && u.IsConfirm && u.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionName).FirstOrDefaultAsync(); 
 | 
			
		||||
 | 
			
		||||
            exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.OverallTumorEvaluation_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterionType);
 | 
			
		||||
            return await ExcelExportHelper.DataExportAsync(StaticData.Export.OverallTumorEvaluation_Export, exportInfo, $"{exportInfo.TrialCode}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterion.CriterionType);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -764,7 +917,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
        {
 | 
			
		||||
 | 
			
		||||
            //每次查询必须是单标准的
 | 
			
		||||
            var criterionType = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
 | 
			
		||||
            var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName} ).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
            var query = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -788,15 +941,15 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
               .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1));
 | 
			
		||||
 | 
			
		||||
            var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
            exportInfo.CriterionName = criterion.CriterionName;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (criterionType == CriterionType.RECIST1Pointt1)
 | 
			
		||||
            if (criterion.CriterionType == CriterionType.RECIST1Pointt1)
 | 
			
		||||
            {
 | 
			
		||||
                var list = await query.ProjectTo<RECIST1Point1EvaluationOfTumorEfficacyExport>(_mapper.ConfigurationProvider, new { criterionType = criterionType }).ToListAsync();
 | 
			
		||||
                var list = await query.ProjectTo<RECIST1Point1EvaluationOfTumorEfficacyExport>(_mapper.ConfigurationProvider, new { criterionType = criterion.CriterionType }).ToListAsync();
 | 
			
		||||
 | 
			
		||||
                exportInfo.List = list;
 | 
			
		||||
 | 
			
		||||
                return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1EvaluationOfTumorEfficacyExport), criterionType);
 | 
			
		||||
                return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, exportInfo, $"{exportInfo.TrialCode}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1EvaluationOfTumorEfficacyExport), criterion.CriterionType);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            else
 | 
			
		||||
| 
						 | 
				
			
			@ -821,7 +974,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
        {
 | 
			
		||||
 | 
			
		||||
            //每次查询必须是单标准的
 | 
			
		||||
            var criterionType = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
 | 
			
		||||
            var criterion = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName }).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
            var query = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -845,11 +998,11 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
               .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1));
 | 
			
		||||
 | 
			
		||||
            var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
            exportInfo.CriterionName = criterion.CriterionName;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (criterionType == CriterionType.RECIST1Pointt1)
 | 
			
		||||
            if (criterion.CriterionType == CriterionType.RECIST1Pointt1)
 | 
			
		||||
            {
 | 
			
		||||
                var list = await query.ProjectTo<RECIST1Point1DetailedOfEvaluatedLesionExport>(_mapper.ConfigurationProvider, new { criterionType = criterionType, isEn_Us = _userInfo.IsEn_Us }).ToListAsync();
 | 
			
		||||
                var list = await query.ProjectTo<RECIST1Point1DetailedOfEvaluatedLesionExport>(_mapper.ConfigurationProvider, new { criterionType = criterion.CriterionType, isEn_Us = _userInfo.IsEn_Us }).ToListAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                var exportList = list.SelectMany(c =>
 | 
			
		||||
| 
						 | 
				
			
			@ -877,7 +1030,7 @@ namespace IRaCIS.Core.Application.Service.Common
 | 
			
		|||
                }).ToList();
 | 
			
		||||
                exportInfo.List = exportList;
 | 
			
		||||
 | 
			
		||||
                return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterionType);
 | 
			
		||||
                return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterion.CriterionType);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,9 @@
 | 
			
		|||
using IRaCIS.Core.Application.Helper;
 | 
			
		||||
using IRaCIS.Core.Application.ViewModel;
 | 
			
		||||
using IRaCIS.Core.Domain.Share;
 | 
			
		||||
using MiniExcelLibs.Attributes;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using System.ComponentModel;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Application.Contracts
 | 
			
		||||
| 
						 | 
				
			
			@ -242,8 +244,12 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
        //public DateTime? SignDate { get; set; }
 | 
			
		||||
        //public bool IsUrgent { get; set; }
 | 
			
		||||
 | 
			
		||||
        //[ExcelColumn(Name = "FirstGiveMedicineTime", Format = "yyyy-MM-dd")]
 | 
			
		||||
        public DateTime? FirstGiveMedicineTime { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public string FirstGiveMedicineTimeStr => FirstGiveMedicineTime?.ToString("yyyy-MM-dd");
 | 
			
		||||
 | 
			
		||||
        public DateTime? OutEnrollmentTime { get; set; }
 | 
			
		||||
        public DateTime? VisitOverTime { get; set; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -352,6 +358,58 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
        public Guid TrialId { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class SubjectProgressQuery
 | 
			
		||||
    {
 | 
			
		||||
        [NotDefault]
 | 
			
		||||
        public Guid TrialId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [NotDefault]
 | 
			
		||||
        public Guid TrialReadingCriterionId { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class SubjectProgressDto
 | 
			
		||||
    {
 | 
			
		||||
        public string SubjectCode { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string TrialSiteCode { get; set; }
 | 
			
		||||
 | 
			
		||||
        [DictionaryTranslateAttribute("Subject_Visit_Status")]
 | 
			
		||||
        public SubjectStatus SubjectStatus { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public List<MouduleProgress> VisitList { get; set; }
 | 
			
		||||
 | 
			
		||||
        public List<MouduleProgress> ModuleList { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public List<MouduleProgress> TotalList => VisitList .OrderByDescending(t=>t.Inplan).Union(ModuleList.OrderBy(t=>t.ReadingSetType).ThenBy(t=>t.VisitTaskNum)).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public class MouduleProgress
 | 
			
		||||
        {
 | 
			
		||||
            public string TaskName { get; set; }
 | 
			
		||||
 | 
			
		||||
            public ReadingStatusEnum ReadingStatus { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
           
 | 
			
		||||
 | 
			
		||||
            //最终任务
 | 
			
		||||
            public decimal VisitTaskNum { get; set; }
 | 
			
		||||
 | 
			
		||||
            //访视会有
 | 
			
		||||
            public bool? Inplan { get; set; }
 | 
			
		||||
 | 
			
		||||
            public bool? IsLostVisit { get; set; }
 | 
			
		||||
 | 
			
		||||
            public bool? IsFinalVisit { get; set; }
 | 
			
		||||
 | 
			
		||||
            //阅片期会有
 | 
			
		||||
            public ReadingSetType? ReadingSetType { get; set; }
 | 
			
		||||
        }    
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class ReadPeriodExportDto
 | 
			
		||||
    {
 | 
			
		||||
        public string SubjectCode { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			@ -362,9 +420,11 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
        public SubjectStatus SubjectStatus { get; set; }
 | 
			
		||||
        public string TrialReadingCriterionName { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [ExcelFormat("yyyy-MM-dd")]
 | 
			
		||||
        public DateTime? FirstGiveMedicineTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string FirstGiveMedicineTimeStr => FirstGiveMedicineTime?.ToString("yyyy-MM-dd");
 | 
			
		||||
 | 
			
		||||
        public string ModuleName { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -385,9 +445,11 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
 | 
			
		||||
        public string Modality { get; set; } = string.Empty;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [ExcelFormat("yyyy-MM-dd")]
 | 
			
		||||
        public DateTime? StudyTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string StudyTimeStr => StudyTime?.ToString("yyyy-MM-dd");
 | 
			
		||||
 | 
			
		||||
        public string SubjectCode { get; set; } = String.Empty;
 | 
			
		||||
 | 
			
		||||
        public string VisitName { get; set; } = string.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -781,7 +843,7 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
        public string BodyPartDescription { get; set; }
 | 
			
		||||
 | 
			
		||||
        //测量值
 | 
			
		||||
        public string MeasurementResult { get; set; }
 | 
			
		||||
        //public string MeasurementResult { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //长径
 | 
			
		||||
| 
						 | 
				
			
			@ -1087,7 +1149,11 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
 | 
			
		||||
        public RequestBackStateEnum RequestBackState { get; set; }
 | 
			
		||||
 | 
			
		||||
        [ExcelFormat("yyyy-MM-dd")]
 | 
			
		||||
        public DateTime? StudyTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string StudyTimeStr => StudyTime?.ToString("yyyy-MM-dd");
 | 
			
		||||
 | 
			
		||||
        public DateTime? CheckTime { get; set; }
 | 
			
		||||
        public CheckChanllengeTypeEnum CheckChallengeState { get; set; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ using IRaCIS.Core.Application.Contracts;
 | 
			
		|||
using IRaCIS.Core.Application.Contracts.DTO;
 | 
			
		||||
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
 | 
			
		||||
using IRaCIS.Core.Domain.Share;
 | 
			
		||||
using static IRaCIS.Core.Application.Contracts.SubjectProgressDto;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Application.Service
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +69,24 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
               .ForMember(d => d.CheckWaitReplyCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.CheckState == CheckStateEnum.CVIng && t.CheckChallengeState != CheckChanllengeTypeEnum.Closed && !t.CheckChallengeDialogList.Any(t => t.CreateUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator))))
 | 
			
		||||
               ;
 | 
			
		||||
 | 
			
		||||
            CreateMap<Subject, SubjectProgressDto>()
 | 
			
		||||
                 .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
 | 
			
		||||
                 .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Code))
 | 
			
		||||
                 .ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Status))
 | 
			
		||||
                 .ForMember(d => d.VisitList, u => u.MapFrom(s => s.SubjectVisitList.Where(t => t.VisitExecuted != VisitExecutedEnum.Unavailable)
 | 
			
		||||
                 ));
 | 
			
		||||
 | 
			
		||||
            //CreateMap<SubjectVisit, SubjectProgressDto.MouduleProgress> ()
 | 
			
		||||
            //    .ForMember(d => d.TaskName, u => u.MapFrom(s => s.VisitName))
 | 
			
		||||
            //     .ForMember(d => d.VisitTaskNum, u => u.MapFrom(s => s.VisitNum))
 | 
			
		||||
            //     .ForMember(d => d.Inplan, u => u.MapFrom(s => s.InPlan))
 | 
			
		||||
            //      .ForMember(d => d.ReadingStatus, u => u.MapFrom(s => s.VisitTaskList
 | 
			
		||||
            //      .Count(t=>t.TaskState==TaskState.Effect && t.IsAnalysisCreate==false && t.ReadingCategory==ReadingCategory.Visit && t.ReadingTaskState==ReadingTaskState.HaveSigned)==s. s.ReadingStatus))
 | 
			
		||||
 | 
			
		||||
                 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            CreateMap<ReadModule, ReadPeriodExportDto>()
 | 
			
		||||
               .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.Subject.TrialSite.TrialSiteCode))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,6 +75,8 @@ namespace IRaCIS.Application.Contracts
 | 
			
		|||
 | 
			
		||||
        public string ResearchProgramNo { get; set; } = string.Empty;
 | 
			
		||||
 | 
			
		||||
        public string CriterionName { get; set;} = string.Empty;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1343,6 +1343,8 @@ namespace IRaCIS.Core.Domain.Share
 | 
			
		|||
        /// 阅片完成
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        ReadCompleted = 5,
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ using System;
 | 
			
		|||
using IRaCIS.Core.Domain.Share;
 | 
			
		||||
using System.ComponentModel.DataAnnotations;
 | 
			
		||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Domain.Models
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +19,9 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
		public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		[JsonIgnore]
 | 
			
		||||
		public List<VisitTask> ModuleTaskList { get; set; }
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 受试者ID
 | 
			
		||||
		/// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +126,7 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		public ReadingStatusEnum ReadingStatus { get; set; }
 | 
			
		||||
		public ReadingStatusEnum ReadingStatus { get; set; } = ReadingStatusEnum.TaskAllocate;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -229,6 +229,8 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
        [JsonIgnore]
 | 
			
		||||
        public List<VisitTask> VisitTaskList { get; set; } = new List<VisitTask>();
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
        public ReadingStatusEnum ReadingStatus { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,6 +143,8 @@ public static class StaticData
 | 
			
		|||
 | 
			
		||||
        public const string TrialSubjectList_Export = "TrialSubjectList_Export";
 | 
			
		||||
 | 
			
		||||
        public const string TrialSubjectProgressList_Export = "TrialSubjectProgressList_Export";
 | 
			
		||||
 | 
			
		||||
        public const string TrialSubjectReadingPeriodList_Export = "TrialSubjectReadingPeriodList_Export";
 | 
			
		||||
 | 
			
		||||
        public const string TrialStudyList_Export = "TrialStudyList_Export";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue