增加项目课题组,缓存bug修改
continuous-integration/drone/push Build is passing Details

Test_HIR_Net8
hang 2025-08-18 18:04:28 +08:00
parent f409c6468e
commit a7db0c2887
22 changed files with 19304 additions and 70 deletions

View File

@ -39,7 +39,8 @@ namespace IRaCIS.Core.Application.Auth
new Claim(JwtIRaCISClaimType.UserTypeShortName,user.UserTypeShortName),
new Claim(JwtIRaCISClaimType.PermissionStr,user.PermissionStr),
new Claim(JwtIRaCISClaimType.IsZhiZhun,user.IsZhiZhun.ToString()),
new Claim(JwtIRaCISClaimType.IsTestUser,user.IsTestUser.ToString())
new Claim(JwtIRaCISClaimType.IsTestUser,user.IsTestUser.ToString()),
new Claim(JwtIRaCISClaimType.HospitalGroupList,user.HospitalGroupList.ToJsonStr())
};
////创建令牌

View File

@ -23,5 +23,7 @@ namespace IRaCIS.Core.Application.Auth
public bool IsZhiZhun { get; set; }
public string UserTypeShortName { get; set; } = string.Empty;
public List<HospitalGroupInfo> HospitalGroupList { get; set; } = new List<HospitalGroupInfo>();
}
}

View File

@ -120,7 +120,7 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _
trialIdStr = matchResult.Value;
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), async _ =>await CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
if (string.IsNullOrWhiteSpace(trialInfo?.TrialStatusStr))
{
@ -152,9 +152,9 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _
//通过path 或者body 找到trialId 了
if (!string.IsNullOrWhiteSpace(trialIdStr))
{
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), async _ => await CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, async _ => await CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
var trialStatusStr = string.Empty;

View File

@ -128,7 +128,7 @@ public class TrialGlobalLimitEndpointFilter(IFusionCache _fusionCache, IUserInfo
trialIdStr = matchResult.Value;
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), async _ => await CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
if (string.IsNullOrWhiteSpace(trialInfo?.TrialStatusStr))
{
@ -158,9 +158,9 @@ public class TrialGlobalLimitEndpointFilter(IFusionCache _fusionCache, IUserInfo
//通过path 或者body 找到trialId 了
if (!string.IsNullOrWhiteSpace(trialIdStr))
{
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), async _ => await CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
var trialInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Trial(trialIdStr), _ => CacheHelper.GetTrialStatusAsync(Guid.Parse(trialIdStr), _trialRepository), TimeSpan.FromDays(7));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, async _ => await CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
var trialStatusStr = string.Empty;

View File

@ -18216,6 +18216,13 @@
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.PatientService.ModifySCPStudyHospitalGroup(IRaCIS.Application.Contracts.SCPStudyHospitalGroupCommand)">
<summary>
修改检查课题组 1是添加 2是删除
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.PatientService.DeletePatientStudyAllData(System.Guid,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SCPSeries},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SCPInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomSeries},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Application.Helper.IOSSService)">
<summary>
清除该患者绑定的受试者的所有的数据、(subject subjectVisit visitTask dicom)

View File

@ -56,7 +56,7 @@ namespace IRaCIS.Core.Application.Services
}
var anonymizeList = await _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, async _ => await CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7));
var anonymizeList = await _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7));
var fixedFiledList = anonymizeList.Where(t => t.IsFixed).ToList();
var ircFiledList = anonymizeList.Where(t => t.IsFixed == false).ToList();

View File

