修改excel和邮件

Test.EIImageViewer
hang 2022-11-04 11:02:26 +08:00
parent fd02bc2dd5
commit 54bbfcfab2
8 changed files with 106 additions and 21 deletions

View File

@ -1,16 +1,75 @@
using IRaCIS.Core.Application.Helper;
using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Helper;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace IRaCIS.Core.Application.Service;
public static class ExcelExportHelper
{
//MiniExcel_Export
public static async Task<IActionResult> DataExportAsync(string code, object data, string exportFileNamePrefix, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment)
public static async Task<IActionResult> DataExportAsync(string code, object data, string exportFileNamePrefix, IRepository<CommonDocument> _commonDocumentRepository, IWebHostEnvironment _hostEnvironment, IDictionaryService? _dictionaryService=null, Type? translateType=null)
{
//判断是否有字典翻译
if (_dictionaryService != null && translateType != null)
{
var needTranslatePropertyList = translateType.GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), false))
.Select(c => new { c.Name, DicParentCode = ((DictionaryTranslateAttribute?)c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false)[0])?.DicParentCode }).ToList()
;
//字典表查询出所有需要翻译的数据
var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).ToArray());
var dic = JsonConvert.DeserializeObject<IDictionary<string, object>>(data.ToJsonStr());
foreach (var key in dic.Keys)
{
//是数组 那么找到对应的属性 进行翻译
if (dic[key].GetType().IsAssignableFrom(typeof(JArray)))
{
var newObjList = new List<object>();
var no = 1;
foreach (var item in dic[key] as JArray)
{
var itemDic = JsonConvert.DeserializeObject<IDictionary<string, object>>(item.ToJsonStr());
foreach (var needTranslateProperty in needTranslatePropertyList)
{
var beforeValue = itemDic[needTranslateProperty.Name].ToString();
itemDic[needTranslateProperty.Name] = translateDataList[needTranslateProperty.DicParentCode].Where(t => t.Code.ToLower() == beforeValue.ToLower()).FirstOrDefault()?.ValueCN;
}
itemDic.Add("No", no++);
newObjList.Add(itemDic);
}
dic[key] = newObjList;
}
}
data = dic;
}
var (physicalPath, fileNmae) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);

View File

@ -56,7 +56,7 @@ public static class SendEmailHelper
//抄送
foreach (var copyToMailAddress in sMTPEmailConfig.CopyToMailAddressList)
{
//messageToSend.Cc.Add(copyToMailAddress);
messageToSend.Cc.Add(copyToMailAddress);
}
}

View File

@ -33,6 +33,7 @@ namespace IRaCIS.Application.Interfaces
/// <returns></returns>
Task<string> GetBasicDataTranslateItem<T>(string parentCode, T childCode);
Task<Dictionary<string, List<BasicDicSelect>>> GetBasicDataSelect(string[] searchArray);
}
}

View File

@ -206,7 +206,7 @@ namespace IRaCIS.Core.Application.Service
//测试
sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress("ddd", "872297557@qq.com"));
//sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress("ddd", "872297557@qq.com"));
}
else

View File

