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

This commit is contained in:
2025-11-12 15:47:50 +08:00
13 changed files with 458 additions and 1 deletions
@@ -446,6 +446,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
public class SetReadKeyFileInDto
{
public Guid TrialCriterionId { get; set; }
}
public class ViewStudyPartInDto
{
public Guid VisitTaskId { get; set; }
@@ -1947,6 +1951,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary>
public bool IsConvertedTask { get; set; } = false;
public bool IsReadKeyFile { get; set; } = false;
}
public class GetReadingImgInDto
@@ -0,0 +1,42 @@
//--------------------------------------------------------------------
// 此代码由liquid模板自动生成 byzhouhang 20240909
// 生成时间 2025-11-12 06:46:41Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using System;
using IRaCIS.Core.Domain.Share;
using System.Collections.Generic;
namespace IRaCIS.Core.Application.Service.Reading.Dto;
public class SystemCriterionKeyFileView : SystemCriterionKeyFileAddOrEdit
{
public DateTime CreateTime { get; set; }
}
public class SystemCriterionKeyFileAddOrEdit
{
public Guid? Id { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
public Guid SystemCriterionId { get; set; }
}
public class SystemCriterionKeyFileQuery:PageInput
{
public string? FileName { get; set; }
public string? FilePath { get; set; }
public Guid SystemCriterionId { get; set; }
}
@@ -0,0 +1,41 @@
//--------------------------------------------------------------------
// 此代码由liquid模板自动生成 byzhouhang 20240909
// 生成时间 2025-11-12 06:51:58Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using System;
using IRaCIS.Core.Domain.Share;
using System.Collections.Generic;
namespace IRaCIS.Core.Application.Service.Reading.Dto;
public class TrialCriterionKeyFileView : TrialCriterionKeyFileAddOrEdit
{
public DateTime CreateTime { get; set; }
}
public class TrialCriterionKeyFileAddOrEdit
{
public Guid? Id { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
public Guid TrialCriterionId { get; set; }
}
public class TrialCriterionKeyFileQuery:PageInput
{
public string? FileName { get; set; }
public Guid TrialCriterionId { get; set; }
}
@@ -0,0 +1,23 @@
//--------------------------------------------------------------------
// 此代码由liquid模板自动生成 byzhouhang 20240909
// 生成时间 2025-11-12 06:46:41Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using System;
using IRaCIS.Core.Infrastructure.Extention;
using System.Threading.Tasks;
using IRaCIS.Core.Application.Service.Reading.Dto;
namespace IRaCIS.Core.Application.Service.Reading.Interface;
public interface ISystemCriterionKeyFileService
{
Task<PageOutput<SystemCriterionKeyFileView>> GetSystemCriterionKeyFileList(SystemCriterionKeyFileQuery inQuery);
Task<IResponseOutput> AddOrUpdateSystemCriterionKeyFile(SystemCriterionKeyFileAddOrEdit addOrEditSystemCriterionKeyFile);
Task<IResponseOutput> DeleteSystemCriterionKeyFile(Guid systemCriterionKeyFileId);
}
@@ -0,0 +1,23 @@
//--------------------------------------------------------------------
// 此代码由liquid模板自动生成 byzhouhang 20240909
// 生成时间 2025-11-12 06:51:58Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using System;
using IRaCIS.Core.Infrastructure.Extention;
using System.Threading.Tasks;
using IRaCIS.Core.Application.Service.Reading.Dto;
namespace IRaCIS.Core.Application.Service.Reading.Interface;
public interface ITrialCriterionKeyFileService
{
Task<PageOutput<TrialCriterionKeyFileView>> GetTrialCriterionKeyFileList(TrialCriterionKeyFileQuery inQuery);
Task<IResponseOutput> AddOrUpdateTrialCriterionKeyFile(TrialCriterionKeyFileAddOrEdit addOrEditTrialCriterionKeyFile);
Task<IResponseOutput> DeleteTrialCriterionKeyFile(Guid trialCriterionKeyFileId);
}
@@ -0,0 +1,78 @@
//--------------------------------------------------------------------
// 此代码由liquid模板自动生成 byzhouhang 20240909
// 生成时间 2025-11-12 06:46:38Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Infrastructure.Extention;
using System.Threading.Tasks;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.Service.Reading.Interface;
namespace IRaCIS.Core.Application.Service;
/// <summary>
/// 系统标准阅片关键点文件服务
/// </summary>
/// <param name="_systemCriterionKeyFileRepository"></param>
/// <param name="_mapper"></param>
/// <param name="_userInfo"></param>
/// <param name="_localizer"></param>
[ApiExplorerSettings(GroupName = "Reading")]
public class SystemCriterionKeyFileService(IRepository<SystemCriterionKeyFile> _systemCriterionKeyFileRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService, ISystemCriterionKeyFileService
{
/// <summary>
/// 获取系统标准阅片关键点文件列表
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<SystemCriterionKeyFileView>> GetSystemCriterionKeyFileList(SystemCriterionKeyFileQuery inQuery)
{
var systemCriterionKeyFileQueryable =_systemCriterionKeyFileRepository
.Where(x=>x.SystemCriterionId==inQuery.SystemCriterionId)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.FileName),x=>x.FileName.Contains(inQuery.FileName))
.ProjectTo<SystemCriterionKeyFileView>(_mapper.ConfigurationProvider);
var pageList= await systemCriterionKeyFileQueryable.ToPagedListAsync(inQuery);
return pageList;
}
/// <summary>
/// 新增或者修改系统标准阅片关键点文件
/// </summary>
/// <param name="addOrEditSystemCriterionKeyFile"></param>
/// <returns></returns>
public async Task<IResponseOutput> AddOrUpdateSystemCriterionKeyFile(SystemCriterionKeyFileAddOrEdit addOrEditSystemCriterionKeyFile)
{
// 在此处拷贝automapper 映射
var entity = await _systemCriterionKeyFileRepository.InsertOrUpdateAsync(addOrEditSystemCriterionKeyFile, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
/// <summary>
/// 删除系统标准阅片关键点文件
/// </summary>
/// <param name="systemCriterionKeyFileId"></param>
/// <returns></returns>
[HttpDelete("{systemCriterionKeyFileId:guid}")]
public async Task<IResponseOutput> DeleteSystemCriterionKeyFile(Guid systemCriterionKeyFileId)
{
var success = await _systemCriterionKeyFileRepository.DeleteFromQueryAsync(t => t.Id == systemCriterionKeyFileId,true);
return ResponseOutput.Ok();
}
}
@@ -0,0 +1,81 @@
//--------------------------------------------------------------------
// 此代码由liquid模板自动生成 byzhouhang 20240909
// 生成时间 2025-11-12 06:51:56Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Infrastructure.Extention;
using System.Threading.Tasks;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.Service.Reading.Dto;
namespace IRaCIS.Core.Application.Service;
/// <summary>
/// 项目标准阅片关键点文件服务
/// </summary>
/// <param name="_trialCriterionKeyFileRepository"></param>
/// <param name="_mapper"></param>
/// <param name="_userInfo"></param>
/// <param name="_localizer"></param>
[ApiExplorerSettings(GroupName = "Reading")]
public class TrialCriterionKeyFileService(IRepository<TrialCriterionKeyFile> _trialCriterionKeyFileRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService, ITrialCriterionKeyFileService
{
/// <summary>
/// 获取项目标准阅片关键点文件列表
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<TrialCriterionKeyFileView>> GetTrialCriterionKeyFileList(TrialCriterionKeyFileQuery inQuery)
{
var trialCriterionKeyFileQueryable =_trialCriterionKeyFileRepository
.Where(x=>x.TrialCriterionId==inQuery.TrialCriterionId)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.FileName),x=>x.FileName.Contains(inQuery.FileName))
.ProjectTo<TrialCriterionKeyFileView>(_mapper.ConfigurationProvider);
var pageList= await trialCriterionKeyFileQueryable.ToPagedListAsync(inQuery);
return pageList;
}
/// <summary>
/// 新增或者修改项目标准阅片关键点文件
/// </summary>
/// <param name="addOrEditTrialCriterionKeyFile"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> AddOrUpdateTrialCriterionKeyFile(TrialCriterionKeyFileAddOrEdit addOrEditTrialCriterionKeyFile)
{
var entity = await _trialCriterionKeyFileRepository.InsertOrUpdateAsync(addOrEditTrialCriterionKeyFile, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
/// <summary>
/// 删除项目标准阅片关键点文件
/// </summary>
/// <param name="trialCriterionKeyFileId"></param>
/// <returns></returns>
[HttpDelete("{trialCriterionKeyFileId:guid}")]
public async Task<IResponseOutput> DeleteTrialCriterionKeyFile(Guid trialCriterionKeyFileId)
{
var success = await _trialCriterionKeyFileRepository.DeleteFromQueryAsync(t => t.Id == trialCriterionKeyFileId,true);
return ResponseOutput.Ok();
}
}
@@ -71,6 +71,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<ReadingQuestionSystem> _readingQuestionSystem,
IRepository<CriterionKeyFileRead> _criterionKeyFileReadRepository,
IRepository<NoneDicomStudyFile> _noneDicomStudyFileSystem,
IGeneralCalculateService _generalCalculateService,
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
@@ -80,7 +81,23 @@ namespace IRaCIS.Core.Application.Service
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IReadingImageTaskService
{
/// <summary>
/// 设置已阅读关键文件
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> SetReadKeyFile(SetReadKeyFileInDto inDto)
{
await _criterionKeyFileReadRepository.AddAsync(new CriterionKeyFileRead()
{
IdentityUserId=_userInfo.IdentityUserId,
TrialCriterionId= inDto.TrialCriterionId,
});
await _criterionKeyFileReadRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
#region
@@ -3747,6 +3764,7 @@ namespace IRaCIS.Core.Application.Service
task.ReadingToolList = criterionInfo.ReadingToolList;
task.IsExistUnprocessedFeedback = await _userFeedBackRepository.AnyAsync(x => x.VisitTaskId == task.VisitTaskId && x.State == 0);
task.IsViewStudyPart= visitTaskInfo.ReadingCategory==ReadingCategory.Judge|| visitTaskInfo.IsViewStudyPart;
task.IsReadKeyFile = await _criterionKeyFileReadRepository.AnyAsync(x => x.IdentityUserId == _userInfo.IdentityUserId && x.TrialCriterionId == task.TrialReadingCriterionId);
// 添加默认答案
if (inDto.VisitTaskId == null && visitTaskInfo.ReadingTaskState != ReadingTaskState.HaveSigned)
{
@@ -15,6 +15,14 @@ namespace IRaCIS.Core.Application.Service
//是否英文环境
var isEn_Us = false;
CreateMap<SystemCriterionKeyFile, SystemCriterionKeyFileView>();
CreateMap<SystemCriterionKeyFile, SystemCriterionKeyFileAddOrEdit>().ReverseMap();
// 在此处拷贝automapper 映射
CreateMap<TrialCriterionKeyFile, TrialCriterionKeyFileView>();
CreateMap<TrialCriterionKeyFile, TrialCriterionKeyFileAddOrEdit>().ReverseMap();
//标准Id
List<Guid> CriterionIds = new List<Guid>();
@@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Panda.DynamicWebApi.Attributes;
using System.IO;
using ZiggyCreatures.Caching.Fusion;
namespace IRaCIS.Core.Application
@@ -30,6 +31,10 @@ namespace IRaCIS.Core.Application
IRepository<ReadingQuestionCriterionSystem> _readingQuestionCriterionSystemRepository,
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
IRepository<ReadingCriterionPage> _readingCriterionPageRepository,
IRepository<SystemCriterionKeyFile> _systemCriterionKeyFileRepository,
IOSSService oSSService,
IRepository<TrialCriterionKeyFile> _trialCriterionKeyFileRepository,
IOrganInfoService _iOrganInfoService,
IRepository<TrialBodyPart> _trialBodyPartRepository,
IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository,
@@ -276,6 +281,8 @@ namespace IRaCIS.Core.Application
await _trialCriterionDictionaryCode.AddRangeAsync(criterionDictionaryCodeList);
#endregion
// 同步阅片关键点
await SynchronizeKeyFile(inDto.TrialReadingCriterionId);
//var trialModalitys = _readingQuestionCriterionTrialRepository.Where(t => t.Id == inDto.TrialReadingCriterionId).Select(t => t.Trial.Modalitys).FirstOrDefault();
var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == trialCriterion.ReadingQuestionCriterionSystemId).FirstNotNullAsync();
@@ -317,6 +324,39 @@ namespace IRaCIS.Core.Application
return ResponseOutput.Ok(true);
}
/// <summary>
/// 同步阅片关键点
/// </summary>
/// <returns></returns>
public async Task SynchronizeKeyFile(Guid TrialReadingCriterionId)
{
var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == TrialReadingCriterionId).AsNoTracking().FirstOrDefaultAsync();
if (trialCriterion != null && trialCriterion.ReadingQuestionCriterionSystemId!=null)
{
var systemCriterionKeyFile = await _systemCriterionKeyFileRepository.Where(x => x.SystemCriterionId == trialCriterion.ReadingQuestionCriterionSystemId).ToListAsync();
List<TrialCriterionKeyFile> trialCriterionKeyFiles= new List<TrialCriterionKeyFile>();
foreach (var item in systemCriterionKeyFile)
{
var path= await oSSService.UploadToOSSAsync(item.FilePath, $"{trialCriterion.TrialId}/KeyFile", true);
trialCriterionKeyFiles.Add(new TrialCriterionKeyFile
{
TrialCriterionId= TrialReadingCriterionId,
FileName= item.FileName,
FilePath= path
});
}
await _trialCriterionKeyFileRepository.BatchDeleteNoTrackingAsync(x => x.TrialCriterionId == TrialReadingCriterionId);
await _trialCriterionKeyFileRepository.AddRangeAsync(trialCriterionKeyFiles);
await _trialCriterionKeyFileRepository.SaveChangesAsync();
}
}
/// <summary>
/// 修改全局阅片配置信息
/// </summary>