@ -782,7 +782,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
// 写入dicom 固定的信息,以及组织路径的信息 以及匿名化的信息
var otherData = GetSaveToDicomInfo(verifyInfo.SubjectVisitId);
var anonymizeList = _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, async _ => await CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7)).Result;
var anonymizeList = _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7)).Result;
return ResponseOutput.Ok<List<VerifyStudyUploadResult>>(result, new
{

View File

@ -82,6 +82,8 @@ namespace IRaCIS.Application.Contracts
public class UserBasicInfo
{
public List<HospitalGroupInfo> HospitalGroupList { get; set; }
public Guid IdentityUserId { get; set; }

View File

@ -287,7 +287,7 @@ namespace IRaCIS.Core.Application.Service
public async Task<IResponseOutput> ResetPassword(Guid identityUserId)
{
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, async _ => await CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
//var pwd = IRCEmailPasswordHelper.GenerateRandomPassword(10);
@ -511,7 +511,7 @@ namespace IRaCIS.Core.Application.Service
[UnitOfWork]
public async Task<IResponseOutput<UserAddedReturnDTO>> AddUser(UserCommand userAddModel)
{
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, async _ => await CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
if (userAddModel.UserName.IsNotNullOrEmpty())
{
@ -975,7 +975,7 @@ namespace IRaCIS.Core.Application.Service
[HttpGet("{email}/{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));
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hirHospitalRepository), TimeSpan.FromDays(7));
if (hospitalInfo.IsCanConnectInternet)
{
@ -1255,6 +1255,14 @@ namespace IRaCIS.Core.Application.Service
PermissionStr = t.UserTypeRole.PermissionStr,
UserName = t.IdentityUser.UserName,
UserTypeShortName = t.UserTypeRole.UserTypeShortName,
HospitalGroupList = t.IdentityUser.IdentityUserHospitalGroupList.Select(t => new HospitalGroupInfo()
{
Id = t.HospitalGroupId,
Name = t.HospitalGroup.Name,
Code = t.HospitalGroup.Code
}).ToList()
}).FirstOrDefaultAsync();
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = userTokenInfo.IdentityUserId, ActionUserName = $"{userTokenInfo.UserName}", ActionUserType = userTokenInfo.UserTypeShortName, OptType = UserOptType.LoginSelectRole }, true);

View File

@ -142,7 +142,9 @@ namespace IRaCIS.Core.Application.Service
CreateMap<UserCommand, IdentityUser>();
CreateMap<IdentityUser, UserBasicInfo>()
.ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t.Id));
.ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t.Id))
.ForMember(d => d.HospitalGroupList, c => c.MapFrom(t => t.IdentityUserHospitalGroupList.Select(t => t.HospitalGroup)))
;
CreateMap<UserRole, IdentityUserTypeDTO>()
.ForMember(d => d.UserTypeShortName, c => c.MapFrom(t => t.UserTypeRole.UserTypeShortName));

View File

@ -45,14 +45,16 @@ namespace IRaCIS.Core.Application.Service.MinimalApiService
//对于json 对象 不能使用count any 操作,但是简单的类型可以的
var jobjectList = _testLengthRepository.AsQueryable().ToList();
var jobjectList1 = _testLengthRepository.AsQueryable().Where(t=>t.TestJsonObjectLsit.Any(c=>c.Name=="name1")).ToList();
//var jobjectList1 = _testLengthRepository.AsQueryable().Where(t=>t.TestJsonObjectLsit.Any(c=>c.Name=="name1")).ToList();
var jobjectList2 = _testLengthRepository.AsQueryable().Where(t => t.TestJsonObjectLsit.Any(c => c.Name == "name1")).SelectMany(t=>t.TestJsonObjectLsit).ToList();
//var jobjectList2 = _testLengthRepository.AsQueryable().Where(t => t.TestJsonObjectLsit.Any(c => c.Name == "name1")).SelectMany(t=>t.TestJsonObjectLsit).ToList();
var d1 = _testLengthRepository.Where(t => t.StringList.Any(t => t == "string1")).ToList();
var d2 = _testLengthRepository.Where(t => t.StringList.Contains("string1")).ToList();
var d21 = _testLengthRepository.Where().Select(t=>t.StringList).ToList();
//selectMany 报错 不支持
//var d20 = _testLengthRepository.Where(t => t.StringList.Contains("string1")).SelectMany(t => t.StringList).ToList();

View File

