//-------------------------------------------------------------------- // 此代码由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 _hospitalGroupRepository, IRepository _hospitalGroupTagRepository, IRepository _patientHospitalGroupTagRepository, IRepository _identityUserRepository, IRepository _hospitalGroupIdentityUserRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IHospitalGroupService { /// /// GA用户列表 /// /// public async Task> GetGAUserList(Guid hospitalGroupId, bool isAdd) { var list = await _identityUserRepository.Where(t => t.UserRoleList.Any(t => t.UserTypeEnum == UserTypeEnum.GA /*&& t.IsUserRoleDisabled == false*/) && t.IdentityUserHospitalGroupList.Any(t => t.HospitalGroupId == hospitalGroupId /*&& t.IsDisabled == false*/) /*&& t.Status==UserStateEnum.Enable*/) .ProjectTo(_mapper.ConfigurationProvider, new { hostpitalGroupId = hospitalGroupId }).ToListAsync(); return list; } /// /// 不分页课题组列表 /// /// /// [HttpPost] public async Task> GetHospitalGroupList(HospitalGroupQuery inQuery) { var currentUserHospitalGroupIdList = new List(); if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager) { currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList) .Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => t.HospitalGroupId).ToList(); } else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA) { currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList) .Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable && t.IsManager).Select(t => t.HospitalGroupId).ToList(); } var hospitalGroupQueryable = _hospitalGroupRepository.Where(t => t.IsEnable == true)//都是查询启用的 .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)) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA, t => currentUserHospitalGroupIdList.Contains(t.Id)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE)) //.WhereIf(inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await hospitalGroupQueryable.SortToListAsync(inQuery); return pageList; } /// /// 分页课题组列表 /// /// /// [HttpPost] public async Task> 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)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactPhone), t => t.ContactPhone.Contains(inQuery.ContactPhone)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.ContactName), t => t.ContactName.Contains(inQuery.ContactName)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE)) .WhereIf(!inQuery.IsEnable != null, t => t.IsEnable == inQuery.IsEnable) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await hospitalGroupQueryable.ToPagedListAsync(inQuery); return pageList; } public async Task AddOrUpdateHospitalGroup(HospitalGroupAddOrEdit addOrEditHospitalGroup) { var verifyExp1 = new EntityVerifyExp() { VerifyExp = u => u.Code == addOrEditHospitalGroup.Code, VerifyMsg = _localizer["HospitalGroup_DuplicateCode"] }; if (addOrEditHospitalGroup.Id == null) { var addEntity = _mapper.Map(addOrEditHospitalGroup); var newEntity = await _hospitalGroupRepository.AddAsync(addEntity, true, verifyExp1); return ResponseOutput.Ok(newEntity.Id.ToString()); } else { var gaAdminList = _hospitalGroupRepository.Where(t => t.Id == addOrEditHospitalGroup.Id).SelectMany(t => t.IdentityUserList.Where(t => t.IsManager)).Select(t => t.IdentityUserId).ToList(); var entity = await _hospitalGroupRepository.UpdateFromDTOAsync(addOrEditHospitalGroup, true, false, verifyExp1); await _hospitalGroupIdentityUserRepository.BatchUpdateNoTrackingAsync(t => gaAdminList.Contains(t.IdentityUserId) && t.HospitalGroupId == addOrEditHospitalGroup.Id, u => new HospitalGroupIdentityUser() { IsManager = false }); await _hospitalGroupIdentityUserRepository.BatchUpdateNoTrackingAsync(t => addOrEditHospitalGroup.IdentityUserIdList.Contains(t.IdentityUserId) && t.HospitalGroupId == addOrEditHospitalGroup.Id, u => new HospitalGroupIdentityUser() { IsManager = true }); await _hospitalGroupIdentityUserRepository.SaveChangesAsync(); } return ResponseOutput.Ok(); } [HttpDelete("{hospitalGroupId:guid}")] public async Task DeleteHospitalGroup(Guid hospitalGroupId) { if (_hospitalGroupIdentityUserRepository.Any(t => t.HospitalGroupId == hospitalGroupId && t.IsManager == false)) { return ResponseOutput.NotOk(_localizer["HospitalGroup_ExistUser"]); } var success = await _hospitalGroupRepository.DeleteFromQueryAsync(t => t.Id == hospitalGroupId); await _hospitalGroupIdentityUserRepository.DeleteFromQueryAsync(t => t.Id == hospitalGroupId && t.IsManager, true); return ResponseOutput.Ok(); } #region 课题组标签 /// /// 添加编辑 课题组标签 /// /// /// public async Task AddOrUpdateHospitalGroupTag(HospitalGroupTagAddOrEdit addOrEditHospitalGroupTag) { var verifyExp1 = new EntityVerifyExp() { VerifyExp = u => u.Name == addOrEditHospitalGroupTag.Name, VerifyMsg = _localizer["HospitalGroup_DuplicateTagName"] }; var entity = await _hospitalGroupTagRepository.InsertOrUpdateAsync(addOrEditHospitalGroupTag, true, verifyExp1); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除课题组标签 /// /// /// [HttpDelete("{hospitalGroupTagId:guid}")] public async Task DeleteHospitalGroupTag(Guid hospitalGroupTagId) { if (_patientHospitalGroupTagRepository.Any(t => t.HospitalGroupTagId == hospitalGroupTagId)) { return ResponseOutput.NotOk(_localizer["HospitalGroup_PatientHaveBindTag"]); } var success = await _hospitalGroupTagRepository.DeleteFromQueryAsync(t => t.Id == hospitalGroupTagId); return ResponseOutput.Ok(); } /// /// 给 患者添加 或者删除 课题组标签 1是添加 2 是删除 /// /// public async Task AddPatientHospitalGroupTag(AddOrDeletePatientHospitalGroupTag inCommand) { if (inCommand.AddOrDelete == 1) { if (!_patientHospitalGroupTagRepository.Any(t => t.HospitalGroupTagId == inCommand.HospitalGroupTagId)) { await _patientHospitalGroupTagRepository.InsertFromDTOAsync(inCommand); } } else { await _patientHospitalGroupTagRepository.DeleteFromQueryAsync(t => t.PatientId == inCommand.PatientId && t.HospitalGroupTagId == inCommand.HospitalGroupTagId); } return ResponseOutput.Ok(); } /// /// 获取当前登录用户课题组标签下拉框 /// /// public List GetHospitalGroupTagList() { var currentUserHospitalGroupIdList = new List(); if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager) { currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList) .Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable).Select(t => t.HospitalGroupId).ToList(); } else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.GA) { currentUserHospitalGroupIdList = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).SelectMany(t => t.IdentityUserHospitalGroupList) .Where(t => t.IsDisabled == false && t.HospitalGroup.IsEnable && t.IsManager).Select(t => t.HospitalGroupId).ToList(); } var list = _hospitalGroupTagRepository.Where(t => currentUserHospitalGroupIdList.Contains(t.HospitalGroupId)) .Select(t => new HospitalGroupAndTagSelectView() { HospitalGroupId = t.HospitalGroupId, HospitalGroupName = t.HospitalGroup.Name, HospitalGroupTagId = t.HospitalGroupId, HospitalGroupTagName = t.Name }).OrderBy(t => t.HospitalGroupName).ThenBy(t => t.HospitalGroupTagName).ToList(); return list; } #endregion }