Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

Test_IRC_Net8
hang 2025-10-22 10:25:13 +08:00
commit 70443b7b8d
27 changed files with 103048 additions and 6 deletions

View File

@ -2002,6 +2002,19 @@
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserAgreementService.GetCurrentVersionUserAgreements">
<summary>
获取当前版本的用户协议和隐私采集
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserAgreementService.GetUserAgreementById(IRaCIS.Core.Application.Service.DTO.GetUserAgreementByIdInDto)">
<summary>
根据Id获取用户协议和隐私采集
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserAgreementService.SetCurrentVersion(IRaCIS.Core.Application.Service.DTO.SetUserAgreementCurrentVersionInDto)">
<summary>
设置为当前版本
@ -2469,6 +2482,11 @@
用户 签名某个文档 Dto
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Inspection.DTO.GetDataInspectionOutDto.CriterionType">
<summary>
标准枚举
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Inspection.DTO.GetDataInspectionOutDto.ParentIdentification">
<summary>
父标识
@ -13209,7 +13227,7 @@
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingNoneDicomMark},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserLog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo},IRaCIS.Core.Application.Service.IVisitTaskHelpeService,IRaCIS.Core.Application.Service.IVisitTaskService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService,IRaCIS.Core.Application.Service.IReadingCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserFeedBack},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCriterionPage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskRelation},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingJudgeInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganTrialInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialDocument},IRaCIS.Core.Application.Service.ReadingCalculate.Interface.ILuganoCalculateService,IRaCIS.Core.Application.Service.ReadingCalculate.Interface.ILuganoWithoutPETCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionMark},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTrialCriterionDictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Application.Service.IGeneralCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskStudy},IRaCIS.Core.Application.Service.ImageAndDoc.IDownloadAndUploadService,IRaCIS.Core.Application.Interfaces.ITrialEmailNoticeConfigService,AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer,ZiggyCreatures.Caching.Fusion.IFusionCache)">
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingNoneDicomMark},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingNoneDicomMarkBinding},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserLog},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo},IRaCIS.Core.Application.Service.IVisitTaskHelpeService,IRaCIS.Core.Application.Service.IVisitTaskService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService,IRaCIS.Core.Application.Service.IReadingCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserFeedBack},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.ServiceVerifyConfigOption},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingGlobalTaskInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCriterionPage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskRelation},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingJudgeInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganTrialInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialDocument},IRaCIS.Core.Application.Service.ReadingCalculate.Interface.ILuganoCalculateService,IRaCIS.Core.Application.Service.ReadingCalculate.Interface.ILuganoWithoutPETCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionMark},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTrialCriterionDictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableAnswerRowInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Application.Service.IGeneralCalculateService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskStudy},IRaCIS.Core.Application.Service.ImageAndDoc.IDownloadAndUploadService,IRaCIS.Core.Application.Interfaces.ITrialEmailNoticeConfigService,AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer,ZiggyCreatures.Caching.Fusion.IFusionCache)">
<summary>
IR影像阅片
</summary>
@ -13650,6 +13668,27 @@
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.SaveAnswerAndBindingNoneDicomMark(IRaCIS.Core.Application.Service.Reading.Dto.AddNoneDicomMarkAndBinding)">
<summary>
保存答案和非Dicom标记绑定关系
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.DeleteBinding(IRaCIS.Core.Application.Service.Reading.Dto.DeleteBindingInDto)">
<summary>
删除绑定关系
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.GetNoneDicomMarkAndBinding(IRaCIS.Core.Application.Service.Reading.Dto.GetNoneDicomMarkAndBindingInDto)">
<summary>
获取非Dicom标记和绑定关系
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.AddNoneDicomMark(IRaCIS.Core.Application.Service.Reading.Dto.AddNoneDicomMarkInDto)">
<summary>
添加非Dicom标记
@ -15262,6 +15301,11 @@
<member name="T:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit">
<summary> FrontAuditConfigAddOrEdit 列表查询参数模型</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit.ApplyCriterionList">
<summary>
适用的标准
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit.IsDefaultChoice">
<summary>
是否默认选择

View File