@ -104,7 +104,7 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task<PageOutput<TrialUserRoleScreeningDto>> GetTrialUserScreeningList(TrialUserQuery inQuery)
{
var trialType = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
var hospitalGroupId = _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.HospitalGroupId).FirstOrDefault();
var userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.ClinicalResearchCoordinator, UserTypeEnum.CRA, UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA, UserTypeEnum.MW, UserTypeEnum.MC };
@ -125,7 +125,7 @@ namespace IRaCIS.Core.Application.Service
//.Where(t => userTypeEnums.Contains(t.UserTypeEnum))
.Where(t => t.IdentityUser.IdentityUserHospitalGroupList.Any(t => t.HospitalGroupId == hospitalGroupId))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserRealName), t => (t.IdentityUser.FullName).Contains(inQuery.UserRealName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.IdentityUser.UserName.Contains(inQuery.UserName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.IdentityUser.OrganizationName.Contains(inQuery.OrganizationName))

View File

@ -154,6 +154,8 @@ namespace IRaCIS.Application.Contracts
public DateTime? AuthorizationDate { get; set; }
public Guid HospitalGroupId { get; set; }
}
public class PatientJoinTrialInitQuery : PageInput
@ -269,6 +271,13 @@ namespace IRaCIS.Application.Contracts
public int? StudyCount { get; set; }
public List<PatientTrialStatInfo> TrialList { get; set; }
public List<string> StudyHospitalGroupList { get; set; }
public List<string> CurrentUserHospitalGroupList { get; set; } = new List<string>();
public List<string> ViewHospitalGroupList => StudyHospitalGroupList.Except(CurrentUserHospitalGroupList).ToList();
}
public class PatientTrialStatInfo
@ -513,6 +522,14 @@ namespace IRaCIS.Application.Contracts
public string? Modalities { get; set; }
}
public class SCPStudyHospitalGroupCommand
{
public Guid HospitalGroupId { get; set; }
public List<Guid> SCPstudyIdList { get; set; }
public int AddOrDelete { get; set; }
}
public class PatientStudyQuery : PageInput
{
[NotDefault]
@ -1048,9 +1065,19 @@ namespace IRaCIS.Application.Contracts
public string CallingAE { get; set; } = string.Empty;
public List<SCPStudyHospitalGroupInfo> HospitalGroupList { get; set; }
public List<HospitalGroupInfo> CurrentUserHospitalGroupList { get; set; }
public List<SCPStudyHospitalGroupInfo> ViewHospitalGroupList => HospitalGroupList.Where(t => CurrentUserHospitalGroupList.Any(c => c.Id == t.Id)).ToList();
}
public class SCPStudyHospitalGroupInfo
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class PatientSeriesDTO
{

View File

@ -59,7 +59,7 @@ namespace IRaCIS.Application.Services
{
[ApiExplorerSettings(GroupName = "HIR")]
public class PatientService(IRepository<SCPStudySubjectVisit> _studySubjectVisitRepository,
IRepository<SubjectPatient> _subjectPatientRepository,
IRepository<SubjectPatient> _subjectPatientRepository, IRepository<SCPStudyHospitalGroup> _SCPStudyHospitalGroupRepository,
IRepository<Trial> _trialRepository,
IRepository<SCPPatient> _patientRepository,
IRepository<SCPStudy> _studyRepository,
@ -601,8 +601,10 @@ namespace IRaCIS.Application.Services
var isAdminOrOA = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.Admin || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin;
var currentUserHospitalGroupIdList = _userInfo.HospitalGroupList.Select(t => t.Id).ToList();
#region new ok
var query = _patientRepository
var query = _patientRepository.Where(t => isAdminOrOA ? true : t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientIdStr), t => t.PatientIdStr.Contains(inQuery.PatientIdStr))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientName), t => t.PatientName.Contains(inQuery.PatientName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), t => t.SubjectPatientList.Any(t => t.Subject.Trial.ExperimentName.Contains(inQuery.ExperimentName)))
@ -637,7 +639,7 @@ namespace IRaCIS.Application.Services
PatientIdStr = patient.PatientIdStr,
PatientSex = patient.PatientSex,
StudyCount = patient.SCPStudyList.Count(),
StudyCount = patient.SCPStudyList.Where(t => isAdminOrOA ? true : t.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))).Count(),
TrialList = patient.SubjectPatientList.Where(t => isAdminOrOA ? true : t.Subject.Trial.TrialUserList.Any(t => t.UserId == _userInfo.UserRoleId)).Select(c => new PatientTrialStatInfo()
{
@ -645,12 +647,27 @@ namespace IRaCIS.Application.Services
VisitCount = c.Subject.SubjectVisitList.Count()
}).ToList(),
StudyHospitalGroupList = patient.SCPStudyList.SelectMany(t => t.HospitalGroupList).Select(t => t.HospitalGroup.Name).Distinct().ToList()
};
var pageList = await resultQuery.ToPagedListAsync(inQuery, nameof(PatientQueryView.PatientIdStr));
foreach (var item in pageList.CurrentPageData)
{
if (isAdminOrOA)
{
//不处理,默认看所有
}
else
{
item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => t.Name).ToList();
}
}
#endregion
@ -731,7 +748,12 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task<PageOutput<PatientStudySimpleView>> GetPatientStudyList(PatientStudyInfoQuery inQuery)
{
var isAdminOrOA = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.Admin || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin;
var currentUserHospitalGroupIdList = _userInfo.HospitalGroupList.Select(t => t.Id).ToList();
var query = from scpStudy in _studyRepository.Where(t => t.PatientId == inQuery.PatientId)
.Where(t => isAdminOrOA ? true : t.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId)))
.WhereIf(inQuery.EarliestStudyTime != null, t => t.StudyTime >= inQuery.EarliestStudyTime)
.WhereIf(inQuery.LatestStudyTime != null, t => t.StudyTime <= inQuery.LatestStudyTime)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Modalities), t => t.Modalities.Contains(inQuery.Modalities))
@ -747,14 +769,62 @@ namespace IRaCIS.Application.Services
SCPStudyId = scpStudy.Id,
SeriesCount = scpStudy.SeriesCount,
StudyTime = scpStudy.StudyTime,
HospitalGroupList = scpStudy.HospitalGroupList.Select(t => new SCPStudyHospitalGroupInfo()
{
Id = t.HospitalGroupId,
Name = t.HospitalGroup.Name
}).ToList()
};
var pageList = await query.ToPagedListAsync(inQuery, nameof(PatientStudySimpleView.StudyTime));
foreach (var item in pageList.CurrentPageData)
{
if (isAdminOrOA)
{
//不处理,默认看所有
}
else
{
item.CurrentUserHospitalGroupList = _userInfo.HospitalGroupList.Select(t => new HospitalGroupInfo() { Id = t.Id, Code = t.Code, Name = t.Name }).ToList();
}
}
return pageList;
}
/// <summary>
/// 修改检查课题组 1是添加 2是删除
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> ModifySCPStudyHospitalGroup(SCPStudyHospitalGroupCommand incommand)
{
if (incommand.AddOrDelete == 1)
{
//添加
foreach (var item in incommand.SCPstudyIdList)
{
await _SCPStudyHospitalGroupRepository.AddAsync(new SCPStudyHospitalGroup() { SCPStudyId = item, HospitalGroupId = incommand.HospitalGroupId });
}
}
else
{
//删除
foreach (var item in incommand.SCPstudyIdList)
{
await _SCPStudyHospitalGroupRepository.DeleteFromQueryAsync(t => t.HospitalGroupId == incommand.HospitalGroupId && t.SCPStudyId == item);
}
}
await _SCPStudyHospitalGroupRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
public async Task<IResponseOutput<List<PatientSeriesDTO>>> GetPatientSeriesList(Guid scpStudyId,
[FromServices] IRepository<SCPSeries> _seriesRepository,

View File

@ -6,6 +6,8 @@ public class SCPStudy : BaseFullDeleteAuditEntity, IEntitySeqId
{
#region 导航属性
[JsonIgnore]
public List<SCPStudyHospitalGroup> HospitalGroupList { get; set; }
[JsonIgnore]
public List<SCPStudySubjectVisit> SCPStudySubjectVisitList { get; set; }
@ -65,6 +67,7 @@ public class SCPStudy : BaseFullDeleteAuditEntity, IEntitySeqId
public bool IsUploadFinished { get; set; }
#region HIR 注释
//public Guid TrialId { get; set; }
//public Guid TrialSiteId { get; set; }
@ -73,3 +76,18 @@ public class SCPStudy : BaseFullDeleteAuditEntity, IEntitySeqId
#endregion
}
public class SCPStudyHospitalGroup : BaseFullAuditEntity
{
#region MyRegion
[JsonIgnore]
public HospitalGroup HospitalGroup { get; set; }
[JsonIgnore]
public SCPStudy SCPStudy { get; set; }
#endregion
public Guid HospitalGroupId { get; set; }
public Guid SCPStudyId { get; set; }
}

View File

@ -175,5 +175,16 @@ namespace IRaCIS.Core.Domain.Models
public class CmoveStudy : BaseFullAuditEntity
{
public List<string> StudyInstanceUID { get; set; }
public string CallingAE { get; set; }
public string CalledAE { get; set; }
public List<Guid> HopitalGroupIdList { get; set; }
}
}

View File

@ -303,6 +303,10 @@ public partial class Trial : BaseFullDeleteAuditEntity
[NotMapped]
public List<CriterionType> CriterionTypeList => CriterionTypes.Split('|', StringSplitOptions.RemoveEmptyEntries)
.Select(s => Enum.Parse(typeof(CriterionType), s)).Cast<CriterionType>().ToList();
public Guid HospitalGroupId { get; set; }
#endregion
}

