From 78bbfb5f418e74cf5ef7d312f1ca1ba2cfb2ede8 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 23 May 2024 11:15:45 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=E6=A0=B8?= =?UTF-8?q?=E6=9F=A5=E9=80=9A=E8=BF=87=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E8=B4=A8=E7=96=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_MediatR/Handlers/ConsistencyVerificationHandler.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 2896d2868..e5df2ff04 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -191,6 +191,8 @@ namespace IRaCIS.Core.Application.MediatR.Handlers dbSV.CheckState = CheckStateEnum.CVPassed; dbSV.CheckUserId = _userInfo.Id; dbSV.CheckPassedTime = DateTime.Now; + dbSV.CheckChallengeState = CheckChanllengeTypeEnum.Closed; + //---核对EDC数据,完全一致 dbSV.CheckResult = _localizer["ConsistencyVerification_EDCB"]; //---自动核查通过 From 383064a7b71bd4ce2b602202c9b4e601a540a72b Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 23 May 2024 16:02:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E9=87=8D=E4=BC=A0=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DTO/DownloadAndUploadDTO.cs | 4 +- .../ImageAndDoc/DTO/UnionStudyViewDodel.cs | 22 ++++++++++- .../ImageAndDoc/DownloadAndUploadService.cs | 37 +++++++++++++++++++ .../Service/QC/QCOperationService.cs | 14 +++---- IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs | 2 +- 5 files changed, 68 insertions(+), 11 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs index 4203925a5..49786d306 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs @@ -11,7 +11,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO { public Guid VisitTaskId { get; set; } - //public Guid SiteId { get; set; } + public Guid SiteId { get; set; } public Guid SubejctId { get; set; } @@ -21,6 +21,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public string TaskName { get; set; } + public string CriterionModalitys { get; set; } + public Guid? SourceSubjectVisitId { get; set; } public PackState PackState { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 647b1220b..f9a5e6575 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -167,9 +167,29 @@ namespace IRaCIS.Core.Application.Contracts } + public class PriArchiveTaskStudyCommand + { + + [NotDefault] + public Guid TrialId { get; set; } + + [NotDefault] + public Guid SubjectId { get; set; } + + [NotDefault] + public Guid SubjectVisitId { get; set; } + + public decimal FileSize { get; set; } + + public bool IsDicomReUpload { get; set; } + + + public int FileCount { get; set; } + } + public class PreArchiveDicomStudyCommand { - //public string StudyInstanceUid { get; set; } + [NotDefault] public Guid TrialId { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 2b7d9d48a..c3a9b4f49 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -57,8 +57,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc .Select(u => new SubjectImageUploadDTO() { VisitTaskId = u.Id, + SubejctId = u.SubjectId, + SiteId=u.Subject.SiteId, + + CriterionModalitys= u.TrialReadingCriterion.CriterionModalitys, SubjectCode = u.IsSelfAnalysis == true ? u.Subject.Code : u.BlindSubjectCode, TaskBlindName = u.TaskBlindName, @@ -144,6 +148,39 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #endregion } + + + + + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + + public async Task PreArchiveDicomStudy(PriArchiveTaskStudyCommand preArchiveStudyCommand) + { + + var studyMonitor = new StudyMonitor() + { + TrialId = preArchiveStudyCommand.TrialId, + SubjectId = preArchiveStudyCommand.SubjectId, + SubjectVisitId = preArchiveStudyCommand.SubjectVisitId, + + IsSuccess = false, + UploadStartTime = DateTime.Now, + IsDicom = true, + IP = _userInfo.IP, + + IsDicomReUpload = preArchiveStudyCommand.IsDicomReUpload, + FileSize = preArchiveStudyCommand.FileSize, + FileCount = preArchiveStudyCommand.FileCount, + + }; + + + var addEntity = await _studyMonitorRepository.AddAsync(studyMonitor, true); + + return ResponseOutput.Ok(addEntity.Id); + + } + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task AddOrUpdateArchiveTaskStudy(TaskArchiveStudyCommand incommand) { diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 0841dc3a5..8d0545a1d 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -1411,8 +1411,6 @@ namespace IRaCIS.Core.Application.Image.QA }); - - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&& dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的访视 全局 裁判 及之前 全都加急 && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() @@ -1466,14 +1464,14 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.IsUrgent = true; - //PD确认的紧急会把前面所有未QC完成的访视均标记为紧急 + ////PD确认的紧急会把前面所有未QC完成的访视均标记为紧急 - var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync(); + //var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync(); - previosSVlist.ForEach(t => - { - t.IsUrgent = true; - }); + //previosSVlist.ForEach(t => + //{ + // t.IsUrgent = true; + //}); } diff --git a/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs b/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs index 81cb8e983..ce264d3c0 100644 --- a/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs +++ b/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs @@ -61,7 +61,7 @@ namespace IRaCIS.Core.Domain.Models public Guid TrialId { get; set; } - public Guid SiteId { get; set; } + public Guid SiteId { get; set; }=Guid.Empty; public Guid SubjectId { get; set; } From 318364e70bec789814c5d6bb2613d62ed13eaa8e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 23 May 2024 17:10:38 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9nuget=20=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/IRaCIS.Core.API.csproj | 4 ++-- IRaCIS.Core.Application/IRaCIS.Core.Application.csproj | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj index 739349a2b..4f364beff 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj +++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj @@ -74,14 +74,14 @@ - + - + diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj index 4cfb38047..ce8d240e6 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj @@ -78,14 +78,14 @@ - - + + true - + true - + From 4a01960426cee70f3a65133286de5a21baf34003 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 23 May 2024 17:22:58 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs index abe17f113..f8bb6695a 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs @@ -17,8 +17,15 @@ namespace IRaCIS.Core.Application.Service CreateMap() .ForMember(d => d.DicomInstanceList, u => u.Ignore()); + CreateMap() + .ForMember(d => d.SeriesList, u => u.Ignore()); + CreateMap() + .ForMember(d => d.InstanceList, u => u.Ignore()); + CreateMap(); + CreateMap(); + CreateMap(); From e10bca68926dcfe862aeec784f4f87be58433581 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 24 May 2024 09:17:30 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20=20Magicodes=20=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 105 ++++++++++-------- IRaCIS.Core.API/Progranm.cs | 1 - .../Helper/ExcelExportHelper.cs | 2 - IRaCIS.Core.Application/Helper/OSSService.cs | 1 - .../IRaCIS.Core.Application.csproj | 8 -- .../Common/InternationalizationService.cs | 1 - .../Document/TrialEmailNoticeConfigService.cs | 1 - .../ImageAndDoc/DownloadAndUploadService.cs | 1 - .../Inspection/FrontAuditConfigService.cs | 1 - .../Service/Management/UserService.cs | 1 - .../ClinicalData/ClinicalAnswerService.cs | 1 - .../UltrasonicDicomService.cs | 1 - .../TrialSiteUser/DTO/UserTrialViewModel.cs | 13 +-- .../Visit/Interface/IVisitPlanService.cs | 2 +- .../Service/Visit/VisitPlanService.cs | 23 ++-- .../ConsistencyVerificationRequest.cs | 90 +++++++-------- 16 files changed, 121 insertions(+), 131 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 68ecb45ec..64760c043 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -20,7 +20,6 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure.Extention; -using Magicodes.ExporterAndImporter.Excel; using MassTransit; using MediatR; using Microsoft.AspNetCore.Authorization; @@ -39,7 +38,6 @@ using Microsoft.Net.Http.Headers; using MiniExcelLibs; using Newtonsoft.Json; using SharpCompress.Archives; -using SkiaSharp; using System; using System.Collections.Generic; using System.Data; @@ -237,10 +235,10 @@ namespace IRaCIS.Core.API.Controllers private readonly IMediator _mediator; - public IStringLocalizer _localizer { get; set; } + public IStringLocalizer _localizer { get; set; } - private readonly IWebHostEnvironment _hostEnvironment; + private readonly IWebHostEnvironment _hostEnvironment; private readonly IRepository _repository; @@ -255,7 +253,7 @@ namespace IRaCIS.Core.API.Controllers _hostEnvironment = hostEnvironment; _mediator = mediator; _localizer = localizer; - _mapper = mapper; + _mapper = mapper; _userInfo = userInfo; _repository = repository; } @@ -407,7 +405,7 @@ namespace IRaCIS.Core.API.Controllers } - catch (Exception ) + catch (Exception) { _provider.Remove($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}"); @@ -587,6 +585,20 @@ namespace IRaCIS.Core.API.Controllers #region MiniExcel 需要自己验证数据格式规范 + + if (fileName.EndsWith(".xlsx")) + { + etcCheckList = MiniExcel.Query(templateFileStream, excelType: ExcelType.XLSX).ToList(); + } + else if (fileName.EndsWith(".csv")) + { + //因为csv 需要加配置文件 不然都是null + etcCheckList = MiniExcel.Query(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration() + { + StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312")) + }).ToList(); + + } //if (fileName.EndsWith(".csv")) //{ // //因为csv 需要加配置文件 不然都是null @@ -602,67 +614,72 @@ namespace IRaCIS.Core.API.Controllers #endregion + #region 升级net8 导入有问题 + + //Magicodes 支持自定义特性验证 - if (fileName.EndsWith(".xlsx")) - { - var Importer = new ExcelImporter(); + // if (fileName.EndsWith(".xlsx")) + //{ + // var Importer = new ExcelImporter(); - var import = await Importer.Import(templateFileStream); + // var import = await Importer.Import(templateFileStream); - if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); + // if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); - //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); + // //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); - if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(_localizer["UploadDownLoad_TemplateErrors"]); + // if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(_localizer["UploadDownLoad_TemplateErrors"]); - etcCheckList = import.Data.ToList(); - } - else if (fileName.EndsWith(".csv")) - { - #region 临时方案 MiniExcel读取 然后保存为xlsx 再用 Magicodes验证数据 + // etcCheckList = import.Data.ToList(); + //} + //else if (fileName.EndsWith(".csv")) + //{ + // #region 临时方案 MiniExcel读取 然后保存为xlsx 再用 Magicodes验证数据 - //因为csv 需要加配置文件 不然都是null - etcCheckList = MiniExcel.Query(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration() - { - StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312")) - }).ToList(); + // //因为csv 需要加配置文件 不然都是null + // etcCheckList = MiniExcel.Query(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration() + // { + // StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312")) + // }).ToList(); - var (csVToXlsxPath, csVToXlsxRelativePath) = FileStoreHelper.GetTrialCheckFilePath(_hostEnvironment, Path.GetFileNameWithoutExtension(fileName) + ".xlsx", trialId); + // var (csVToXlsxPath, csVToXlsxRelativePath) = FileStoreHelper.GetTrialCheckFilePath(_hostEnvironment, Path.GetFileNameWithoutExtension(fileName) + ".xlsx", trialId); - await MiniExcel.SaveAsAsync(csVToXlsxPath, etcCheckList, excelType: ExcelType.XLSX); + // await MiniExcel.SaveAsAsync(csVToXlsxPath, etcCheckList, excelType: ExcelType.XLSX); - var Importer = new ExcelImporter(); + // var Importer = new ExcelImporter(); - var import = await Importer.Import(System.IO.File.OpenRead(csVToXlsxPath)); + // var import = await Importer.Import(System.IO.File.OpenRead(csVToXlsxPath)); - if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); + // if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); - //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); + // //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); - if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); + // if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); - etcCheckList = import.Data.ToList(); + // etcCheckList = import.Data.ToList(); - #endregion + // #endregion - #region 导入组件有问题 excel编码格式 - //var Importer = new CsvImporter(); + // #region 导入组件有问题 excel编码格式 + // //var Importer = new CsvImporter(); - //var import = await Importer.Import(File.OpenRead(filePath)); + // //var import = await Importer.Import(File.OpenRead(filePath)); - //if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); + // //if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); - //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); + // //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); - //if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); + // //if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); - //etcCheckList = import.Data.ToList(); - #endregion + // //etcCheckList = import.Data.ToList(); + // #endregion - } + //} + + #endregion //ExcelReaderFactory 需要自己验证数据 并且从固定列取数据 else { @@ -966,14 +983,14 @@ namespace IRaCIS.Core.API.Controllers public IMapper _mapper { get; set; } public IUserInfo _userInfo { get; set; } private readonly IMediator _mediator; - public IStringLocalizer _localizer { get; set; } - private readonly IWebHostEnvironment _hostEnvironment; + public IStringLocalizer _localizer { get; set; } + private readonly IWebHostEnvironment _hostEnvironment; public UploadDownLoadController(IMapper mapper, IUserInfo userInfo, IStringLocalizer localizer, IMediator mediator, IWebHostEnvironment hostEnvironment) { _hostEnvironment = hostEnvironment; _localizer = localizer; - _mediator = mediator; + _mediator = mediator; _mapper = mapper; _userInfo = userInfo; } diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 641d973d7..885b11f66 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -24,7 +24,6 @@ using IRaCIS.Core.Application.Filter; using Microsoft.AspNetCore.HttpOverrides; using IRaCIS.Application.Services.BackGroundJob; using LogDashboard; -using OfficeOpenXml.Utils; using FellowOakDicom.Network; using IRaCIS.Core.Application.Service.ImageAndDoc; using IP2Region.Net.Abstractions; diff --git a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs index 3eed41f3b..fb48b1d97 100644 --- a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs +++ b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs @@ -5,7 +5,6 @@ using IRaCIS.Application.Contracts; using IRaCIS.Application.Interfaces; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Domain.Share; -using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; @@ -14,7 +13,6 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; -using SkiaSharp; using System.Collections; using System.IO; diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index c3431aa33..93c6c62bb 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -15,7 +15,6 @@ using System.Linq; using System.Security.AccessControl; using System.Text; using System.Threading.Tasks; -using SkiaSharp; namespace IRaCIS.Core.Application.Helper { diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj index ce8d240e6..0c907fb89 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj @@ -78,14 +78,6 @@ - - - true - - - true - - diff --git a/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs b/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs index 4a0d7c680..7ab34919a 100644 --- a/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs +++ b/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs @@ -12,7 +12,6 @@ using Microsoft.AspNetCore.Authorization; using IRaCIS.Core.Application.Helper; using EasyCaching.Core; using IRaCIS.Core.Domain.Share; -using OfficeOpenXml.FormulaParsing.Utilities; namespace IRaCIS.Core.Application.Service { diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 92bbb0bd7..a86786d42 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -25,7 +25,6 @@ using Microsoft.AspNetCore.Http; using System; using System.Runtime.InteropServices; using SharpCompress.Common; -using SkiaSharp; using DocumentFormat.OpenXml.Bibliography; using System.Linq.Dynamic.Core; diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index c3a9b4f49..ab25b257f 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -10,7 +10,6 @@ using MassTransit; using MathNet.Numerics; using Medallion.Threading; using Microsoft.AspNetCore.Mvc; -using OfficeOpenXml.FormulaParsing.Utilities; using System; using System.Collections.Generic; using System.IO.Compression; diff --git a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs index 1546ff3b0..bc3d7879a 100644 --- a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs @@ -18,7 +18,6 @@ using IRaCIS.Core.Domain.Share.Management; using System.Text.Json.Nodes; using IRaCIS.Application.Contracts; using IRaCIS.Core.Infrastructure.Extention; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; namespace IRaCIS.Core.Application.Service { diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index fe1701878..9bcdaacac 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -15,7 +15,6 @@ using Medallion.Threading; using EasyCaching.Core; using IRaCIS.Core.Application.Contracts; using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO; -using OfficeOpenXml.FormulaParsing.Utilities; namespace IRaCIS.Application.Services { diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 1bfd22237..19ca221bf 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -16,7 +16,6 @@ using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Application.Service.Reading.Interface; using IRaCIS.Core.Application.Contracts; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; namespace IRaCIS.Core.Application.Service { diff --git a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs index d5a9e076c..a33e735cb 100644 --- a/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs +++ b/IRaCIS.Core.Application/Service/Third-partyProject/UltrasonicDicomService.cs @@ -8,7 +8,6 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using Medallion.Threading; using Microsoft.AspNetCore.Mvc; -using OfficeOpenXml.FormulaParsing.Utilities; using System; using System.Collections.Generic; using System.Linq; diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs index e1f014663..9426b66dc 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Domain.Share; -using Magicodes.ExporterAndImporter.Core; using MiniExcelLibs.Attributes; using Newtonsoft.Json; using IRaCIS.Core.Application.Contracts; @@ -74,28 +73,28 @@ namespace IRaCIS.Application.Contracts public string State => IsDeleted ? "退出" : "加入"; - [ValueMapping(text: "退出", true)] - [ValueMapping(text: "加入", false)] + //[ValueMapping(text: "退出", true)] + //[ValueMapping(text: "加入", false)] [DictionaryTranslateAttribute("IsUserExitTrial")] public bool IsDeleted { get; set; } - [ExporterHeader(Format = "yyyy-mm-DD hh:mm:ss")] + //[ExporterHeader(Format = "yyyy-mm-DD hh:mm:ss")] [ExcelFormat("yyyy-MM-dd hh:mm:ss")] public DateTime? DeletedTime { get; set; } - [ExporterHeader(Format = "yyyy-mm-DD")] + //[ExporterHeader(Format = "yyyy-mm-DD")] [ExcelFormat("yyyy-MM-dd")] public DateTime? RemoveTime { get; set; } - [ExporterHeader(Format = "yyyy-mm-DD")] + //[ExporterHeader(Format = "yyyy-mm-DD")] [ExcelFormat("yyyy-MM-dd")] public DateTime? JoinTime { get; set; } - [ExporterHeader(Format = "yyyy-mm-DD hh:mm:ss")] + //[ExporterHeader(Format = "yyyy-mm-DD hh:mm:ss")] [ExcelFormat("yyyy-MM-dd HH:mm:ss")] public DateTime CreateTime { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs index cad9d1878..772176eda 100644 --- a/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/Interface/IVisitPlanService.cs @@ -9,7 +9,7 @@ namespace IRaCIS.Application.Interfaces Task AddOrUpdateVisitStage(VisitPlanCommand visitPlan); Task ConfirmTrialVisitPlan(Guid trialId); Task DeleteVisitStage(Guid id); - Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId); + //Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId); Task> GetInfluenceHistoryList(Guid trialId, [FromServices] IRepository _influnceStatRepository); Task> GetTrialVisitStageList(VisitPlanQueryDTO param); Task> GetTrialVisitStageSelect(Guid trialId); diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index 252eb8c2f..974a2ff1f 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -4,9 +4,6 @@ using IRaCIS.Core.Application.Filter; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.MediatR.CommandAndQueries; -using Magicodes.ExporterAndImporter.Core; -using Magicodes.ExporterAndImporter.Excel; -using Magicodes.ExporterAndImporter.Excel.AspNetCore; using IRaCIS.Core.Infrastructure; using Microsoft.AspNetCore.Authorization; using IRaCIS.Core.Application.Auth; @@ -482,21 +479,21 @@ namespace IRaCIS.Application.Services return list; } - [HttpGet("{visitPlanInfluenceStatId:guid}")] - public async Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId) - { - var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) - .ProjectTo(_mapper.ConfigurationProvider).ToList(); + //[HttpGet("{visitPlanInfluenceStatId:guid}")] + //public async Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId) + //{ + // var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) + // .ProjectTo(_mapper.ConfigurationProvider).ToList(); - IExporter exporter = new ExcelExporter(); + // IExporter exporter = new ExcelExporter(); - var result = await exporter.ExportAsByteArray(list); + // var result = await exporter.ExportAsByteArray(list); - //$"检查导出_{DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")}.xlsx" - return new XlsxFileResult(bytes: result, fileDownloadName: _localizer["VisitPlan_CheckExport", DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")]); + // //$"检查导出_{DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")}.xlsx" + // return new XlsxFileResult(bytes: result, fileDownloadName: _localizer["VisitPlan_CheckExport", DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")]); - } + //} diff --git a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs index 06387c87c..60629a40d 100644 --- a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs +++ b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs @@ -1,8 +1,4 @@ using IRaCIS.Core.Domain.Share; -using Magicodes.ExporterAndImporter.Core; -using Magicodes.ExporterAndImporter.Core.Filters; -using Magicodes.ExporterAndImporter.Core.Models; -using Magicodes.ExporterAndImporter.Excel; using MediatR; using MiniExcelLibs.Attributes; using System.ComponentModel.DataAnnotations; @@ -27,33 +23,33 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries - public class ImportResultFilteTest : IImportResultFilter - { + //public class ImportResultFilteTest : IImportResultFilter + //{ - public ImportResult Filter(ImportResult importResult) where T : class, new() - { - if (typeof(T).IsAssignableFrom(typeof(CheckViewModel))) - { - var data = (List)importResult.Data; + // public ImportResult Filter(ImportResult importResult) where T : class, new() + // { + // if (typeof(T).IsAssignableFrom(typeof(CheckViewModel))) + // { + // var data = (List)importResult.Data; - var dt = DateTime.Now ; + // var dt = DateTime.Now ; - foreach (var item in data) - { + // foreach (var item in data) + // { - var index= data.IndexOf(item); - if ( DateTime.TryParse(item.StudyDate, out dt) == false) - { + // var index= data.IndexOf(item); + // if ( DateTime.TryParse(item.StudyDate, out dt) == false) + // { - importResult.RowErrors.Add(new DataRowErrorInfo() { RowIndex = index, FieldErrors = new Dictionary { { StaticData.International("ConsistencyVerification_Tech") , StaticData.International("ConsistencyVerification_Time") } } }); - } - } - } + // importResult.RowErrors.Add(new DataRowErrorInfo() { RowIndex = index, FieldErrors = new Dictionary { { StaticData.International("ConsistencyVerification_Tech") , StaticData.International("ConsistencyVerification_Time") } } }); + // } + // } + // } - return importResult; - } - } + // return importResult; + // } + //} public class ParamInfoDto @@ -69,23 +65,23 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries } - [ExcelImporter(/*ImportResultFilter = typeof(ImportResultFilteTest),*/ IsLabelingError = true)] + //[ExcelImporter(/*ImportResultFilter = typeof(ImportResultFilteTest),*/ IsLabelingError = true)] public class CheckViewModel { //[Required(ErrorMessage = "中心编号不能为空")] - [ImporterHeader(Name = "Site ID", AutoTrim = true)] - [ExcelColumnIndex("Site ID")] + //[ImporterHeader(Name = "Site ID", AutoTrim = true)] + [ExcelColumnName("Site ID")] public string SiteCode { get; set; } = string.Empty; //[Required(ErrorMessage = "受试者筛选号不能为空")] - [ImporterHeader(Name = "Subject ID", AutoTrim = true)] + //[ImporterHeader(Name = "Subject ID", AutoTrim = true)] [ExcelColumnName("Subject ID")] public string SubjectCode { get; set; } = string.Empty; //[Required(ErrorMessage = "访视名称不能为空")] - [ImporterHeader(Name = "Visit Name", AutoTrim = true)] + //[ImporterHeader(Name = "Visit Name", AutoTrim = true)] [ExcelColumnName("Visit Name")] public string VisitName { get; set; } = string.Empty; @@ -94,14 +90,14 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries //[Required(ErrorMessage = "检查日期不能为空")] [CanConvertToTime(ErrorMessage = "Does not conform to Study Date format")] - [ImporterHeader(Name = "Study Date", AutoTrim = true)] + //[ImporterHeader(Name = "Study Date", AutoTrim = true)] [ExcelColumnName("Study Date")] public string StudyDate { get; set; } = string.Empty; //[Required(ErrorMessage = "Modality不能为空")] - [ImporterHeader(Name = "Modality", AutoTrim = true)] + //[ImporterHeader(Name = "Modality", AutoTrim = true)] [ExcelColumnName("Modality")] public string Modality { get; set; } = string.Empty; @@ -131,48 +127,48 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries public class VisitPlanInfluenceSubjectVisitDTO { - [ExporterHeader(IsIgnore = true)] + //[ExporterHeader(IsIgnore = true)] public Guid StudyId { get; set; } - [ExporterHeader(IsIgnore = true)] + //[ExporterHeader(IsIgnore = true)] public Guid TrialId { get; set; } - [ExporterHeader(IsIgnore = true)] + //[ExporterHeader(IsIgnore = true)] public Guid SubjectVisitId { get; set; } - [ExporterHeader(DisplayName = "中心编号")] + //[ExporterHeader(DisplayName = "中心编号")] public string TrialSiteCode { get; set; } = string.Empty; - [ExporterHeader(DisplayName = "受试者")] + //[ExporterHeader(DisplayName = "受试者")] public string SubjectCode { get; set; } = string.Empty; - [ExporterHeader(DisplayName = "访视名称")] + //[ExporterHeader(DisplayName = "访视名称")] public string VisitName { get; set; } = string.Empty; - [ExporterHeader(DisplayName = "检查时间", Format = "yyyy-mm-dd hh:mm:ss")] + //[ExporterHeader(DisplayName = "检查时间", Format = "yyyy-MM-dd HH:mm:ss")] public DateTime StudyTime { get; set; } - [ExporterHeader(DisplayName = "检查技术")] + //[ExporterHeader(DisplayName = "检查技术")] public string Modality { get; set; } = string.Empty; - [ExporterHeader(IsIgnore = true)] + //[ExporterHeader(IsIgnore = true)] public bool IsDicomStudy { get; set; } - [ExporterHeader(DisplayName = "影像类型")] + //[ExporterHeader(DisplayName = "影像类型")] public string ImageType => IsDicomStudy ? "Dicom" : "非Dicom"; - [ExporterHeader(DisplayName = "历史窗口")] + //[ExporterHeader(DisplayName = "历史窗口")] public string HistoryWindow { get; set; } = string.Empty; - [ExporterHeader(DisplayName = "之前超窗调整后没超窗")] - [ValueMapping(text: "yes", true)] - [ValueMapping(text: "no", false)] + //[ExporterHeader(DisplayName = "之前超窗调整后没超窗")] + //[ValueMapping(text: "yes", true)] + //[ValueMapping(text: "no", false)] public bool IsOverWindowNowNotOverWindow { get; set; } - [ExporterHeader(DisplayName = "目前窗口")] + //[ExporterHeader(DisplayName = "目前窗口")] public string NowWindow { get; set; } = string.Empty; - [ExporterHeader(IsIgnore = true)] + //[ExporterHeader(IsIgnore = true)] public DateTime CreateTime { get; set; } } From fd3f76d35c6d6ab071edcc9396c6ec5425f14162 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 24 May 2024 10:02:44 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E8=B6=85=E7=AA=97=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=E5=88=97=E8=A1=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Visit/VisitPlanService.cs | 26 ++++++++------- .../ConsistencyVerificationRequest.cs | 33 ++++++++++--------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index 974a2ff1f..d98c37ca5 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -7,6 +7,7 @@ using IRaCIS.Core.Application.MediatR.CommandAndQueries; using IRaCIS.Core.Infrastructure; using Microsoft.AspNetCore.Authorization; using IRaCIS.Core.Application.Auth; +using MiniExcelLibs; namespace IRaCIS.Application.Services { @@ -479,21 +480,24 @@ namespace IRaCIS.Application.Services return list; } - //[HttpGet("{visitPlanInfluenceStatId:guid}")] - //public async Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId) - //{ - // var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) - // .ProjectTo(_mapper.ConfigurationProvider).ToList(); + [HttpGet("{visitPlanInfluenceStatId:guid}")] + public async Task DownloadInflunceStudyList(Guid visitPlanInfluenceStatId) + { + var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) + .ProjectTo(_mapper.ConfigurationProvider).ToList(); - // IExporter exporter = new ExcelExporter(); + var memoryStream = new MemoryStream(); + memoryStream.SaveAs(list); + memoryStream.Seek(0, SeekOrigin.Begin); + return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + { + FileDownloadName = _localizer["VisitPlan_CheckExport", DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")] + }; - // var result = await exporter.ExportAsByteArray(list); - - // //$"检查导出_{DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")}.xlsx" - // return new XlsxFileResult(bytes: result, fileDownloadName: _localizer["VisitPlan_CheckExport", DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")]); + - //} + } diff --git a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs index 60629a40d..3bb3656d0 100644 --- a/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs +++ b/IRaCIS.Core.Application/_MediatR/CommandAndQueries/ConsistencyVerificationRequest.cs @@ -127,48 +127,49 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries public class VisitPlanInfluenceSubjectVisitDTO { - //[ExporterHeader(IsIgnore = true)] + [ExcelColumn(Ignore = true)] public Guid StudyId { get; set; } - //[ExporterHeader(IsIgnore = true)] + [ExcelColumn(Ignore = true)] public Guid TrialId { get; set; } - //[ExporterHeader(IsIgnore = true)] + [ExcelColumn(Ignore = true)] public Guid SubjectVisitId { get; set; } - //[ExporterHeader(DisplayName = "中心编号")] + [ExcelColumnName("中心编号")] public string TrialSiteCode { get; set; } = string.Empty; - //[ExporterHeader(DisplayName = "受试者")] + [ExcelColumnName("受试者")] public string SubjectCode { get; set; } = string.Empty; - //[ExporterHeader(DisplayName = "访视名称")] + [ExcelColumnName("访视名称")] public string VisitName { get; set; } = string.Empty; - //[ExporterHeader(DisplayName = "检查时间", Format = "yyyy-MM-dd HH:mm:ss")] + [ExcelColumn(Name = "检查时间", Format = "yyyy-MM-dd HH:mm:ss")] public DateTime StudyTime { get; set; } - //[ExporterHeader(DisplayName = "检查技术")] + [ExcelColumnName("检查技术")] public string Modality { get; set; } = string.Empty; - //[ExporterHeader(IsIgnore = true)] + [ExcelColumn(Ignore = true)] public bool IsDicomStudy { get; set; } - //[ExporterHeader(DisplayName = "影像类型")] + + [ExcelColumnName("影像类型")] public string ImageType => IsDicomStudy ? "Dicom" : "非Dicom"; - //[ExporterHeader(DisplayName = "历史窗口")] + [ExcelColumnName("历史窗口")] public string HistoryWindow { get; set; } = string.Empty; - //[ExporterHeader(DisplayName = "之前超窗调整后没超窗")] - //[ValueMapping(text: "yes", true)] - //[ValueMapping(text: "no", false)] + + [ExcelColumnName("之前超窗调整后没超窗")] + public bool IsOverWindowNowNotOverWindow { get; set; } - //[ExporterHeader(DisplayName = "目前窗口")] + [ExcelColumnName("目前窗口")] public string NowWindow { get; set; } = string.Empty; - //[ExporterHeader(IsIgnore = true)] + [ExcelColumn(Ignore =true)] public DateTime CreateTime { get; set; } }