@ -159,6 +159,12 @@ namespace IRaCIS.Core.Application.ViewModel
public class FrontAuditConfigAddOrEdit
{
public Guid? Id { get; set; }
/// <summary>
/// 适用的标准
/// </summary>
public List<CriterionType> ApplyCriterionList { get; set; } = new List<CriterionType>() { };
public string Value { get; set; } = string.Empty;
public string ValueCN { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;

View File

@ -44,6 +44,11 @@ public class SetUserAgreementCurrentVersionInDto
public Guid Id { get; set; }
}
public class GetUserAgreementByIdInDto
{
public Guid Id { get; set; }
}
public class UserAgreementQuery:PageInput
{
public DateTime? StartEffectiveDate { get; set; }

View File

@ -11,6 +11,7 @@ using System.Threading.Tasks;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Application.Service.Interface;
using IRaCIS.Core.Application.Service.DTO;
using Microsoft.AspNetCore.Authorization;
namespace IRaCIS.Core.Application.Service;
/// <summary>
@ -49,6 +50,35 @@ public class UserAgreementService(IRepository<UserAgreement> _userAgreementRepos
return pageList;
}
/// <summary>
/// 获取当前版本的用户协议和隐私采集
/// </summary>
/// <returns></returns>
[AllowAnonymous]
[HttpPost]
public async Task<List<UserAgreementView>> GetCurrentVersionUserAgreements()
{
var userAgreementList = await _userAgreementRepository.Where(x=>x.IsCurrentVersion)
.ProjectTo<UserAgreementView>(_mapper.ConfigurationProvider)
.ToListAsync();
return userAgreementList;
}
/// <summary>
/// 根据Id获取用户协议和隐私采集
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpPost]
public async Task<UserAgreementView> GetUserAgreementById(GetUserAgreementByIdInDto inDto)
{
var userAgreement = await _userAgreementRepository.Where(x => x.Id == inDto.Id)
.ProjectTo<UserAgreementView>(_mapper.ConfigurationProvider)
.FirstNotNullAsync();
return userAgreement;
}
/// <summary>
/// 设置为当前版本

View File

@ -372,7 +372,10 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
public string ModuleTypeName { get; set; } = string.Empty;
public string ModuleTypeNameCN { get; set; } = string.Empty;
/// <summary>
/// 标准枚举
/// </summary>
public CriterionType? CriterionType { get; set; }
public string SignText { get; set; } = string.Empty;
public decimal? VisitNum { get; set; }

View File

@ -14,6 +14,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
public class InspectionService(IRepository<DataInspection> _dataInspectionRepository,
IRepository<Dictionary> _dictionaryRepository,
IRepository<TrialSign> _trialSignRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<IdentityUser> _identityUserRepository,
IRepository<TrialAuditShow> _trialAuditShowRepository,
IRepository<UserRole> _userRoleRepository,
@ -102,6 +103,9 @@ namespace IRaCIS.Core.Application.Service.Inspection
join trial in _trialRepository.Where().IgnoreQueryFilters() on data.TrialId equals trial.Id into trialtemp
from leftrial in trialtemp.DefaultIfEmpty()
join readingQuestionCriterionTrial in _readingQuestionCriterionTrialRepository.Where().IgnoreQueryFilters() on data.TrialReadingCriterionId equals readingQuestionCriterionTrial.Id into readingQuestionCriterionTrialtemp
from leftreadingQuestionCriterionTrial in readingQuestionCriterionTrialtemp.DefaultIfEmpty()
join trialSite in _trialSiteRepository.Where().IgnoreQueryFilters() on data.TrialSiteId equals trialSite.Id into trialSitetemp
from lefttrialSite in trialSitetemp.DefaultIfEmpty()
@ -136,6 +140,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
{
IsShow = lefttrialShow != null ? lefttrialShow.IsShow : leftfrontAuditConfig.IsDefaultChoice,
CreateTime = data.CreateTime,
CriterionType= leftreadingQuestionCriterionTrial==null? null: leftreadingQuestionCriterionTrial.CriterionType,
CreateUserId = data.CreateUserId,
ModuleTypeId = leftmoduleTypec.Id,
BlindName = data.VisitTask.TaskBlindName,

View File

@ -2442,6 +2442,26 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid VisitTaskId { get; set; }
}
public class GetNoneDicomMarkAndBindingInDto
{
public Guid VisitTaskId { get; set; }
}
public class GetNoneDicomMarkAndBindingOutDto
{
public List<AddNoneDicomMarkInDto> NoneDicomMarkList { get; set; }
public List<BindingData> BindingList { get; set; }
}
public class BindingData:BindingInfo
{
public Guid NoneDicomMarkId { get; set; }
public Guid? MarkId { get; set; }
public Guid VisitTaskId { get; set; }
}
public class AddNoneDicomMarkInDto
{
public Guid? Id { get; set; }
@ -2449,6 +2469,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid VisitTaskId { get; set; }
public Guid? StudyId { get; set; }
public Guid? MarkId { get; set; }
public Guid? NoneDicomFileId { get; set; }
public string Path { get; set; }
@ -2457,6 +2479,40 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
public class DeleteBindingInDto
{
public Guid BindingIdId { get; set; }
}
public class AddNoneDicomMarkAndBinding
{
public Guid VisitTaskId { get; set; }
public Guid? StudyId { get; set; }
public Guid? MarkId { get; set; }
public Guid? NoneDicomFileId { get; set; }
public string Path { get; set; }
public string MeasureData { get; set; } = string.Empty;
public Guid QuestionId { get; set; }
public Guid? RowId { get; set; }
public Guid? TableQuestionId { get; set; }
public string Answer { get; set; }
}
public class BindingInfo
{
public Guid? QuestionId { get; set; }
public Guid? RowId { get; set; }
public Guid? TableQuestionId { get; set; }
}
/// <summary>
///
/// </summary>

View File

@ -38,6 +38,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<TaskInstance> _taskInstanceRepository,
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
IRepository<ReadingNoneDicomMark> _readingNoneDicomMarkRepository,
IRepository<ReadingNoneDicomMarkBinding> _readingNoneDicomMarkBindingRepository,
IRepository<UserLog> _userLogRepository,
IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository,
IRepository<ReadingOncologyTaskInfo> _readingOncologyTaskInfoRepository,
@ -1882,7 +1883,7 @@ namespace IRaCIS.Core.Application.Service
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task MergeLesion(MergeLesionInDto inDto)
public async Task<IResponseOutput> MergeLesion(MergeLesionInDto inDto)
{
await VerifyTaskIsSign(inDto.VisitTaskId);
await VerifyIsBaseLineTask(inDto.VisitTaskId);
@ -1942,6 +1943,8 @@ namespace IRaCIS.Core.Application.Service
});
break;
}
return ResponseOutput.Ok();
}
/// <summary>

