diff --git a/Dockerfile b/Dockerfile index b7fc4aa34..45ee7591a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app -EXPOSE 80 +EXPOSE 7050 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build @@ -21,6 +21,7 @@ COPY ["IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj", "IRaCIS.Co RUN dotnet restore "IRaCIS.Core.API/IRaCIS.Core.API.csproj" COPY . . WORKDIR "/src/IRaCIS.Core.API" +RUN dotnet build "IRaCIS.Core.API.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "IRaCIS.Core.API.csproj" -c Release -o /app/publish /p:UseAppHost=false @@ -31,5 +32,4 @@ COPY --from=publish /app/publish . ENV ASPNETCORE_ENVIRONMENT=Development -ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"] - +ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"] \ No newline at end of file diff --git a/Dockerfile1 b/Dockerfile1 deleted file mode 100644 index 45ee7591a..000000000 --- a/Dockerfile1 +++ /dev/null @@ -1,35 +0,0 @@ -#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. - -#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed. -#For more information, please see https://aka.ms/containercompat - - - -FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base -WORKDIR /app -EXPOSE 7050 - - -FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build -WORKDIR /src -COPY ["IRaCIS.Core.API/IRaCIS.Core.API.csproj", "IRaCIS.Core.API/"] -COPY ["IRaCIS.Core.Application/IRaCIS.Core.Application.csproj", "IRaCIS.Core.Application/"] -COPY ["IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj", "IRaCIS.Core.Infra.EFCore/"] -COPY ["IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj", "IRaCIS.Core.Domain/"] -COPY ["IRaCIS.Core.Domain.Share/IRaCIS.Core.Domain.Share.csproj", "IRaCIS.Core.Domain.Share/"] -COPY ["IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj", "IRaCIS.Core.Infrastructure/"] -RUN dotnet restore "IRaCIS.Core.API/IRaCIS.Core.API.csproj" -COPY . . -WORKDIR "/src/IRaCIS.Core.API" -RUN dotnet build "IRaCIS.Core.API.csproj" -c Release -o /app/build - -FROM build AS publish -RUN dotnet publish "IRaCIS.Core.API.csproj" -c Release -o /app/publish /p:UseAppHost=false - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . - -ENV ASPNETCORE_ENVIRONMENT=Development - -ENTRYPOINT ["dotnet", "IRaCIS.Core.API.dll"] \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index f01df4943..86d65b479 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -113,6 +113,16 @@ namespace IRaCIS.Core.Application.ViewModel #endregion + public PIAuditState PIAuditState { get; set; } + public string NotAgreeReason { get; set; } + public string PIAuditNote { get; set; } = string.Empty; + + public bool? IsEnrollment { get; set; } + + public bool? IsPDConfirm { get; set; } + + public List PIAuditImagePathList { get; set; } + } @@ -133,7 +143,10 @@ namespace IRaCIS.Core.Application.ViewModel public bool? IsEnrollmentConfirm { get; set; } - public PDStateEnum? PDState { get; set; } + public PDStateEnum? PDState { get; set; } + + + } @@ -185,19 +198,7 @@ namespace IRaCIS.Core.Application.ViewModel //任务来源访视Id 方便回更访视读片状态 public Guid? SourceSubjectVisitId { get; set; } public Guid? SouceReadModuleId { get; set; } - - - public PIAuditState PIAuditState { get; set; } - public string NotAgreeReason { get; set; } - public string PIAuditNote { get; set; } = string.Empty; - - - public bool? IsEnrollment { get; set; } - - public bool? IsPDConfirm { get; set; } - - public List PIAuditImagePathList { get; set; } - + } diff --git a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs index 87ea2b67e..3ff2a3733 100644 --- a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs @@ -320,7 +320,9 @@ namespace IRaCIS.Core.Application.Service CreateMap() .ForMember(o => o.CreateUserName, t => t.MapFrom(u => u.CreateUser.UserName)) - .ForMember(o => o.UserTypeEnum, t => t.MapFrom(u => u.CreateUser.UserTypeEnum)); + .ForMember(o => o.UserTypeEnum, t => t.MapFrom(u => u.CreateUser.UserTypeEnum)) + .ForMember(o => o.PIAuditState, t => t.MapFrom(u => u.VisitTask.PIAuditState)) + ; } diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 4cab9bf2d..2dacaa82c 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -178,9 +178,92 @@ namespace IRaCIS.Core.Application.Service - public async Task CommonBusinessScenarioSendEmailAsync() + public async Task CommonBusinessScenarioSendEmailAsync(Guid trialId, Guid siteId, CommonDocumentBusinessScenario businessScenarioEnum, bool? IsEnrollment,bool? IsPDConfirm) { + #region 发收件人配置 确保无误 + + var emailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == businessScenarioEnum) + .Include(t => t.TrialEmailNoticeUserList).FirstOrDefaultAsync(); + + + if (emailConfig == null || emailConfig.IsAutoSend == false ) + { + return; + } + + + var sendEmailConfig = new SMTPEmailConfig(); + + //收件人 如果是CRC CRA 要按照中心发送 + var toUserTypeEnumList = emailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.To).Select(c => c.UserType).ToList(); + + + + var toUserList = _repository.Where(t => t.TrialId == trialId && toUserTypeEnumList.Contains(t.User.UserTypeEnum) && t.SiteId == siteId).Select(t => new { t.User.EMail, t.User.FullName }).ToList(); + + var copyUserTypeEnumList = emailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(c => c.UserType).ToList(); + var copyUserList = _repository.Where(t => t.TrialId == trialId && copyUserTypeEnumList.Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName }).ToList(); + + + if (toUserList.Count() == 0) + { + //---没有收件人,无法发送邮件 + throw new BusinessValidationFailedException(_localizer["TrialEmailN_NoRecipient"]); + } + + + if (emailConfig.FromEmail.Contains("@") && !string.IsNullOrEmpty(emailConfig.FromEmail)) + { + + sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(emailConfig.FromName, emailConfig.FromEmail); + sendEmailConfig.AuthorizationCode = emailConfig.AuthorizationCode; + sendEmailConfig.UserName = emailConfig.FromEmail; + + sendEmailConfig.Host = emailConfig.SMTPServerAddress; + sendEmailConfig.Port = emailConfig.SMTPServerPort; + } + else + { + //---项目发件邮箱配置有误,请核实 + throw new BusinessValidationFailedException(_localizer["TrialEmailN_InvalidEmailConfig"]); + } + + foreach (var item in toUserList) + { + + if (item.EMail.Contains("@") && !string.IsNullOrEmpty(item.EMail)) + { + + sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item.FullName, item.EMail)); + + } + } + foreach (var item in copyUserList) + { + + if (item.EMail.Contains("@") && !string.IsNullOrEmpty(item.EMail)) + { + + sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.FullName, item.EMail)); + + } + } + #endregion + + #region 确保 邮件Html存在 + + + + + var pathToFile = _hostEnvironment.WebRootPath + + Path.DirectorySeparatorChar.ToString() + + "EmailTemplate" + + Path.DirectorySeparatorChar.ToString() + //+ "SubjectEnrollConfirmOrPDProgress.html"; + + (_userInfo.IsEn_Us ? "SubjectEnrollConfirmOrPDProgress_US.html" : "SubjectEnrollConfirmOrPDProgress.html"); + + #endregion }