医学审核修改
This commit is contained in:
@@ -6,13 +6,14 @@
|
||||
using System;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace IRaCIS.Core.Application.ViewModel
|
||||
{
|
||||
/// <summary> TaskMedicalReviewView 列表视图模型 </summary>
|
||||
public class TaskMedicalReviewView: VisitTaskViewBasic
|
||||
public class TaskMedicalReviewView : VisitTaskViewBasic
|
||||
{
|
||||
|
||||
|
||||
public int AuditState { get; set; }
|
||||
public DateTime? AuditSignTime { get; set; }
|
||||
public int DoctorUserIdeaEnum { get; set; }
|
||||
@@ -33,6 +34,15 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public UserSimpleInfo MedicalManagerUser { get; set; }
|
||||
}
|
||||
|
||||
public class GenerateMedicalReviewTaskView : VisitTaskViewBasic
|
||||
{
|
||||
|
||||
public int? GeneratedMedicalReviewCount { get; set; }
|
||||
public UserSimpleInfo DoctorUser { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
///<summary>TaskMedicalReviewQuery 列表查询参数模型</summary>
|
||||
public class TaskMedicalReviewQuery : PageInput
|
||||
{
|
||||
@@ -65,11 +75,22 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
|
||||
|
||||
|
||||
public class ManuallyGeneratedAndAssignedMedicalReviewCommand
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
[NotDefault]
|
||||
public Guid MedicalManagerUserId { get; set; }
|
||||
|
||||
|
||||
public List<Guid> TaskIdList { get; set; }
|
||||
}
|
||||
|
||||
public class AssignMedicalReviewTaskCommand
|
||||
{
|
||||
public List<Guid> IdList { get; set; }
|
||||
|
||||
|
||||
|
||||
public Guid? MedicalManagerUserId { get; set; }
|
||||
|
||||
public MedicalReviewTaskOptType TaskOptType { get; set; }
|
||||
|
||||
@@ -198,13 +198,13 @@ namespace IRaCIS.Core.Application.Service
|
||||
SubjectCode = c.Subject.Code,
|
||||
TrialSiteCode = c.Subject.TrialSite.TrialSiteCode,
|
||||
|
||||
//RelationDoctorUserList = c.SameVisitTaskList/*Where(t=>t.ReadingTaskState == ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)*/.Select(c => new UserSimpleInfo()
|
||||
//{
|
||||
// FullName = c.DoctorUser.FullName,
|
||||
// UserCode = c.DoctorUser.UserCode,
|
||||
// UserId = c.DoctorUser.Id,
|
||||
// UserName = c.DoctorUser.UserName
|
||||
//}).ToList(),
|
||||
RelationDoctorUserList = c.SourceSubjectVisit.VisitTaskList/*Where(t=>t.ReadingTaskState == ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)*/.Select(c => new UserSimpleInfo()
|
||||
{
|
||||
FullName = c.DoctorUser.FullName,
|
||||
UserCode = c.DoctorUser.UserCode,
|
||||
UserId = c.DoctorUser.Id,
|
||||
UserName = c.DoctorUser.UserName
|
||||
}).ToList(),
|
||||
|
||||
IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.IsAnalysisCreate && t.DoctorUserId == doctorUserId && t.TaskConsistentRuleId == filterObj.Id),
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using IRaCIS.Core.Application.Interfaces;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
@@ -22,18 +23,19 @@ namespace IRaCIS.Core.Application.Service
|
||||
private readonly IRepository<TaskMedicalReview> _taskMedicalReviewRepository;
|
||||
private readonly IRepository<Trial> _trialRepository;
|
||||
private readonly IRepository<TrialUser> _trialUserRepository;
|
||||
|
||||
private readonly IRepository<VisitTask> _visitTaskRepository;
|
||||
private readonly IRepository<TaskMedicalReviewRule> _taskMedicalReviewRuleRepository;
|
||||
|
||||
public TaskMedicalReviewService(IRepository<TaskMedicalReview> taskMedicalReviewRepository,
|
||||
IRepository<Trial> trialRepository,
|
||||
IRepository<TrialUser> trialUserRepository,
|
||||
IRepository<VisitTask> visitTaskRepository,
|
||||
IRepository<TaskMedicalReviewRule> taskMedicalReviewRuleRepository)
|
||||
{
|
||||
_taskMedicalReviewRepository = taskMedicalReviewRepository;
|
||||
this._trialRepository = trialRepository;
|
||||
_trialUserRepository = trialUserRepository;
|
||||
|
||||
_visitTaskRepository = visitTaskRepository;
|
||||
_taskMedicalReviewRuleRepository = taskMedicalReviewRuleRepository;
|
||||
|
||||
}
|
||||
@@ -49,7 +51,9 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
var taskMedicalReviewQueryable = _taskMedicalReviewRepository.Where(t => t.VisitTask.TrialId == inQuery.TrialId)
|
||||
.WhereIf(inQuery.SiteId != null, t => t.VisitTask.Subject.SiteId == inQuery.SiteId)
|
||||
.WhereIf(inQuery.SubjectId != null, t => t.VisitTask.SubjectId == inQuery.SubjectId)
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.VisitTask.Subject.Code.Contains(inQuery.SubjectCode))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.VisitTask.TaskName.Contains(inQuery.TaskName) || t.VisitTask.TaskBlindName.Contains(inQuery.TaskName))
|
||||
.WhereIf(inQuery.IsUrgent != null, t => t.VisitTask.IsUrgent == inQuery.IsUrgent)
|
||||
.WhereIf(inQuery.DoctorUserId != null, t => t.VisitTask.DoctorUserId == inQuery.DoctorUserId)
|
||||
.WhereIf(inQuery.ReadingCategory != null, t => t.VisitTask.ReadingCategory == inQuery.ReadingCategory)
|
||||
@@ -62,11 +66,58 @@ namespace IRaCIS.Core.Application.Service
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 产生医学审核列表
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<PageOutput<GenerateMedicalReviewTaskView>> GetGenerateMedicalReviewTaskList(TaskMedicalReviewQuery inQuery)
|
||||
{
|
||||
var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||
.Where(t => t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
|
||||
.WhereIf(inQuery.SiteId != null, t => t.Subject.SiteId == inQuery.SiteId)
|
||||
.WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId)
|
||||
.WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent)
|
||||
.WhereIf(inQuery.DoctorUserId != null, t => t.DoctorUserId == inQuery.DoctorUserId)
|
||||
.WhereIf(inQuery.ReadingCategory != null, t => t.ReadingCategory == inQuery.ReadingCategory)
|
||||
.WhereIf(inQuery.ReadingTaskState != null, t => t.ReadingTaskState == inQuery.ReadingTaskState)
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.TaskName.Contains(inQuery.TaskName) || t.TaskBlindName.Contains(inQuery.TaskName))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.Subject.Code.Contains(inQuery.SubjectCode))
|
||||
|
||||
.ProjectTo<GenerateMedicalReviewTaskView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var defalutSortArray = new string[] { nameof(TaskMedicalReviewView.IsUrgent) + " desc", nameof(TaskMedicalReviewView.SubjectId) };
|
||||
var pageList = await visitTaskQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc, string.IsNullOrWhiteSpace(inQuery.SortField), defalutSortArray);
|
||||
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 产生医学审核任务
|
||||
/// 手动生成并分配医学审核
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IResponseOutput> ManuallyGeneratedAndAssignedMedicalReview(ManuallyGeneratedAndAssignedMedicalReviewCommand command)
|
||||
{
|
||||
|
||||
foreach (var taskId in command.TaskIdList)
|
||||
{
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { TrialId = command.TrialId, VisitTaskId = taskId, MedicalManagerUserId = command.MedicalManagerUserId });
|
||||
}
|
||||
|
||||
await _taskMedicalReviewRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 产生医学审核
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Obsolete]
|
||||
public async Task<IResponseOutput> GenerateMedicalReviewTask(GenerateMedicalReviewTaskCommand generateCommand)
|
||||
{
|
||||
var trialId = generateCommand.TrialId;
|
||||
@@ -102,7 +153,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
foreach (var toGenerateTask in toGenerateTaskList)
|
||||
{
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { DoctorUserId = (Guid)toGenerateTask.DoctorUserId, TrialId = toGenerateTask.TrialId, VisitTaskId = toGenerateTask.TaskId ,MedicalManagerUserId= defalutMIMUserId });
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { DoctorUserId = (Guid)toGenerateTask.DoctorUserId, TrialId = toGenerateTask.TrialId, VisitTaskId = toGenerateTask.TaskId, MedicalManagerUserId = defalutMIMUserId });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,7 +208,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
if (toGenerateCount > 0)
|
||||
{
|
||||
|
||||
var toGenerateTaskList = item.ActualVisitTaskList.ExceptBy(item.GeneratedVisitTaskList.Select(t=>t.TaskId),t=>t.TaskId).Take(toGenerateCount).ToList();
|
||||
var toGenerateTaskList = item.ActualVisitTaskList.ExceptBy(item.GeneratedVisitTaskList.Select(t => t.TaskId), t => t.TaskId).Take(toGenerateCount).ToList();
|
||||
|
||||
foreach (var toGenerateTask in toGenerateTaskList)
|
||||
{
|
||||
@@ -184,7 +235,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<(PageOutput<TaskMedicalReviewView>,object)> GetMIMMedicalReviewTaskList(TaskMedicalReviewQuery inQuery)
|
||||
public async Task<(PageOutput<TaskMedicalReviewView>, object)> GetMIMMedicalReviewTaskList(TaskMedicalReviewQuery inQuery)
|
||||
{
|
||||
|
||||
var taskMedicalReviewQueryable = _taskMedicalReviewRepository.Where(t => t.VisitTask.TrialId == inQuery.TrialId && t.MedicalManagerUserId == _userInfo.Id)
|
||||
@@ -199,9 +250,10 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
var pageList = await taskMedicalReviewQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(TaskMedicalReviewView.Id) : inQuery.SortField, inQuery.Asc);
|
||||
|
||||
return (pageList,new {
|
||||
return (pageList, new
|
||||
{
|
||||
|
||||
IsConfirmMedicineQuestion= await _trialRepository.Where(x=>x.Id== inQuery.TrialId).Select(x=>x.IsConfirmMedicineQuestion).FirstOrDefaultAsync()
|
||||
IsConfirmMedicineQuestion = await _trialRepository.Where(x => x.Id == inQuery.TrialId).Select(x => x.IsConfirmMedicineQuestion).FirstOrDefaultAsync()
|
||||
});
|
||||
}
|
||||
|
||||
@@ -220,9 +272,9 @@ namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
var task = await _taskMedicalReviewRepository.FirstOrDefaultAsync(t => t.Id == id);
|
||||
|
||||
if (command.TaskOptType == MedicalReviewTaskOptType.Assign )
|
||||
if (command.TaskOptType == MedicalReviewTaskOptType.Assign)
|
||||
{
|
||||
if (task.MedicalManagerUserId != null && task.MedicalManagerUserId !=command.MedicalManagerUserId)
|
||||
if (task.MedicalManagerUserId != null && task.MedicalManagerUserId != command.MedicalManagerUserId)
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前有任务已分配给其他人,不允许分配,请刷新列表");
|
||||
}
|
||||
@@ -244,7 +296,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
await _taskMedicalReviewRepository.SaveChangesAsync();
|
||||
|
||||
|
||||
@@ -153,6 +153,13 @@ namespace IRaCIS.Core.Application.Service
|
||||
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.IsAnalysisCreate ? u.BlindTrialSiteCode : u.Subject.TrialSite.TrialSiteCode))
|
||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.IsAnalysisCreate ? u.BlindSubjectCode : u.Subject.Code));
|
||||
|
||||
CreateMap<VisitTask, GenerateMedicalReviewTaskView>()
|
||||
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.IsAnalysisCreate ? u.BlindTrialSiteCode : u.Subject.TrialSite.TrialSiteCode))
|
||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.IsAnalysisCreate ? u.BlindSubjectCode : u.Subject.Code))
|
||||
.ForMember(o => o.GeneratedMedicalReviewCount, t => t.MapFrom(u => u.TaskMedicalReviewList.Count()))
|
||||
;
|
||||
|
||||
|
||||
CreateMap<User, UserSimpleInfo>()
|
||||
|
||||
.ForMember(o => o.UserId, t => t.MapFrom(u => u.Id))
|
||||
|
||||
Reference in New Issue
Block a user