View File

@ -1,4 +1,5 @@
using IRaCIS.Core.Application.Contracts;
using Amazon.Runtime.Internal.Auth;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.ViewModel;
@ -32,6 +33,156 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Ok(true);
}
/// <summary>
/// 保存答案和非Dicom标记绑定关系
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> SaveAnswerAndBindingNoneDicomMark(AddNoneDicomMarkAndBinding inDto)
{
var visitTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
// 说明要移除标记数据
if (inDto.MeasureData == string.Empty)
{
// 先找到绑定关系
var binding = await _readingNoneDicomMarkBindingRepository.Where(x =>
x.VisitTaskId == inDto.VisitTaskId &&
x.QuestionId == inDto.QuestionId &&
x.RowId == inDto.RowId &&
x.TableQuestionId == inDto.TableQuestionId).FirstOrDefaultAsync();
if (binding != null)
{
if ((await _readingNoneDicomMarkBindingRepository.Where(x => x.NoneDicomMarkId == binding.NoneDicomMarkId).CountAsync()) == 1)
{
await _readingNoneDicomMarkBindingRepository.DeleteFromQueryAsync(x => x.Id == binding.Id);
}
}
}
else
{
// 找到标记信息
var mark = await _readingNoneDicomMarkRepository.Where(x => x.MarkId == inDto.MarkId).FirstOrDefaultAsync();
if (mark != null)
{
if (mark.MeasureData != inDto.MeasureData || mark.Path != inDto.Path)
{
await _readingNoneDicomMarkRepository.UpdatePartialFromQueryAsync(x => x.Id == mark.Id, u => new Domain.Models.ReadingNoneDicomMark()
{
MeasureData = inDto.MeasureData,
Path = inDto.Path
});
}
}
else
{
// 添加标记信息
mark = new ReadingNoneDicomMark()
{
Id = NewId.NextGuid(),
VisitTaskId = inDto.VisitTaskId,
StudyId = inDto.StudyId,
NoneDicomFileId = inDto.NoneDicomFileId,
Path = inDto.Path,
MeasureData = inDto.MeasureData,
MarkId = inDto.MarkId
};
await _readingNoneDicomMarkRepository.AddAsync(mark);
}
await _readingNoneDicomMarkBindingRepository.BatchDeleteNoTrackingAsync(x =>
x.VisitTaskId == inDto.VisitTaskId &&
x.QuestionId == inDto.QuestionId &&
x.RowId == inDto.RowId &&
x.TableQuestionId == inDto.TableQuestionId);
await _readingNoneDicomMarkBindingRepository.AddAsync(new ReadingNoneDicomMarkBinding()
{
Id = NewId.NextGuid(),
VisitTaskId = inDto.VisitTaskId,
QuestionId = inDto.QuestionId,
RowId = inDto.RowId,
TableQuestionId = inDto.TableQuestionId,
NoneDicomMarkId = mark.Id,
MarkId = mark.MarkId
});
}
// 处理答案
if (inDto.RowId == null)
{
await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.ReadingQuestionTrialId == inDto.QuestionId);
await _readingTaskQuestionAnswerRepository.AddAsync(new ReadingTaskQuestionAnswer()
{
Id = NewId.NextGuid(),
SubjectId = visitTask.SubjectId,
Answer = inDto.Answer,
ReadingQuestionTrialId = inDto.QuestionId,
VisitTaskId = inDto.VisitTaskId,
TrialId = visitTask.TrialId
});
}
else
{
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowId == inDto.RowId&&x.TableQuestionId==inDto.TableQuestionId);
var rowinfo=await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId.Value).FirstNotNullAsync();
await _readingTableQuestionAnswerRepository.AddAsync(new ReadingTableQuestionAnswer()
{
Id = NewId.NextGuid(),
RowId = inDto.RowId.Value,
Answer = inDto.Answer,
QuestionId= inDto.QuestionId,
TableQuestionId= inDto.TableQuestionId.Value,
VisitTaskId = inDto.VisitTaskId,
TrialId = visitTask.TrialId,
RowIndex= rowinfo.RowIndex,
});
}
await _visitTaskRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
/// <summary>
/// 删除绑定关系
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> DeleteBinding(DeleteBindingInDto inDto)
{
await _readingNoneDicomMarkBindingRepository.DeleteFromQueryAsync(x =>x.Id==inDto.BindingIdId, true);
return ResponseOutput.Ok();
}
/// <summary>
/// 获取非Dicom标记和绑定关系
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<GetNoneDicomMarkAndBindingOutDto> GetNoneDicomMarkAndBinding(GetNoneDicomMarkAndBindingInDto inDto)
{
GetNoneDicomMarkAndBindingOutDto result=new GetNoneDicomMarkAndBindingOutDto ();
result.NoneDicomMarkList = await _readingNoneDicomMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId)
.ProjectTo<AddNoneDicomMarkInDto>(_mapper.ConfigurationProvider)
.ToListAsync();
result.BindingList = await _readingNoneDicomMarkBindingRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId)
.ProjectTo<BindingData>(_mapper.ConfigurationProvider)
.ToListAsync();
return result;
}
/// <summary>
/// 添加非Dicom标记

