diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index bce95b40c..5b8df9988 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -57,6 +57,25 @@
访视读片任务
+
+
+ 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
+
+
+
+
+
+ 批量为 多个Subject 分配医生 手动分配
+
+
+
+
+
+
+ 批量取消Subject 分配的医生
+
+
+
系统模板文档配置表
diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
index 5032845f7..b8d6155f0 100644
--- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
@@ -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 DoctorUserLsit { get; set; } = new List();
+ }
+
+
+
+ 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 SubjectIdList { get; set; }
+
+ public List DoctorUserIdList { get; set; }
+ }
+
+ public class CancelSubjectAssignCommand
+ {
+ public Guid TrialId { get; set; }
+
+ public List SubjectIdList { get; set; }
+ }
}
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
index eb44430ce..e77dd5e74 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
@@ -23,22 +23,28 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository _trialRepository;
private readonly IRepository _subjectVisitRepository;
+ private readonly IRepository _subjectRepository;
+ private readonly IRepository _subjectUserRepository;
- public VisitTaskService(IRepository visitTaskRepository, IRepository trialRepository, IRepository subjectVisitRepository)
+
+ public VisitTaskService(IRepository visitTaskRepository, IRepository trialRepository, IRepository subjectVisitRepository,
+ IRepository subjectRepository, IRepository subjectUserRepository
+ )
{
_visitTaskRepository = visitTaskRepository;
_trialRepository = trialRepository;
_subjectVisitRepository = subjectVisitRepository;
+ _subjectRepository = subjectRepository;
+ _subjectUserRepository = subjectUserRepository;
}
[HttpPost]
public async Task> 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
}
- /////
- ///// 给医生用户 分配任务
- /////
- /////
- /////
- //public async Task AllocateDoctorUserTask(string queryVisitTaskId)
- //{
+ ///
+ /// 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
+ ///
+ ///
+ [HttpPost]
+ public async Task> 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(_mapper.ConfigurationProvider);
- //}
+ var pageList = await subjectQuery.ToPagedListAsync(querySubjectAssign.PageIndex, querySubjectAssign.PageSize, string.IsNullOrWhiteSpace(querySubjectAssign.SortField) ? nameof(querySubjectAssign.SubjectId) : querySubjectAssign.SortField, querySubjectAssign.Asc );
+
+ return pageList;
+ }
+ ///
+ /// 批量为 多个Subject 分配医生 手动分配
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task 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();
+ }
+
+ ///
+ /// 批量取消Subject 分配的医生
+ ///
+ ///
+ [HttpPost]
+ public async Task 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();
+ }
+
}
}
diff --git a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs
index cef67fa25..79f5264a5 100644
--- a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs
@@ -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()
.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()
+ .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()
+ .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();
@@ -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));
-
+
}
}
diff --git a/IRaCIS.Core.Domain/Allocation/SubjectUser.cs b/IRaCIS.Core.Domain/Allocation/SubjectUser.cs
new file mode 100644
index 000000000..3ebf95a7c
--- /dev/null
+++ b/IRaCIS.Core.Domain/Allocation/SubjectUser.cs
@@ -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
+{
+ ///
+ ///SubjectUser
+ ///
+ [Table("SubjectUser")]
+ public class SubjectUser : Entity, IAuditUpdate, IAuditAdd
+ {
+
+ ///
+ /// CreateUserId
+ ///
+ [Required]
+ public Guid CreateUserId { get; set; }
+
+ ///
+ /// CreateTime
+ ///
+ [Required]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// UpdateTime
+ ///
+ [Required]
+ public DateTime UpdateTime { get; set; }
+
+ ///
+ /// UpdateUserId
+ ///
+ [Required]
+ public Guid UpdateUserId { get; set; }
+
+
+ public DateTime? AssignTime { get; set; }
+
+ ///
+ /// SubjectId
+ ///
+ [Required]
+ public Guid SubjectId { get; set; }
+
+ public Subject Subject { get; set; }
+
+
+ public Guid DoctorUserId { get; set; }
+
+ public User DoctorUser { get; set; }
+
+
+ }
+
+}
diff --git a/IRaCIS.Core.Domain/Trial/Enroll.cs b/IRaCIS.Core.Domain/Trial/Enroll.cs
index 8782f95e1..7e3df6e34 100644
--- a/IRaCIS.Core.Domain/Trial/Enroll.cs
+++ b/IRaCIS.Core.Domain/Trial/Enroll.cs
@@ -53,5 +53,8 @@ namespace IRaCIS.Core.Domain.Models
public int? Downtime { get; set; }
+
+ public int DoctorTrialState { get; set; }
+
}
}
diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs
index a5f0be6ba..fd8f781cc 100644
--- a/IRaCIS.Core.Domain/Visit/Subject.cs
+++ b/IRaCIS.Core.Domain/Visit/Subject.cs
@@ -13,8 +13,8 @@ namespace IRaCIS.Core.Domain.Models
{
public List SubjectVisitList { get; set; } = new List();
+ public List SubjectDoctorList { get; set; } = new List();
-
[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 StudyList { get; set; }=new List ();
+ public List StudyList { get; set; } = new List();
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;}
}
}
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index 4f2064589..b5119609a 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -557,6 +557,8 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet VisitTask { get; set; }
+ public virtual DbSet SubjectUser { get; set; }
+
}
diff --git a/IRaCIS.Core.Test/DbHelper.ttinclude b/IRaCIS.Core.Test/DbHelper.ttinclude
index 51fd9a26f..ad577b233 100644
--- a/IRaCIS.Core.Test/DbHelper.ttinclude
+++ b/IRaCIS.Core.Test/DbHelper.ttinclude
@@ -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 Ƿҳ
}
#>