修改同意重阅bug

Uat_Study
hang 2022-10-20 14:48:06 +08:00
parent 32f9c84ab7
commit fdd11ae550
10 changed files with 322 additions and 29 deletions

View File

@ -388,6 +388,11 @@
系统模板文档配置表
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService">
<summary>
TrialEmailNoticeConfigService
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.StudyService.Preview(System.Guid)">
<summary> 指定资源Id渲染Dicom检查的Jpeg预览图像 </summary>
<param name="studyId"> Dicom检查的Id </param>
@ -4896,6 +4901,15 @@
接口名
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.TrialEmailNoticeConfigView">
<summary> TrialEmailNoticeConfigView 列表视图模型 </summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.TrialEmailNoticeConfigQuery">
<summary>TrialEmailNoticeConfigQuery 列表查询参数模型</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.TrialEmailNoticeConfigAddOrEdit">
<summary> TrialEmailNoticeConfigAddOrEdit 列表查询参数模型</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.SystemAnonymizationView">
<summary> SystemAnonymizationView 列表视图模型 </summary>
</member>
@ -5349,6 +5363,11 @@
IFrontAuditConfigService
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Interfaces.ITrialEmailNoticeConfigService">
<summary>
ITrialEmailNoticeConfigService
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Interfaces.ISystemAnonymizationService">
<summary>
ISystemAnonymizationService

View File

@ -64,8 +64,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
public async Task<List<TrialReadingCriterionDto>> GetTrialCriterionList(Guid trialId)
{
var list= await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm).OrderBy(t=>t.ShowOrder)
.Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName,CriterionType=t.CriterionType,ReadingType=t.ReadingType })
var list = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm).OrderBy(t => t.ShowOrder)
.Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType })
.ToListAsync();
if (list.Count == 0)
@ -87,10 +87,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId && t.SubjectVisitTaskList.Any())
.WhereIf(querySubjectAssign.SiteId != null, t => t.SiteId == querySubjectAssign.SiteId)
.WhereIf(querySubjectAssign.SubjectId != null, t => t.Id == querySubjectAssign.SubjectId)
.WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t=>t.DoctorUserId==querySubjectAssign.DoctorUserId && t.TrialReadingCriterionId==querySubjectAssign.TrialReadingCriterionId))
.WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId && t.TrialReadingCriterionId == querySubjectAssign.TrialReadingCriterionId))
.WhereIf(!string.IsNullOrEmpty(querySubjectAssign.SubjectCode), t => t.Code.Contains(querySubjectAssign.SubjectCode))
.ProjectTo<SubjectAssignStat>(_mapper.ConfigurationProvider,new { trialReadingCriterionId=querySubjectAssign.TrialReadingCriterionId });
.ProjectTo<SubjectAssignStat>(_mapper.ConfigurationProvider, new { trialReadingCriterionId = querySubjectAssign.TrialReadingCriterionId });
var pageList = await subjectQuery.ToPagedListAsync(querySubjectAssign.PageIndex, querySubjectAssign.PageSize, string.IsNullOrWhiteSpace(querySubjectAssign.SortField) ? nameof(querySubjectAssign.SubjectId) : querySubjectAssign.SortField, querySubjectAssign.Asc);
@ -177,13 +177,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
/// <param name="trialId"></param>
/// <param name="trialReadingCriterionId"></param>
/// <returns></returns>
public async Task<(List<AssignDoctorStatView>,object)> GetDoctorSubjectStat(Guid trialId, Guid trialReadingCriterionId )
public async Task<(List<AssignDoctorStatView>, object)> GetDoctorSubjectStat(Guid trialId, Guid trialReadingCriterionId)
{
var list = await _taskAllocationRuleRepository.Where(t => t.TrialId == trialId)
.Where( t => t.Enroll.EnrollReadingCategoryList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId))
.ProjectTo<AssignDoctorStatView>(_mapper.ConfigurationProvider,new { trialReadingCriterionId= trialReadingCriterionId }).ToListAsync();
.Where(t => t.Enroll.EnrollReadingCategoryList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId))
.ProjectTo<AssignDoctorStatView>(_mapper.ConfigurationProvider, new { trialReadingCriterionId = trialReadingCriterionId }).ToListAsync();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder,x.ReadingType }).FirstOrDefaultAsync()).IfNullThrowException();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType }).FirstOrDefaultAsync()).IfNullThrowException();
return (list, criterionConfig);
}
@ -195,13 +195,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
/// <param name="subjectId"></param>
/// <param name="trialReadingCriterionId"></param>
/// <returns></returns>
public async Task<(List<SubjectUserDTO>,object)> GetSubjectAssignedDoctorList(Guid subjectId, Guid trialReadingCriterionId)
public async Task<(List<SubjectUserDTO>, object)> GetSubjectAssignedDoctorList(Guid subjectId, Guid trialReadingCriterionId)
{
var list = await _subjectUserRepository.Where(t => t.SubjectId == subjectId && t.OrignalSubjectUserId == null && t.IsConfirmed && t.TrialReadingCriterionId==trialReadingCriterionId).ProjectTo<SubjectUserDTO>(_mapper.ConfigurationProvider).ToListAsync();
var list = await _subjectUserRepository.Where(t => t.SubjectId == subjectId && t.OrignalSubjectUserId == null && t.IsConfirmed && t.TrialReadingCriterionId == trialReadingCriterionId).ProjectTo<SubjectUserDTO>(_mapper.ConfigurationProvider).ToListAsync();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType }).FirstOrDefaultAsync()).IfNullThrowException();
return (list, criterionConfig);
return (list, criterionConfig);
}
@ -859,7 +859,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//var isReadingTaskViewInOrder = await _trialRepository.Where(x => x.Id == iRUnReadSubjectQuery.TrialId).Select(x => x.IsReadingTaskViewInOrder).FirstOrDefaultAsync();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == iRUnReadSubjectQuery.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder } ).FirstOrDefaultAsync()).IfNullThrowException();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == iRUnReadSubjectQuery.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
var readingTool = criterionConfig.ReadingTool;
var isReadingTaskViewInOrder = criterionConfig.IsReadingTaskViewInOrder;
@ -1197,7 +1197,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{
throw new BusinessValidationFailedException("当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面");
}
}
private async Task SetMedicalReviewInvalidAsync(List<VisitTask> influenceTaskList, bool isPMApply = true)
@ -1266,6 +1266,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
var origenalTask = (await _visitTaskRepository.Where(t => item.OriginalReReadingTaskId == t.Id).FirstOrDefaultAsync()).IfNullThrowException();
if (origenalTask.TaskState != TaskState.Effect)
{
return ResponseOutput.NotOk("当前申请重阅任务的状态,已被其他任务重阅已影响,不允许对该状态下的任务进行重阅同意与否操作");
}
var criterionConfig = await _trialReadingCriterionRepository.Where(x => x.Id == origenalTask.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync();
@ -1498,15 +1505,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
RequestReReadingResultEnum = RequestReReadingResult.Agree,
});
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == origenalTask.SubjectId &&
t.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed &&
t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId &&
t.IsAnalysisCreate == origenalTask.IsAnalysisCreate &&
t.VisitTaskNum == origenalTask.VisitTaskNum &&
t.Id != origenalTask.Id, u => new VisitTask()
{
ReReadingApplyState = ReReadingApplyState.Agree
});
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == origenalTask.Id, u => new VisitTask()
{
ReReadingApplyState = ReReadingApplyState.Agree
});
#endregion
@ -1685,7 +1687,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (influenceTask.Id == origenalTask.Id)
{
ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
await SetMedicalReviewInvalidAsync(influenceTaskList, false);
trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
@ -1797,7 +1799,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{
throw new BusinessValidationFailedException("当前重阅任务状态不为已申请状态,不允许进行处理,请刷新页面");
}
}
}
@ -2169,8 +2171,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
/// <param name="applyId"> 申请记录的Id</param>
/// <returns></returns>
[HttpGet("{taskId:guid}/{isReReading:bool}")]
public async Task<List<InfluenceTaskInfo>> GetReReadingOrBackInfluenceTaskList(Guid taskId, bool isReReading, Guid? applyId)
public async Task<(List<InfluenceTaskInfo>, object)> GetReReadingOrBackInfluenceTaskList(Guid taskId, bool isReReading, Guid? applyId)
{
var isIRAppyTaskInfluenced = false;
var filterObj = (await _visitTaskRepository.FirstOrDefaultNoTrackingAsync(t => t.Id == taskId)).IfNullThrowException();
var trialId = filterObj.TrialId;
@ -2307,6 +2311,12 @@ namespace IRaCIS.Core.Application.Service.Allocation
default:
throw new BusinessValidationFailedException("不支持重阅的任务类型");
}
if( await _visitTaskReReadingRepository.AnyAsync(t=>t.RequestReReadingType==RequestReReadingType.DocotorApply && t.RequestReReadingResultEnum==RequestReReadingResult.Default &&
t.OriginalReReadingTask.VisitTaskNum >=filterObj.VisitTaskNum &&t.OriginalReReadingTask.SubjectId==filterObj.SubjectId && t.OriginalReReadingTask.TrialReadingCriterionId ==filterObj.TrialReadingCriterionId && t.OriginalReReadingTask.IsAnalysisCreate == filterObj.IsAnalysisCreate))
{
isIRAppyTaskInfluenced = true;
}
}
//无序
else
@ -2325,8 +2335,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{
throw new BusinessValidationFailedException("当前用户查看列表未定义");
}
}
@ -2510,7 +2519,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
#endregion
return list;
return (list, new { IsIRAppyTaskInfluenced = isIRAppyTaskInfluenced });
}

View File

@ -0,0 +1,85 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2022-10-20 11:52:31
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using System;
using IRaCIS.Core.Domain.Share;
using System.Collections.Generic;
namespace IRaCIS.Core.Application.ViewModel
{
/// <summary> TrialEmailNoticeConfigView 列表视图模型 </summary>
public class TrialEmailNoticeConfigView : TrialEmailNoticeConfigAddOrEdit
{
public Guid UpdateUserId { get; set; }
public DateTime UpdateTime { get; set; }
public DateTime CreateTime { get; set; }
public DateTime CreateUserId { get; set; }
}
///<summary>TrialEmailNoticeConfigQuery 列表查询参数模型</summary>
public class TrialEmailNoticeConfigQuery
{
public string AuthorizationCode { get; set; }
public string ReceiveEmail { get; set; }
public string Code { get; set; }
public string CopyEmail { get; set; }
public string FromEmail { get; set; }
public string FilePath { get; set; }
public string FileName { get; set; }
}
///<summary> TrialEmailNoticeConfigAddOrEdit 列表查询参数模型</summary>
public class TrialEmailNoticeConfigAddOrEdit
{
public Guid? Id { get; set; }
public int BusinessScenarioEnum { get; set; }
public string Code { get; set; }
public Guid TrialId { get; set; }
public string AuthorizationCode { get; set; }
public List<string> ReceiveEmailList { get; set; }
public List<string> CopyEmailList { get; set; }
public string ReceiveEmailsStr { get; set; }
public string CopyEmailsStr { get; set; }
public string FromEmail { get; set; }
public bool IsUrgent { get; set; }
public bool IsAutoSend { get; set; }
public bool IsDistinguishCriteria { get; set; }
public bool IsReturnRequired { get; set; }
public string FilePath { get; set; }
public string FileName { get; set; }
}
}

View File

@ -0,0 +1,25 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2022-10-20 11:52:48
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Application.ViewModel;
namespace IRaCIS.Core.Application.Interfaces
{
/// <summary>
/// ITrialEmailNoticeConfigService
/// </summary>
public interface ITrialEmailNoticeConfigService
{
Task<List<TrialEmailNoticeConfigView>> GetTrialEmailNoticeConfigList(TrialEmailNoticeConfigQuery inQuery);
Task<IResponseOutput> AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig);
Task<IResponseOutput> DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId);
}
}

View File

@ -0,0 +1,61 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2022-10-20 11:52:17
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.ViewModel;
namespace IRaCIS.Core.Application.Service
{
/// <summary>
/// TrialEmailNoticeConfigService
/// </summary>
[ApiExplorerSettings(GroupName = "Test")]
public class TrialEmailNoticeConfigService : BaseService, ITrialEmailNoticeConfigService
{
private readonly IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository;
public TrialEmailNoticeConfigService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository)
{
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
}
public async Task<List<TrialEmailNoticeConfigView>> GetTrialEmailNoticeConfigList(TrialEmailNoticeConfigQuery inQuery)
{
var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository
.ProjectTo<TrialEmailNoticeConfigView>(_mapper.ConfigurationProvider);
return await trialEmailNoticeConfigQueryable.ToListAsync();
}
public async Task<IResponseOutput> AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig)
{
addOrEditTrialEmailNoticeConfig.ReceiveEmailsStr = String.Join('|', addOrEditTrialEmailNoticeConfig.ReceiveEmailList);
addOrEditTrialEmailNoticeConfig.CopyEmailsStr = String.Join('|', addOrEditTrialEmailNoticeConfig.CopyEmailList);
var entity = await _trialEmailNoticeConfigRepository.InsertOrUpdateAsync(addOrEditTrialEmailNoticeConfig, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
[HttpDelete("{trialEmailNoticeConfigId:guid}")]
public async Task<IResponseOutput> DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId)
{
var success = await _trialEmailNoticeConfigRepository.DeleteFromQueryAsync(t => t.Id == trialEmailNoticeConfigId, true);
return ResponseOutput.Ok();
}
}
}

View File

@ -2,6 +2,7 @@
using AutoMapper.EquivalencyExpression;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Core.Application.Service
@ -66,6 +67,10 @@ namespace IRaCIS.Core.Application.Service
CreateMap<Guid, SystemDocNeedConfirmedUserType>().EqualityComparison((odto, o) => odto == o.NeedConfirmUserTypeId)
.ForMember(d => d.NeedConfirmUserTypeId, c => c.MapFrom(t => t))
.ForMember(d => d.SystemDocumentId, c => c.Ignore());
CreateMap<TrialEmailNoticeConfig, TrialEmailNoticeConfigView>();
}
}

View File

@ -0,0 +1,87 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2022-10-20 11:51:58
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
using System;
using IRaCIS.Core.Domain.Share;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Collections.Generic;
using System.Linq;
namespace IRaCIS.Core.Domain.Models
{
///<summary>
///TrialEmailNoticeConfig
///</summary>
[Table("TrialEmailNoticeConfig")]
public class TrialEmailNoticeConfig : Entity, IAuditUpdate, IAuditAdd
{
[Required]
public Guid TrialId { get; set; }
[Required]
public string AuthorizationCode { get; set; } = string.Empty;
public string ReceiveEmailsStr { get; set; } = string.Empty;
public string CopyEmailsStr { get; set; } = string.Empty;
[NotMapped]
public List<string> ReceiveEmailList => ReceiveEmailsStr.Split('|', StringSplitOptions.RemoveEmptyEntries).Select(t=>t.Trim()).ToList();
[NotMapped]
public List<string> CopyEmailList => CopyEmailsStr.Split('|', StringSplitOptions.RemoveEmptyEntries).Select(t => t.Trim()).ToList();
[Required]
public bool IsUrgent { get; set; }
[Required]
public string Code { get; set; } = string.Empty;
[Required]
public bool IsReturnRequired { get; set; }
[Required]
public string FromEmail { get; set; }
[Required]
public bool IsAutoSend { get; set; }
[Required]
public bool IsDistinguishCriteria { get; set; }
[Required]
public int BusinessScenarioEnum { get; set; }
public CriterionType CriterionTypeEnum { get; set; }
[Required]
public string FilePath { get; set; } = string.Empty;
[Required]
public string FileName { get; set; } = string.Empty;
[Required]
public Guid CreateUserId { get; set; }
[Required]
public DateTime CreateTime { get; set; }
[Required]
public Guid UpdateUserId { get; set; }
[Required]
public DateTime UpdateTime { get; set; }
}
}

View File

@ -663,6 +663,7 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<SubjectCanceDoctor> SubjectCanceDoctor { get; set; }
public virtual DbSet<TrialEmailNoticeConfig> TrialEmailNoticeConfig { get; set; }

View File

@ -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 = "TrialConfigDictionary";
public static readonly string TableName = "TrialEmailNoticeConfig";
//具体文件里面 例如service 可以配置是否分页
}
#>

View File

@ -109,6 +109,7 @@
<Folder Include="TT_Template\Dto_New\" />
<Folder Include="TT_Template\IServices_New\" />
<Folder Include="TT_Template\Models_New\" />
<Folder Include="TT_Template\Services_New\" />
</ItemGroup>
</Project>