@ -5,6 +5,10 @@ using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.Service;
using Microsoft.AspNetCore.Authorization;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Application.Interfaces;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using IRaCIS.Application.Contracts;
namespace IRaCIS.Core.Application.Image.QA
{
@ -12,12 +16,14 @@ namespace IRaCIS.Core.Application.Image.QA
public class QCListService : BaseService, IQCListService
{
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository;
private readonly IRepository<TrialQCQuestion> _trialQCQuestionRepository;
private readonly IRepository<TrialQCQuestion> _trialQCQuestionRepository
private readonly IRepository<ConsistencyCheckFile> _consistencyCheckFileRepository;
public QCListService(
IRepository<SubjectVisit> subjectVisitRepository,
IRepository<Trial> trialRepository,
IRepository<TrialQCQuestionAnswer> trialQCQuestionAnswerRepository,
IRepository<TrialQCQuestion> trialQCQuestionRepository,
IRepository<ConsistencyCheckFile> consistencyCheckFileRepository
@ -27,6 +33,7 @@ namespace IRaCIS.Core.Application.Image.QA
this._trialQCQuestionAnswerRepository = trialQCQuestionAnswerRepository;
this._trialQCQuestionRepository = trialQCQuestionRepository;
this._consistencyCheckFileRepository = consistencyCheckFileRepository;
_trialRepository = trialRepository;
}
@ -37,17 +44,15 @@ namespace IRaCIS.Core.Application.Image.QA
//影像上传列表
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> CRCVisitListExport(CRCVisitSearchDTO visitSearchDTO, [FromServices] IRepository<CommonDocument> _commonDocumentRepository)
public async Task<IActionResult> CRCVisitListExport(CRCVisitSearchDTO visitSearchDTO,
[FromServices] IRepository<CommonDocument> _commonDocumentRepository,
[FromServices] IDictionaryService _dictionaryService)
{
//object[] objectList = typeof(CRCVisitExportDTO).GetProperties().Where(t=>t.CustomAttributes.Any(c=>c.AttributeType==typeof(DictionaryTranslateAttribute)))
// .Select(c=>new {c.Name,})
// ;
var svExpression = QCCommon.GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
var list = _repository.Where<SubjectVisit>(x => x.TrialId == visitSearchDTO.TrialId)
var list = await _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
.Where(t => t.Subject.FinalSubjectVisitId != null ? t.VisitNum <= t.Subject.FinalSubjectVisit.VisitNum : true)
.WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
.WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)
@ -62,14 +67,23 @@ namespace IRaCIS.Core.Application.Image.QA
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
.ProjectTo<CRCVisitExportDTO>(_mapper.ConfigurationProvider).ToListAsync();
//var needTranslatePropertyList = typeof(CRCVisitExportDTO).GetProperties().Where(t => t.IsDefined(typeof(DictionaryTranslateAttribute), false))
// .Select(c => new { c.Name, DicParentCode = ((DictionaryTranslateAttribute?)c.GetCustomAttributes(typeof(DictionaryTranslateAttribute), false)[0])?.DicParentCode }).ToList()
// ;
//var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).ToArray());
//var obj = new { cc = "aa", list };
var exportInfo = (await _trialRepository.Where(t => t.Id == visitSearchDTO.TrialId).IgnoreQueryFilters().ProjectTo<TrialSelectDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
//var no = 1;
//exportInfo.TrialSiteUserList.ForEach(t => t.No = no++);
dynamic obj = exportInfo;
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSiteUserList_Export, list, "", _commonDocumentRepository, _hostEnvironment);
((IDictionary<string, object>)obj).Add("List", list);
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, obj, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
}
@ -90,7 +104,7 @@ namespace IRaCIS.Core.Application.Image.QA
{
var svExpression = QCCommon.GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
var query = _repository.Where<SubjectVisit>(x => x.TrialId == visitSearchDTO.TrialId)
var query = _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
.Where(t => t.Subject.FinalSubjectVisitId != null ? t.VisitNum <= t.Subject.FinalSubjectVisit.VisitNum : true)
.WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
.WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)

View File

@ -73,7 +73,8 @@ namespace IRaCIS.Application.Contracts
public string Indication { get; set; } = string.Empty;
public string ResearchProgramNo { get; set; } = string.Empty;
public string ResearchProgramNo { get; set; } = string.Empty;
}

View File

@ -104,17 +104,26 @@ namespace IRaCIS.Application.Contracts
}
public class TrialUserExportDTO : TrialSelectDTO
public class TrialCRCUploadImageList_Export: ExcelExportTrialInfo
{
}
public class ExcelExportTrialInfo : TrialSelectDTO
{
public DateTime CurrentTime { get; set; } = DateTime.Now;
}
public class TrialUserExportDTO : ExcelExportTrialInfo
{
public List<TrialMaintenanceDTO> TrialUserList { get; set; } = new List<TrialMaintenanceDTO>();
}
public class TrialSiteUserExportDto : TrialSelectDTO
public class TrialSiteUserExportDto : ExcelExportTrialInfo
{
public DateTime CurrentTime { get; set; } = DateTime.Now;
public List<SiteUserExportDTO> TrialSiteUserList { get; set; } = new List<SiteUserExportDTO>();
}
@ -127,9 +136,8 @@ namespace IRaCIS.Application.Contracts
public string TrialSiteAliasName { get; set; } = String.Empty;
}
public class TrialSiteUserSummaryExportDto : TrialSelectDTO
public class TrialSiteUserSummaryExportDto : ExcelExportTrialInfo
{
public DateTime CurrentTime { get; set; } = DateTime.Now;
public List<TrialSiteUserSummaryDto> TrialSiteUserList { get; set; } = new List<TrialSiteUserSummaryDto>();

View File

@ -122,6 +122,8 @@ public static class StaticData
public const string TrialSiteUserSummary_Export = "TrialSiteUserSummary_Export";
public const string TrialUserList_Export = "TrialUserList_Export";
public const string TrialCRCUploadImageList_Export = "TrialCRCUploadImageList_Export";
}