View File

@ -67,6 +67,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<TableMarkInfo, ReadingTaskQuestionMark>();
CreateMap<AddNoneDicomMarkInDto, ReadingNoneDicomMark>();
CreateMap<ReadingNoneDicomMark, AddNoneDicomMarkInDto>();
CreateMap<AddNoneDicomMarkAndBinding, BindingData>();
CreateMap<ReadingTaskQuestionMark, TableMarkInfo>();
CreateMap<VisitTask, VisitTaskDto>();
CreateMap<SaveTableQuestionMarkInDto, ReadingTaskQuestionMark>();

View File

@ -514,7 +514,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var calculateDto = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId);
return new GetReportVerifyOutDto()
{
TumorEvaluate = calculateDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ImgOncology).Select(x => x.Answer).FirstOrDefault(),
TumorEvaluate = calculateDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.CTandMRI).Select(x => x.Answer).FirstOrDefault(),
IsExistDisease = await this.GetReportIsExistDisease(inDto.VisitTaskId),
};

View File

@ -1,3 +1,5 @@
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Domain.Models;
[Comment("稽查 - 配置表 (需要同步)")]
@ -120,6 +122,11 @@ public class FrontAuditConfig : BaseFullAuditEntity
public string ValueCN { get; set; } = null!;
/// <summary>
/// 适用的标准
/// </summary>
public List<CriterionType> ApplyCriterionList { get; set; } = new List<CriterionType>() { };
/// <summary>
/// 是否默认选择
/// </summary>

View File

@ -20,5 +20,8 @@ public class ReadingNoneDicomMark : BaseAddAuditEntity
[MaxLength]
public string MeasureData { get; set; } = string.Empty;
/// <summary>
/// 标记的唯一标识符
/// </summary>
public Guid? MarkId { get; set; }
}

