产生一致性核查任务列表 以及手动分配列表
parent
8f67b47b8c
commit
36f2cb60e7
|
@ -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));
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由T4模板自动生成 byzhouhang 20210918
|
||||
// 生成时间 2022-06-10 11:59:27
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
using System;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace IRaCIS.Core.Domain.Models
|
||||
{
|
||||
///<summary>
|
||||
///SubjectUser
|
||||
///</summary>
|
||||
[Table("SubjectUser")]
|
||||
public class SubjectUser : Entity, IAuditUpdate, IAuditAdd
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// CreateUserId
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Guid CreateUserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// CreateTime
|
||||
/// </summary>
|
||||
[Required]
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// UpdateTime
|
||||
/// </summary>
|
||||
[Required]
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// UpdateUserId
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Guid UpdateUserId { get; set; }
|
||||
|
||||
|
||||
public DateTime? AssignTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SubjectId
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
public Subject Subject { get; set; }
|
||||
|
||||
|
||||
public Guid DoctorUserId { get; set; }
|
||||
|
||||
public User DoctorUser { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -53,5 +53,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
public int? Downtime { get; set; }
|
||||
|
||||
|
||||
public int DoctorTrialState { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
{
|
||||
public List<SubjectVisit> SubjectVisitList { get; set; } = new List<SubjectVisit>();
|
||||
|
||||
public List<SubjectUser> SubjectDoctorList { get; set; } = new List<SubjectUser>();
|
||||
|
||||
|
||||
|
||||
[ForeignKey("FinalSubjectVisitId")]
|
||||
public SubjectVisit FinalSubjectVisit { get; set; }
|
||||
|
@ -28,9 +28,9 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public Trial Trial { get; set; }
|
||||
|
||||
[ForeignKey("SiteId")]
|
||||
public Site Site { get; set; }
|
||||
public Site Site { get; set; }
|
||||
|
||||
public List<DicomStudy> StudyList { get; set; }=new List<DicomStudy> ();
|
||||
public List<DicomStudy> StudyList { get; set; } = new List<DicomStudy>();
|
||||
|
||||
public string Code { get; set; }
|
||||
public string FirstName { get; set; } = string.Empty;
|
||||
|
@ -41,7 +41,7 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
[ForeignKey("LatestSubjectVisitId")]
|
||||
public SubjectVisit LatestSubjectVisit { get; set; }
|
||||
public Guid? LatestSubjectVisitId { get; set; }
|
||||
public Guid? LatestSubjectVisitId { get; set; }
|
||||
|
||||
//public bool IsMissingImages { get; set; } = false;
|
||||
|
||||
|
@ -53,18 +53,18 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public string Reason { get; set; } = string.Empty;
|
||||
public bool IsEnrollment { get; set; }
|
||||
|
||||
|
||||
|
||||
public DateTime? OutEnrollmentTime { get; set; }
|
||||
|
||||
public DateTime? VisitOverTime { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
public Guid CreateUserId { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
public Guid UpdateUserId { get; set; }
|
||||
|
||||
|
||||
|
||||
public string ShortName { get; set; } = String.Empty;
|
||||
|
||||
|
@ -88,5 +88,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
public DateTime? DeletedTime { get; set; }
|
||||
|
||||
public Guid? DeleteUserId { get; set; }
|
||||
|
||||
//是否分配了读片医生
|
||||
public bool IsAssignDoctorUser{get;set;}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -557,6 +557,8 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
|
||||
public virtual DbSet<VisitTask> VisitTask { get; set; }
|
||||
|
||||
public virtual DbSet<SubjectUser> SubjectUser { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
|
||||
public static readonly string DbDatabase = "IRaCIS_New_Tet";
|
||||
//表名称用字符串,拼接
|
||||
public static readonly string TableName = "VisitTask";
|
||||
public static readonly string TableName = "SubjectUser";
|
||||
//具体文件里面 例如service 可以配置是否分页
|
||||
}
|
||||
#>
|
||||
|
|
Loading…
Reference in New Issue