irc-netcore-api/IRaCIS.Core.Application/Service/Visit/HospitalGroupService.cs

260 lines
12 KiB
C#

//--------------------------------------------------------------------
// 此代码由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<HospitalGroupTag> _hospitalGroupTagRepository,
IRepository<PatientHospitalGroupTag> _patientHospitalGroupTagRepository,
IRepository<IdentityUser> _identityUserRepository, IRepository<HospitalGroupIdentityUser> _hospitalGroupIdentityUserRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IHospitalGroupService
{
/// <summary>
/// GA用户列表
/// </summary>
/// <returns></returns>
public async Task<List<UserHospitalGroupAdminInfo>> 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<UserHospitalGroupAdminInfo>(_mapper.ConfigurationProvider, new { hostpitalGroupId = hospitalGroupId }).ToListAsync();
return list;
}
/// <summary>
/// 不分页课题组列表
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<HospitalGroupView>> GetHospitalGroupList(HospitalGroupQuery inQuery)
{
var currentUserHospitalGroupIdList = new List<Guid>();
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<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)
{
//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<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);
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<IResponseOutput> 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 课题组标签
/// <summary>
/// 添加编辑 课题组标签
/// </summary>
/// <param name="addOrEditHospitalGroupTag"></param>
/// <returns></returns>
public async Task<IResponseOutput> AddOrUpdateHospitalGroupTag(HospitalGroupTagAddOrEdit addOrEditHospitalGroupTag)
{
var verifyExp1 = new EntityVerifyExp<HospitalGroupTag>()
{
VerifyExp = u => u.Name == addOrEditHospitalGroupTag.Name,
VerifyMsg = _localizer["HospitalGroup_DuplicateTagName"]
};
var entity = await _hospitalGroupTagRepository.InsertOrUpdateAsync(addOrEditHospitalGroupTag, true, verifyExp1);
return ResponseOutput.Ok(entity.Id.ToString());
}
/// <summary>
/// 删除课题组标签
/// </summary>
/// <param name="hospitalGroupTagId"></param>
/// <returns></returns>
[HttpDelete("{hospitalGroupTagId:guid}")]
public async Task<IResponseOutput> 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();
}
/// <summary>
/// 给 患者添加 或者删除 课题组标签 1是添加 2 是删除
/// </summary>
/// <returns></returns>
public async Task<IResponseOutput> 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();
}
/// <summary>
/// 获取当前登录用户课题组标签下拉框
/// </summary>
/// <returns></returns>
public List<HospitalGroupAndTagSelectView> GetHospitalGroupTagList()
{
var currentUserHospitalGroupIdList = new List<Guid>();
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
}