View File

@ -0,0 +1,24 @@
namespace IRaCIS.Core.Domain.Models;
[Comment("项目阅片 - 非Dicom标记绑定")]
[Table("ReadingNoneDicomMarkBinding")]
public class ReadingNoneDicomMarkBinding : BaseAddAuditEntity
{
[JsonIgnore]
[ForeignKey("NoneDicomMarkId")]
public NoneDicomStudy NoneDicomStudy { get; set; }
public Guid VisitTaskId { get; set; }
public Guid? QuestionId { get; set; }
public Guid? RowId { get; set; }
public Guid? TableQuestionId { get; set; }
public Guid NoneDicomMarkId { get; set; }
public Guid? MarkId { get; set; }
}

View File

@ -363,6 +363,8 @@ public class IRaCISDBContext : DbContext
public virtual DbSet<ReadingNoneDicomMark> ReadingNoneDicomMark { get; set; }
public virtual DbSet<ReadingNoneDicomMarkBinding> ReadingNoneDicomMarkBinding { get; set; }
public virtual DbSet<ReadModule> ReadModule { get; set; }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,74 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class Binding : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "MarkId",
table: "ReadingNoneDicomMark",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.CreateTable(
name: "ReadingNoneDicomMarkBinding",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
VisitTaskId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
QuestionId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
RowId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
TableQuestionId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
NoneDicomMarkId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
MarkId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CreateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
CreateTime = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ReadingNoneDicomMarkBinding", x => x.Id);
table.ForeignKey(
name: "FK_ReadingNoneDicomMarkBinding_NoneDicomStudy_NoneDicomMarkId",
column: x => x.NoneDicomMarkId,
principalTable: "NoneDicomStudy",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ReadingNoneDicomMarkBinding_User_CreateUserId",
column: x => x.CreateUserId,
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
},
comment: "项目阅片 - 非Dicom标记绑定");
migrationBuilder.CreateIndex(
name: "IX_ReadingNoneDicomMarkBinding_CreateUserId",
table: "ReadingNoneDicomMarkBinding",
column: "CreateUserId");
migrationBuilder.CreateIndex(
name: "IX_ReadingNoneDicomMarkBinding_NoneDicomMarkId",
table: "ReadingNoneDicomMarkBinding",
column: "NoneDicomMarkId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "ReadingNoneDicomMarkBinding");
migrationBuilder.DropColumn(
name: "MarkId",
table: "ReadingNoneDicomMark");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class ApplyCriterionList : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class ApplyCriterionList1 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class ApplyCriterionList2 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ApplyCriterionList",
table: "FrontAuditConfig");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "ApplyCriterionList",
table: "FrontAuditConfig",
type: "nvarchar(max)",
nullable: false,
defaultValue: "");
}
}
}

View File

@ -0,0 +1,27 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class ApplyCriterionList3 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "ApplyCriterionList",
table: "FrontAuditConfig",
type: "nvarchar(max)",
nullable: false,
defaultValue: "[]");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class ApplyCriterionList4 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "ApplyCriterionList",
table: "FrontAuditConfig",
type: "nvarchar(max)",
nullable: false,
defaultValue: "[]");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ApplyCriterionList",
table: "FrontAuditConfig");
}
}
}

View File

@ -2822,6 +2822,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplyCriterionList")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ChildDataEnLabel")
.IsRequired()
.HasMaxLength(400)
@ -5709,6 +5713,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("MarkId")
.HasColumnType("uniqueidentifier");
b.Property<string>("MeasureData")
.IsRequired()
.HasColumnType("nvarchar(max)");
@ -5741,6 +5748,47 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingNoneDicomMarkBinding", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("MarkId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("NoneDicomMarkId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("QuestionId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("RowId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("TableQuestionId")
.HasColumnType("uniqueidentifier");
b.Property<Guid>("VisitTaskId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.HasIndex("NoneDicomMarkId");
b.ToTable("ReadingNoneDicomMarkBinding", t =>
{
t.HasComment("项目阅片 - 非Dicom标记绑定");
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo", b =>
{
b.Property<Guid>("Id")
@ -17284,6 +17332,25 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("NoneDicomStudy");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingNoneDicomMarkBinding", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy")
.WithMany()
.HasForeignKey("NoneDicomMarkId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CreateUserRole");
b.Navigation("NoneDicomStudy");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingOncologyTaskInfo", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")