View File

@ -1,11 +1,13 @@
namespace IRaCIS.Core.Domain.Share
using static IRaCIS.Core.Domain.Share.UserInfo;
namespace IRaCIS.Core.Domain.Share
{
/// <summary>
/// 用户信息接口
/// </summary>
public interface IUserInfo
{
List<HospitalGroupInfo> HospitalGroupList { get; }
Guid UserRoleId { get; }
Guid IdentityUserId { get; }

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Http;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Http;
namespace IRaCIS.Core.Domain.Share
{
@ -46,6 +47,19 @@ namespace IRaCIS.Core.Domain.Share
}
}
public List<HospitalGroupInfo> HospitalGroupList
{
get
{
var hospitalGroupList = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.HospitalGroupList);
if (hospitalGroupList != null && !string.IsNullOrEmpty(hospitalGroupList.Value))
{
return (List<HospitalGroupInfo>) hospitalGroupList.Value.JsonStrToObject(typeof(List<HospitalGroupInfo>));
}
return new List<HospitalGroupInfo>();
}
}
public Guid UserTypeId
{
get
@ -300,7 +314,13 @@ namespace IRaCIS.Core.Domain.Share
}
}
public class HospitalGroupInfo
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
}
public Guid? SignId
{
@ -369,6 +389,8 @@ namespace IRaCIS.Core.Domain.Share
public const string PermissionStr = "permissionStr";
public const string HospitalGroupList = "hospitalGroupList";
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,167 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class addGroupField : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_IdentityUser_User_CreateUserId",
table: "IdentityUser");
migrationBuilder.DropForeignKey(
name: "FK_User_User_CreateUserId",
table: "User");
migrationBuilder.DropIndex(
name: "IX_User_CreateUserId",
table: "User");
migrationBuilder.DropIndex(
name: "IX_IdentityUser_CreateUserId",
table: "IdentityUser");
migrationBuilder.AddColumn<Guid>(
name: "HospitalGroupId",
table: "Trial",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
migrationBuilder.CreateTable(
name: "SCPStudyHospitalGroup",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
HospitalGroupId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
SCPStudyId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
CreateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
CreateTime = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
UpdateTime = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SCPStudyHospitalGroup", x => x.Id);
table.ForeignKey(
name: "FK_SCPStudyHospitalGroup_HospitalGroup_HospitalGroupId",
column: x => x.HospitalGroupId,
principalTable: "HospitalGroup",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_SCPStudyHospitalGroup_SCPStudy_SCPStudyId",
column: x => x.SCPStudyId,
principalTable: "SCPStudy",
principalColumn: "SeqId",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_SCPStudyHospitalGroup_User_CreateUserId",
column: x => x.CreateUserId,
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_HospitalGroupIdentityUser_HospitalGroupId",
table: "HospitalGroupIdentityUser",
column: "HospitalGroupId");
migrationBuilder.CreateIndex(
name: "IX_HospitalGroupIdentityUser_IdentityUserId",
table: "HospitalGroupIdentityUser",
column: "IdentityUserId");
migrationBuilder.CreateIndex(
name: "IX_SCPStudyHospitalGroup_CreateUserId",
table: "SCPStudyHospitalGroup",
column: "CreateUserId");
migrationBuilder.CreateIndex(
name: "IX_SCPStudyHospitalGroup_HospitalGroupId",
table: "SCPStudyHospitalGroup",
column: "HospitalGroupId");
migrationBuilder.CreateIndex(
name: "IX_SCPStudyHospitalGroup_SCPStudyId",
table: "SCPStudyHospitalGroup",
column: "SCPStudyId");
migrationBuilder.AddForeignKey(
name: "FK_HospitalGroupIdentityUser_HospitalGroup_HospitalGroupId",
table: "HospitalGroupIdentityUser",
column: "HospitalGroupId",
principalTable: "HospitalGroup",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_HospitalGroupIdentityUser_IdentityUser_IdentityUserId",
table: "HospitalGroupIdentityUser",
column: "IdentityUserId",
principalTable: "IdentityUser",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_HospitalGroupIdentityUser_HospitalGroup_HospitalGroupId",
table: "HospitalGroupIdentityUser");
migrationBuilder.DropForeignKey(
name: "FK_HospitalGroupIdentityUser_IdentityUser_IdentityUserId",
table: "HospitalGroupIdentityUser");
migrationBuilder.DropTable(
name: "SCPStudyHospitalGroup");
migrationBuilder.DropIndex(
name: "IX_HospitalGroupIdentityUser_HospitalGroupId",
table: "HospitalGroupIdentityUser");
migrationBuilder.DropIndex(
name: "IX_HospitalGroupIdentityUser_IdentityUserId",
table: "HospitalGroupIdentityUser");
migrationBuilder.DropColumn(
name: "HospitalGroupId",
table: "Trial");
migrationBuilder.CreateIndex(
name: "IX_User_CreateUserId",
table: "User",
column: "CreateUserId");
migrationBuilder.CreateIndex(
name: "IX_IdentityUser_CreateUserId",
table: "IdentityUser",
column: "CreateUserId");
migrationBuilder.AddForeignKey(
name: "FK_IdentityUser_User_CreateUserId",
table: "IdentityUser",
column: "CreateUserId",
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_User_User_CreateUserId",
table: "User",
column: "CreateUserId",
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}

View File

@ -17,7 +17,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.10")
.HasAnnotation("ProductVersion", "8.0.19")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
@ -2858,6 +2858,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasIndex("CreateUserId");
b.HasIndex("HospitalGroupId");
b.HasIndex("IdentityUserId");
b.ToTable("HospitalGroupIdentityUser", t =>
{
t.HasComment("用户课题组中间关系表");
@ -2990,8 +2994,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.HasIndex("TrialId");
b.ToTable("IdentityUser", t =>
@ -8057,6 +8059,40 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudyHospitalGroup", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("HospitalGroupId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("SCPStudyId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
b.Property<Guid>("UpdateUserId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.HasIndex("HospitalGroupId");
b.HasIndex("SCPStudyId");
b.ToTable("SCPStudyHospitalGroup");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudySubjectVisit", b =>
{
b.Property<Guid>("Id")
@ -10712,6 +10748,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.HasColumnType("nvarchar(400)")
.HasComment("负责人PI");
b.Property<Guid>("HospitalGroupId")
.HasColumnType("uniqueidentifier");
b.Property<string>("Indication")
.IsRequired()
.HasMaxLength(400)
@ -13375,8 +13414,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.HasIndex("DoctorId")
.IsUnique()
.HasFilter("[DoctorId] IS NOT NULL");
@ -14983,23 +15020,31 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.HospitalGroup", "HospitalGroup")
.WithMany("IdentityUserList")
.HasForeignKey("HospitalGroupId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "IdentityUser")
.WithMany("IdentityUserHospitalGroupList")
.HasForeignKey("IdentityUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CreateUserRole");
b.Navigation("HospitalGroup");
b.Navigation("IdentityUser");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.Trial", "Trial")
.WithMany()
.HasForeignKey("TrialId");
b.Navigation("CreateUserRole");
b.Navigation("Trial");
});
@ -16334,6 +16379,33 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("TrialSite");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudyHospitalGroup", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.HospitalGroup", "HospitalGroup")
.WithMany()
.HasForeignKey("HospitalGroupId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.SCPStudy", "SCPStudy")
.WithMany("HospitalGroupList")
.HasForeignKey("SCPStudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CreateUserRole");
b.Navigation("HospitalGroup");
b.Navigation("SCPStudy");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudySubjectVisit", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
@ -17883,7 +17955,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialUserRole", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany("UserTrials")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -18003,12 +18075,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserRole", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.Doctor", null)
.WithOne("User")
.HasForeignKey("IRaCIS.Core.Domain.Models.UserRole", "DoctorId");
@ -18020,13 +18086,11 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole")
.WithMany("UserList")
.WithMany()
.HasForeignKey("UserTypeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CreateUserRole");
b.Navigation("IdentityUser");
b.Navigation("UserTypeRole");
@ -18402,8 +18466,15 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("DoctorList");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.HospitalGroup", b =>
{
b.Navigation("IdentityUserList");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b =>
{
b.Navigation("IdentityUserHospitalGroupList");
b.Navigation("UserRoleList");
b.Navigation("UserTrialList");
@ -18500,6 +18571,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
modelBuilder.Entity("IRaCIS.Core.Domain.Models.SCPStudy", b =>
{
b.Navigation("HospitalGroupList");
b.Navigation("InstanceList");
b.Navigation("SCPStudySubjectVisitList");
@ -18703,15 +18776,11 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
{
b.Navigation("UserRoleTrials");
b.Navigation("UserTrials");
b.Navigation("VisitTaskList");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.UserType", b =>
{
b.Navigation("UserList");
b.Navigation("UserTypeGroupList");
b.Navigation("UserTypeMenuList");