Merge branch 'Uat.Study' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Uat.Study
commit
2a3748e396
|
@ -25,6 +25,7 @@ using Aliyun.Acs.Core;
|
||||||
using Aliyun.Acs.Core.Profile;
|
using Aliyun.Acs.Core.Profile;
|
||||||
using Aliyun.Acs.Sts.Model.V20150401;
|
using Aliyun.Acs.Sts.Model.V20150401;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using MassTransit;
|
||||||
|
|
||||||
namespace IRaCIS.Api.Controllers
|
namespace IRaCIS.Api.Controllers
|
||||||
{
|
{
|
||||||
|
@ -144,16 +145,16 @@ namespace IRaCIS.Api.Controllers
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IClientProfile profile = DefaultProfile.GetProfile("cn-shanghai", configuration["AliyunOSS:accessKeyId"], configuration["AliyunOSS:accessKeySecret"]);
|
IClientProfile profile = DefaultProfile.GetProfile("cn-shanghai", configuration["AliyunOSS:accessKeyId"], configuration["AliyunOSS:accessKeySecret"]);
|
||||||
DefaultAcsClient client = new DefaultAcsClient(profile);
|
DefaultAcsClient client = new DefaultAcsClient(profile);
|
||||||
|
|
||||||
|
|
||||||
// 创建一个STS请求
|
// 创建一个STS请求
|
||||||
AssumeRoleRequest request = new AssumeRoleRequest
|
AssumeRoleRequest request = new AssumeRoleRequest
|
||||||
{
|
{
|
||||||
RoleArn = "acs:ram::1899121822495495:role/oss-upload", // 角色ARN,需要替换为你的角色ARN
|
RoleArn = "acs:ram::1899121822495495:role/oss-upload", // 角色ARN,需要替换为你的角色ARN
|
||||||
RoleSessionName = "session-name", // 角色会话名称,可自定义
|
RoleSessionName = $"session-name-{NewId.NextGuid()}", // 角色会话名称,可自定义
|
||||||
DurationSeconds = 3600, // 令牌有效期(单位:秒),这里设置为1小时
|
DurationSeconds = 900, // 令牌有效期(单位:秒),这里设置为1小时
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft": "Warning",
|
||||||
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AliyunOSS": {
|
||||||
|
"regionId": "cn-shanghai",
|
||||||
|
"region": "oss-cn-shanghai",
|
||||||
|
"endpoint": "https://oss-cn-shanghai.aliyuncs.com",
|
||||||
|
"accessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ",
|
||||||
|
"accessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio",
|
||||||
|
"bucketName": "zy-sir-store",
|
||||||
|
"viewEndpoint": "https://zy-sir-cache.oss-cn-shanghai.aliyuncs.com"
|
||||||
|
},
|
||||||
|
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"RemoteNew": "Server=47.117.165.18,1434;Database=Prod_Study;User ID=sa;Password=WHxckj@2019;TrustServerCertificate=true",
|
||||||
|
"Hangfire": "Server=47.117.165.18,1434;Database=Prod_Study.hangfire;User ID=sa;Password=WHxckj@2019;TrustServerCertificate=true"
|
||||||
|
},
|
||||||
|
|
||||||
|
"BasicSystemConfig": {
|
||||||
|
|
||||||
|
"OpenUserComplexPassword": false,
|
||||||
|
|
||||||
|
"OpenSignDocumentBeforeWork": false,
|
||||||
|
|
||||||
|
"OpenTrialRelationDelete": true,
|
||||||
|
|
||||||
|
"OpenLoginLimit": false,
|
||||||
|
"LoginMaxFailCount": 5,
|
||||||
|
|
||||||
|
"LoginFailLockMinutes": 30
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"SystemEmailSendConfig": {
|
||||||
|
"Port": 465,
|
||||||
|
"Host": "smtp.qiye.aliyun.com",
|
||||||
|
"FromEmail": "study@extimaging.com",
|
||||||
|
"FromName": "study.extimaging",
|
||||||
|
"AuthorizationCode": "zhanying123",
|
||||||
|
"SiteUrl": "https://study.extimaging.com/login"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,8 +16,8 @@
|
||||||
"viewEndpoint": "https://zy-sir-uat-store.oss-cn-shanghai.aliyuncs.com"
|
"viewEndpoint": "https://zy-sir-uat-store.oss-cn-shanghai.aliyuncs.com"
|
||||||
},
|
},
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Uat.Study;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
|
"RemoteNew": "Server=47.117.164.182,1434;Database=Uat.Study;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
||||||
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Uat.Study.hangfire;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
|
"Hangfire": "Server=47.117.164.182,1434;Database=Uat.Study.hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
|
||||||
},
|
},
|
||||||
"BasicSystemConfig": {
|
"BasicSystemConfig": {
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
"Audience": "ZhiZhun",
|
"Audience": "ZhiZhun",
|
||||||
"TokenExpireDays": "7"
|
"TokenExpireDays": "7"
|
||||||
},
|
},
|
||||||
|
//ip
|
||||||
"IpRateLimiting": {
|
"IpRateLimiting": {
|
||||||
"EnableEndpointRateLimiting": true,
|
"EnableEndpointRateLimiting": true,
|
||||||
"StackBlockedRequests": false,
|
"StackBlockedRequests": false,
|
||||||
|
|
|
@ -58,10 +58,14 @@ namespace IRaCIS.Core.Application.Filter
|
||||||
// 后期列举出具体的类型,其他任何用户类型,都不允许操作
|
// 后期列举出具体的类型,其他任何用户类型,都不允许操作
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA)
|
||||||
{
|
{
|
||||||
//---对不起,您的账户没有操作权限。
|
if (!_userInfo.RequestUrl.Contains("TrialDocument/userConfirm"))
|
||||||
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_NoAccessPermission"]));
|
{
|
||||||
|
//---对不起,您的账户没有操作权限。
|
||||||
|
context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialResource_NoAccessPermission"]));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -10884,20 +10884,6 @@
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.TrialConfigService.GetTrialCriterionAdditionalAssessmentOptionList(System.Guid)">
|
|
||||||
<summary>
|
|
||||||
获取附加评估选项列表
|
|
||||||
</summary>
|
|
||||||
<param name="trialReadingCriterionId"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.TrialConfigService.SetTrialCriterionAdditionalAssessment(System.Collections.Generic.List{IRaCIS.Core.Application.Contracts.AddOrUpdateTrialCriterionAdditional})">
|
|
||||||
<summary>
|
|
||||||
保存附加评估设置 (自动添加 或者删除附加评估问题)
|
|
||||||
</summary>
|
|
||||||
<param name="updateList"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.TrialConfigService.GetSignText(System.String)">
|
<member name="M:IRaCIS.Core.Application.TrialConfigService.GetSignText(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取签名文本
|
获取签名文本
|
||||||
|
|
|
@ -479,9 +479,17 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class PIAuditDialogListView : PIAuditTaskCommand
|
public class PIAuditDialogListView
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public Guid VisitTaskId { get; set; }
|
||||||
|
public string NotAgreeReason { get; set; }
|
||||||
|
public string PIAuditNote { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public List<string> PIAuditImagePathList { get; set; }
|
||||||
|
|
||||||
|
public PIAuditState? PIAuditState { get; set; }
|
||||||
|
|
||||||
public string ReplyContent { get; set; } = string.Empty;
|
public string ReplyContent { get; set; } = string.Empty;
|
||||||
|
|
||||||
public bool? IsEnrollment { get; set; }
|
public bool? IsEnrollment { get; set; }
|
||||||
|
|
|
@ -275,6 +275,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
//发送对话
|
//发送对话
|
||||||
var addDialig = _mapper.Map<PIAudit>(incommand);
|
var addDialig = _mapper.Map<PIAudit>(incommand);
|
||||||
|
|
||||||
|
addDialig.PIAuditState = incommand.PIAuditState;
|
||||||
|
|
||||||
addDialig.PIAuditImagePath = visitTask.PIAuditImagePath;
|
addDialig.PIAuditImagePath = visitTask.PIAuditImagePath;
|
||||||
|
|
||||||
await _PIAuditRepository.AddAsync(addDialig);
|
await _PIAuditRepository.AddAsync(addDialig);
|
||||||
|
|
|
@ -251,7 +251,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
CreateMap<PIAudit, PIAuditDialogListView>()
|
CreateMap<PIAudit, PIAuditDialogListView>()
|
||||||
.ForMember(o => o.CreateUserName, t => t.MapFrom(u => u.CreateUser.UserName))
|
.ForMember(o => o.CreateUserName, t => t.MapFrom(u => u.CreateUser.UserName))
|
||||||
.ForMember(o => o.UserTypeEnum, t => t.MapFrom(u => u.CreateUser.UserTypeEnum))
|
.ForMember(o => o.UserTypeEnum, t => t.MapFrom(u => u.CreateUser.UserTypeEnum))
|
||||||
.ForMember(o => o.PIAuditState, t => t.MapFrom(u => u.VisitTask.PIAuditState))
|
//.ForMember(o => o.PIAuditState, t => t.MapFrom(u => u.VisitTask.PIAuditState))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
return (topicStr, htmlBodyStr, isEn_us, null);
|
return (topicStr, htmlBodyStr, isEn_us, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc);
|
await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc, taskInfo.SiteId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,7 +27,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
private readonly IRepository<Trial> _trialRepository;
|
private readonly IRepository<Trial> _trialRepository;
|
||||||
private readonly IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository;
|
private readonly IRepository<SystemDocConfirmedUser> _systemDocConfirmedUserRepository;
|
||||||
private readonly IRepository<SystemDocument> _systemDocumentRepository;
|
private readonly IRepository<SystemDocument> _systemDocumentRepository;
|
||||||
private readonly IRepository<TrialCriterionAdditionalAssessmentType> _trialCriterionAdditionalAssessmentTypeRepository;
|
|
||||||
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
|
private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,7 +34,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<TrialDocConfirmedUser> trialDocUserTypeConfirmedUserRepository,
|
IRepository<TrialDocConfirmedUser> trialDocUserTypeConfirmedUserRepository,
|
||||||
IRepository<Trial> trialRepository,
|
IRepository<Trial> trialRepository,
|
||||||
IRepository<SystemDocConfirmedUser> systemDocConfirmedUserRepository,
|
IRepository<SystemDocConfirmedUser> systemDocConfirmedUserRepository,
|
||||||
IRepository<TrialCriterionAdditionalAssessmentType> trialCriterionAdditionalAssessmentTypeRepository,
|
|
||||||
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository
|
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository
|
||||||
, IRepository<SystemDocument> systemDocumentRepository)
|
, IRepository<SystemDocument> systemDocumentRepository)
|
||||||
{
|
{
|
||||||
|
@ -45,7 +43,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
this._systemDocConfirmedUserRepository = systemDocConfirmedUserRepository;
|
this._systemDocConfirmedUserRepository = systemDocConfirmedUserRepository;
|
||||||
_systemDocumentRepository = systemDocumentRepository;
|
_systemDocumentRepository = systemDocumentRepository;
|
||||||
_readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
|
_readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
|
||||||
_trialCriterionAdditionalAssessmentTypeRepository = trialCriterionAdditionalAssessmentTypeRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -227,13 +224,11 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var trialTaskConfig = _trialRepository.Where(t => t.Id == querySystemDocument.TrialId).ProjectTo<TrialConfigTabDto>(_mapper.ConfigurationProvider).FirstOrDefault();
|
var trialTaskConfig = _trialRepository.Where(t => t.Id == querySystemDocument.TrialId).ProjectTo<TrialConfigTabDto>(_mapper.ConfigurationProvider).FirstOrDefault();
|
||||||
|
|
||||||
|
|
||||||
//var trialCriterionAdditionalAssessmentTypeList = _trialCriterionAdditionalAssessmentTypeRepository
|
|
||||||
// .Where(t => t.TrialReadingCriterion.TrialId == trialId && t.IsSelected == true && t.TrialReadingCriterion.IsSigned).Select(t=>new { t.CriterionType,t.AdditionalAssessmentType}).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
var isManualGenerateTask= _readingQuestionCriterionTrialRepository.Where(t=>t.TrialId==trialId && t.IsSigned && t.IsAutoCreate==false).Any();
|
var isManualGenerateTask= _readingQuestionCriterionTrialRepository.Where(t=>t.TrialId==trialId && t.IsSigned && t.IsAutoCreate==false).Any();
|
||||||
var isAdditionalAssessment = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsSigned && t.IsAdditionalAssessment == true
|
|
||||||
&&t.TrialCriterionAdditionalAssessmentTypeList.Any(c=>/*c.AdditionalAssessmentType==Domain.Share.Reading.AdditionalAssessmentType.BrainMetastasis &&*/ c.IsSelected==true)).Any();
|
var isAdditionalAssessment =false;
|
||||||
|
|
||||||
|
|
||||||
var isAllOnlySRReading = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsSigned).All(t => t.ReadingDivisionEnum == ReadingDivisionEnum.OnlySR);
|
var isAllOnlySRReading = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsSigned).All(t => t.ReadingDivisionEnum == ReadingDivisionEnum.OnlySR);
|
||||||
|
|
|
@ -5,25 +5,27 @@ using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using IRaCIS.Core.Application.Auth;
|
using IRaCIS.Core.Application.Auth;
|
||||||
|
using EasyCaching.Core;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Services
|
namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
[AllowAnonymous, ApiExplorerSettings(GroupName = "Image")]
|
[AllowAnonymous, ApiExplorerSettings(GroupName = "Image")]
|
||||||
public class ImageShareService : BaseService, IImageShareService
|
public class ImageShareService : BaseService, IImageShareService
|
||||||
{
|
{
|
||||||
|
private readonly IEasyCachingProvider _provider;
|
||||||
private readonly IRepository<ImageShare> _imageShareRepository;
|
private readonly IRepository<ImageShare> _imageShareRepository;
|
||||||
private readonly IRepository<DicomStudy> _studyRepository;
|
private readonly IRepository<DicomStudy> _studyRepository;
|
||||||
private readonly IConfiguration _configuration;
|
private readonly IConfiguration _configuration;
|
||||||
private readonly ITokenService _tokenService;
|
private readonly ITokenService _tokenService;
|
||||||
|
|
||||||
public ImageShareService(IRepository<ImageShare> imageShareRepository, IRepository<DicomStudy> studyRepository, IConfiguration configuration, ITokenService tokenService)
|
public ImageShareService(IRepository<ImageShare> imageShareRepository, IRepository<DicomStudy> studyRepository, IConfiguration configuration, ITokenService tokenService, IEasyCachingProvider provider)
|
||||||
{
|
{
|
||||||
|
|
||||||
_imageShareRepository = imageShareRepository;
|
_imageShareRepository = imageShareRepository;
|
||||||
_studyRepository = studyRepository;
|
_studyRepository = studyRepository;
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
_tokenService = tokenService;
|
_tokenService = tokenService;
|
||||||
|
_provider = provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -110,6 +112,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
return ResponseOutput.NotOk(_localizer["ISS_ShareExpiration"]);
|
return ResponseOutput.NotOk(_localizer["ISS_ShareExpiration"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var vitrualUserId = Guid.NewGuid();
|
||||||
var resource = new ResourceInfo()
|
var resource = new ResourceInfo()
|
||||||
{
|
{
|
||||||
StudyId = imageShare.StudyId,
|
StudyId = imageShare.StudyId,
|
||||||
|
@ -127,7 +130,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}))
|
}))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
await _provider.SetAsync(vitrualUserId.ToString(), resource.Token, TimeSpan.FromDays(7));
|
||||||
return ResponseOutput.Ok(resource);
|
return ResponseOutput.Ok(resource);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
|
|
||||||
var siteQueryable = _siteRepository
|
var siteQueryable = _siteRepository
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.SiteName), t => t.SiteName.Contains(searchModel.SiteName))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.SiteName), t => t.SiteName.Contains(searchModel.SiteName)||t.SiteNameCN.Contains(searchModel.SiteName))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.AliasName), t => t.AliasName.Contains(searchModel.AliasName))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.AliasName), t => t.AliasName.Contains(searchModel.AliasName))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.City), t => t.City.Contains(searchModel.City))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.City), t => t.City.Contains(searchModel.City))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.Country), t => t.Country.Contains(searchModel.Country))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.Country), t => t.Country.Contains(searchModel.Country))
|
||||||
|
|
|
@ -1968,6 +1968,18 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
//已确认临床数据完整性
|
//已确认临床数据完整性
|
||||||
dbSubjectVisit.IsConfirmedClinicalData = true;
|
dbSubjectVisit.IsConfirmedClinicalData = true;
|
||||||
|
|
||||||
|
|
||||||
|
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>
|
||||||
|
|
||||||
|
(x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) &&
|
||||||
|
|
||||||
|
|
||||||
|
x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign == false, x => new ReadingClinicalData()
|
||||||
|
{
|
||||||
|
IsSign = true,
|
||||||
|
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
||||||
|
});
|
||||||
|
|
||||||
//var signSuccess = await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == cRCReuploadFinishedCommand.SignId, u => new TrialSign() { IsCompleted = true });
|
//var signSuccess = await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == cRCReuploadFinishedCommand.SignId, u => new TrialSign() { IsCompleted = true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var fileCount = await _readingClinicalDataPDFRepository.Where(t => t.ReadingClinicalDataId == indto.Id).CountAsync();
|
var fileCount = await _readingClinicalDataPDFRepository.Where(t => t.ReadingClinicalDataId == indto.Id).CountAsync();
|
||||||
entity.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded;
|
entity.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded;
|
||||||
|
entity.IsSign = false;
|
||||||
entity.FileCount = fileCount;
|
entity.FileCount = fileCount;
|
||||||
var success = await _readingClinicalDataRepository.SaveChangesAsync();
|
var success = await _readingClinicalDataRepository.SaveChangesAsync();
|
||||||
return ResponseOutput.Ok(entity.Id);
|
return ResponseOutput.Ok(entity.Id);
|
||||||
|
|
|
@ -3,6 +3,7 @@ using MassTransit;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -2276,6 +2277,42 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
//public List<TableQuestionDataInfo> TableQuestions { get; set; }
|
//public List<TableQuestionDataInfo> TableQuestions { get; set; }
|
||||||
|
|
||||||
public List<GetSystemReadingQuestionOutDto> Childrens { get; set; }
|
public List<GetSystemReadingQuestionOutDto> Childrens { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public List<string> RelevanceValueList
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return this.RelevanceValue.Split(',').ToList();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
return new List<string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public List<string> ParentTriggerValueList
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return this.ParentTriggerValue.Split(',').ToList();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
return new List<string>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetTrialReadingQuestionOutDto
|
public class GetTrialReadingQuestionOutDto
|
||||||
|
|
|
@ -503,7 +503,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
.WhereIf(surveyQueryDTO.UpdateTimeBegin != null, t => t.UpdateTime >= surveyQueryDTO.UpdateTimeBegin)
|
.WhereIf(surveyQueryDTO.UpdateTimeBegin != null, t => t.UpdateTime >= surveyQueryDTO.UpdateTimeBegin)
|
||||||
.WhereIf(surveyQueryDTO.UpdateTimeEnd != null, t => t.UpdateTime <= surveyQueryDTO.UpdateTimeEnd)
|
.WhereIf(surveyQueryDTO.UpdateTimeEnd != null, t => t.UpdateTime <= surveyQueryDTO.UpdateTimeEnd)
|
||||||
|
|
||||||
.ProjectTo<TrialSiteSurveyView>(_mapper.ConfigurationProvider);
|
.ProjectTo<TrialSiteSurveyView>(_mapper.ConfigurationProvider,new { isEn_Us =_userInfo.IsEn_Us});
|
||||||
|
|
||||||
return await trialSiteSurveyQueryable.ToPagedListAsync(surveyQueryDTO.PageIndex, surveyQueryDTO.PageSize, surveyQueryDTO.SortField, surveyQueryDTO.Asc);
|
return await trialSiteSurveyQueryable.ToPagedListAsync(surveyQueryDTO.PageIndex, surveyQueryDTO.PageSize, surveyQueryDTO.SortField, surveyQueryDTO.Asc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ namespace IRaCIS.Core.Application.AutoMapper
|
||||||
{
|
{
|
||||||
public SiteSurveyConfig()
|
public SiteSurveyConfig()
|
||||||
{
|
{
|
||||||
|
var isEn_Us = false;
|
||||||
//编辑
|
//编辑
|
||||||
CreateMap<TrialSiteSurvey, TrialSiteSurveyAddOrEdit>().ReverseMap();
|
CreateMap<TrialSiteSurvey, TrialSiteSurveyAddOrEdit>().ReverseMap();
|
||||||
|
|
||||||
|
@ -47,12 +48,12 @@ namespace IRaCIS.Core.Application.AutoMapper
|
||||||
|
|
||||||
CreateMap<TrialSiteSurvey, TrialSiteSurveyView>()
|
CreateMap<TrialSiteSurvey, TrialSiteSurveyView>()
|
||||||
.ForMember(d => d.TrialSiteAliasName, u => u.MapFrom(s => s.TrialSite.TrialSiteAliasName))
|
.ForMember(d => d.TrialSiteAliasName, u => u.MapFrom(s => s.TrialSite.TrialSiteAliasName))
|
||||||
.ForMember(d => d.SiteName, u => u.MapFrom(s => s.Site.SiteName))
|
.ForMember(d => d.SiteName, u => u.MapFrom(s => isEn_Us? s.Site.SiteName:s.Site.SiteNameCN))
|
||||||
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode));
|
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode));
|
||||||
|
|
||||||
CreateMap<TrialSiteSurvey, TrialSiteSurveySelectView>();
|
CreateMap<TrialSiteSurvey, TrialSiteSurveySelectView>();
|
||||||
|
|
||||||
var isEn_Us = false;
|
|
||||||
CreateMap<TrialSiteUserSurvey, TrialSiteUserSurveyView>()
|
CreateMap<TrialSiteUserSurvey, TrialSiteUserSurveyView>()
|
||||||
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
|
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
|
||||||
.ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum));
|
.ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.UserTypeRole.UserTypeEnum));
|
||||||
|
|
|
@ -518,7 +518,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public bool IsAutoCreate { get; set; }
|
public bool IsAutoCreate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public List<TrialCriterionAdditionalAssessmentType> TrialCriterionAdditionalAssessmentTypeList { get; set; } = new List<TrialCriterionAdditionalAssessmentType>();
|
|
||||||
|
|
||||||
|
|
||||||
public int ReadingDivisionEnum { get; set; }
|
public int ReadingDivisionEnum { get; set; }
|
||||||
|
@ -986,7 +986,6 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsUrgent { get; set; } = false;
|
public bool IsUrgent { get; set; } = false;
|
||||||
|
|
||||||
public List<AddOrUpdateTrialCriterionAdditional> TrialCriterionAdditionalAssessmentTypeList { get; set; }=new List<AddOrUpdateTrialCriterionAdditional>();
|
|
||||||
|
|
||||||
public ReadingDivisionEnum ReadingDivisionEnum { get; set; }
|
public ReadingDivisionEnum ReadingDivisionEnum { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -115,8 +115,9 @@ namespace IRaCIS.Core.Application.Contracts.DTO
|
||||||
public string SiteCode { get; set; } = String.Empty;
|
public string SiteCode { get; set; } = String.Empty;
|
||||||
public string City { get; set; } = String.Empty;
|
public string City { get; set; } = String.Empty;
|
||||||
public string Country { get; set; } = String.Empty;
|
public string Country { get; set; } = String.Empty;
|
||||||
public Guid? HospitalId { get; set; }
|
public Guid? HospitalId { get; set; }
|
||||||
|
|
||||||
|
public string Address { get; set; } = String.Empty;
|
||||||
|
|
||||||
public string HospitalName { get; set; } = String.Empty;
|
public string HospitalName { get; set; } = String.Empty;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,6 @@ namespace IRaCIS.Core.Application
|
||||||
private readonly IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository;
|
private readonly IRepository<ReadingSystemCriterionDictionary> _readingCriterionDictionaryRepository;
|
||||||
private readonly IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository;
|
private readonly IRepository<ReadingTrialCriterionDictionary> _readingTrialCriterionDictionaryRepository;
|
||||||
private readonly IReadingQuestionService iReadingQuestionService;
|
private readonly IReadingQuestionService iReadingQuestionService;
|
||||||
private readonly IRepository<TrialCriterionAdditionalAssessmentType> _trialCriterionAdditionalAssessmentTypeRepository;
|
|
||||||
|
|
||||||
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer;
|
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswer;
|
||||||
|
|
||||||
|
@ -65,7 +64,6 @@ namespace IRaCIS.Core.Application
|
||||||
IReadingQuestionService iReadingQuestionService,
|
IReadingQuestionService iReadingQuestionService,
|
||||||
IEasyCachingProvider provider,
|
IEasyCachingProvider provider,
|
||||||
IOrganInfoService iOrganInfoService,
|
IOrganInfoService iOrganInfoService,
|
||||||
IRepository<TrialCriterionAdditionalAssessmentType> trialCriterionAdditionalAssessmentTypeRepository,
|
|
||||||
IRepository<VisitTask> visitTaskRepository,
|
IRepository<VisitTask> visitTaskRepository,
|
||||||
IRepository<ReadingTableQuestionTrial> readingTableQuestionTrialRepository,
|
IRepository<ReadingTableQuestionTrial> readingTableQuestionTrialRepository,
|
||||||
IRepository<ReadingTableQuestionAnswer> readingTableQuestionAnswerRepository,
|
IRepository<ReadingTableQuestionAnswer> readingTableQuestionAnswerRepository,
|
||||||
|
@ -74,7 +72,6 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_trialCriterionAdditionalAssessmentTypeRepository = trialCriterionAdditionalAssessmentTypeRepository;
|
|
||||||
_trialRepository = trialRepository;
|
_trialRepository = trialRepository;
|
||||||
|
|
||||||
this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository;
|
this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository;
|
||||||
|
@ -188,7 +185,6 @@ namespace IRaCIS.Core.Application
|
||||||
trialInfo.ReadingTool = ReadingTool.Dicom;
|
trialInfo.ReadingTool = ReadingTool.Dicom;
|
||||||
}
|
}
|
||||||
|
|
||||||
trialInfo.TrialCriterionAdditionalAssessmentTypeList = await _trialCriterionAdditionalAssessmentTypeRepository.Where(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
return trialInfo;
|
return trialInfo;
|
||||||
|
@ -212,23 +208,7 @@ namespace IRaCIS.Core.Application
|
||||||
if (trialCriterion.SynchronizeOriginalTime == null)
|
if (trialCriterion.SynchronizeOriginalTime == null)
|
||||||
{
|
{
|
||||||
|
|
||||||
//同步附加评估类型
|
|
||||||
|
|
||||||
if (!await _trialCriterionAdditionalAssessmentTypeRepository.AnyAsync(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId))
|
|
||||||
{
|
|
||||||
AdditionalAssessment additional = new AdditionalAssessment();
|
|
||||||
var addList = additional.GetSystemDefeaultAdditionalAssessmentList(trialCriterion.CriterionType);
|
|
||||||
|
|
||||||
foreach (var addItem in addList)
|
|
||||||
{
|
|
||||||
await _trialCriterionAdditionalAssessmentTypeRepository.AddAsync(new TrialCriterionAdditionalAssessmentType()
|
|
||||||
{
|
|
||||||
CriterionType = trialCriterion.CriterionType,
|
|
||||||
TrialReadingCriterionId = inDto.TrialReadingCriterionId,
|
|
||||||
AdditionalAssessmentType = addItem.AdditionalAssessmentType
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -604,72 +584,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//判断是否存在附加评估
|
|
||||||
if (inDto.IsAdditionalAssessment)
|
|
||||||
{
|
|
||||||
#region 存在,就将标准对应的附加评估选项加进去--废弃 修改到同步标准的地方去了,不管存在附加评估与否,都增加附加评估类型
|
|
||||||
//if (!await _trialCriterionAdditionalAssessmentTypeRepository.AnyAsync(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId))
|
|
||||||
//{
|
|
||||||
// AdditionalAssessment additional = new AdditionalAssessment();
|
|
||||||
// var addList = additional.GetSystemDefeaultAdditionalAssessmentList(inDto.CriterionType);
|
|
||||||
|
|
||||||
// foreach (var addItem in addList)
|
|
||||||
// {
|
|
||||||
// await _trialCriterionAdditionalAssessmentTypeRepository.AddAsync(new TrialCriterionAdditionalAssessmentType()
|
|
||||||
// {
|
|
||||||
// CriterionType = inDto.CriterionType,
|
|
||||||
// TrialReadingCriterionId = inDto.TrialReadingCriterionId,
|
|
||||||
// AdditionalAssessmentType = addItem.AdditionalAssessmentType
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
if (inDto.TrialCriterionAdditionalAssessmentTypeList.All(t => t.IsSelected != true))
|
|
||||||
{
|
|
||||||
//---选择了附加评估,必须勾选附加评估类型
|
|
||||||
throw new BusinessValidationFailedException(_localizer["TrialConfig_AddEvalReq"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var trialId = _readingQuestionTrialRepository.Where(t => t.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).Select(t => t.TrialId).FirstOrDefault();
|
|
||||||
|
|
||||||
|
|
||||||
if (inDto.TrialCriterionAdditionalAssessmentTypeList.Count != 0)
|
|
||||||
{
|
|
||||||
foreach (var updateItem in inDto.TrialCriterionAdditionalAssessmentTypeList)
|
|
||||||
{
|
|
||||||
if (updateItem.IsSelected == true)
|
|
||||||
{
|
|
||||||
//添加默认问题
|
|
||||||
AdditionalAssessment additional = new AdditionalAssessment();
|
|
||||||
var addTypeList = additional.GetSystemDefeaultAdditionalAssessmentList(updateItem.CriterionType, updateItem.AdditionalAssessmentType);
|
|
||||||
|
|
||||||
if (!await _readingQuestionTrialRepository.AsQueryable().IgnoreQueryFilters().AnyAsync(t => t.ReadingQuestionCriterionTrialId == updateItem.TrialReadingCriterionId && t.IsAdditional == true))
|
|
||||||
{
|
|
||||||
foreach (var addType in addTypeList)
|
|
||||||
{
|
|
||||||
foreach (var question in addType.AdditionalQuestionList)
|
|
||||||
{
|
|
||||||
question.ReadingQuestionCriterionTrialId = updateItem.TrialReadingCriterionId;
|
|
||||||
question.TrialId = trialId;
|
|
||||||
|
|
||||||
await _readingQuestionTrialRepository.AddAsync(question);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await _trialCriterionAdditionalAssessmentTypeRepository.UpdatePartialFromQueryAsync(updateItem.Id, t => new TrialCriterionAdditionalAssessmentType() { IsSelected = updateItem.IsSelected });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//删除附加问题
|
|
||||||
await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(t => t.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && t.IsAdditional == true);
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
|
var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -677,67 +592,9 @@ namespace IRaCIS.Core.Application
|
||||||
return ResponseOutput.Ok(result);
|
return ResponseOutput.Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取附加评估选项列表
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="trialReadingCriterionId"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[Obsolete]
|
|
||||||
public async Task<List<TrialCriterionAdditionalAssessmentType>> GetTrialCriterionAdditionalAssessmentOptionList(Guid trialReadingCriterionId)
|
|
||||||
{
|
|
||||||
return await _trialCriterionAdditionalAssessmentTypeRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).ToListAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 保存附加评估设置 (自动添加 或者删除附加评估问题)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="updateList"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[Obsolete]
|
|
||||||
public async Task<IResponseOutput> SetTrialCriterionAdditionalAssessment(List<AddOrUpdateTrialCriterionAdditional> updateList)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (updateList.Count == 0)
|
|
||||||
{
|
|
||||||
return ResponseOutput.Ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
var trialId = _readingQuestionTrialRepository.Where(t => t.ReadingQuestionCriterionTrialId == updateList.First().TrialReadingCriterionId).Select(t => t.TrialId).FirstOrDefault();
|
|
||||||
|
|
||||||
foreach (var updateItem in updateList)
|
|
||||||
{
|
|
||||||
if (updateItem.IsSelected == true)
|
|
||||||
{
|
|
||||||
//添加默认问题
|
|
||||||
AdditionalAssessment additional = new AdditionalAssessment();
|
|
||||||
var addTypeList = additional.GetSystemDefeaultAdditionalAssessmentList(updateItem.CriterionType, updateItem.AdditionalAssessmentType);
|
|
||||||
|
|
||||||
foreach (var addType in addTypeList)
|
|
||||||
{
|
|
||||||
foreach (var question in addType.AdditionalQuestionList)
|
|
||||||
{
|
|
||||||
question.ReadingQuestionCriterionTrialId = updateItem.TrialReadingCriterionId;
|
|
||||||
question.TrialId = trialId;
|
|
||||||
|
|
||||||
await _readingQuestionTrialRepository.AddAsync(question);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//删除附加问题
|
|
||||||
|
|
||||||
await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(t => t.ReadingQuestionCriterionTrialId == updateItem.TrialReadingCriterionId && t.IsAdditional == true);
|
|
||||||
}
|
|
||||||
|
|
||||||
await _trialCriterionAdditionalAssessmentTypeRepository.UpdatePartialFromQueryAsync(updateItem.Id, t => new TrialCriterionAdditionalAssessmentType() { IsSelected = updateItem.IsSelected });
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
await _readingQuestionTrialRepository.SaveChangesAsync();
|
|
||||||
return ResponseOutput.Ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -286,8 +286,16 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
await _repository.BatchDeleteAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
||||||
await _repository.BatchDeleteAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
await _repository.BatchDeleteAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
||||||
|
|
||||||
|
await _repository.BatchDeleteAsync<ClinicalQuestionAnswer>(o => o.ClinicalForm.TrialId == trialId);
|
||||||
|
await _repository.BatchDeleteAsync<ClinicalQuestionAnswer>(o => o.ClinicalForm.TrialId == trialId);
|
||||||
|
await _repository.BatchDeleteAsync<ClinicalForm>(o => o.TrialId == trialId);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<UserUploadFile>(o => o.TrialId == trialId);
|
await _repository.BatchDeleteAsync<UserUploadFile>(o => o.TrialId == trialId);
|
||||||
await _repository.BatchDeleteAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
await _repository.BatchDeleteAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
|
||||||
|
await _repository.BatchDeleteAsync<CriterionNidusTrial>(o => o.TrialReadingCriterion.TrialId == trialId);
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<DataInspection>(o => o.TrialId == trialId);
|
await _repository.BatchDeleteAsync<DataInspection>(o => o.TrialId == trialId);
|
||||||
await _repository.BatchDeleteAsync<DicomStudy>(t => t.TrialId == trialId);
|
await _repository.BatchDeleteAsync<DicomStudy>(t => t.TrialId == trialId);
|
||||||
await _repository.BatchDeleteAsync<StudyMonitor>(t => t.TrialId == trialId);
|
await _repository.BatchDeleteAsync<StudyMonitor>(t => t.TrialId == trialId);
|
||||||
|
@ -374,8 +382,7 @@ namespace IRaCIS.Application.Services
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
await _repository.BatchDeleteAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
||||||
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _repository.BatchDeleteAsync<TrialSign>(t => t.TrialId == trialId);
|
await _repository.BatchDeleteAsync<TrialSign>(t => t.TrialId == trialId);
|
||||||
|
|
|
@ -194,7 +194,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
var siteQueryable = _siteRepository.AsQueryable(true)
|
var siteQueryable = _siteRepository.AsQueryable(true)
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.SiteName), t => t.SiteName.Contains(searchModel.SiteName))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.SiteName), t => t.SiteName.Contains(searchModel.SiteName)|| t.SiteNameCN.Contains(searchModel.SiteName))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.AliasName), t => t.AliasName.Contains(searchModel.AliasName))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.AliasName), t => t.AliasName.Contains(searchModel.AliasName))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.City), t => t.City.Contains(searchModel.City))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.City), t => t.City.Contains(searchModel.City))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.Country), t => t.Country.Contains(searchModel.Country))
|
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.Country), t => t.Country.Contains(searchModel.Country))
|
||||||
|
|
|
@ -106,12 +106,11 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.TrialId, u => u.MapFrom(s => trialId))
|
.ForMember(d => d.TrialId, u => u.MapFrom(s => trialId))
|
||||||
.ForMember(d => d.IsSelect, u => u.MapFrom(t => t.UserTrials.Any(t => t.TrialId == trialId)));
|
.ForMember(d => d.IsSelect, u => u.MapFrom(t => t.UserTrials.Any(t => t.TrialId == trialId)));
|
||||||
|
|
||||||
|
var isEn_Us = false;
|
||||||
CreateMap<Site, SiteSelectDTO>()
|
CreateMap<Site, SiteSelectDTO>()
|
||||||
.ForMember(d => d.HospitalName, u => u.MapFrom(s => s.Hospital.HospitalName));
|
.ForMember(d => d.HospitalName, u => u.MapFrom(s => s.Hospital.HospitalName));
|
||||||
|
|
||||||
//trial site 选择列表 subjectVisit pannel 模式添加的时候
|
//trial site 选择列表 subjectVisit pannel 模式添加的时候
|
||||||
var isEn_Us = false;
|
|
||||||
|
|
||||||
CreateMap<Site, TrialSiteScreeningDTO>()
|
CreateMap<Site, TrialSiteScreeningDTO>()
|
||||||
.ForMember(d => d.IsSelect, u => u.MapFrom(s => s.TrialSiteList.Any(k => k.TrialId == trialId)))
|
.ForMember(d => d.IsSelect, u => u.MapFrom(s => s.TrialSiteList.Any(k => k.TrialId == trialId)))
|
||||||
|
|
|
@ -419,12 +419,20 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
item.InstanceCount = item.InstanceList.Count();
|
item.InstanceCount = item.InstanceList.Count();
|
||||||
|
|
||||||
|
item.Description = "Key Series";
|
||||||
|
|
||||||
|
var modalityList = await _repository.Where<DicomSeries>(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).
|
||||||
|
ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
||||||
|
item.Modality = string.Join(",", modalityList);
|
||||||
thisVisitTaskStudy.SeriesList.Add(item);
|
thisVisitTaskStudy.SeriesList.Add(item);
|
||||||
thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count();
|
thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
result.Add(thisVisitTaskStudy);
|
result.Add(thisVisitTaskStudy);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,14 +22,13 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
|
|
||||||
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
|
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
|
||||||
|
|
||||||
private readonly IRepository<SubjectAdditionalEvaluationResult> _subjectAdditionalEvaluationResultRepository;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public VisitTaskIsFrontTaskNeedSignButNotSignTrigger(
|
public VisitTaskIsFrontTaskNeedSignButNotSignTrigger(
|
||||||
|
|
||||||
IRepository<VisitTask> visitTaskRepository, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository
|
IRepository<VisitTask> visitTaskRepository, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository
|
||||||
, IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository, IRepository<SubjectAdditionalEvaluationResult> subjectAdditionalEvaluationResultRepository)
|
, IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository)
|
||||||
{
|
{
|
||||||
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
||||||
|
|
||||||
|
@ -37,7 +36,6 @@ namespace IRaCIS.Core.Application.Triggers
|
||||||
_trialReadingQuestionRepository = trialReadingQuestionRepository;
|
_trialReadingQuestionRepository = trialReadingQuestionRepository;
|
||||||
|
|
||||||
_readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
|
_readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
|
||||||
_subjectAdditionalEvaluationResultRepository = subjectAdditionalEvaluationResultRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public string NotAgreeReason { get; set; } = string.Empty;
|
public string NotAgreeReason { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public PIAuditState? PIAuditState { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public string PIAuditImagePath { get; set; } = string.Empty;
|
public string PIAuditImagePath { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
// 此代码由T4模板自动生成 byzhouhang 20210918
|
|
||||||
// 生成时间 2023-03-17 11:50:31
|
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
|
||||||
using System;
|
|
||||||
using IRaCIS.Core.Domain.Share;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
namespace IRaCIS.Core.Domain.Models
|
|
||||||
{
|
|
||||||
///<summary>
|
|
||||||
///SubjectAdditionalEvaluationResult
|
|
||||||
///</summary>
|
|
||||||
[Table("SubjectAdditionalEvaluationResult")]
|
|
||||||
public class SubjectAdditionalEvaluationResult : Entity, IAuditUpdate, IAuditAdd
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
[ForeignKey("TrialReadingQuestionId")]
|
|
||||||
public ReadingQuestionTrial TrialReadingQuestion { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public Guid TrialReadingQuestionId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Guid SubjectId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public Guid TrialReadingCriterionId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public DateTime CreateTime { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public Guid CreateUserId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public Guid UpdateUserId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public DateTime UpdateTime { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public Guid? VisitTaskId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public string Answer { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 附加评估答案翻译字典
|
|
||||||
/// </summary>
|
|
||||||
[Required]
|
|
||||||
public string TranslateDictionaryCode { get; set; }=string.Empty;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否是最终结果
|
|
||||||
/// </summary>
|
|
||||||
[Required]
|
|
||||||
public bool IsFinalResult { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 最终结果
|
|
||||||
/// </summary>
|
|
||||||
[Required]
|
|
||||||
public string FinalAnswer { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 最终结果翻字典
|
|
||||||
/// </summary>
|
|
||||||
[Required]
|
|
||||||
public string FinalTranslateDictionaryCode { get; set; }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -15,11 +15,14 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
[Table("CriterionNidusTrial")]
|
[Table("CriterionNidusTrial")]
|
||||||
public class CriterionNidusTrial : Entity, IAuditAdd
|
public class CriterionNidusTrial : Entity, IAuditAdd
|
||||||
{
|
{
|
||||||
|
[JsonIgnore]
|
||||||
/// <summary>
|
[ForeignKey("CriterionId")]
|
||||||
|
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
/// CriterionId
|
/// CriterionId
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Required]
|
[Required]
|
||||||
public Guid CriterionId { get; set; }
|
public Guid CriterionId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -264,9 +264,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public List<ReadingQuestionTrial> ReadingQuestionTrialList = new List<ReadingQuestionTrial>();
|
public List<ReadingQuestionTrial> ReadingQuestionTrialList = new List<ReadingQuestionTrial>();
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
|
|
||||||
public List<TrialCriterionAdditionalAssessmentType> TrialCriterionAdditionalAssessmentTypeList { get; set; } = new List<TrialCriterionAdditionalAssessmentType>();
|
|
||||||
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
--医生相关
|
--医生相关
|
||||||
DROP TABLE Attachment;
|
DROP TABLE Attachment;
|
||||||
DROP TABLE Doctor;
|
DROP TABLE Doctor;
|
||||||
|
DROP TABLE DoctorPayInformation
|
||||||
DROP TABLE Postgraduate;
|
DROP TABLE Postgraduate;
|
||||||
DROP TABLE Education;
|
DROP TABLE Education;
|
||||||
DROP TABLE ResearchPublication;
|
DROP TABLE ResearchPublication;
|
||||||
|
@ -9,6 +10,8 @@ DROP TABLE Vacation;
|
||||||
DROP TABLE DoctorCriterionFile;
|
DROP TABLE DoctorCriterionFile;
|
||||||
DROP TABLE DoctorDictionary;
|
DROP TABLE DoctorDictionary;
|
||||||
|
|
||||||
|
DROP TABLE TrialExperienceCriteria
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--费用相关
|
--费用相关
|
||||||
|
@ -22,6 +25,10 @@ DROP TABLE TrialRevenuesPrice;
|
||||||
DROP TABLE TrialRevenuesPriceVerification;
|
DROP TABLE TrialRevenuesPriceVerification;
|
||||||
DROP TABLE VolumeReward;
|
DROP TABLE VolumeReward;
|
||||||
|
|
||||||
|
--new
|
||||||
|
DROP TABLE Payment
|
||||||
|
DROP TABLE PaymentDetail
|
||||||
|
|
||||||
|
|
||||||
--工作量
|
--工作量
|
||||||
DROP TABLE [Workload];
|
DROP TABLE [Workload];
|
||||||
|
@ -48,6 +55,11 @@ DROP TABLE SubjectCriteriaEvaluation;
|
||||||
DROP TABLE SubjectCriteriaEvaluationVisitFilter;
|
DROP TABLE SubjectCriteriaEvaluationVisitFilter;
|
||||||
DROP TABLE SubjectCriteriaEvaluationVisitStudyFilter;
|
DROP TABLE SubjectCriteriaEvaluationVisitStudyFilter;
|
||||||
|
|
||||||
|
--new
|
||||||
|
DROP TABLE SubjectAdditionalEvaluationResult
|
||||||
|
DROP TABLE TrialCriterionAdditionalAssessmentType
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,6 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
|
|
||||||
public List<SubjectAdditionalEvaluationResult> SubjectAdditionalEvaluationResult { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<ReadingTaskQuestionAnswer> ReadingTaskQuestionAnswerList { get; set; }
|
public List<ReadingTaskQuestionAnswer> ReadingTaskQuestionAnswerList { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -249,10 +249,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
dicValueList = await _dbContext.Dictionary.Where(t => dicIdList.Contains(t.Id)).Select(t => t.Value).ToListAsync();
|
dicValueList = await _dbContext.Dictionary.Where(t => dicIdList.Contains(t.Id)).Select(t => t.Value).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 附加评估
|
|
||||||
|
|
||||||
var addtionalAssesementList = await _dbContext.TrialCriterionAdditionalAssessmentType.Where(t => t.TrialReadingCriterionId == entity.Id && t.IsSelected != null)
|
|
||||||
.Select(t => new { t.AdditionalAssessmentType, t.IsSelected }).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
await InsertInspection<ReadingQuestionCriterionTrial>(entity, type, x => new InspectionConvertDTO()
|
await InsertInspection<ReadingQuestionCriterionTrial>(entity, type, x => new InspectionConvertDTO()
|
||||||
|
@ -268,7 +264,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
}, new
|
}, new
|
||||||
{
|
{
|
||||||
EvaluationResultTypes = dicValueList.Count > 0 ? string.Join(",", dicValueList) : string.Empty,
|
EvaluationResultTypes = dicValueList.Count > 0 ? string.Join(",", dicValueList) : string.Empty,
|
||||||
AdditionalAssessmentTypeList = addtionalAssesementList
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -260,10 +260,8 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
public virtual DbSet<TrialClinicalDataSetCriterion> TrialClinicalDataSetCriterion { get; set; }
|
public virtual DbSet<TrialClinicalDataSetCriterion> TrialClinicalDataSetCriterion { get; set; }
|
||||||
|
|
||||||
public virtual DbSet<TrialCriterionAdditionalAssessmentType> TrialCriterionAdditionalAssessmentType { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public virtual DbSet<SubjectAdditionalEvaluationResult> SubjectAdditionalEvaluationResult { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -513,54 +511,54 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
catch (UniqueConstraintException ex)
|
catch (UniqueConstraintException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null? ex.Message :ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
|
throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (TimeoutException ex)
|
catch (TimeoutException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
|
throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (CannotInsertNullException ex)
|
catch (CannotInsertNullException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("无法在非空列上插入空值。");
|
throw new DBSaveFailedException("无法在非空列上插入空值。");
|
||||||
}
|
}
|
||||||
catch (MaxLengthExceededException ex)
|
catch (MaxLengthExceededException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
|
throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
|
||||||
}
|
}
|
||||||
catch (NumericOverflowException ex)
|
catch (NumericOverflowException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("数值超过了数据类型的范围。");
|
throw new DBSaveFailedException("数值超过了数据类型的范围。");
|
||||||
}
|
}
|
||||||
catch (SyntaxErrorException ex)
|
catch (SyntaxErrorException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("SQL 查询中存在语法错误。");
|
throw new DBSaveFailedException("SQL 查询中存在语法错误。");
|
||||||
}
|
}
|
||||||
catch (ReferenceConstraintException ex)
|
catch (ReferenceConstraintException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
|
throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
|
||||||
}
|
}
|
||||||
catch (DbUpdateConcurrencyException ex)
|
catch (DbUpdateConcurrencyException ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex.Message);
|
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
||||||
|
|
||||||
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
|
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task AddAudit()
|
public async Task AddAudit()
|
||||||
|
|
Loading…
Reference in New Issue