Merge branch 'Test_HIR_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_HIR_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
9ecbfb37aa
|
|
@ -69,6 +69,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.19" />
|
||||
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
|
|
@ -79,8 +80,6 @@
|
|||
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
|
||||
<PackageReference Include="Hangfire.InMemory" Version="1.0.0" />
|
||||
<PackageReference Include="Hangfire.SqlServer" Version="1.8.20" />
|
||||
<PackageReference Include="Invio.Extensions.Authentication.JwtBearer" Version="2.0.1" />
|
||||
<PackageReference Include="LogDashboard" Version="1.4.8" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.10" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
|
||||
<PackageReference Include="Serilog.Formatting.Compact" Version="3.0.0" />
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ using IRaCIS.Core.Application.Service;
|
|||
using IRaCIS.Core.Application.Service.BusinessFilter;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using LogDashboard;
|
||||
using MassTransit;
|
||||
using MassTransit.NewIdProviders;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
using LogDashboard;
|
||||
using LogDashboard.Authorization;
|
||||
|
||||
namespace IRaCIS.Core.API.Filter
|
||||
{
|
||||
|
||||
public class LogDashBoardAuthFilter : ILogDashboardAuthorizationFilter
|
||||
{
|
||||
//在此可以利用 本系统的UerTypeEnum 判断
|
||||
public bool Authorization(LogDashboardContext context)
|
||||
{
|
||||
return context.HttpContext.User.Identity.IsAuthenticated;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -46,6 +46,8 @@ namespace IRaCIS.Core.API
|
|||
OnMessageReceived = (context) =>
|
||||
{
|
||||
|
||||
|
||||
|
||||
if (context.Request.Query.TryGetValue("access_token", out StringValues values))
|
||||
{
|
||||
var queryToken = values.FirstOrDefault();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using EntityFramework.Exceptions.SqlServer;
|
||||
using IRaCIS.Core.Application.Triggers;
|
||||
using IRaCIS.Core.Application.Triggers.AfterSaveTrigger;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using IRaCIS.Core.Infra.EFCore.Interceptor;
|
||||
|
|
@ -81,7 +82,7 @@ namespace IRaCIS.Core.API
|
|||
|
||||
triggerOptions.AddTrigger<UserAddTrigger>();
|
||||
|
||||
triggerOptions.AddTrigger<UserModifyTrigger>();
|
||||
triggerOptions.AddTrigger<IdenttiyUserRoleInfoTrigger>();
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +0,0 @@
|
|||
|
||||
using LogDashboard;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
public static class LogDashboardSetup
|
||||
{
|
||||
public static void AddLogDashboardSetup(this IServiceCollection services)
|
||||
{
|
||||
//IIS 配置虚拟路径部署,会出现IIS静态文件404
|
||||
services.AddLogDashboard(opt =>
|
||||
{
|
||||
//opt.PathMatch = "/api/LogDashboard";
|
||||
opt.PathMatch = "/LogDashboard";
|
||||
|
||||
//opt.AddAuthorizationFilter(new LogDashboardBasicAuthFilter("admin", "zhizhun2018"));
|
||||
|
||||
//opt.AddAuthorizationFilter(new LogDashBoardAuthFilter());
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,8 +16,8 @@ namespace IRaCIS.Core.API;
|
|||
|
||||
public enum SwaggerVersion
|
||||
{
|
||||
[Description("测试")]
|
||||
Test = -1,
|
||||
[Description("HIR修改")]
|
||||
HIR = -1,
|
||||
|
||||
[Description("医生模块")]
|
||||
Reviewer = 1,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"SecurityKey": "ShangHaiZhanYing_SecurityKey_SHzyyl@2021",
|
||||
"Issuer": "Extimaging",
|
||||
"Audience": "EICS",
|
||||
"TokenExpireDays": "7"
|
||||
"TokenExpireMinute": "10080" //7天
|
||||
},
|
||||
"IpRateLimiting": {
|
||||
"EnableEndpointRateLimiting": true,
|
||||
|
|
|
|||
|
|
@ -11851,7 +11851,7 @@
|
|||
阅片医学审核
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingMedicalReviewService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingMedicineTrialQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo},IRaCIS.Core.Application.Contracts.IReadingImageTaskService,IRaCIS.Core.Application.Service.IVisitTaskService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskMedicalReview},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingMedicalReviewDialog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingMedicineQuestionAnswer},IRaCIS.Core.Application.Interfaces.ITrialEmailNoticeConfigService,AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingMedicalReviewService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingMedicineTrialQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo},IRaCIS.Core.Application.Contracts.IReadingImageTaskService,IRaCIS.Core.Application.Service.IVisitTaskService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskMedicalReview},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingMedicalReviewDialog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingMedicineQuestionAnswer},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||
<summary>
|
||||
阅片医学审核
|
||||
</summary>
|
||||
|
|
@ -12622,7 +12622,7 @@
|
|||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo},IRaCIS.Core.Application.Service.IVisitTaskHelpeService,IRaCIS.Core.Application.Service.IVisitTaskService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService,IRaCIS.Core.Application.Service.IReadingCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCriterionPage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskRelation},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingJudgeInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganInfo},IRaCIS.Core.Application.Service.ReadingCalculate.Interface.ILuganoCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCustomTag},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionMark},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTrialCriterionDictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Application.Service.IGeneralCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskStudy},IRaCIS.Core.Application.Service.ImageAndDoc.IDownloadAndUploadService,IRaCIS.Core.Application.Interfaces.ITrialEmailNoticeConfigService,AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer,ZiggyCreatures.Caching.Fusion.IFusionCache)">
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo},IRaCIS.Core.Application.Service.IVisitTaskHelpeService,IRaCIS.Core.Application.Service.IVisitTaskService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService,IRaCIS.Core.Application.Service.IReadingCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCriterionPage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskRelation},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingJudgeInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganInfo},IRaCIS.Core.Application.Service.ReadingCalculate.Interface.ILuganoCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCustomTag},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionMark},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTrialCriterionDictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Application.Service.IGeneralCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskStudy},IRaCIS.Core.Application.Service.ImageAndDoc.IDownloadAndUploadService,AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer,ZiggyCreatures.Caching.Fusion.IFusionCache)">
|
||||
<summary>
|
||||
IR影像阅片
|
||||
</summary>
|
||||
|
|
@ -13564,6 +13564,26 @@
|
|||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.HospitalGroupService.GetGAUserList">
|
||||
<summary>
|
||||
GA用户列表
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.HospitalGroupService.GetHospitalGroupList(IRaCIS.Core.Application.ViewModel.HospitalGroupQuery)">
|
||||
<summary>
|
||||
不分页课题组列表
|
||||
</summary>
|
||||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.HospitalGroupService.GetHospitalGroupPageList(IRaCIS.Core.Application.ViewModel.HospitalGroupQuery)">
|
||||
<summary>
|
||||
分页课题组列表
|
||||
</summary>
|
||||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectService.AddOrUpdateSubject(IRaCIS.Application.Contracts.SubjectCommand)">
|
||||
<summary>
|
||||
添加或更新受试者信息[New]
|
||||
|
|
@ -17348,6 +17368,20 @@
|
|||
<param name="_qcChallengeRepository"></param>
|
||||
<param name="_subjectVisitRepository"></param>
|
||||
</member>
|
||||
<member name="T:IRaCIS.Core.Application.Triggers.AfterSaveTrigger.IdenttiyUserRoleInfoTrigger">
|
||||
<summary>
|
||||
维护用户角色表中的账户信息
|
||||
</summary>
|
||||
<param name="_identityUserRepository"></param>
|
||||
<param name="_userRoleRepository"></param>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Triggers.AfterSaveTrigger.IdenttiyUserRoleInfoTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole})">
|
||||
<summary>
|
||||
维护用户角色表中的账户信息
|
||||
</summary>
|
||||
<param name="_identityUserRepository"></param>
|
||||
<param name="_userRoleRepository"></param>
|
||||
</member>
|
||||
<member name="T:IRaCIS.Core.Application.Triggers.TrialCriterionSignTrigger">
|
||||
<summary>
|
||||
因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO;
|
|||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
[ApiExplorerSettings(GroupName = "Management")]
|
||||
[ApiExplorerSettings(GroupName = "HIR")]
|
||||
public class UserService(IRepository<UserRole> _userRoleRepository,
|
||||
IMailVerificationService _mailVerificationService,
|
||||
IRepository<VerificationCode> _verificationCodeRepository,
|
||||
|
|
@ -426,6 +426,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var success = await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.IdentityUserId, u => new IdentityUser()
|
||||
{
|
||||
Password = editPwModel.NewPassWord,
|
||||
CheckCode=editPwModel.CheckCode,
|
||||
LastChangePassWordTime = DateTime.Now,
|
||||
IsFirstAdd = false
|
||||
});
|
||||
|
|
@ -959,7 +960,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||
[AllowAnonymous]
|
||||
[HttpGet("{email}/{verifyCode}")]
|
||||
public async Task<List<UserAccountDto>> VerifyAnonymousVerifyCode(string email, string verifyCode)
|
||||
public async Task<List<UserAccountInfo>> VerifyAnonymousVerifyCode(string email, string verifyCode)
|
||||
{
|
||||
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, async _ => await CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
|
||||
|
||||
|
|
@ -1003,14 +1004,25 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
|
||||
|
||||
|
||||
var list = await _userRoleRepository.Where(t => t.EMail == email).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.FullName, UserType = t.UserTypeRole.UserTypeShortName }).ToListAsync();
|
||||
|
||||
|
||||
var list = await _userRoleRepository.Where(t => t.EMail == email).ProjectTo<UserAccountInfo>(_mapper.ConfigurationProvider).OrderBy(t => t.UserTypeShortName).ToListAsync();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
[HttpPut("{newCheckCode}")]
|
||||
public async Task<IResponseOutput> SetNewCheckCode(string newCheckCode)
|
||||
{
|
||||
var user = await _userRoleRepository.FirstOrDefaultNoTrackingAsync(t => t.Id == _userInfo.UserRoleId);
|
||||
|
||||
await _userRoleRepository.UpdatePartialFromQueryAsync(t => t.EMail == user.EMail, u => new UserRole()
|
||||
{
|
||||
CheckCode = newCheckCode
|
||||
});
|
||||
|
||||
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.UserRoleId, OptUserId = _userInfo.UserRoleId, OptType = UserOptType.ModifyCheckCode }, true);
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
#region 多账号修改
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -141,7 +141,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
CreateMap<IdentityUser, UserBasicInfo>()
|
||||
.ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t.Id));
|
||||
|
||||
|
||||
CreateMap<UserRole, IdentityUserTypeDTO>()
|
||||
.ForMember(d => d.UserTypeShortName, c => c.MapFrom(t => t.UserTypeRole.UserTypeShortName));
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,12 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace IRaCIS.Core.Application.Service.MinimalApiService
|
||||
{
|
||||
public class UploadFileRequest
|
||||
{
|
||||
public IFormFile File { get; set; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 上传文件转PDF 或者给url 这边下载然后转PDF
|
||||
///
|
||||
|
|
@ -27,8 +33,9 @@ namespace IRaCIS.Core.Application.Service.MinimalApiService
|
|||
|
||||
[AllowAnonymous]
|
||||
[RoutePattern(HttpMethod = "Post")]
|
||||
public async Task<IResult> UploadFileAsync([FromForm] IFormFile file)
|
||||
public async Task<IResult> UploadFileAsync([FromForm] UploadFileRequest request)
|
||||
{
|
||||
var file = request.File;
|
||||
var tempFileName = NewId.NextGuid() + file.FileName;
|
||||
var tempPDFName = Path.GetFileNameWithoutExtension(tempFileName) + ".pdf";
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
IRepository<ReadingMedicalReviewDialog> _readingMedicalReviewDialogRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrial,
|
||||
IRepository<ReadingMedicineQuestionAnswer> _readingMedicineQuestionAnswerRepository,
|
||||
ITrialEmailNoticeConfigService _trialEmailNoticeConfigService, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IReadingMedicalReviewService
|
||||
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IReadingMedicalReviewService
|
||||
{
|
||||
|
||||
|
||||
|
|
@ -681,7 +681,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
if (allMedicalAuditList.All(t => t.IsApplyHeavyReading == false && t.AuditSignTime != null && t.AuditState == MedicalReviewAuditState.HaveSigned))
|
||||
{
|
||||
//自动发送
|
||||
await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(medicalReviewInfo.VisitTaskId, false);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
|
||||
IRepository<TaskStudy> _taskStudyRepository,
|
||||
IDownloadAndUploadService _downloadAndUploadService,
|
||||
ITrialEmailNoticeConfigService _trialEmailNoticeConfigService,
|
||||
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IReadingImageTaskService
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -501,7 +501,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
// 创建任务关联关系
|
||||
await this.CreateTaskRelated(inDto.VisitTaskId);
|
||||
|
||||
await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(inDto.VisitTaskId);
|
||||
return ResponseOutput.Ok(result);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由liquid模板自动生成 byzhouhang 20240909
|
||||
// 生成时间 2025-08-18 03:23:09Z
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
using System;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.Collections.Generic;
|
||||
namespace IRaCIS.Core.Application.ViewModel;
|
||||
|
||||
public class HospitalGroupView : HospitalGroupAddOrEdit
|
||||
{
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
public List<HospitalGroupAdminUserInfo> GAUserList { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class HospitalGroupAddOrEdit
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public string Affiliation { get; set; }
|
||||
|
||||
public string Code { get; set; }
|
||||
|
||||
public string ContactName { get; set; }
|
||||
|
||||
public string ContactPhone { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public List<Guid> IdentityUserIdList { get; set; }
|
||||
}
|
||||
|
||||
public class HospitalGroupQuery : PageInput
|
||||
{
|
||||
public string? Affiliation { get; set; }
|
||||
|
||||
public string? Code { get; set; }
|
||||
|
||||
public string? ContactName { get; set; }
|
||||
|
||||
public string? ContactPhone { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public class HospitalGroupAdminUserInfo
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string UserName { get; set; }
|
||||
|
||||
public string FullName { get; set; }
|
||||
|
||||
public string Email { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由liquid模板自动生成 byzhouhang 20240909
|
||||
// 生成时间 2025-08-18 03:23:01Z
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using IRaCIS.Core.Application.Interfaces;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using System.Threading.Tasks;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using IRaCIS.Application.Contracts;
|
||||
namespace IRaCIS.Core.Application.Service;
|
||||
|
||||
[ApiExplorerSettings(GroupName = "HIR")]
|
||||
public class HospitalGroupService(IRepository<HospitalGroup> _hospitalGroupRepository,
|
||||
IRepository<IdentityUser> _identityUserRepository, IRepository<HospitalGroupIdentityUser> _hospitalGroupIdentityUserRepository,
|
||||
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IHospitalGroupService
|
||||
{
|
||||
/// <summary>
|
||||
/// GA用户列表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
|
||||
public async Task<List<HospitalGroupAdminUserInfo>> GetGAUserList()
|
||||
{
|
||||
var list = await _identityUserRepository.Where(t => t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.GA)).ProjectTo<HospitalGroupAdminUserInfo>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 不分页课题组列表
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<HospitalGroupView>> GetHospitalGroupList(HospitalGroupQuery inQuery)
|
||||
{
|
||||
|
||||
var hospitalGroupQueryable = _hospitalGroupRepository
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Code), t => t.Code.Contains(inQuery.Code))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Affiliation), t => t.Affiliation.Contains(inQuery.Affiliation))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactPhone), t => t.ContactPhone.Contains(inQuery.ContactPhone))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactName), t => t.ContactName.Contains(inQuery.ContactName))
|
||||
.ProjectTo<HospitalGroupView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var pageList = await hospitalGroupQueryable.SortToListAsync(inQuery);
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分页课题组列表
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<HospitalGroupView>> GetHospitalGroupPageList(HospitalGroupQuery inQuery)
|
||||
{
|
||||
|
||||
var hospitalGroupQueryable = _hospitalGroupRepository
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Code), t => t.Code.Contains(inQuery.Code))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Name), t => t.Name.Contains(inQuery.Name))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Affiliation), t => t.Affiliation.Contains(inQuery.Affiliation))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactPhone), t => t.ContactPhone.Contains(inQuery.ContactPhone))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactName), t => t.ContactName.Contains(inQuery.ContactName))
|
||||
.ProjectTo<HospitalGroupView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var pageList = await hospitalGroupQueryable.ToPagedListAsync(inQuery);
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<IResponseOutput> AddOrUpdateHospitalGroup(HospitalGroupAddOrEdit addOrEditHospitalGroup)
|
||||
{
|
||||
var verifyExp1 = new EntityVerifyExp<HospitalGroup>()
|
||||
{
|
||||
VerifyExp = u => u.Code == addOrEditHospitalGroup.Code,
|
||||
VerifyMsg = _localizer["HospitalGroup_DuplicateCode"]
|
||||
};
|
||||
|
||||
if (addOrEditHospitalGroup.Id == null)
|
||||
{
|
||||
|
||||
var addEntity = _mapper.Map<HospitalGroup>(addOrEditHospitalGroup);
|
||||
|
||||
addEntity.IdentityUserList = addOrEditHospitalGroup.IdentityUserIdList.Select(t => new HospitalGroupIdentityUser() { IdentityUserId = t, IsManager = true }).ToList();
|
||||
|
||||
var newEntity = await _hospitalGroupRepository.AddAsync(addEntity, true, verifyExp1);
|
||||
|
||||
return ResponseOutput.Ok(newEntity.Id.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
await _hospitalGroupIdentityUserRepository.BatchDeleteNoTrackingAsync(t => t.HospitalGroupId == addOrEditHospitalGroup.Id && t.IsManager);
|
||||
|
||||
//var find = await _hospitalGroupRepository.FirstOrDefaultAsync(t => t.Id == addOrEditHospitalGroup.Id);
|
||||
|
||||
//_mapper.Map(addOrEditHospitalGroup, find);
|
||||
|
||||
var adminUserList = addOrEditHospitalGroup.IdentityUserIdList.Select(t => new HospitalGroupIdentityUser() { IdentityUserId = t, HospitalGroupId = (Guid)addOrEditHospitalGroup.Id, IsManager = true }).ToList();
|
||||
|
||||
await _hospitalGroupIdentityUserRepository.AddRangeAsync(adminUserList);
|
||||
var entity = await _hospitalGroupRepository.UpdateFromDTOAsync(addOrEditHospitalGroup, false, false, verifyExp1);
|
||||
|
||||
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
|
||||
[HttpDelete("{hospitalGroupId:guid}")]
|
||||
public async Task<IResponseOutput> DeleteHospitalGroup(Guid hospitalGroupId)
|
||||
{
|
||||
var success = await _hospitalGroupRepository.DeleteFromQueryAsync(t => t.Id == hospitalGroupId, true);
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由liquid模板自动生成 byzhouhang 20240909
|
||||
// 生成时间 2025-08-18 03:23:09Z
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
using System;
|
||||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using System.Threading.Tasks;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
namespace IRaCIS.Core.Application.Interfaces;
|
||||
|
||||
public interface IHospitalGroupService
|
||||
{
|
||||
|
||||
|
||||
Task<List<HospitalGroupView>> GetHospitalGroupList(HospitalGroupQuery inQuery);
|
||||
|
||||
Task<PageOutput<HospitalGroupView>> GetHospitalGroupPageList(HospitalGroupQuery inQuery);
|
||||
|
||||
Task<IResponseOutput> AddOrUpdateHospitalGroup(HospitalGroupAddOrEdit addOrEditHospitalGroup);
|
||||
|
||||
Task<IResponseOutput> DeleteHospitalGroup(Guid hospitalGroupId);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -57,7 +57,7 @@ using IRaCIS.Core.Application.Helper.OtherTool;
|
|||
|
||||
namespace IRaCIS.Application.Services
|
||||
{
|
||||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
[ApiExplorerSettings(GroupName = "HIR")]
|
||||
public class PatientService(IRepository<SCPStudySubjectVisit> _studySubjectVisitRepository,
|
||||
IRepository<SubjectPatient> _subjectPatientRepository,
|
||||
IRepository<Trial> _trialRepository,
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.CreateUserRole.UserTypeEnum));
|
||||
|
||||
CreateMap<SCPImageUpload, SCPImageUploadView>();
|
||||
|
||||
|
||||
|
||||
CreateMap<VisitPlanInfluenceStat, VisitPlanInfluenceSubjectVisitStatDTO>()
|
||||
.ForMember(d => d.CreateUser, u => u.MapFrom(g => g.CreateUserRole.LastName + " / " + g.CreateUserRole.FirstName));
|
||||
|
|
@ -114,7 +114,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.CallingAEList, u => u.MapFrom(s => s.SCPStudyList.Select(t => t.CallingAE).Distinct()))
|
||||
.ForMember(d => d.PatientId, u => u.MapFrom(s => s.Id));
|
||||
|
||||
CreateMap<SCPStudySubjectVisit, VisitPatientStudyView>().IncludeMembers(t=>t.SCPStudy)
|
||||
CreateMap<SCPStudySubjectVisit, VisitPatientStudyView>().IncludeMembers(t => t.SCPStudy)
|
||||
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName));
|
||||
|
||||
CreateMap<Subject, PatienSubejctView>()
|
||||
|
|
@ -136,13 +136,13 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
CreateMap<Trial, NewTrialView>()
|
||||
.ForMember(d => d.TrialId, u => u.MapFrom(s => s.Id))
|
||||
.ForMember(d => d.UnSubmitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t=>t.SubmitState==SubmitStateEnum.ToSubmit)))
|
||||
.ForMember(d => d.UnReadCount, u => u.MapFrom(s => s.VisitTaskList.Count(t=>t.TaskState==TaskState.Effect && t.SignTime==null)))
|
||||
.ForMember(d => d.UnSubmitCount, u => u.MapFrom(s => s.SubjectVisitList.Count(t => t.SubmitState == SubmitStateEnum.ToSubmit)))
|
||||
.ForMember(d => d.UnReadCount, u => u.MapFrom(s => s.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.SignTime == null)))
|
||||
;
|
||||
|
||||
CreateMap<Trial, TrialInfoDTO>()
|
||||
.ForMember(d => d.DictionaryList, u => u.MapFrom(s => s.TrialDicList.Select(t => t.Dictionary).OrderBy(t => t.ShowOrder)));
|
||||
|
||||
|
||||
|
||||
CreateMap<SCPStudy, VisitPatientStudyView>()
|
||||
.ForMember(d => d.SCPStudyId, u => u.MapFrom(s => s.Id));
|
||||
|
|
@ -161,7 +161,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.ExperimentName, u => u.MapFrom(s => s.Subject.Trial.ExperimentName));
|
||||
|
||||
CreateMap<Subject, PatientJoinedTrialView>();
|
||||
|
||||
|
||||
|
||||
CreateMap<Trial, PatientJoinedTrialView>();
|
||||
|
||||
|
|
@ -199,6 +199,23 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
CreateMap<HIRHospital, HIRHospitalView>();
|
||||
CreateMap<HIRHospital, HIRHospitalAddOrEdit>().ReverseMap();
|
||||
|
||||
|
||||
|
||||
CreateMap<HospitalGroup, HospitalGroupView>()
|
||||
.ForMember(d => d.GAUserList, u => u.MapFrom(s => s.IdentityUserList.Where(t => t.IsManager).Select(t => t.IdentityUser)))
|
||||
.ForMember(d => d.IdentityUserIdList, u => u.MapFrom(s => s.IdentityUserList.Where(t => t.IsManager).Select(t => t.IdentityUser.Id)));
|
||||
|
||||
|
||||
CreateMap<HospitalGroup, HospitalGroupAddOrEdit>().ReverseMap();
|
||||
|
||||
|
||||
CreateMap<IdentityUser, HospitalGroupAdminUserInfo>();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
using EntityFrameworkCore.Triggered;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IRaCIS.Core.Application.Triggers.AfterSaveTrigger
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 维护用户角色表中的账户信息
|
||||
/// </summary>
|
||||
/// <param name="_identityUserRepository"></param>
|
||||
/// <param name="_userRoleRepository"></param>
|
||||
public class IdenttiyUserRoleInfoTrigger(IRepository<IdentityUser> _identityUserRepository, IRepository<UserRole> _userRoleRepository) : IAfterSaveTrigger<IdentityUser>
|
||||
{
|
||||
public async Task AfterSave(ITriggerContext<IdentityUser> context, CancellationToken cancellationToken)
|
||||
{
|
||||
var identityUser = context.Entity;
|
||||
|
||||
//保持用户角色表和用户表信息一致
|
||||
await _userRoleRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == identityUser.Id, u => new UserRole()
|
||||
{
|
||||
UserName = identityUser.UserName,
|
||||
FirstName = identityUser.FirstName,
|
||||
LastName = identityUser.LastName,
|
||||
EMail = identityUser.EMail,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
using EntityFrameworkCore.Triggered;
|
||||
using IP2Region.Net.Abstractions;
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
|
||||
namespace IRaCIS.Core.Application.Triggers
|
||||
{
|
||||
public class UserLogTrigger(
|
||||
ISearcher _searcher) : IBeforeSaveTrigger<UserLog>
|
||||
public class UserLogTrigger : IBeforeSaveTrigger<UserLog>
|
||||
{
|
||||
|
||||
|
||||
|
|
@ -18,102 +18,31 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
if (context.ChangeType == ChangeType.Added)
|
||||
{
|
||||
|
||||
var ipinfo = _searcher.Search(userLog.IP);
|
||||
//var ipinfo = _searcher.Search(userLog.IP);
|
||||
|
||||
userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||
//userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||
|
||||
userLog.IPRegion = IPCityHelper.GetCityResponse(userLog.IP);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class UserAddTrigger(IUserInfo _userInfo, IRepository<UserLog> _userLogReposiotry) : IBeforeSaveTrigger<UserRole>
|
||||
public class UserAddTrigger(IUserInfo _userInfo, IRepository<UserLog> _userLogReposiotry) : IBeforeSaveTrigger<IdentityUser>
|
||||
{
|
||||
public async Task BeforeSave(ITriggerContext<UserRole> context, CancellationToken cancellationToken)
|
||||
public async Task BeforeSave(ITriggerContext<IdentityUser> context, CancellationToken cancellationToken)
|
||||
{
|
||||
var user = context.Entity;
|
||||
|
||||
if (context.ChangeType == ChangeType.Added)
|
||||
{
|
||||
await _userLogReposiotry.AddAsync(new UserLog() { OptType = UserOptType.AddUser, OptUserId = user.Id, LoginUserId = _userInfo.UserRoleId, IP = _userInfo.IP });
|
||||
await _userLogReposiotry.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = _userInfo.IdentityUserId, ActionUserName = _userInfo.UserName, TargetIdentityUserId = user.Id, OptType = UserOptType.AddUser }, true);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class UserModifyTrigger(IUserInfo _userInfo, IRepository<UserRole> _userReposiotry) : IBeforeSaveTrigger<UserRole>
|
||||
{
|
||||
public async Task BeforeSave(ITriggerContext<UserRole> context, CancellationToken cancellationToken)
|
||||
{
|
||||
var user = context.Entity;
|
||||
|
||||
var beforeUser = context.UnmodifiedEntity;
|
||||
|
||||
if (context.ChangeType == ChangeType.Modified)
|
||||
{
|
||||
|
||||
if (beforeUser.IsFirstAdd == false && user.IsFirstAdd == true)
|
||||
{
|
||||
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { IsFirstAdd = true });
|
||||
}
|
||||
|
||||
//只用初始化其中一个
|
||||
if (beforeUser.IsFirstAdd == true && user.IsFirstAdd == false)
|
||||
{
|
||||
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { IsFirstAdd = false });
|
||||
}
|
||||
|
||||
if (beforeUser.Password != user.Password)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { Password = user.Password });
|
||||
}
|
||||
|
||||
|
||||
if (beforeUser.EMail != user.EMail)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == beforeUser.EMail, u => new UserRole() { EMail = user.EMail });
|
||||
}
|
||||
|
||||
if (beforeUser.CheckCode != user.CheckCode)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { CheckCode = user.CheckCode });
|
||||
}
|
||||
|
||||
if (beforeUser.FirstName != user.FirstName || beforeUser.LastName != user.LastName)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { FirstName = user.FirstName, LastName = user.LastName });
|
||||
}
|
||||
|
||||
if (beforeUser.Phone != user.Phone)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { Phone = user.Phone });
|
||||
}
|
||||
|
||||
if (beforeUser.Sex != user.Sex)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { Sex = user.Sex });
|
||||
}
|
||||
|
||||
if (beforeUser.IsZhiZhun != user.IsZhiZhun)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { IsZhiZhun = user.IsZhiZhun, OrganizationName = user.OrganizationName });
|
||||
}
|
||||
|
||||
if (beforeUser.OrganizationName != user.OrganizationName)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { OrganizationName = user.OrganizationName });
|
||||
}
|
||||
|
||||
if (beforeUser.DepartmentName != user.DepartmentName || beforeUser.PositionName != user.PositionName)
|
||||
{
|
||||
await _userReposiotry.BatchUpdateNoTrackingAsync(t => t.EMail == user.EMail, u => new UserRole() { DepartmentName = user.DepartmentName, PositionName = user.PositionName });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,28 +60,29 @@
|
|||
|
||||
Undefined = 0,
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EA=16,
|
||||
|
||||
MW=17,
|
||||
EA = 16,
|
||||
|
||||
MW = 17,
|
||||
|
||||
|
||||
SMM=18,
|
||||
SMM = 18,
|
||||
|
||||
CMM=19,
|
||||
CMM = 19,
|
||||
|
||||
|
||||
|
||||
ZYSS=26,
|
||||
ZYSS = 26,
|
||||
|
||||
ZYBS=27,
|
||||
ZYBS = 27,
|
||||
|
||||
MC=30,
|
||||
MC = 30,
|
||||
|
||||
|
||||
//课题组管理员
|
||||
GA = 35,
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -89,16 +90,16 @@
|
|||
public enum UserTypeSelectEnum
|
||||
{
|
||||
|
||||
None=0,
|
||||
None = 0,
|
||||
|
||||
ExternalUser=1,
|
||||
ExternalUser = 1,
|
||||
|
||||
InnerUser=2,
|
||||
InnerUser = 2,
|
||||
|
||||
SiteSurvey=3,
|
||||
SiteSurvey = 3,
|
||||
|
||||
EnrollOrPD_EmailReceive=4,
|
||||
EnrollOrPD_EMailCopy=5,
|
||||
EnrollOrPD_EmailReceive = 4,
|
||||
EnrollOrPD_EMailCopy = 5,
|
||||
|
||||
//HIR
|
||||
TrialDoc = 6,
|
||||
|
|
@ -106,9 +107,9 @@
|
|||
|
||||
public enum UserMFAType
|
||||
{
|
||||
Login=0,
|
||||
Login = 0,
|
||||
|
||||
Unlock=1,
|
||||
Unlock = 1,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,13 @@ namespace IRaCIS.Core.Domain.Models
|
|||
[Comment("课题组")]
|
||||
public class HospitalGroup : BaseFullAuditEntity
|
||||
{
|
||||
#region 导航属性
|
||||
[JsonIgnore]
|
||||
public List<HospitalGroupIdentityUser> IdentityUserList { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Code { get; set; }
|
||||
|
|
@ -23,11 +30,23 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
public string ContactPhone { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Comment("用户课题组中间关系表")]
|
||||
public class HospitalGroupIdentityUser : BaseFullAuditEntity
|
||||
{
|
||||
#region 导航属性
|
||||
[JsonIgnore]
|
||||
public HospitalGroup HospitalGroup { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public IdentityUser IdentityUser { get; set; }
|
||||
#endregion
|
||||
|
||||
|
||||
public Guid HospitalGroupId { get; set; }
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue