修改一版

This commit is contained in:
he
2022-06-02 16:36:05 +08:00
parent 7db0a20426
commit 6a9faa690a
13 changed files with 363 additions and 62 deletions
@@ -48,12 +48,89 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary>
public ReadingPeriodStatus IsTakeEffect { get; set; } = ReadingPeriodStatus.NotTakeEffect;
public ReadingSetType ReadingSetType { get; set; } = ReadingSetType.ImageReading;
public List<Guid> SiteIds { get; set; } = new List<Guid>();
}
public class ReadingToGenerateInDto
{
/// <summary>
/// 阅片期ID
/// </summary>
public Guid ReadingPeriodSetId { get; set; }
/// <summary>
/// 访视ID
/// </summary>
public List<Guid> SubjectVisitIds { get; set; }
}
public class PreviewTheReadingListInDto
{
/// <summary>
/// 阅片期ID
/// </summary>
public Guid ReadingPeriodSetId { get; set; }
}
/// <summary>
/// 获取影像阅片预览的Dto
/// </summary>
public class PreviewTheReadingListOutDto
{
/// <summary>
/// 项目中心Code
/// </summary>
public string TrialSiteCode { get; set; }
/// <summary>
/// 访视Id
/// </summary>
public Guid SubjectVisitId { get; set; }
/// <summary>
/// 受试者Id
/// </summary>
public Guid SubjectId { get; set; }
/// <summary>
/// 受试者名称
/// </summary>
public string SubjectCode { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 最晚拍片日期
/// </summary>
public DateTime? LatestScanDate { get; set; }
/// <summary>
/// 截止日期
/// </summary>
public DateTime? ExpirationDate { get; set; }
/// <summary>
/// 阅片期ID
/// </summary>
public Guid ReadingPeriodSetId { get; set; }
/// <summary>
/// 阅片期名称
/// </summary>
public string ReadingPeriodName { get; set; }
}
public class ReadingPeriodSetView
{
/// <summary>
@@ -0,0 +1,16 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2021-12-23 13:20:59
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Share.Reading;
namespace IRaCIS.Core.Application.Contracts
{
public interface IReadModuleService
{
ReadModuleEnum GetVisitSubmitStateEnum(SubjectVisit visit);
}
}
@@ -10,6 +10,8 @@ using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Share.Reading;
using MassTransit;
using Panda.DynamicWebApi.Attributes;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Infra.EFCore.Common;
namespace IRaCIS.Application.Services
{
@@ -17,7 +19,7 @@ namespace IRaCIS.Application.Services
/// 生成的阅片模块(在大列表上展示的) 阅片期
/// </summary>
[ApiExplorerSettings(GroupName = "Reading")]
public class ReadModuleService : BaseService
public class ReadModuleService : BaseService
{
public IRepository<SubjectVisit> _subjectVisitRepository;
@@ -50,10 +52,10 @@ namespace IRaCIS.Application.Services
{
var subjectquery = _subjectRepository.WhereIf(dto.TrialId!=null, x => x.TrialId == dto.TrialId)
.WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
.Include(x => x.SubjectVisitList).Include(x=>x.Site)
.Include(x => x.SubjectVisitList).Include(x=>x.Site).Include(x => x.TrialSite)
.Select(x => new GetReadModuleDtoOut
{
SiteCode = x.Site.SiteCode,
SiteCode = x.TrialSite.TrialSiteCode,
SiteId = x.SiteId,
SubjectCode = x.Code,
SubjectId = x.Id,
@@ -65,10 +67,10 @@ namespace IRaCIS.Application.Services
IsUrgent = x.IsUrgent, // 是否加急
SubjectVisitId = y.Id, // 访视ID
SubjectVisitName=y.VisitName, // 访视名称
Status= GetVisitSubmitStateEnum(y), // 状态
Status= ReadingCommon.GetVisitSubmitStateEnum(y), // 状态
CreateTime = y.CreateTime, // 创建时间
SubjectCode = y.Subject.Code, // 受试者code
SiteCode = x.Site.SiteCode, // 中心Code
SiteCode = x.TrialSite.TrialSiteCode, // 中心Code
IsFinalVisit=y.IsFinalVisit, // 是否为末次评估
OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视
@@ -101,7 +103,7 @@ namespace IRaCIS.Application.Services
Name=y.ModuleName,
SubjectId=x.SubjectId,
ModuleType=y.ModuleType,
Status= GetVisitSubmitStateEnum(y.SubjectVisit),
Status= ReadingCommon.GetVisitSubmitStateEnum(y.SubjectVisit),
SubjectCode= x.SubjectCode,
SiteCode=x.SiteCode,
SubjectVisitId= y.SubjectVisitId,
@@ -123,31 +125,7 @@ namespace IRaCIS.Application.Services
});
}
/// <summary>
/// 获取访视的状态
/// </summary>
/// <param name="visit"></param>
/// <returns></returns>
[NonDynamicMethod]
public static ReadModuleEnum GetVisitSubmitStateEnum(SubjectVisit visit)
{
if (visit.SubmitState != SubmitStateEnum.Submitted) // 未提交
{
return ReadModuleEnum.ImageUpload;
}
else if (visit.AuditState != AuditStateEnum.QCPassed) // 审核未通过
{
return ReadModuleEnum.ImageUpload;
}
else if (visit.ForwardState != ForwardStateEnum.Forwarded) // 未通过一致性核查
{
return ReadModuleEnum.ConsistencyCheck;
}
else {
// 暂时
return ReadModuleEnum.ReadComplete;
}
}
///// <summary>
@@ -183,12 +161,12 @@ namespace IRaCIS.Application.Services
}).FirstOrDefault();
var visit = (await _subjectVisitRepository.Where(x => x.Id == GetReadModuleOutDto.SubjectVisitId).FirstOrDefaultAsync()).IfNullThrowConvertException();
SubjectVisit visit = (await _subjectVisitRepository.Where(x => x.Id == GetReadModuleOutDto.SubjectVisitId).FirstOrDefaultAsync()).IfNullThrowConvertException();
//switch (GetVisitSubmitStateEnum(visit))
//{
// case ReadModuleEnum.ImageUpload:
// case
// break;
//};
@@ -205,26 +183,15 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task<IResponseOutput> AddReadModule(ReadModuleAddDto dto)
{
var visits =await _subjectVisitRepository.Where(x => x.SubjectId == dto.SubjectId && x.InPlan).Select(x => new
{
x.Id,
x.LatestScanDate,
x.VisitNum,
x.IsUrgent,
}).ToListAsync();
var visitquery = _subjectVisitRepository.Where(x => x.SubjectId == dto.SubjectId && x.InPlan);
if (dto.ExpirationDate != null)
{
visits = visits.Where(x => x.LatestScanDate <= dto.ExpirationDate.Value).ToList();
}
visitquery = visitquery.WhereIf(dto.ExpirationDate != null,x => x.LatestScanDate <= dto.ExpirationDate.Value);
if (dto.ExpirationVisitNum != null)
{
visits = visits.Where(x => x.VisitNum <= dto.ExpirationVisitNum).ToList();
}
visitquery = visitquery.WhereIf(dto.ExpirationVisitNum != null, x => x.VisitNum <= dto.ExpirationVisitNum.Value);
var visit = visits.OrderByDescending(x => x.VisitNum).FirstOrDefault();
var visit = visitquery.OrderByDescending(x => x.VisitNum).FirstOrDefault();
if (visit != null)
{
@@ -236,7 +203,8 @@ namespace IRaCIS.Application.Services
IsUrgent = visit.IsUrgent,
ModuleName = dto.Name,
SubjectVisitId = visit.Id,
Status = ReadModuleEnum.ImageRead,
ReadingSetType= ReadingSetType.ImageReading,
Status = ReadingCommon.GetVisitSubmitStateEnum(visit),
});
@@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Authorization;
using IRaCIS.Core.Application.Auth;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Share.Reading;
using MassTransit;
using IRaCIS.Core.Infra.EFCore.Common;
namespace IRaCIS.Application.Services
{
@@ -20,15 +22,18 @@ namespace IRaCIS.Application.Services
public IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository;
private readonly IRepository<ReadModule> _readModuleRepository;
private readonly IRepository<Site> _siteSetRepository;
public ReadingPeriodSetService(IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ReadingPeriodSet> ReadingPeriodSetRepository,
IRepository<ReadModule> readModuleRepository,
IRepository<Site> SiteSetRepository
)
{
_subjectVisitRepository = subjectVisitRepository;
_readingPeriodSetRepository = ReadingPeriodSetRepository;
this._readModuleRepository = readModuleRepository;
_siteSetRepository = SiteSetRepository;
}
@@ -70,6 +75,81 @@ namespace IRaCIS.Application.Services
}
}
/// <summary>
/// 获取影像阅片的预览
/// </summary>
/// <returns></returns>
public async Task<List<PreviewTheReadingListOutDto>> GetPreviewTheReadingList(PreviewTheReadingListInDto inDto)
{
var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowConvertException();
var visitquery = _subjectVisitRepository.Where(x => x.TrialId == readset.TrialId && x.LatestScanDate != null && x.InPlan);
if (readset.ReadingScope == ReadingScopeEnum.Site)
{
var siteids = readset.ReadingPeriodSites.Select(x => x.Id);
visitquery = visitquery.Where(x => siteids.Contains(x.SiteId));
}
visitquery = visitquery.WhereIf(readset.ExpirationDate != null, x => x.LatestScanDate <= readset.ExpirationDate.Value);
visitquery = visitquery.WhereIf(readset.ExpirationVisitNum != null, x => x.VisitNum <= readset.ExpirationVisitNum);
var visits = (await visitquery.Include(x=>x.Subject).Include(x=>x.TrialSite).GroupBy(x => x.SubjectId).Select(x => new
{
SubjectId = x.Key,
visit = x.OrderByDescending(x => x.VisitNum).FirstOrDefault()
}).ToListAsync()).Select(x => x.visit).ToList();
return visits.Where(x => _readModuleRepository.Where(y => y.ReadingSetType == readset.ReadingSetType && x.Id == y.SubjectVisitId).Count() == 0)
.Select(x => new PreviewTheReadingListOutDto
{
ExpirationDate= readset.ExpirationDate,
SubjectVisitId=x.Id,
TrialSiteCode = x.TrialSite.TrialSiteCode,
LatestScanDate=x.LatestScanDate,
ReadingPeriodName= readset.ReadingPeriodName,
ReadingPeriodSetId=readset.Id,
SubjectCode=x.Subject.Code,
SubjectId=x.SubjectId,
Remark= readset.Remark
}).ToList();
}
/// <summary>
/// 添加对应的阅片
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<IResponseOutput> ReadingToGenerate(ReadingToGenerateInDto inDto)
{
var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowConvertException();
var visits = await _subjectVisitRepository.Where(x => inDto.SubjectVisitIds.Contains(x.Id)).ToListAsync();
List<ReadModule> readModules = new List<ReadModule>();
foreach (var item in visits)
{
readModules.Add(new ReadModule()
{
Id = NewId.NextGuid(),
SubjectId = item.SubjectId,
ModuleType = readset.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Read : ModuleTypeEnum.Oncology,
IsUrgent = item.IsUrgent,
ModuleName = readset.ReadingPeriodName,
SubjectVisitId = item.Id,
ReadingSetType = readset.ReadingSetType,
Status = ReadingCommon.GetVisitSubmitStateEnum(item),
});
};
await _readModuleRepository.AddRangeAsync(readModules);
var res = await _subjectVisitRepository.SaveChangesAsync();
return ResponseOutput.Result(res);
}
/// <summary>
/// 分页获取
/// </summary>
@@ -16,7 +16,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<ReadingPeriodSet, ReadingPeriodSetView>()
.ForMember(d => d.SiteIds, u => u.MapFrom(s => s.ReadingPeriodSites.Select(x => x.SiteId)))
.ForMember(d => d.SiteCodes, u => u.MapFrom(s => s.ReadingPeriodSites.Select(x => x.Site.SiteCode)));
.ForMember(d => d.SiteCodes, u => u.MapFrom(s => s.ReadingPeriodSites.Select(x => x.TrialSite.TrialSiteCode)));
//.ForMember(d => d.SiteNames, u => u.MapFrom(s => s.ReadingPeriodSites.SelectMany(x => x.Site.SiteName).ToList()));