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
1efe15a776
|
|
@ -190,9 +190,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
var _dictionaryRepository = _serviceProvider.GetService<IRepository<Dictionary>>();
|
||||
var _seriesRepository = _serviceProvider.GetService<IRepository<SCPSeries>>();
|
||||
var _studyRepository = _serviceProvider.GetService<IRepository<SCPStudy>>();
|
||||
var _studyGroupRepository = _serviceProvider.GetService<IRepository<SCPStudyHospitalGroup>>();
|
||||
|
||||
var _cmoveStudyRepository = _serviceProvider.GetService<IRepository<CmoveStudy>>();
|
||||
|
||||
var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
|
||||
var seriesModalityList = _seriesRepository.Where(t => _SCPStudyIdList.Contains(t.StudyId)).Select(t => new { SCPStudyId = t.StudyId, t.Modality, t.StudyInstanceUid }).ToList();
|
||||
|
|
@ -220,34 +218,7 @@ namespace IRaCIS.Core.SCP.Service
|
|||
|
||||
await _studyRepository.BatchUpdateNoTrackingAsync(t => t.Id == g.Key.SCPStudyId, u => new SCPStudy() { Modalities = modality, ModalityForEdit = modalityForEdit });
|
||||
|
||||
//添加课题组标签
|
||||
if (CurrentHospitalGroup != null)
|
||||
{
|
||||
if (!_studyGroupRepository.Any(t => t.SCPStudyId == g.Key.SCPStudyId && t.HospitalGroupId == CurrentHospitalGroup.Id))
|
||||
{
|
||||
await _studyGroupRepository.AddAsync(new SCPStudyHospitalGroup() { SCPStudyId = g.Key.SCPStudyId, HospitalGroupId = CurrentHospitalGroup.Id });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var findCmoveInfo = _cmoveStudyRepository.Where(t => t.StudyInstanceUIDList.Any(c => c == g.Key.StudyInstanceUid)).OrderByDescending(t => t.CreateTime).FirstOrDefault();
|
||||
|
||||
if (findCmoveInfo != null)
|
||||
{
|
||||
foreach (var item in findCmoveInfo.HopitalGroupIdList)
|
||||
{
|
||||
if (!_studyGroupRepository.Any(t => t.SCPStudyId == g.Key.SCPStudyId && t.HospitalGroupId == item))
|
||||
{
|
||||
await _studyGroupRepository.AddAsync(new SCPStudyHospitalGroup() { SCPStudyId = g.Key.SCPStudyId, HospitalGroupId = item });
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Logger.Warning($"未找到{g.Key.StudyInstanceUid}的Cmove记录");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -319,6 +290,9 @@ namespace IRaCIS.Core.SCP.Service
|
|||
var ossService = _serviceProvider.GetService<IOSSService>();
|
||||
var dicomArchiveService = _serviceProvider.GetService<IDicomArchiveService>();
|
||||
var _seriesRepository = _serviceProvider.GetService<IRepository<SCPSeries>>();
|
||||
var _studyGroupRepository = _serviceProvider.GetService<IRepository<SCPStudyHospitalGroup>>();
|
||||
|
||||
var _cmoveStudyRepository = _serviceProvider.GetService<IRepository<CmoveStudy>>();
|
||||
|
||||
var _distributedLockProvider = _serviceProvider.GetService<IDistributedLockProvider>();
|
||||
|
||||
|
|
@ -422,6 +396,39 @@ namespace IRaCIS.Core.SCP.Service
|
|||
if (!_SCPStudyIdList.Contains(scpStudyId))
|
||||
{
|
||||
_SCPStudyIdList.Add(scpStudyId);
|
||||
|
||||
#region 给检查打课题组标签
|
||||
|
||||
//添加课题组标签
|
||||
if (CurrentHospitalGroup != null)
|
||||
{
|
||||
if (!_studyGroupRepository.Any(t => t.SCPStudyId == scpStudyId && t.HospitalGroupId == CurrentHospitalGroup.Id))
|
||||
{
|
||||
await _studyGroupRepository.AddAsync(new SCPStudyHospitalGroup() { SCPStudyId = scpStudyId, HospitalGroupId = CurrentHospitalGroup.Id });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var findCmoveInfo = _cmoveStudyRepository.Where(t => t.StudyInstanceUIDList.Any(c => c == studyInstanceUid)).OrderByDescending(t => t.CreateTime).FirstOrDefault();
|
||||
|
||||
if (findCmoveInfo != null)
|
||||
{
|
||||
foreach (var item in findCmoveInfo.HopitalGroupIdList)
|
||||
{
|
||||
if (!_studyGroupRepository.Any(t => t.SCPStudyId == scpStudyId && t.HospitalGroupId == item))
|
||||
{
|
||||
await _studyGroupRepository.AddAsync(new SCPStudyHospitalGroup() { SCPStudyId = scpStudyId, HospitalGroupId = item });
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Logger.Warning($"未找到{studyInstanceUid}的Cmove记录");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
var series = await _seriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId);
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
"IsNeedChangePassWord": true,
|
||||
// 密码有效期(天),到期后必须修改
|
||||
"ChangePassWordDays": 1000,
|
||||
"OpenImageShare": true,
|
||||
"OpenImageShare": true
|
||||
},
|
||||
|
||||
"SystemEmailSendConfig": {
|
||||
|
|
|
|||
|
|
@ -36,20 +36,12 @@
|
|||
"AutoLoginOutMinutes": 120,
|
||||
"AESKey": "HIR_System_AES_Key_Info",
|
||||
"CmoveIntervalMinutes": 1,
|
||||
"CmoveInstanceIntervalMinutes": 1
|
||||
},
|
||||
"SystemHospitalConfig": {
|
||||
"HospitalCode": "EI",
|
||||
"HospitalLogoPath": "/System/GeneralDocuments/1716453306898_图片2.png",
|
||||
"TrialKeepCount": 60,
|
||||
"HospitalName": "上海展影医疗科技有限公司",
|
||||
"HospitalAliasName": "展影医疗",
|
||||
"Country": "中国",
|
||||
"City": "上海",
|
||||
"Province": "上海",
|
||||
"Address": "上海市杨浦区国泰路复旦科技园",
|
||||
"Phone": "021-60702575",
|
||||
"IsCanConnectInternet": false
|
||||
"CmoveInstanceIntervalMinutes": 1,
|
||||
// 是否强制用户定期修改密码
|
||||
"IsNeedChangePassWord": true,
|
||||
// 密码有效期(天),到期后必须修改
|
||||
"ChangePassWordDays": 1000,
|
||||
"OpenImageShare": true
|
||||
},
|
||||
"SystemEmailSendConfig": {
|
||||
"Port": 465,
|
||||
|
|
@ -57,6 +49,7 @@
|
|||
"FromEmail": "test-study@extimaging.com",
|
||||
"FromName": "Test_HIR",
|
||||
"AuthorizationCode": "zhanying123",
|
||||
"SiteUrl": "http://hir.test.extimaging.com/login"
|
||||
"SiteUrl": "http://hir.test.extimaging.com/login",
|
||||
"EmailRegexStr": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
|
||||
}
|
||||
}
|
||||
|
|
@ -491,8 +491,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.OA, t => !t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.Admin || t.UserTypeEnum == UserTypeEnum.SuperAdmin))
|
||||
|
||||
//GA 只能看有该课题组的用户,并且不是admin oa
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => !t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.Admin || t.UserTypeEnum == UserTypeEnum.SuperAdmin || t.UserTypeEnum == UserTypeEnum.OA)
|
||||
&& t.IdentityUserHospitalGroupList.Any(t => isGAGroupAdmin ? hospitalGroupAdminIdList.Contains(t.HospitalGroupId) : false))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA,
|
||||
t => /*!t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.Admin || t.UserTypeEnum == UserTypeEnum.SuperAdmin || t.UserTypeEnum == UserTypeEnum.OA) &&*/
|
||||
|
||||
t.IdentityUserHospitalGroupList.Any(t => isGAGroupAdmin ? hospitalGroupAdminIdList.Contains(t.HospitalGroupId) : false))
|
||||
.ProjectTo<UserListDTO>(_mapper.ConfigurationProvider);
|
||||
|
||||
return await userQueryable.ToPagedListAsync(inQuery);
|
||||
|
|
@ -1042,10 +1044,15 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
await _fusionCache.RemoveAsync(CacheKeys.UserToken(identityUserId));
|
||||
|
||||
var userName = await _userRoleRepository.Where(t => t.Id == userRoleId).Select(t => t.UserName).FirstOrDefaultAsync();
|
||||
var userName = await _identityUserRepository.Where(t => t.Id == identityUserId).Select(t => t.UserName).FirstOrDefaultAsync();
|
||||
|
||||
if (userName.IsNotNullOrEmpty())
|
||||
{
|
||||
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = identityUserId, ActionUserName = userName, OptType = UserOptType.LoginOut }, true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
|
||||
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin && t.UserTypeEnum != UserTypeEnum.Admin && t.UserTypeEnum != UserTypeEnum.OA)
|
||||
var query = _userRoleRepository.Where(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin && t.UserTypeEnum != UserTypeEnum.Admin && t.UserTypeEnum != UserTypeEnum.OA && t.UserTypeEnum != UserTypeEnum.GA)
|
||||
|
||||
////正式或者培训的项目 不能允许测试用户(必须正式用户) 同时必须是内部的用户
|
||||
//.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var hospitalInfo = await _fusionCache.GetOrSetAsync(CacheKeys.Hospital, _ => CacheHelper.GetHospitalCode(_hIRHospitalRepository), TimeSpan.FromDays(7));
|
||||
return await _trialRepository.AsQueryable()
|
||||
//过滤医院,切换会有问题
|
||||
.Where(t => t.HospitalId == hospitalInfo.Id)
|
||||
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin, t => t.HospitalId == hospitalInfo.Id)
|
||||
|
||||
//SuperAdmin Admin OP OA
|
||||
.WhereIf(sap.Contains(_userInfo.UserTypeEnumInt), x => trialState.Contains(x.TrialStatusStr))
|
||||
|
|
|
|||
|
|
@ -81,8 +81,10 @@ public class HospitalGroupService(IRepository<HospitalGroup> _hospitalGroupRepos
|
|||
[HttpPost]
|
||||
public async Task<PageOutput<HospitalGroupView>> GetHospitalGroupPageList(HospitalGroupQuery inQuery)
|
||||
{
|
||||
//GA 只能看到自己是管理员的课题组
|
||||
|
||||
var hospitalGroupQueryable = _hospitalGroupRepository
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => t.IdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsManager && t.IsDisabled == false))
|
||||
.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))
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ namespace IRaCIS.Application.Services
|
|||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialCode), t => t.TrialCode.Contains(inQuery.TrialCode))
|
||||
|
||||
//过滤医院,切换会有问题
|
||||
.Where(t => t.HospitalId == hospitalInfo.Id)
|
||||
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin, t => t.HospitalId == hospitalInfo.Id)
|
||||
//GA 要过滤课题组
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA && hospitalGroupAdminIdList.Any(), t => hospitalGroupAdminIdList.Contains(t.HospitalGroupId))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OA
|
||||
|
|
@ -757,15 +757,25 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
public async Task<IResponseOutput<List<PatientJoinTrialSelectView>>> GetPatientJoinTrialInitSelectList(PatientJoinTrialInitQuery inQuery)
|
||||
{
|
||||
|
||||
var currentUserHospitalGroupList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList)
|
||||
.Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => new { t.HospitalGroupId, t.IsManager }).ToList();
|
||||
|
||||
var hospitalGroupAdminIdList = currentUserHospitalGroupList.Where(t => t.IsManager).Select(t => t.HospitalGroupId).ToList();
|
||||
var hospitalGroupIdList = currentUserHospitalGroupList.Select(t => t.HospitalGroupId).ToList();
|
||||
|
||||
//排除已参与的项目列表
|
||||
var exceptQuery = _subjectPatientRepository.Where(t => t.PatientId == inQuery.PatientId).Select(t => t.Subject.TrialId);
|
||||
|
||||
//患者检查所属的课题组 要和项目进行匹配,否则过滤掉
|
||||
var hospitalGroupIdList = await _studyRepository.Where(t => t.PatientId == inQuery.PatientId).SelectMany(t => t.HospitalGroupList).Select(t => t.HospitalGroupId).Distinct().ToListAsync();
|
||||
var studyhospitalGroupIdList = await _studyRepository.Where(t => t.PatientId == inQuery.PatientId).SelectMany(t => t.HospitalGroupList).Select(t => t.HospitalGroupId).Distinct().ToListAsync();
|
||||
|
||||
var trialQuery = _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing && hospitalGroupIdList.Contains(t.HospitalGroupId))
|
||||
|
||||
var intersection = hospitalGroupIdList.Intersect(studyhospitalGroupIdList).ToList();
|
||||
|
||||
var trialQuery = _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing && intersection.Contains(t.HospitalGroupId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Filter), t => t.ResearchProgramNo.Contains(inQuery.Filter) || t.ExperimentName.Contains(inQuery.Filter))
|
||||
.Where(t => t.TrialUserRoleList.Any(c => c.UserId == _userInfo.UserRoleId))
|
||||
.Where(t => t.TrialUserRoleList.Any(c => c.UserId == _userInfo.UserRoleId) && t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId))
|
||||
.Where(t => !exceptQuery.Any(c => c == t.Id)).ProjectTo<PatientJoinTrialSelectView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var list = trialQuery.ToList();
|
||||
|
|
@ -2593,7 +2603,11 @@ namespace IRaCIS.Application.Services
|
|||
[HttpPost]
|
||||
public async Task<List<VisitPatientStudyView>> GetPatientOtherStudyList(PatientStudyOtherQuery inQuery)
|
||||
{
|
||||
|
||||
var trialHospitalGroupId = await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.HospitalGroupId).FirstOrDefaultAsync();
|
||||
|
||||
var query = from scpStudy in _studyRepository.Where(t => inQuery.PatientIdList.Contains(t.PatientId) && !t.SCPStudySubjectVisitList.Any(t => (t.SubjectVisitId == inQuery.SujectVisitId || t.SubjectVisit.SubmitState == SubmitStateEnum.Submitted) && t.TrialId == inQuery.TrialId))
|
||||
.Where(t => t.HospitalGroupList.Any(t => t.HospitalGroupId == trialHospitalGroupId))
|
||||
.WhereIf(inQuery.EarliestStudyTime != null, t => t.StudyTime >= inQuery.EarliestStudyTime)
|
||||
.WhereIf(inQuery.LatestStudyTime != null, t => t.StudyTime <= inQuery.LatestStudyTime)
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.PatientIdStr), t => t.PatientIdStr.Contains(inQuery.PatientIdStr))
|
||||
|
|
@ -2718,7 +2732,10 @@ namespace IRaCIS.Application.Services
|
|||
// });
|
||||
#endregion
|
||||
|
||||
var trialHospitalGroupId = await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => t.HospitalGroupId).FirstOrDefaultAsync();
|
||||
|
||||
var query = from scpStudy in _studyRepository.Where(t => !t.SCPStudySubjectVisitList.Any(t => t.SubjectVisit.SubmitState == SubmitStateEnum.Submitted && t.TrialId == inQuery.TrialId))
|
||||
.Where(t => t.HospitalGroupList.Any(t => t.HospitalGroupId == trialHospitalGroupId))
|
||||
.WhereIf(inQuery.IsBindedVisit == false, t => !t.SCPStudySubjectVisitList.Any(t => t.TrialId == inQuery.TrialId))
|
||||
.WhereIf(inQuery.IsBindedVisit == true, t => t.SCPStudySubjectVisitList.Any(t => t.TrialId == inQuery.TrialId))
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.VisitName), t => t.SCPStudySubjectVisitList.Any(t => t.TrialId == inQuery.TrialId && t.SubjectVisit.VisitName.Contains(inQuery.VisitName)))
|
||||
|
|
|
|||
|
|
@ -300,6 +300,24 @@ namespace IRaCIS.Core.Application.Service
|
|||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
public async Task<IResponseOutput> NewUserHospitalGroup(
|
||||
[FromServices] IRepository<SCPStudyHospitalGroup> _SCPStudyHospitalGroupRepository,
|
||||
[FromServices] IRepository<SCPStudy> _SCPStudyRepository, Guid hospitalGroupId)
|
||||
{
|
||||
|
||||
var scpStudyIdList = _SCPStudyRepository.Where().Select(t => t.Id).ToList();
|
||||
|
||||
foreach (var item in scpStudyIdList)
|
||||
{
|
||||
await _SCPStudyHospitalGroupRepository.AddAsync(new SCPStudyHospitalGroup() { SCPStudyId = item, HospitalGroupId = hospitalGroupId });
|
||||
}
|
||||
|
||||
await _SCPStudyRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 外部人员 中心调研人员维护
|
||||
/// </summary>
|
||||
|
|
|
|||
Loading…
Reference in New Issue