产生一致性核查任务列表 以及手动分配列表

This commit is contained in:
2022-06-10 14:01:33 +08:00
parent 8f67b47b8c
commit 36f2cb60e7
9 changed files with 247 additions and 26 deletions
@@ -57,6 +57,25 @@
访视读片任务
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Service.VisitTaskService.GetSubjectAssignList(IRaCIS.Core.Application.ViewModel.SubjectAssignQuery)">
<summary>
获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.VisitTaskService.AssignSubjectDoctor(IRaCIS.Core.Application.ViewModel.AssginSubjectDoctorCommand)">
<summary>
批量为 多个Subject 分配医生 手动分配
</summary>
<param name="assginSubjectDoctorCommand"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.VisitTaskService.CancelSubjectAssignDoctor(IRaCIS.Core.Application.ViewModel.CancelSubjectAssignCommand)">
<summary>
批量取消Subject 分配的医生
</summary>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Service.CommonDocumentService">
<summary>
系统模板文档配置表
@@ -66,7 +66,7 @@ namespace IRaCIS.Core.Application.ViewModel
public string SubjectCode { get; set; } = String.Empty;
public bool? IsUrgent { get; set; }
public bool? IsUrgent { get; set; }
public string TaskName { get; set; } = String.Empty;
@@ -76,12 +76,72 @@ namespace IRaCIS.Core.Application.ViewModel
public TaskState? TaskState { get; set; }
public DateTime? BeginAllocateDate { get; set; }
public DateTime? BeginAllocateDate { get; set; }
public DateTime? EndAllocateDate { get; set; }
}
public class SubjectAssignQuery : PageInput
{
[NotDefault]
public Guid TrialId { get; set; }
public Guid? SiteId { get; set; }
public Guid? SubjectId { get; set; }
public string SubjectCode { get; set; } = String.Empty;
public Guid? DoctorUserId { get; set; }
public bool? IsHaveAssigned { get; set; }
}
public class SubjectAssignView
{
public Guid TrialId { get; set; }
public Guid SiteId { get; set; }
public Guid SubjectId { get; set; }
public String TrialSiteCode { get; set; } = String.Empty;
public string SubjectCode { get; set; } = String.Empty;
public bool IsAssignDoctorUser { get; set; }
public List<AssignDoctorView> DoctorUserLsit { get; set; } = new List<AssignDoctorView>();
}
public class AssignDoctorView
{
public string UserCode { get; set; }
public string UserName { get; set; }
public string FullName { get; set; }
public string UserTypeShortName { get; set; }
}
public class AssginSubjectDoctorCommand
{
public Guid TrialId { get; set; }
public List<Guid> SubjectIdList { get; set; }
public List<Guid> DoctorUserIdList { get; set; }
}
public class CancelSubjectAssignCommand
{
public Guid TrialId { get; set; }
public List<Guid> SubjectIdList { get; set; }
}
}
@@ -23,22 +23,28 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<SubjectUser> _subjectUserRepository;
public VisitTaskService(IRepository<VisitTask> visitTaskRepository, IRepository<Trial> trialRepository, IRepository<SubjectVisit> subjectVisitRepository)
public VisitTaskService(IRepository<VisitTask> visitTaskRepository, IRepository<Trial> trialRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<Subject> subjectRepository, IRepository<SubjectUser> subjectUserRepository
)
{
_visitTaskRepository = visitTaskRepository;
_trialRepository = trialRepository;
_subjectVisitRepository = subjectVisitRepository;
_subjectRepository = subjectRepository;
_subjectUserRepository = subjectUserRepository;
}
[HttpPost]
public async Task<PageOutput<VisitTaskView>> GetVisitTaskList(VisitTaskQuery queryVisitTask, [FromServices] IVisitTaskHelpeService _visitTaskCommonService)
{
var trialId = queryVisitTask.TrialId;
//以前访视未产生任务的,在查询这里要产生 后期维护到一块
//以前访视未产生任务的,在查询这里要产生
var svIdList = await _subjectVisitRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.CheckState == CheckStateEnum.CVPassed && t.IsVisitTaskGenerated == false).Select(t => t.Id).ToListAsync();
var svIdList = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed && t.IsVisitTaskGenerated == false).Select(t => t.Id).ToListAsync();
await _visitTaskCommonService.GenerateVisitTaskAsync(trialId,svIdList);
await _visitTaskCommonService.GenerateVisitTaskAsync(queryVisitTask.TrialId, svIdList);
var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId)
@@ -62,16 +68,68 @@ namespace IRaCIS.Core.Application.Service
}
///// <summary>
///// 给医生用户 分配任务
///// </summary>
///// <param name="queryVisitTaskId"></param>
///// <returns></returns>
//public async Task<IResponseOutput> AllocateDoctorUserTask(string queryVisitTaskId)
//{
/// <summary>
/// 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<SubjectAssignView>> GetSubjectAssignList(SubjectAssignQuery querySubjectAssign)
{
var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId)
.WhereIf(querySubjectAssign.SiteId != null, t => t.SiteId == querySubjectAssign.SiteId)
.WhereIf(querySubjectAssign.SubjectId != null, t => t.Id == querySubjectAssign.SubjectId)
.WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == true, t => t.SubjectDoctorList.Count() > 0)
.WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == false, t => t.SubjectDoctorList.Count() == 0)
.WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId))
.ProjectTo<SubjectAssignView>(_mapper.ConfigurationProvider);
//}
var pageList = await subjectQuery.ToPagedListAsync(querySubjectAssign.PageIndex, querySubjectAssign.PageSize, string.IsNullOrWhiteSpace(querySubjectAssign.SortField) ? nameof(querySubjectAssign.SubjectId) : querySubjectAssign.SortField, querySubjectAssign.Asc );
return pageList;
}
/// <summary>
/// 批量为 多个Subject 分配医生 手动分配
/// </summary>
/// <param name="assginSubjectDoctorCommand"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> AssignSubjectDoctor(AssginSubjectDoctorCommand assginSubjectDoctorCommand)
{
foreach (var subjectId in assginSubjectDoctorCommand.SubjectIdList)
{
foreach (var doctorUserId in assginSubjectDoctorCommand.DoctorUserIdList)
{
await _subjectUserRepository.AddAsync(new SubjectUser() { SubjectId = subjectId, DoctorUserId = doctorUserId, AssignTime = DateTime.Now });
}
await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectId, u => new Subject() { IsAssignDoctorUser = true });
}
await _subjectUserRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
/// <summary>
/// 批量取消Subject 分配的医生
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> CancelSubjectAssignDoctor(CancelSubjectAssignCommand cancelSubjectAssignCommand)
{
foreach (var subjectId in cancelSubjectAssignCommand.SubjectIdList)
{
await _subjectUserRepository.DeleteFromQueryAsync(t=>t.SubjectId== subjectId);
await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectId, u => new Subject() { IsAssignDoctorUser = false });
}
await _subjectUserRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
}
}
@@ -16,9 +16,9 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName))
.ForMember(o => o.FullName, t => t.MapFrom(u => u.DoctorUser.FullName))
.ForMember(o => o.UserTypeShortName, t => t.MapFrom(u => u.DoctorUser.UserTypeRole.UserTypeShortName))
.ForMember(o => o.ArmList, t => t.MapFrom(u => u.VisitTaskList.Where(c=>c.TrialId==u.TrialId).Select(t=>t.ArmEnum).Distinct()))
.ForMember(o => o.ArmList, t => t.MapFrom(u => u.VisitTaskList.Where(c => c.TrialId == u.TrialId).Select(t => t.ArmEnum).Distinct()))
.ForMember(o => o.TotalTaskCount, t => t.MapFrom(u => u.Trial.VisitTaskList.Count()))
.ForMember(o => o.SelfTaskCount, t => t.MapFrom(u => u.Trial.VisitTaskList.Count(t=>t.DoctorUserId==u.DoctorUserId)));
.ForMember(o => o.SelfTaskCount, t => t.MapFrom(u => u.Trial.VisitTaskList.Count(t => t.DoctorUserId == u.DoctorUserId)));
CreateMap<TaskAllocationRule, AllocateInfo>()
.ForMember(o => o.ArmList, t => t.MapFrom(u => u.VisitTaskList.Where(c => c.TrialId == u.TrialId).Select(t => t.ArmEnum).Distinct()))
@@ -39,6 +39,20 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.UserTypeShortName, t => t.MapFrom(u => u.DoctorUser.UserTypeRole.UserTypeShortName));
CreateMap<Subject, SubjectAssignView>()
.ForMember(o => o.SubjectId, t => t.MapFrom(u => u.Id))
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.TrialSite.TrialSiteCode))
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Code))
.ForMember(o => o.DoctorUserLsit, t => t.MapFrom(u => u.SubjectDoctorList));
CreateMap<SubjectUser, AssignDoctorView>()
.ForMember(o => o.UserCode, t => t.MapFrom(u => u.DoctorUser.UserCode))
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName))
.ForMember(o => o.FullName, t => t.MapFrom(u => u.DoctorUser.FullName))
.ForMember(o => o.UserTypeShortName, t => t.MapFrom(u => u.DoctorUser.UserTypeRole.UserTypeShortName));
CreateMap<TaskAllocationRuleAddOrEdit, TaskAllocationRule>();
@@ -46,7 +60,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.DoctorUserId, t => t.MapFrom(u => u.Id))
.ForMember(o => o.FullName, t => t.MapFrom(u => u.FullName));
}
}