移除 Magicodes 导入excel
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-05-24 09:17:30 +08:00
parent 4a01960426
commit e10bca6892
16 changed files with 121 additions and 131 deletions

View File

@ -20,7 +20,6 @@ using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using Magicodes.ExporterAndImporter.Excel;
using MassTransit; using MassTransit;
using MediatR; using MediatR;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -39,7 +38,6 @@ using Microsoft.Net.Http.Headers;
using MiniExcelLibs; using MiniExcelLibs;
using Newtonsoft.Json; using Newtonsoft.Json;
using SharpCompress.Archives; using SharpCompress.Archives;
using SkiaSharp;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
@ -407,7 +405,7 @@ namespace IRaCIS.Core.API.Controllers
} }
catch (Exception ) catch (Exception)
{ {
_provider.Remove($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}"); _provider.Remove($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}");
@ -587,6 +585,20 @@ namespace IRaCIS.Core.API.Controllers
#region MiniExcel 需要自己验证数据格式规范 #region MiniExcel 需要自己验证数据格式规范
if (fileName.EndsWith(".xlsx"))
{
etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, excelType: ExcelType.XLSX).ToList();
}
else if (fileName.EndsWith(".csv"))
{
//因为csv 需要加配置文件 不然都是null
etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration()
{
StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312"))
}).ToList();
}
//if (fileName.EndsWith(".csv")) //if (fileName.EndsWith(".csv"))
//{ //{
// //因为csv 需要加配置文件 不然都是null // //因为csv 需要加配置文件 不然都是null
@ -602,67 +614,72 @@ namespace IRaCIS.Core.API.Controllers
#endregion #endregion
#region 升级net8 导入有问题
//Magicodes 支持自定义特性验证 //Magicodes 支持自定义特性验证
if (fileName.EndsWith(".xlsx")) // if (fileName.EndsWith(".xlsx"))
{ //{
var Importer = new ExcelImporter(); // var Importer = new ExcelImporter();
var import = await Importer.Import<CheckViewModel>(templateFileStream); // var import = await Importer.Import<CheckViewModel>(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(); // etcCheckList = import.Data.ToList();
} //}
else if (fileName.EndsWith(".csv")) //else if (fileName.EndsWith(".csv"))
{ //{
#region 临时方案 MiniExcel读取 然后保存为xlsx 再用 Magicodes验证数据 // #region 临时方案 MiniExcel读取 然后保存为xlsx 再用 Magicodes验证数据
//因为csv 需要加配置文件 不然都是null // //因为csv 需要加配置文件 不然都是null
etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration() // etcCheckList = MiniExcel.Query<CheckViewModel>(templateFileStream, null, configuration: new MiniExcelLibs.Csv.CsvConfiguration()
{ // {
StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312")) // StreamReaderFunc = (stream) => new StreamReader(stream, Encoding.GetEncoding("gb2312"))
}).ToList(); // }).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<CheckViewModel>(System.IO.File.OpenRead(csVToXlsxPath)); // var import = await Importer.Import<CheckViewModel>(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
// #region 导入组件有问题 excel编码格式
// //var Importer = new CsvImporter();
// //var import = await Importer.Import<CheckViewModel>(File.OpenRead(filePath));
// //if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
// //if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
// //if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
// //etcCheckList = import.Data.ToList();
// #endregion
//}
#endregion #endregion
#region 导入组件有问题 excel编码格式
//var Importer = new CsvImporter();
//var import = await Importer.Import<CheckViewModel>(File.OpenRead(filePath));
//if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString());
//if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors));
//if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors));
//etcCheckList = import.Data.ToList();
#endregion
}
//ExcelReaderFactory 需要自己验证数据 并且从固定列取数据 //ExcelReaderFactory 需要自己验证数据 并且从固定列取数据
else else
{ {

View File

@ -24,7 +24,6 @@ using IRaCIS.Core.Application.Filter;
using Microsoft.AspNetCore.HttpOverrides; using Microsoft.AspNetCore.HttpOverrides;
using IRaCIS.Application.Services.BackGroundJob; using IRaCIS.Application.Services.BackGroundJob;
using LogDashboard; using LogDashboard;
using OfficeOpenXml.Utils;
using FellowOakDicom.Network; using FellowOakDicom.Network;
using IRaCIS.Core.Application.Service.ImageAndDoc; using IRaCIS.Core.Application.Service.ImageAndDoc;
using IP2Region.Net.Abstractions; using IP2Region.Net.Abstractions;

View File

@ -5,7 +5,6 @@ using IRaCIS.Application.Contracts;
using IRaCIS.Application.Interfaces; using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs; using MiniExcelLibs;
@ -14,7 +13,6 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using NPOI.HSSF.UserModel; using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel; using NPOI.XSSF.UserModel;
using SkiaSharp;
using System.Collections; using System.Collections;
using System.IO; using System.IO;

View File

@ -15,7 +15,6 @@ using System.Linq;
using System.Security.AccessControl; using System.Security.AccessControl;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using SkiaSharp;
namespace IRaCIS.Core.Application.Helper namespace IRaCIS.Core.Application.Helper
{ {

View File

@ -78,14 +78,6 @@
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.1.2" /> <PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.1.2" />
<PackageReference Include="fo-dicom.Codecs" Version="5.12.0" /> <PackageReference Include="fo-dicom.Codecs" Version="5.12.0" />
<PackageReference Include="IP2Region.Net" Version="2.0.2" /> <PackageReference Include="IP2Region.Net" Version="2.0.2" />
<PackageReference Include="Magicodes.IE.Core" Version="2.7.4.5" />
<PackageReference Include="Magicodes.IE.Csv" Version="2.7.4.5">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.4.5">
<TreatAsUsed>true</TreatAsUsed>
</PackageReference>
<PackageReference Include="Magicodes.IE.Excel.AspNetCore" Version="2.7.4.5" />
<PackageReference Include="MailKit" Version="4.5.0" /> <PackageReference Include="MailKit" Version="4.5.0" />
<PackageReference Include="MediatR" Version="12.2.0" /> <PackageReference Include="MediatR" Version="12.2.0" />
<PackageReference Include="MimeKit" Version="4.5.0" /> <PackageReference Include="MimeKit" Version="4.5.0" />

View File

@ -12,7 +12,6 @@ using Microsoft.AspNetCore.Authorization;
using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Helper;
using EasyCaching.Core; using EasyCaching.Core;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using OfficeOpenXml.FormulaParsing.Utilities;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {

View File

@ -25,7 +25,6 @@ using Microsoft.AspNetCore.Http;
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SharpCompress.Common; using SharpCompress.Common;
using SkiaSharp;
using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Bibliography;
using System.Linq.Dynamic.Core; using System.Linq.Dynamic.Core;

View File

@ -10,7 +10,6 @@ using MassTransit;
using MathNet.Numerics; using MathNet.Numerics;
using Medallion.Threading; using Medallion.Threading;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO.Compression; using System.IO.Compression;

View File

@ -18,7 +18,6 @@ using IRaCIS.Core.Domain.Share.Management;
using System.Text.Json.Nodes; using System.Text.Json.Nodes;
using IRaCIS.Application.Contracts; using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {

View File

@ -15,7 +15,6 @@ using Medallion.Threading;
using EasyCaching.Core; using EasyCaching.Core;
using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts;
using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO; using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO;
using OfficeOpenXml.FormulaParsing.Utilities;
namespace IRaCIS.Application.Services namespace IRaCIS.Application.Services
{ {

View File

@ -16,7 +16,6 @@ using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Service.Reading.Interface; using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {

View File

@ -8,7 +8,6 @@ using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using Medallion.Threading; using Medallion.Threading;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@ -1,7 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using Magicodes.ExporterAndImporter.Core;
using MiniExcelLibs.Attributes; using MiniExcelLibs.Attributes;
using Newtonsoft.Json; using Newtonsoft.Json;
using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts;
@ -74,28 +73,28 @@ namespace IRaCIS.Application.Contracts
public string State => IsDeleted ? "退出" : "加入"; public string State => IsDeleted ? "退出" : "加入";
[ValueMapping(text: "退出", true)] //[ValueMapping(text: "退出", true)]
[ValueMapping(text: "加入", false)] //[ValueMapping(text: "加入", false)]
[DictionaryTranslateAttribute("IsUserExitTrial")] [DictionaryTranslateAttribute("IsUserExitTrial")]
public bool IsDeleted { get; set; } 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")] [ExcelFormat("yyyy-MM-dd hh:mm:ss")]
public DateTime? DeletedTime { get; set; } public DateTime? DeletedTime { get; set; }
[ExporterHeader(Format = "yyyy-mm-DD")] //[ExporterHeader(Format = "yyyy-mm-DD")]
[ExcelFormat("yyyy-MM-dd")] [ExcelFormat("yyyy-MM-dd")]
public DateTime? RemoveTime { get; set; } public DateTime? RemoveTime { get; set; }
[ExporterHeader(Format = "yyyy-mm-DD")] //[ExporterHeader(Format = "yyyy-mm-DD")]
[ExcelFormat("yyyy-MM-dd")] [ExcelFormat("yyyy-MM-dd")]
public DateTime? JoinTime { get; set; } 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")] [ExcelFormat("yyyy-MM-dd HH:mm:ss")]
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }

View File

@ -9,7 +9,7 @@ namespace IRaCIS.Application.Interfaces
Task<IResponseOutput> AddOrUpdateVisitStage(VisitPlanCommand visitPlan); Task<IResponseOutput> AddOrUpdateVisitStage(VisitPlanCommand visitPlan);
Task<IResponseOutput> ConfirmTrialVisitPlan(Guid trialId); Task<IResponseOutput> ConfirmTrialVisitPlan(Guid trialId);
Task<IResponseOutput> DeleteVisitStage(Guid id); Task<IResponseOutput> DeleteVisitStage(Guid id);
Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId); //Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId);
Task<List<VisitPlanInfluenceSubjectVisitStatDTO>> GetInfluenceHistoryList(Guid trialId, [FromServices] IRepository<VisitPlanInfluenceStat> _influnceStatRepository); Task<List<VisitPlanInfluenceSubjectVisitStatDTO>> GetInfluenceHistoryList(Guid trialId, [FromServices] IRepository<VisitPlanInfluenceStat> _influnceStatRepository);
Task<PageOutput<VisitStageDTO>> GetTrialVisitStageList(VisitPlanQueryDTO param); Task<PageOutput<VisitStageDTO>> GetTrialVisitStageList(VisitPlanQueryDTO param);
Task<IEnumerable<VisitStageSelectDTO>> GetTrialVisitStageSelect(Guid trialId); Task<IEnumerable<VisitStageSelectDTO>> GetTrialVisitStageSelect(Guid trialId);

View File

@ -4,9 +4,6 @@ using IRaCIS.Core.Application.Filter;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Application.MediatR.CommandAndQueries; using IRaCIS.Core.Application.MediatR.CommandAndQueries;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using Magicodes.ExporterAndImporter.Excel.AspNetCore;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using IRaCIS.Core.Application.Auth; using IRaCIS.Core.Application.Auth;
@ -482,21 +479,21 @@ namespace IRaCIS.Application.Services
return list; return list;
} }
[HttpGet("{visitPlanInfluenceStatId:guid}")] //[HttpGet("{visitPlanInfluenceStatId:guid}")]
public async Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId) //public async Task<IActionResult> DownloadInflunceStudyList(Guid visitPlanInfluenceStatId)
{ //{
var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId) // var list = _influnceRepository.Where(t => t.VisitPlanInfluenceStatId == visitPlanInfluenceStatId)
.ProjectTo<VisitPlanInfluenceSubjectVisitDTO>(_mapper.ConfigurationProvider).ToList(); // .ProjectTo<VisitPlanInfluenceSubjectVisitDTO>(_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" // //$"检查导出_{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")]); // return new XlsxFileResult(bytes: result, fileDownloadName: _localizer["VisitPlan_CheckExport", DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")]);
} //}

View File

@ -1,8 +1,4 @@
using IRaCIS.Core.Domain.Share; 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 MediatR;
using MiniExcelLibs.Attributes; using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
@ -27,33 +23,33 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
public class ImportResultFilteTest : IImportResultFilter //public class ImportResultFilteTest : IImportResultFilter
{ //{
public ImportResult<T> Filter<T>(ImportResult<T> importResult) where T : class, new() // public ImportResult<T> Filter<T>(ImportResult<T> importResult) where T : class, new()
{ // {
if (typeof(T).IsAssignableFrom(typeof(CheckViewModel))) // if (typeof(T).IsAssignableFrom(typeof(CheckViewModel)))
{ // {
var data = (List<CheckViewModel>)importResult.Data; // var data = (List<CheckViewModel>)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); // var index= data.IndexOf(item);
if ( DateTime.TryParse(item.StudyDate, out dt) == false) // if ( DateTime.TryParse(item.StudyDate, out dt) == false)
{ // {
importResult.RowErrors.Add(new DataRowErrorInfo() { RowIndex = index, FieldErrors = new Dictionary<string, string> { { StaticData.International("ConsistencyVerification_Tech") , StaticData.International("ConsistencyVerification_Time") } } }); // importResult.RowErrors.Add(new DataRowErrorInfo() { RowIndex = index, FieldErrors = new Dictionary<string, string> { { StaticData.International("ConsistencyVerification_Tech") , StaticData.International("ConsistencyVerification_Time") } } });
} // }
} // }
} // }
return importResult; // return importResult;
} // }
} //}
public class ParamInfoDto 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 public class CheckViewModel
{ {
//[Required(ErrorMessage = "中心编号不能为空")] //[Required(ErrorMessage = "中心编号不能为空")]
[ImporterHeader(Name = "Site ID", AutoTrim = true)] //[ImporterHeader(Name = "Site ID", AutoTrim = true)]
[ExcelColumnIndex("Site ID")] [ExcelColumnName("Site ID")]
public string SiteCode { get; set; } = string.Empty; public string SiteCode { get; set; } = string.Empty;
//[Required(ErrorMessage = "受试者筛选号不能为空")] //[Required(ErrorMessage = "受试者筛选号不能为空")]
[ImporterHeader(Name = "Subject ID", AutoTrim = true)] //[ImporterHeader(Name = "Subject ID", AutoTrim = true)]
[ExcelColumnName("Subject ID")] [ExcelColumnName("Subject ID")]
public string SubjectCode { get; set; } = string.Empty; public string SubjectCode { get; set; } = string.Empty;
//[Required(ErrorMessage = "访视名称不能为空")] //[Required(ErrorMessage = "访视名称不能为空")]
[ImporterHeader(Name = "Visit Name", AutoTrim = true)] //[ImporterHeader(Name = "Visit Name", AutoTrim = true)]
[ExcelColumnName("Visit Name")] [ExcelColumnName("Visit Name")]
public string VisitName { get; set; } = string.Empty; public string VisitName { get; set; } = string.Empty;
@ -94,14 +90,14 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
//[Required(ErrorMessage = "检查日期不能为空")] //[Required(ErrorMessage = "检查日期不能为空")]
[CanConvertToTime(ErrorMessage = "Does not conform to Study Date format")] [CanConvertToTime(ErrorMessage = "Does not conform to Study Date format")]
[ImporterHeader(Name = "Study Date", AutoTrim = true)] //[ImporterHeader(Name = "Study Date", AutoTrim = true)]
[ExcelColumnName("Study Date")] [ExcelColumnName("Study Date")]
public string StudyDate { get; set; } = string.Empty; public string StudyDate { get; set; } = string.Empty;
//[Required(ErrorMessage = "Modality不能为空")] //[Required(ErrorMessage = "Modality不能为空")]
[ImporterHeader(Name = "Modality", AutoTrim = true)] //[ImporterHeader(Name = "Modality", AutoTrim = true)]
[ExcelColumnName("Modality")] [ExcelColumnName("Modality")]
public string Modality { get; set; } = string.Empty; public string Modality { get; set; } = string.Empty;
@ -131,48 +127,48 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
public class VisitPlanInfluenceSubjectVisitDTO public class VisitPlanInfluenceSubjectVisitDTO
{ {
[ExporterHeader(IsIgnore = true)] //[ExporterHeader(IsIgnore = true)]
public Guid StudyId { get; set; } public Guid StudyId { get; set; }
[ExporterHeader(IsIgnore = true)] //[ExporterHeader(IsIgnore = true)]
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
[ExporterHeader(IsIgnore = true)] //[ExporterHeader(IsIgnore = true)]
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
[ExporterHeader(DisplayName = "中心编号")] //[ExporterHeader(DisplayName = "中心编号")]
public string TrialSiteCode { get; set; } = string.Empty; public string TrialSiteCode { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "受试者")] //[ExporterHeader(DisplayName = "受试者")]
public string SubjectCode { get; set; } = string.Empty; public string SubjectCode { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "访视名称")] //[ExporterHeader(DisplayName = "访视名称")]
public string VisitName { get; set; } = string.Empty; 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; } public DateTime StudyTime { get; set; }
[ExporterHeader(DisplayName = "检查技术")] //[ExporterHeader(DisplayName = "检查技术")]
public string Modality { get; set; } = string.Empty; public string Modality { get; set; } = string.Empty;
[ExporterHeader(IsIgnore = true)] //[ExporterHeader(IsIgnore = true)]
public bool IsDicomStudy { get; set; } public bool IsDicomStudy { get; set; }
[ExporterHeader(DisplayName = "影像类型")] //[ExporterHeader(DisplayName = "影像类型")]
public string ImageType => IsDicomStudy ? "Dicom" : "非Dicom"; public string ImageType => IsDicomStudy ? "Dicom" : "非Dicom";
[ExporterHeader(DisplayName = "历史窗口")] //[ExporterHeader(DisplayName = "历史窗口")]
public string HistoryWindow { get; set; } = string.Empty; public string HistoryWindow { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "之前超窗调整后没超窗")] //[ExporterHeader(DisplayName = "之前超窗调整后没超窗")]
[ValueMapping(text: "yes", true)] //[ValueMapping(text: "yes", true)]
[ValueMapping(text: "no", false)] //[ValueMapping(text: "no", false)]
public bool IsOverWindowNowNotOverWindow { get; set; } public bool IsOverWindowNowNotOverWindow { get; set; }
[ExporterHeader(DisplayName = "目前窗口")] //[ExporterHeader(DisplayName = "目前窗口")]
public string NowWindow { get; set; } = string.Empty; public string NowWindow { get; set; } = string.Empty;
[ExporterHeader(IsIgnore = true)] //[ExporterHeader(IsIgnore = true)]
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
} }