Compare commits
75 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a7848727ee | |||
| 5787c36687 | |||
| 4e66ea43d7 | |||
| 68d69181a9 | |||
| b879b3f2c7 | |||
| 4fd77ce70d | |||
| 8213c6d10f | |||
| b79b4567b4 | |||
| 8c5b759a92 | |||
| ab1e33a799 | |||
| 824b65d5ee | |||
| c68004b804 | |||
| d5cd8dc338 | |||
| 1fef5509d1 | |||
| 06d12ce709 | |||
| ad7ac80444 | |||
| 29d0ebdb7c | |||
| 9bcaa07c1a | |||
| bf5f56f5f2 | |||
| c1c2b59641 | |||
| 33820c2acb | |||
| 9814f63246 | |||
| 5e6c018199 | |||
| b24751287c | |||
| 759cc6c1be | |||
| 1a929ce2ca | |||
| 1e4571a814 | |||
| 848670d128 | |||
| 6d9b5fdb2d | |||
| ab00d64725 | |||
| 5e36054ee9 | |||
| 2b11042f35 | |||
| e9e5075c1c | |||
| 9149dd6cf6 | |||
| 24bfb4920c | |||
| 553ad4760c | |||
| 5acd56689b | |||
| 5f0643d4d4 | |||
| 17e4ed38be | |||
| c49f16b055 | |||
| aa42d64cac | |||
| 8f0ef86ab9 | |||
| c17b2f6bac | |||
| be498f2329 | |||
| fea3d8d415 | |||
| bffc8626c7 | |||
| 1efe1228ac | |||
| f900b811c7 | |||
| a5f7e03f6c | |||
| 7aba4adc14 | |||
| 12c8c641ea | |||
| 977adf3153 | |||
| 409b76df26 | |||
| 2d9ebe7094 | |||
| 71e797cf7d | |||
| f781027388 | |||
| 56e316e6a1 | |||
| edef3e1990 | |||
| d6d0965467 | |||
| 62f888710c | |||
| 58e8c2392f | |||
| 0e1310324d | |||
| efcda61104 | |||
| 97133a5554 | |||
| 577ed42f97 | |||
| 8f704c4617 | |||
| a03d7f55c7 | |||
| 2bbc101f95 | |||
| 2b11e9165f | |||
| b25dec68cb | |||
| 2f57238f66 | |||
| 8239061a84 | |||
| a43ebc016a | |||
| dd6419dc44 | |||
| 54a9cfbb8e |
@@ -14,9 +14,9 @@
|
||||
<PackageReference Include="AWSSDK.SecurityToken" Version="3.7.400.36" />
|
||||
<PackageReference Include="DistributedLock.Core" Version="1.0.7" />
|
||||
<PackageReference Include="DistributedLock.SqlServer" Version="1.0.5" />
|
||||
<PackageReference Include="fo-dicom" Version="5.1.3" />
|
||||
<PackageReference Include="fo-dicom.Codecs" Version="5.15.1" />
|
||||
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.1.3" />
|
||||
<PackageReference Include="fo-dicom" Version="5.2.1" />
|
||||
<PackageReference Include="fo-dicom.Codecs" Version="5.16.0" />
|
||||
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.2.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.10" />
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="Minio" Version="6.0.3" />
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.14" />
|
||||
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
@@ -79,8 +80,6 @@
|
||||
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
|
||||
<PackageReference Include="Hangfire.InMemory" Version="1.0.0" />
|
||||
<PackageReference Include="Hangfire.SqlServer" Version="1.8.14" />
|
||||
<PackageReference Include="Invio.Extensions.Authentication.JwtBearer" Version="2.0.1" />
|
||||
<PackageReference Include="LogDashboard" Version="1.4.8" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.10" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
|
||||
<PackageReference Include="Serilog.Formatting.Compact" Version="3.0.0" />
|
||||
@@ -114,6 +113,12 @@
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="Resources\GeoLite2-City.mmdb">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<UserProperties properties_4launchsettings_1json__JsonSchema="" />
|
||||
|
||||
@@ -7,7 +7,6 @@ using IRaCIS.Core.Application.Service;
|
||||
using IRaCIS.Core.Application.Service.BusinessFilter;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using LogDashboard;
|
||||
using MassTransit;
|
||||
using MassTransit.NewIdProviders;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
@@ -39,7 +38,7 @@ var enviromentName = config["ASPNETCORE_ENVIRONMENT"];
|
||||
|
||||
var openSwaggerStr = config["ASPNETCORE_OpenSwagger"];
|
||||
|
||||
var isOpenSwagger= openSwaggerStr == null&& openSwaggerStr?.ToLower()=="true";
|
||||
var isOpenSwagger= openSwaggerStr == null|| openSwaggerStr?.ToLower()=="true";
|
||||
|
||||
|
||||
if (string.IsNullOrWhiteSpace(enviromentName))
|
||||
@@ -136,7 +135,7 @@ builder.Services.AddFusionCache();
|
||||
builder.Services.AddhangfireSetup(_configuration);
|
||||
|
||||
//Serilog 日志可视化 LogDashboard日志
|
||||
builder.Services.AddLogDashboardSetup();
|
||||
//builder.Services.AddLogDashboardSetup();
|
||||
|
||||
//Dicom影像渲染图片 跨平台
|
||||
builder.Services.AddDicomSetup();
|
||||
@@ -221,7 +220,7 @@ app.UseResponseCompression();
|
||||
app.UseStaticFiles();
|
||||
|
||||
//LogDashboard
|
||||
app.UseLogDashboard("/LogDashboard");
|
||||
//app.UseLogDashboard("/LogDashboard");
|
||||
|
||||
//hangfire
|
||||
app.UseHangfireConfig(env);
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 73 MiB |
@@ -1,15 +1,15 @@
|
||||
using LogDashboard;
|
||||
using LogDashboard.Authorization;
|
||||
//using LogDashboard;
|
||||
//using LogDashboard.Authorization;
|
||||
|
||||
namespace IRaCIS.Core.API.Filter
|
||||
{
|
||||
//namespace IRaCIS.Core.API.Filter
|
||||
//{
|
||||
|
||||
public class LogDashBoardAuthFilter : ILogDashboardAuthorizationFilter
|
||||
{
|
||||
//在此可以利用 本系统的UerTypeEnum 判断
|
||||
public bool Authorization(LogDashboardContext context)
|
||||
{
|
||||
return context.HttpContext.User.Identity.IsAuthenticated;
|
||||
}
|
||||
}
|
||||
}
|
||||
// public class LogDashBoardAuthFilter : ILogDashboardAuthorizationFilter
|
||||
// {
|
||||
// //在此可以利用 本系统的UerTypeEnum 判断
|
||||
// public bool Authorization(LogDashboardContext context)
|
||||
// {
|
||||
// return context.HttpContext.User.Identity.IsAuthenticated;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -1,25 +1,25 @@
|
||||
|
||||
using LogDashboard;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
//using LogDashboard;
|
||||
//using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
public static class LogDashboardSetup
|
||||
{
|
||||
public static void AddLogDashboardSetup(this IServiceCollection services)
|
||||
{
|
||||
//IIS 配置虚拟路径部署,会出现IIS静态文件404
|
||||
services.AddLogDashboard(opt =>
|
||||
{
|
||||
//opt.PathMatch = "/api/LogDashboard";
|
||||
opt.PathMatch = "/LogDashboard";
|
||||
//namespace IRaCIS.Core.API
|
||||
//{
|
||||
// public static class LogDashboardSetup
|
||||
// {
|
||||
// public static void AddLogDashboardSetup(this IServiceCollection services)
|
||||
// {
|
||||
// //IIS 配置虚拟路径部署,会出现IIS静态文件404
|
||||
// services.AddLogDashboard(opt =>
|
||||
// {
|
||||
// //opt.PathMatch = "/api/LogDashboard";
|
||||
// opt.PathMatch = "/LogDashboard";
|
||||
|
||||
//opt.AddAuthorizationFilter(new LogDashboardBasicAuthFilter("admin", "zhizhun2018"));
|
||||
// //opt.AddAuthorizationFilter(new LogDashboardBasicAuthFilter("admin", "zhizhun2018"));
|
||||
|
||||
//opt.AddAuthorizationFilter(new LogDashBoardAuthFilter());
|
||||
// //opt.AddAuthorizationFilter(new LogDashBoardAuthFilter());
|
||||
|
||||
});
|
||||
// });
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
@@ -16,30 +16,30 @@ namespace IRaCIS.Core.API;
|
||||
|
||||
public enum SwaggerVersion
|
||||
{
|
||||
[Description("文件记录")]
|
||||
[Description("文件记录(FileRecord)")]
|
||||
FileRecord = -1,
|
||||
|
||||
[Description("医生模块")]
|
||||
[Description("医生模块(Reviewer)")]
|
||||
Reviewer = 1,
|
||||
[Description("项目模块")]
|
||||
[Description("项目模块(Trial)")]
|
||||
Trial = 2,
|
||||
[Description("入组模块")]
|
||||
[Description("入组模块(Enroll)")]
|
||||
Enroll = 3,
|
||||
[Description("工作量模块")]
|
||||
[Description("工作量模块(Workload)")]
|
||||
Workload = 4,
|
||||
[Description("通用信息获取")]
|
||||
[Description("通用信息获取(Common)")]
|
||||
Common = 5,
|
||||
[Description("机构信息模块")]
|
||||
[Description("机构信息模块(Institution)")]
|
||||
Institution = 6,
|
||||
[Description("统计模块")]
|
||||
[Description("统计模块(DashboardStatistics)")]
|
||||
DashboardStatistics = 7,
|
||||
[Description("财务模块")]
|
||||
[Description("财务模块(Financial)")]
|
||||
Financial = 8,
|
||||
[Description("管理模块")]
|
||||
[Description("管理模块(Management)")]
|
||||
Management =9,
|
||||
[Description("影像模块")]
|
||||
[Description("影像模块(Image)")]
|
||||
Image =10,
|
||||
[Description("读片模块")]
|
||||
[Description("读片模块(Reading)")]
|
||||
Reading =11
|
||||
};
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"RemoteNew": "Server=47.117.164.182,1434;Database=Event_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=47.117.164.182,1434;Database=Event_IRC_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
|
||||
"RemoteNew": "Server=101.132.253.119,1435;Database=irc_Prpd_bak;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=101.132.253.119,1435;Database=irc_Hangfire_bak;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
|
||||
},
|
||||
"ObjectStoreService": {
|
||||
"ObjectStoreUse": "AliyunOSS",
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using MaxMind.GeoIP2;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IRaCIS.Core.Application.Helper
|
||||
{
|
||||
public static class IPCityHelper
|
||||
{
|
||||
|
||||
public static string GetCityResponse(string ip)
|
||||
{
|
||||
var path = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "GeoLite2-City.mmdb");
|
||||
|
||||
try
|
||||
{
|
||||
using (var reader = new DatabaseReader(path))
|
||||
{
|
||||
|
||||
var city = reader.City(ip);
|
||||
|
||||
//Console.WriteLine(city.Country.IsoCode); // 'US' 'CN'
|
||||
//Console.WriteLine(city.Country.Name); // 'United States' 'China'
|
||||
////Console.WriteLine(city.Country.Names["zh-CN"]); // '美国'
|
||||
//Console.WriteLine(city.MostSpecificSubdivision.Name); // 'Minnesota' 'Hubei'
|
||||
//Console.WriteLine(city.City.Name); // 'Minneapolis' 'WUHan'
|
||||
|
||||
return $"{city.Country.Name} | {city.MostSpecificSubdivision.Name} | {city.City.Name}";
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
return $"UN | UN | {ip}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,20 @@ public static class ImageHelper
|
||||
|
||||
fileStorePath = fileStorePath ?? filePath + ".preview.jpeg";
|
||||
|
||||
using (var image = SixLabors.ImageSharp.Image.Load(filePath))
|
||||
{
|
||||
// 读取 DICOM 文件
|
||||
var dicomImage = new DicomImage(filePath);
|
||||
|
||||
// 渲染 DICOM 图像到 ImageSharp 格式
|
||||
using (var image = dicomImage.RenderImage().AsSharpImage())
|
||||
{
|
||||
// 生成缩略图(调整大小)
|
||||
image.Mutate(x => x.Resize(500, 500));
|
||||
|
||||
image.Save(fileStorePath);
|
||||
|
||||
// 保存缩略图为 JPEG
|
||||
image.Save(fileStorePath, new JpegEncoder());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -37,31 +37,32 @@
|
||||
<PackageReference Include="AWSSDK.SecurityToken" Version="3.7.400.36" />
|
||||
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.14.1" />
|
||||
<PackageReference Include="AWSSDK.S3" Version="3.7.405" />
|
||||
<PackageReference Include="DocX" Version="3.0.1" />
|
||||
<PackageReference Include="DocX" Version="4.0.25105.5786" />
|
||||
<PackageReference Include="FreeSpire.Doc" Version="12.2.0" />
|
||||
<PackageReference Include="Hangfire.Core" Version="1.8.14" />
|
||||
<PackageReference Include="ExcelDataReader" Version="3.7.0" />
|
||||
<PackageReference Include="ExcelDataReader.DataSet" Version="3.7.0" />
|
||||
<PackageReference Include="DistributedLock.Redis" Version="1.0.3" />
|
||||
<PackageReference Include="DistributedLock.SqlServer" Version="1.0.5" />
|
||||
<PackageReference Include="fo-dicom" Version="5.1.3" />
|
||||
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.1.3" />
|
||||
<PackageReference Include="fo-dicom.Codecs" Version="5.15.1" />
|
||||
<PackageReference Include="fo-dicom" Version="5.2.1" />
|
||||
<PackageReference Include="fo-dicom.Imaging.ImageSharp" Version="5.2.1" />
|
||||
<PackageReference Include="fo-dicom.Codecs" Version="5.16.0" />
|
||||
<PackageReference Include="IP2Region.Net" Version="2.0.2" />
|
||||
<PackageReference Include="MailKit" Version="4.7.1.1" />
|
||||
<PackageReference Include="Masa.Contrib.Service.MinimalAPIs" Version="1.0.0" />
|
||||
<PackageReference Include="MaxMind.GeoIP2" Version="5.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10" />
|
||||
<PackageReference Include="MimeKit" Version="4.7.1" />
|
||||
<PackageReference Include="MiniExcel" Version="1.34.2" />
|
||||
<PackageReference Include="Minio" Version="6.0.3" />
|
||||
<PackageReference Include="MiniWord" Version="0.8.0" />
|
||||
<PackageReference Include="MiniWord" Version="0.9.2" />
|
||||
<PackageReference Include="My.Extensions.Localization.Json" Version="3.3.0">
|
||||
<TreatAsUsed>true</TreatAsUsed>
|
||||
</PackageReference>
|
||||
<PackageReference Include="NPOI" Version="2.7.1" />
|
||||
<PackageReference Include="Panda.DynamicWebApi" Version="1.2.2" />
|
||||
<PackageReference Include="RestSharp" Version="112.1.0" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.5" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.7" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="8.0.2" />
|
||||
<PackageReference Include="ZiggyCreatures.FusionCache" Version="1.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -1383,6 +1383,99 @@
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:IRaCIS.Core.Application.Service.AuditDocumentService">
|
||||
<summary>
|
||||
稽查文档
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.AuditDocument},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||
<summary>
|
||||
稽查文档
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.GetAuditDocumentList(IRaCIS.Core.Application.ViewModel.AuditDocumentQuery)">
|
||||
<summary>
|
||||
获取稽查文档
|
||||
</summary>
|
||||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.UpdateAuditDocument(IRaCIS.Core.Application.ViewModel.AuditDocumentUpdateDto)">
|
||||
<summary>
|
||||
修改稽查文档
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.AddAuditDocument(System.Collections.Generic.List{IRaCIS.Core.Application.ViewModel.AuditDocumentAddOrEdit})">
|
||||
<summary>
|
||||
新增稽查文档
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.AddOrUpdateAuditDocument(IRaCIS.Core.Application.ViewModel.AuditDocumentAddOrEdit)">
|
||||
<summary>
|
||||
通用方法
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.GetBreadcrumbData(IRaCIS.Core.Application.ViewModel.GetBreadcrumbDataInDto)">
|
||||
<summary>
|
||||
获取面包屑导航
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.GetAuditDocumentData(IRaCIS.Core.Application.ViewModel.GetAuditDocumentDataInDto)">
|
||||
<summary>
|
||||
获取文件树形结构 (传Id 根节点就是自己)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.DeleteAuditDocument(IRaCIS.Core.Application.ViewModel.DeleteAuditDocumentInDto)">
|
||||
<summary>
|
||||
删除稽查文档
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.MovieFileOrFolder(IRaCIS.Core.Application.ViewModel.MovieFileOrFolderInDto)">
|
||||
<summary>
|
||||
移动文件或者文件夹 到其他文件夹
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.CopyFileOrFolder(IRaCIS.Core.Application.ViewModel.MovieFileOrFolderInDto)">
|
||||
<summary>
|
||||
复制文件或者文件夹
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.GetHistoricalVersion(IRaCIS.Core.Application.ViewModel.GetHistoricalVersionInDto)">
|
||||
<summary>
|
||||
获取历史版本
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.SetCurrentVersion(IRaCIS.Core.Application.ViewModel.SetCurrentVersionInDto)">
|
||||
<summary>
|
||||
把历史版本设置为当前版本
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.SetIsAuthorization(IRaCIS.Core.Application.ViewModel.SetIsAuthorizationInDto)">
|
||||
<summary>
|
||||
设置是否授权
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:IRaCIS.Core.Application.Service.SysFileTypeService">
|
||||
<summary>
|
||||
系统文件类型
|
||||
@@ -2552,6 +2645,13 @@
|
||||
<returns></returns>
|
||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.UserService.SetIsIgnoreUncommonly(IRaCIS.Core.Application.ViewModel.SetIsIgnoreUncommonlyInDto)">
|
||||
<summary>
|
||||
设置是否忽略异地登录
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.UserService.GetUserLoginRoleList(IRaCIS.Application.Contracts.IRCLoginDto,IRaCIS.Core.Application.Auth.ITokenService,Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
|
||||
<summary>
|
||||
账号验证,获取账号角色信息 获取临时token
|
||||
@@ -4453,6 +4553,291 @@
|
||||
<param name="digitPlaces"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetReadingCalculationData(IRaCIS.Core.Application.Service.Reading.Dto.GetReadingCalculationDataInDto)">
|
||||
<summary>
|
||||
获取阅片的计算数据
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.sODData">
|
||||
<summary>
|
||||
获取Sod的值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetDeleteLesionStatrIndex(IRaCIS.Core.Application.Service.Reading.Dto.DeleteReadingRowAnswerInDto)">
|
||||
<summary>
|
||||
删除病灶获取起始病灶序号(RECIST1Point1 固定是1)
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetReadingReportEvaluation(IRaCIS.Core.Application.Service.Reading.Dto.GetReadingReportEvaluationInDto)">
|
||||
<summary>
|
||||
获取阅片报告
|
||||
</summary>
|
||||
<param name="indto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.TestCalculate(System.Guid,IRaCIS.Core.Domain.Share.QuestionType)">
|
||||
<summary>
|
||||
测试计算
|
||||
</summary>
|
||||
<param name="visitTaskId"></param>
|
||||
<param name="type"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.CalculateTask(IRaCIS.Core.Application.Service.Reading.Dto.CalculateTaskInDto)">
|
||||
<summary>
|
||||
计算任务
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetReportVerify(IRaCIS.Core.Application.Service.Reading.Dto.GetReportVerifyInDto)">
|
||||
<summary>
|
||||
获取报告验证的信息(这里每个标准可能不一样 返回用object)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.ReadingCalculate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto,System.Collections.Generic.List{IRaCIS.Core.Domain.Share.QuestionType})">
|
||||
<summary>
|
||||
自动计算
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<param name="calculateType"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetReportTumor(System.Guid)">
|
||||
<summary>
|
||||
获取报告整体整体评估
|
||||
</summary>
|
||||
<param name="visitTaskId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetReportIsExistDisease(System.Guid)">
|
||||
<summary>
|
||||
获取报告是否存在疾病
|
||||
</summary>
|
||||
<param name="visitTaskId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.VerifyVisitTaskQuestions(IRaCIS.Core.Application.Service.Reading.Dto.VerifyVisitTaskQuestionsInDto)">
|
||||
<summary>
|
||||
验证访视提交
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.AddTaskLesionAnswerFromLastTask(IRaCIS.Core.Application.ViewModel.AddTaskLesionAnswerFromLastTaskInDto)">
|
||||
<summary>
|
||||
将上一次的访视病灶添加到这一次
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetSODData(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取SOD
|
||||
</summary>
|
||||
<remarks>
|
||||
靶病灶径线之和(SOD)
|
||||
非淋巴结的长径 和淋巴结的短径
|
||||
</remarks>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetSumOfDiameter(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
非淋巴结靶病灶长径之和
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetSODChange(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
与基线SOD相比变化量(mm)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetSODPercent(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
与基线访视相比SOD变化百分比
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetLowestIncrease(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
与整个访视期间SOD最低点相比增加的值(mm)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<remarks>
|
||||
要更新之前的
|
||||
</remarks>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetLowPercent(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
与整个访视期间SOD最低点相比增加的百分比
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<remarks>
|
||||
要更新之前的
|
||||
</remarks>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetLowVisit(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
整个访视期间SOD最低点访视名称
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<remarks>
|
||||
要更新之前的
|
||||
</remarks>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetIsLymphTarget(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
是否存在非淋巴结靶病灶
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetIsAddFive(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetIsAddFiveRowIndexs(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上的病灶
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetNETarget(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
被评估为NE的单个靶病灶
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetTumor(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
整体肿瘤评估
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.TestOncology">
|
||||
<summary>
|
||||
测试肿瘤学评估
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.CalculationGetImgOncology(System.String,System.String,System.String)">
|
||||
<summary>
|
||||
计算整体肿瘤评估 【测试】
|
||||
</summary>
|
||||
<param name="targetLesion">靶病灶</param>
|
||||
<param name="noTargetLesion"> 非靶病灶</param>
|
||||
<param name="newLesions">新病灶</param>
|
||||
<remarks>
|
||||
靶病灶 非靶病灶 存在新病灶 整体肿瘤评估
|
||||
1. CR CR 否 CR
|
||||
2. CR ND 否 CR
|
||||
3. ND CR 否 CR
|
||||
4. CR NN/NE 否/疑似/NE PR
|
||||
5. CR CR/ND 疑似/NE PR
|
||||
6. PR CR/ND/NN/NE 否/疑似/NE PR
|
||||
7. ND CR 疑似/NE PR
|
||||
8. SD CR/ND/NN/NE 否/疑似/NE SD
|
||||
9. ND NN 否/疑似/NE NN
|
||||
10.NE CR/ND/NN/NE 否/疑似/NE NE
|
||||
11.ND NE 否/疑似/NE NE
|
||||
12.ND ND NE NE
|
||||
13.ND ND 否/疑似 ND
|
||||
14.PD CR/NN/PD/ND/NE 是/否/疑似/NE PD
|
||||
15.CR/PR/SD/PD/ND/NE PD 是/否/疑似/NE PD
|
||||
16.CR/PR/SD/PD/ND/NE CR/NN/PD/ND/NE 是 PD
|
||||
</remarks>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetIsExistDisease(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
是否存在疾病
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.ChangeAllLowestIncrease(IRaCIS.Core.Application.Service.Reading.Dto.ChangeAllTaskDto)">
|
||||
<summary>
|
||||
修改与整个访视期间SOD最低点相比增加的值(mm)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.ChangeAllLowVisitName(IRaCIS.Core.Application.Service.Reading.Dto.ChangeAllTaskDto)">
|
||||
<summary>
|
||||
修改最低方式点名称
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.ChangeAllVisitTaskAnswer(System.Collections.Generic.List{System.Guid},System.Guid,System.String)">
|
||||
<summary>
|
||||
修改所有访视任务的答案
|
||||
</summary>
|
||||
<param name="visitTaskGuids"></param>
|
||||
<param name="questionId"></param>
|
||||
<param name="answer"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetBaseLineSOD(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取基线SOD
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetLowSODVisit(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取最低方式
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetVisitTaskAnswerList(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取访视任务信息
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetLastVisitTaskId(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取上一个访视任务Id
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetNoTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取非靶病灶评估
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRECISTHCCCalculate.GetNewLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||
<summary>
|
||||
获取新病灶评估
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFCalculateService.GetReadingCalculationData(IRaCIS.Core.Application.Service.Reading.Dto.GetReadingCalculationDataInDto)">
|
||||
<summary>
|
||||
获取阅片的计算数据
|
||||
@@ -12064,7 +12449,7 @@
|
||||
阅片问题.标准
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingQuestionService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionSystem},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.ReadingQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataTrialSet},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataSystemSet},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Dictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemCriterionDictionaryCode},IRaCIS.Core.Application.Contracts.IReadingImageTaskService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingSystemCriterionDictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCriterionPage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TumorAssessment_RECIST1Point1},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.PreviousPDF},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingQuestionService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionSystem},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.ReadingQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataTrialSet},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataSystemSet},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Dictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CriterionNidusSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemCriterionDictionaryCode},IRaCIS.Core.Application.Contracts.IReadingImageTaskService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingSystemCriterionDictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingCriterionPage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TumorAssessment_RECIST1Point1},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.OrganInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTableQuestionSystem},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingTaskQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.PreviousPDF},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||
<summary>
|
||||
阅片问题.标准
|
||||
</summary>
|
||||
@@ -13523,6 +13908,22 @@
|
||||
<param name="_readingConsistentClinicalDataRepository"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.TestService.IQCBackToUpload(System.Guid[],IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialQCQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingClinicalData})">
|
||||
<summary>
|
||||
IQC 回退到影像上传
|
||||
</summary>
|
||||
<param name="subjectVisitIdList"></param>
|
||||
<param name="_subjectVisitRepository"></param>
|
||||
<param name="_trialQCQuestionAnswerRepository"></param>
|
||||
<param name="_readingClinicalDataReposiotry"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.TestService.BackImageResize(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
后端处理某个中心缩略图有问题 先下载,生成缩略图上传,然后更新数据库
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.TestService.DealTialFileSie(IRaCIS.Core.Application.Helper.IOSSService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingClinicalDataPDF})">
|
||||
<summary>
|
||||
非dicom 临床数据
|
||||
@@ -16956,6 +17357,23 @@
|
||||
<param name="qaDialogCommand"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.RequestImageBack(System.Guid)">
|
||||
<summary>
|
||||
CRC IQC 申请影像回退
|
||||
</summary>
|
||||
<param name="subjectVisitId"></param>
|
||||
<returns></returns>
|
||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.AuditImageBack(System.Guid,System.Boolean)">
|
||||
<summary>
|
||||
PM 审核CRC IQC 申请影像回退
|
||||
</summary>
|
||||
<param name="subjectVisitId"></param>
|
||||
<param name="isAgree"></param>
|
||||
<returns></returns>
|
||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.AddCheckChallengeReply(IRaCIS.Core.Application.Contracts.DTO.CheckChallengeDialogCommand)">
|
||||
<summary>
|
||||
一致性核查 质疑的添加/回复
|
||||
|
||||
@@ -2552,6 +2552,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||
|
||||
//回退后,回退状态恢复
|
||||
sv.RequestBackState = RequestBackStateEnum.NotRequest;
|
||||
sv.ImageBackState = ImageBackStateEnum.None;
|
||||
sv.IsCheckBack = false;
|
||||
sv.CheckBackTime = null;
|
||||
sv.CheckState = CheckStateEnum.None;
|
||||
|
||||
@@ -96,6 +96,8 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
|
||||
public int State { get; set; }
|
||||
|
||||
public Guid? PublishLogId { get; set; }
|
||||
|
||||
public List<BatchAddInternationalizationDto> AddList { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -143,6 +143,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
mapItem.InternationalizationType = batchAdd.InternationalizationType;
|
||||
mapItem.State = batchAdd.State;
|
||||
mapItem.PublishLogId = batchAdd.PublishLogId;
|
||||
|
||||
var verifyExp1 = new EntityVerifyExp<Internationalization>()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,533 @@
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由liquid模板自动生成 byzhouhang 20240909
|
||||
// 生成时间 2025-03-27 06:13:33Z
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using IRaCIS.Core.Application.Interfaces;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using System.Threading.Tasks;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using AutoMapper.Execution;
|
||||
using System.Linq;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using DocumentFormat.OpenXml.Office2010.Excel;
|
||||
using MassTransit;
|
||||
using NPOI.POIFS.Properties;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
namespace IRaCIS.Core.Application.Service;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 稽查文档
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[ApiExplorerSettings(GroupName = "FileRecord")]
|
||||
public class AuditDocumentService(IRepository<AuditDocument> _auditDocumentRepository,
|
||||
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer): BaseService
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 获取稽查文档
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<AuditDocumentView>> GetAuditDocumentList(AuditDocumentQuery inQuery)
|
||||
{
|
||||
var auditDocumentQueryable = _auditDocumentRepository
|
||||
.ProjectTo<AuditDocumentView>(_mapper.ConfigurationProvider);
|
||||
var pageList = await auditDocumentQueryable.ToPagedListAsync(inQuery);
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改稽查文档
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> UpdateAuditDocument(AuditDocumentUpdateDto inDto)
|
||||
{
|
||||
AuditDocumentAddOrEdit addOrEdit = _mapper.Map<AuditDocumentAddOrEdit>(inDto);
|
||||
addOrEdit.IsUpdate = true;
|
||||
|
||||
var result= await AddOrUpdateAuditDocument(addOrEdit);
|
||||
|
||||
return ResponseOutput.Ok(result.Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增稽查文档
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> AddAuditDocument(List<AuditDocumentAddOrEdit> inDto)
|
||||
{
|
||||
List<Guid> resultData = new List<Guid>();
|
||||
inDto.ForEach(x => x.IsUpdate = false);
|
||||
await addData(inDto);
|
||||
|
||||
async Task addData(List<AuditDocumentAddOrEdit> data)
|
||||
{
|
||||
foreach(var item in data)
|
||||
{
|
||||
var result= await AddOrUpdateAuditDocument(item);
|
||||
|
||||
resultData.Add(result.Id);
|
||||
item.Children.ForEach(x => {
|
||||
x.ParentId = result.Id;
|
||||
x.IsUpdate = false;
|
||||
|
||||
});
|
||||
|
||||
if (item.Children.Count() > 0)
|
||||
{
|
||||
await addData(item.Children);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok(resultData);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 通用方法
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
private async Task<AuditDocument> AddOrUpdateAuditDocument(AuditDocumentAddOrEdit inDto)
|
||||
{
|
||||
|
||||
var alikeData = await _auditDocumentRepository.Where(x =>x.Id!=inDto.Id&& x.ParentId == inDto.ParentId&&x.Name==inDto.Name&&x.AuditDocumentTypeEnum==inDto.AuditDocumentTypeEnum).FirstOrDefaultAsync();
|
||||
if (alikeData != null)
|
||||
{
|
||||
if (inDto.AuditDocumentTypeEnum == AuditDocumentType.Folder)
|
||||
{
|
||||
if (inDto.IsUpdate)
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotAddFolder"]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return alikeData;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var entityData = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true);
|
||||
var historicalVersionIds = await _auditDocumentRepository.Where(x => x.MainFileId == alikeData.Id).OrderBy(x => x.Version).Select(x => x.Id).ToListAsync();
|
||||
historicalVersionIds.Add(alikeData.Id);
|
||||
int num = 1;
|
||||
|
||||
foreach (var item in historicalVersionIds)
|
||||
{
|
||||
await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument()
|
||||
{
|
||||
MainFileId = entityData.Id,
|
||||
ParentId = null,
|
||||
Version = num,
|
||||
AuditDocumentTypeEnum = AuditDocumentType.HistoricalVersion
|
||||
},true);
|
||||
num++;
|
||||
}
|
||||
|
||||
return entityData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var entity = await _auditDocumentRepository.InsertOrUpdateAsync(inDto, true);
|
||||
return entity;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取面包屑导航
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<AuditDocumentUpdateDto>> GetBreadcrumbData(GetBreadcrumbDataInDto inDto)
|
||||
{
|
||||
List<AuditDocumentUpdateDto> result=new List<AuditDocumentUpdateDto>();
|
||||
|
||||
await findParent(result, inDto.Id);
|
||||
async Task findParent(List<AuditDocumentUpdateDto> datas, Guid id)
|
||||
{
|
||||
var data= await _auditDocumentRepository.Where(x => x.Id == id).ProjectTo<AuditDocumentUpdateDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
datas.Add(data);
|
||||
if (data.ParentId != null)
|
||||
{
|
||||
await findParent(datas, data.ParentId.Value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
result.Reverse();
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取文件树形结构 (传Id 根节点就是自己)
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<AuditDocumentData>> GetAuditDocumentData(GetAuditDocumentDataInDto inDto)
|
||||
{
|
||||
|
||||
var defalutSortArray = new string[] { nameof(AuditDocumentData.AuditDocumentTypeEnum), nameof(AuditDocumentData.Name) };
|
||||
|
||||
// 新取出来排序 然后再找子项
|
||||
var data= (await _auditDocumentRepository
|
||||
.Where(x=>x.AuditDocumentTypeEnum!=AuditDocumentType.HistoricalVersion)
|
||||
.WhereIf(inDto.IsAuthorization!=null,x=>x.IsAuthorization==inDto.IsAuthorization)
|
||||
.ProjectTo<AuditDocumentData>(_mapper.ConfigurationProvider).ToPagedListAsync(new PageInput() {
|
||||
PageIndex=1,
|
||||
PageSize=999999,
|
||||
}, defalutSortArray) ).CurrentPageData.ToList();
|
||||
|
||||
|
||||
|
||||
if (inDto.Name.IsNotNullOrEmpty())
|
||||
{
|
||||
List<Guid> findIds = new List<Guid>();
|
||||
var findData = data.Where(x => x.Name.Contains(inDto.Name)).Select(x => x.Id.Value).ToList();
|
||||
GetParentId(findIds, findData, data);
|
||||
findIds.AddRange(findData);
|
||||
|
||||
data = data.Where(x => findIds.Distinct().Contains(x.Id.Value)).ToList();
|
||||
|
||||
}
|
||||
|
||||
|
||||
var query = data
|
||||
.WhereIf(inDto.SelfId != null, x => inDto.SelfId == x.Id)
|
||||
.WhereIf(inDto.Id != null, x => inDto.Id == x.ParentId)
|
||||
.WhereIf(inDto.Id == null&& inDto.SelfId == null, x => x.ParentId == null);
|
||||
|
||||
|
||||
|
||||
PageOutput<AuditDocumentData> result = new PageOutput<AuditDocumentData>()
|
||||
{
|
||||
PageIndex = inDto.PageIndex,
|
||||
PageSize = inDto.PageSize,
|
||||
TotalCount = query.Count(),
|
||||
};
|
||||
var root = query
|
||||
.Skip(inDto.PageSize * (inDto.PageIndex - 1)).Take(inDto.PageSize).ToList();
|
||||
|
||||
foreach (var item in root)
|
||||
{
|
||||
GetChildren(item, data);
|
||||
|
||||
}
|
||||
result.CurrentPageData = root;
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private void GetParentId(List<Guid> parentIds, List<Guid> ids, List<AuditDocumentData> dataList)
|
||||
{
|
||||
var parentid = dataList.Where(x => ids.Contains(x.Id.Value) && x.ParentId != null).Select(x => x.ParentId.Value).ToList();
|
||||
|
||||
if (parentid.Count() > 0)
|
||||
{
|
||||
parentIds.AddRange(parentid);
|
||||
|
||||
GetParentId(parentIds, parentid, dataList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void GetChildren(AuditDocumentData item, List<AuditDocumentData> dataList)
|
||||
{
|
||||
item.Children = dataList.Where(x => x.ParentId == item.Id).ToList();
|
||||
foreach (var x in item.Children)
|
||||
{
|
||||
GetChildren(x, dataList);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除稽查文档
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> DeleteAuditDocument(DeleteAuditDocumentInDto inDto)
|
||||
{
|
||||
var data = await _auditDocumentRepository.Select(x => new DeleteAudit (){
|
||||
Id=x.Id,
|
||||
ParentId= x.ParentId,
|
||||
MainFileId= x.MainFileId
|
||||
}).ToListAsync();
|
||||
|
||||
List<Guid> DeleteId= inDto.Ids;
|
||||
|
||||
finId(inDto.Ids, data);
|
||||
|
||||
void finId(List<Guid> deletids, List<DeleteAudit> deletes)
|
||||
{
|
||||
DeleteId.AddRange(deletids);
|
||||
|
||||
var temp = deletes.Where(x =>(x.ParentId!=null&& deletids.Contains(x.ParentId.Value))||(x.MainFileId!=null&& deletids.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList();
|
||||
if (temp.Count() > 0)
|
||||
{
|
||||
finId(temp, deletes);
|
||||
}
|
||||
}
|
||||
|
||||
DeleteId = DeleteId.Distinct().ToList();
|
||||
var mainFileId=await _auditDocumentRepository.Where(x => DeleteId.Contains(x.Id)&&x.MainFileId!=null).Select(x => x.MainFileId).Distinct().ToListAsync();
|
||||
var success = await _auditDocumentRepository.DeleteFromQueryAsync(t => DeleteId.Distinct().Contains(t.Id), true);
|
||||
|
||||
foreach (var item in mainFileId)
|
||||
{
|
||||
var historicalVersionList = await _auditDocumentRepository.Where(x => x.MainFileId == item).OrderBy(x=>x.Version).ToListAsync();
|
||||
|
||||
var num = 1;
|
||||
foreach (var historical in historicalVersionList)
|
||||
{
|
||||
await _auditDocumentRepository.UpdatePartialFromQueryAsync(historical.Id, x => new AuditDocument()
|
||||
{
|
||||
Version = num,
|
||||
}, true);
|
||||
num++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移动文件或者文件夹 到其他文件夹
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> MovieFileOrFolder(MovieFileOrFolderInDto inDto)
|
||||
{
|
||||
|
||||
var data = await _auditDocumentRepository.Select(x => new DeleteAudit()
|
||||
{
|
||||
Id = x.Id,
|
||||
ParentId = x.ParentId,
|
||||
AuditDocumentTypeEnum = x.AuditDocumentTypeEnum,
|
||||
MainFileId = x.MainFileId
|
||||
}).ToListAsync();
|
||||
|
||||
foreach (var id in inDto.Ids)
|
||||
{
|
||||
var file = data.Where(x => x.Id == id).FirstOrDefault();
|
||||
if (file.AuditDocumentTypeEnum == AuditDocumentType.Folder)
|
||||
{
|
||||
if (finChild(new List<Guid> { id }, inDto.ParentId, data))
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotMove"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool finChild(List<Guid> ids, Guid ChildId, List<DeleteAudit> data)
|
||||
{
|
||||
var child = data.Where(x => x.ParentId != null && ids.Contains(x.ParentId.Value)).ToList();
|
||||
if (child.Count() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (child.Any(x => x.Id == ChildId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newids = child.Select(x => x.Id).ToList();
|
||||
|
||||
return finChild(newids, ChildId, data);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var id in inDto.Ids)
|
||||
{
|
||||
await _auditDocumentRepository.UpdatePartialFromQueryAsync(id, x => new AuditDocument()
|
||||
{
|
||||
ParentId = inDto.ParentId
|
||||
});
|
||||
|
||||
await _auditDocumentRepository.SaveChangesAsync();
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 复制文件或者文件夹
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> CopyFileOrFolder(MovieFileOrFolderInDto inDto)
|
||||
{
|
||||
|
||||
foreach (var item in inDto.Ids)
|
||||
{
|
||||
var data = (await GetAuditDocumentData(new GetAuditDocumentDataInDto()
|
||||
{
|
||||
SelfId =item,
|
||||
|
||||
PageIndex=1,
|
||||
PageSize= 1000
|
||||
})).CurrentPageData;
|
||||
|
||||
List<AuditDocumentAddOrEdit> auditDocumentAddOrEdits = _mapper.Map<List<AuditDocumentAddOrEdit>>(data);
|
||||
auditDocumentAddOrEdits.ForEach(x => x.IsUpdate = false);
|
||||
await addData(auditDocumentAddOrEdits);
|
||||
}
|
||||
|
||||
async Task addData(List<AuditDocumentAddOrEdit> data)
|
||||
{
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.Id = null;
|
||||
var result = await AddOrUpdateAuditDocument(item);
|
||||
|
||||
item.Children.ForEach(x => {
|
||||
x.ParentId = result.Id;
|
||||
x.IsUpdate = false;
|
||||
|
||||
});
|
||||
|
||||
if (item.Children.Count() > 0)
|
||||
{
|
||||
await addData(item.Children);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取历史版本
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<HistoricalVersionDto>> GetHistoricalVersion(GetHistoricalVersionInDto inDto)
|
||||
{
|
||||
|
||||
List< HistoricalVersionDto > result=new List<HistoricalVersionDto>();
|
||||
|
||||
result = await _auditDocumentRepository.Where(x => x.MainFileId == inDto.Id).ProjectTo<HistoricalVersionDto>(_mapper.ConfigurationProvider).OrderByDescending(x => x.Version).ToListAsync();
|
||||
var currentData = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).ProjectTo<HistoricalVersionDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||
currentData.IsCurrentVersion = true;
|
||||
|
||||
result.Insert(0, currentData);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把历史版本设置为当前版本
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> SetCurrentVersion(SetCurrentVersionInDto inDto)
|
||||
{
|
||||
var file = await _auditDocumentRepository.Where(x => x.Id == inDto.Id).FirstNotNullAsync();
|
||||
if (file.AuditDocumentTypeEnum != AuditDocumentType.HistoricalVersion)
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["AuditDocument_CanNotSetCurrentVersion"]);
|
||||
}
|
||||
|
||||
var mainFile = await _auditDocumentRepository.Where(x => x.Id == file.MainFileId).FirstNotNullAsync();
|
||||
|
||||
var historicalVersionIds= await _auditDocumentRepository.Where(x => x.MainFileId == mainFile.Id&&x.Id!=inDto.Id).OrderBy(x=>x.Version).Select(x=>x.Id).ToListAsync();
|
||||
|
||||
historicalVersionIds.Add(mainFile.Id);
|
||||
await _auditDocumentRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new AuditDocument() {
|
||||
MainFileId=null,
|
||||
ParentId= mainFile.ParentId,
|
||||
AuditDocumentTypeEnum=AuditDocumentType.File,
|
||||
});
|
||||
|
||||
int num = 1;
|
||||
foreach (var item in historicalVersionIds)
|
||||
{
|
||||
await _auditDocumentRepository.UpdatePartialFromQueryAsync(item, x => new AuditDocument()
|
||||
{
|
||||
MainFileId = inDto.Id,
|
||||
ParentId = null,
|
||||
Version=num,
|
||||
AuditDocumentTypeEnum= AuditDocumentType.HistoricalVersion
|
||||
});
|
||||
num++;
|
||||
}
|
||||
|
||||
await _auditDocumentRepository.SaveChangesAsync();
|
||||
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置是否授权
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> SetIsAuthorization(SetIsAuthorizationInDto inDto)
|
||||
{
|
||||
var data = await _auditDocumentRepository.Select(x => new DeleteAudit()
|
||||
{
|
||||
Id = x.Id,
|
||||
ParentId = x.ParentId,
|
||||
MainFileId = x.MainFileId
|
||||
}).ToListAsync();
|
||||
|
||||
List<Guid> allid = new List<Guid>();
|
||||
findChild(allid, inDto.Ids, data);
|
||||
|
||||
await _auditDocumentRepository.UpdatePartialFromQueryAsync(t => allid.Contains(t.Id), x => new AuditDocument() {
|
||||
|
||||
IsAuthorization = inDto.IsAuthorization
|
||||
});
|
||||
await _auditDocumentRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
void findChild(List<Guid> allId,List<Guid> current, List<DeleteAudit> data)
|
||||
{
|
||||
allId.AddRange(current);
|
||||
|
||||
var child = data.Where(x =>(x.ParentId!=null&& current.Contains(x.ParentId.Value))||(x.MainFileId!=null&¤t.Contains(x.MainFileId.Value))).Select(x => x.Id).ToList();
|
||||
if (child.Count() > 0)
|
||||
{
|
||||
|
||||
|
||||
findChild(allId, child, data);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由liquid模板自动生成 byzhouhang 20240909
|
||||
// 生成时间 2025-03-27 06:13:37Z
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
using System;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.Collections.Generic;
|
||||
namespace IRaCIS.Core.Application.ViewModel;
|
||||
|
||||
public class DeleteAudit
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public AuditDocumentType AuditDocumentTypeEnum { get; set; }
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
public Guid? MainFileId { get; set; }
|
||||
}
|
||||
|
||||
public class DeleteAuditDocumentInDto
|
||||
{
|
||||
public List<Guid> Ids { get; set; }
|
||||
}
|
||||
|
||||
public class GetAuditDocumentDataInDto:PageInput
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public Guid? SelfId { get; set; }
|
||||
|
||||
|
||||
public bool? IsAuthorization { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class GetAuditDocumentDataOutDto
|
||||
{
|
||||
public List<AuditDocumentData> Data { get; set; } = new List<AuditDocumentData> { };
|
||||
}
|
||||
|
||||
public class AuditDocumentData : AuditDocumentUpdateDto
|
||||
{
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
public int? Version { get; set; }
|
||||
public List<AuditDocumentData> Children { get; set; }=new List<AuditDocumentData> (){ };
|
||||
|
||||
}
|
||||
|
||||
public class AuditDocumentView : AuditDocumentAddOrEdit
|
||||
{
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class SetIsAuthorizationInDto
|
||||
{
|
||||
public List<Guid> Ids { get; set; }
|
||||
|
||||
public bool IsAuthorization { get; set; }
|
||||
}
|
||||
|
||||
public class SetCurrentVersionInDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
|
||||
public class GetHistoricalVersionInDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
|
||||
public class GetHistoricalVersionOutDto
|
||||
{
|
||||
public AuditDocumentData CurrentData { get; set; }
|
||||
public List<AuditDocumentData> HistoricalVersionList { get; set; } = new List<AuditDocumentData> { };
|
||||
}
|
||||
|
||||
public class MovieFileOrFolderInDto
|
||||
{
|
||||
public List<Guid> Ids { get; set; }
|
||||
|
||||
public Guid ParentId { get; set; }
|
||||
}
|
||||
|
||||
public class HistoricalVersionDto: AuditDocumentUpdateDto
|
||||
{
|
||||
public bool IsCurrentVersion { get; set; } = false;
|
||||
|
||||
public int? Version { get; set; }
|
||||
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
public DateTime UpdateTime { get; set; }
|
||||
}
|
||||
|
||||
public class AuditDocumentUpdateDto
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
|
||||
public AuditDocumentType AuditDocumentTypeEnum { get; set; }
|
||||
|
||||
public string? FileFormat { get; set; }
|
||||
|
||||
public string? FilePath { get; set; }
|
||||
|
||||
public decimal? FileSize { get; set; }
|
||||
|
||||
public bool IsAuthorization { get; set; }
|
||||
|
||||
// public Guid? MainFileId { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public Guid? ParentId { get; set; }
|
||||
}
|
||||
|
||||
public class GetBreadcrumbDataInDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
|
||||
public class AuditDocumentAddOrEdit: AuditDocumentUpdateDto
|
||||
{
|
||||
|
||||
|
||||
public List<AuditDocumentAddOrEdit> Children { get; set; }=new List<AuditDocumentAddOrEdit>() { };
|
||||
|
||||
public bool IsUpdate { get; set; } = true;
|
||||
}
|
||||
|
||||
public class AuditDocumentQuery:PageInput
|
||||
{
|
||||
public AuditDocumentType? AuditDocumentTypeEnum { get; set; }
|
||||
|
||||
public string? FileFormat { get; set; }
|
||||
|
||||
public string? FilePath { get; set; }
|
||||
|
||||
public decimal? FileSize { get; set; }
|
||||
|
||||
public bool? IsAuthorization { get; set; }
|
||||
|
||||
public Guid? MainFileId { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,14 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
var userId = Guid.Empty;
|
||||
var isEn_Us = false;
|
||||
|
||||
CreateMap<AuditDocumentData, AuditDocumentAddOrEdit>();
|
||||
//CreateMap<List<AuditDocumentData>, List<AuditDocumentAddOrEdit>>();
|
||||
CreateMap<AuditDocument, AuditDocumentView>();
|
||||
CreateMap<AuditDocument, AuditDocumentUpdateDto>();
|
||||
CreateMap<AuditDocument, HistoricalVersionDto>();
|
||||
CreateMap<AuditDocumentUpdateDto, AuditDocumentAddOrEdit>();
|
||||
CreateMap<AuditDocument, AuditDocumentData>();
|
||||
CreateMap<AuditDocument, AuditDocumentAddOrEdit>().ReverseMap();
|
||||
CreateMap<SystemDocument, SystemDocumentView>()
|
||||
.ForMember(d => d.FileType, u => u.MapFrom(s => isEn_Us ? s.FileType.Value : s.FileType.ValueCN))
|
||||
.ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path));
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
|
||||
public bool IsLoginUncommonly { get; set; }
|
||||
|
||||
public bool IsIgnoreUncommonly { get; set; }
|
||||
|
||||
public string JsonObj { get; set; }
|
||||
|
||||
@@ -43,17 +44,27 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public UserMFAType MFAType { get; set; } = UserMFAType.Login;
|
||||
}
|
||||
|
||||
public class SetIsIgnoreUncommonlyInDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public bool IsIgnoreUncommonly { get; set; }
|
||||
}
|
||||
|
||||
///<summary>UserLogQuery 列表查询参数模型</summary>
|
||||
public class UserLogQuery : PageInput
|
||||
{
|
||||
public Guid? TrialId { get; set; }
|
||||
|
||||
public UserOptType? OptType { get; set; }
|
||||
public List<UserOptType>? OptTypeList { get; set; }
|
||||
|
||||
public List<UserOptType> OptTypeList { get; set; } = new List<UserOptType>();
|
||||
|
||||
public string? IP { get; set; }
|
||||
|
||||
public string? LoginFaildName { get; set; }
|
||||
|
||||
|
||||
public string? LoginUserName { get; set; }
|
||||
|
||||
public DateTime? BeginDate { get; set; }
|
||||
|
||||
@@ -835,7 +835,17 @@ namespace IRaCIS.Core.Application.Service
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设置是否忽略异地登录
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> SetIsIgnoreUncommonly(SetIsIgnoreUncommonlyInDto inDto)
|
||||
{
|
||||
await _userLogRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new UserLog() { IsIgnoreUncommonly = inDto.IsIgnoreUncommonly }, true);
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<UserLogView>> GetUserLogList(UserLogQuery inQuery)
|
||||
@@ -846,14 +856,16 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
var userLogQueryable =
|
||||
_userLogRepository.AsQueryable().IgnoreQueryFilters()
|
||||
.WhereIf(inQuery.OptTypeList.Count()>0, t => inQuery.OptTypeList.Contains(t.OptType))
|
||||
.WhereIf(inQuery.IdentityUserId != null, t => t.ActionIdentityUserId == inQuery.IdentityUserId)
|
||||
.WhereIf(inQuery.TargetIdentityUserId != null, t => t.TargetIdentityUserId == inQuery.TargetIdentityUserId)
|
||||
.WhereIf(inQuery.TrialId != null, t => t.ActionIdentityUser.UserTrialList.Any(c => c.TrialId == inQuery.TrialId) || t.TargetIdentityUser.UserTrialList.Any(c => c.TrialId == inQuery.TrialId))
|
||||
.WhereIf(trialCreateTime != null, t => t.CreateTime >= trialCreateTime)
|
||||
.WhereIf(inQuery.OptType != null, t => t.OptType == inQuery.OptType)
|
||||
.WhereIf(inQuery.OptTypeList != null && inQuery.OptTypeList.Count > 0, t => inQuery.OptTypeList.Contains(t.OptType))
|
||||
.WhereIf(inQuery.BeginDate != null, t => t.CreateTime >= inQuery.BeginDate)
|
||||
.WhereIf(inQuery.EndDate != null, t => t.CreateTime <= inQuery.EndDate)
|
||||
.WhereIf(inQuery.IsLoginUncommonly != null, t => t.IsLoginUncommonly == inQuery.IsLoginUncommonly)
|
||||
.WhereIf(inQuery.IsLoginUncommonly != null && inQuery.IsLoginUncommonly.Value, t => t.IsLoginUncommonly&&!t.IsIgnoreUncommonly)
|
||||
.WhereIf(inQuery.IsLoginUncommonly != null && !inQuery.IsLoginUncommonly.Value, t => !t.IsLoginUncommonly || t.IsIgnoreUncommonly)
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.LoginUserName), t => t.ActionUserName.Contains(inQuery.LoginUserName!))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.LoginFaildName), t => t.ActionUserName.Contains(inQuery.LoginFaildName!))
|
||||
.WhereIf(!string.IsNullOrEmpty(inQuery.IP), t => t.IP.Contains(inQuery.IP!))
|
||||
@@ -958,31 +970,35 @@ namespace IRaCIS.Core.Application.Service
|
||||
//账号在系统存在
|
||||
if (isExistAccount || loginUser != null)
|
||||
{
|
||||
var ipinfo = _searcher.Search(_userInfo.IP);
|
||||
//var ipinfo = _searcher.Search(_userInfo.IP);
|
||||
|
||||
var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||
//var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||
|
||||
string SplitAndConcatenate(string input)
|
||||
//string SplitAndConcatenate(string input)
|
||||
//{
|
||||
// string[] parts = input.Split('|');
|
||||
// return parts.Length >= 3 ? parts[0] + parts[1] : string.Join("", parts);
|
||||
//}
|
||||
|
||||
var iPRegion = IPCityHelper.GetCityResponse(_userInfo.IP);
|
||||
|
||||
//设置本次登录的IP
|
||||
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == existUserLoginInfo.Id, x => new IdentityUser()
|
||||
{
|
||||
string[] parts = input.Split('|');
|
||||
return parts.Length >= 3 ? parts[0] + parts[1] : string.Join("", parts);
|
||||
}
|
||||
LastLoginIP = iPRegion,
|
||||
LastLoginTime = DateTime.Now
|
||||
|
||||
});
|
||||
|
||||
if (existUserLoginInfo.LastLoginIP != string.Empty)
|
||||
{
|
||||
// 与上一次区域不一致
|
||||
if (SplitAndConcatenate(existUserLoginInfo.LastLoginIP) != SplitAndConcatenate(iPRegion))
|
||||
//if (SplitAndConcatenate(existUserLoginInfo.LastLoginIP) != SplitAndConcatenate(iPRegion))
|
||||
if (existUserLoginInfo.LastLoginIP != iPRegion)
|
||||
{
|
||||
|
||||
isLoginUncommonly = true;
|
||||
|
||||
//设置上次登录的IP
|
||||
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == existUserLoginInfo.Id, x => new IdentityUser()
|
||||
{
|
||||
LastLoginIP = iPRegion,
|
||||
LastLoginTime = DateTime.Now
|
||||
|
||||
});
|
||||
|
||||
if (loginUser != null)
|
||||
{
|
||||
@@ -1017,14 +1033,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
}
|
||||
|
||||
|
||||
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.IdentityUserId, x => new IdentityUser()
|
||||
{
|
||||
LastLoginTime = DateTime.Now,
|
||||
LastLoginIP = _userInfo.IP,
|
||||
});
|
||||
|
||||
|
||||
//登录成功的,才会算异地登录
|
||||
if (loginUser.Status == 0)
|
||||
{
|
||||
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, ActionIdentityUserId = loginUser.IdentityUserId, ActionUserName = loginUser.UserName, OptType = UserOptType.LoginLockedAccount, IsLoginUncommonly = isLoginUncommonly }, true);
|
||||
|
||||
@@ -2108,6 +2108,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||
public DateTime? ReviewAuditTime { get; set; }
|
||||
public DateTime? PreliminaryAuditTime { get; set; }
|
||||
|
||||
public ImageBackStateEnum ImageBackState { get; set; }
|
||||
|
||||
public DateTime? AuditTime => QCProcessEnum == TrialQCProcess.SingleAudit ? PreliminaryAuditTime : (QCProcessEnum == TrialQCProcess.DoubleAudit ? ReviewAuditTime : null);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using IRaCIS.Core.Application.Contracts.DTO;
|
||||
using IRaCIS.Core.Application.Filter;
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
using IRaCIS.Core.Application.Service.Inspection.DTO;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using Medallion.Threading;
|
||||
@@ -38,6 +39,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService,
|
||||
IOSSService _oSSService,
|
||||
IRepository<ReadingClinicalData> _readingClinicalDataReposiotry,
|
||||
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService, IQCOperationService
|
||||
{
|
||||
|
||||
@@ -239,6 +241,137 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
#endregion
|
||||
|
||||
|
||||
#region CRC IQC 申请退回
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// CRC IQC 申请影像回退
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||
[HttpPut]
|
||||
public async Task<IResponseOutput> RequestImageBack(Guid subjectVisitId)
|
||||
{
|
||||
if (!_subjectVisitRepository.Any(t => t.Id == subjectVisitId && !t.VisitTaskList.Any() && t.SubmitState == SubmitStateEnum.Submitted))
|
||||
{
|
||||
//已提交未生成任务的才允许申请
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_ShouldBeforeCheckPassed"]);
|
||||
}
|
||||
|
||||
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||
{
|
||||
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ImageBackState = ImageBackStateEnum.CRCRequestBack }, true);
|
||||
}
|
||||
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
||||
{
|
||||
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ImageBackState = ImageBackStateEnum.IQCRequestBack }, true);
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PM 审核CRC IQC 申请影像回退
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <param name="isAgree"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||
[HttpPut]
|
||||
public async Task<IResponseOutput> AuditImageBack(Guid subjectVisitId, bool isAgree)
|
||||
{
|
||||
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||
|
||||
if (sv.ImageBackState != ImageBackStateEnum.CRCRequestBack && sv.ImageBackState != ImageBackStateEnum.IQCRequestBack)
|
||||
{
|
||||
//当前访视状态不在影像申请回退状态,不允许审核通过
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_NotInRequestImageBackState"]);
|
||||
}
|
||||
if (isAgree)
|
||||
{
|
||||
|
||||
if (sv.SubmitState == SubmitStateEnum.Submitted && _subjectVisitRepository.Any(t => t.Id == subjectVisitId && !t.VisitTaskList.Any()))
|
||||
{
|
||||
sv.ImageBackState = ImageBackStateEnum.PMAgreeBack;
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//已提交未生成任务的才允许申请
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_ShouldBeforeCheckPassed"]);
|
||||
}
|
||||
|
||||
|
||||
#region 回退处理
|
||||
//需要重新产生任务
|
||||
sv.IsVisitTaskGenerated = false;
|
||||
sv.IsPMBackOrReReading = true;
|
||||
|
||||
sv.AuditState = AuditStateEnum.None;
|
||||
sv.SubmitState = SubmitStateEnum.ToSubmit;
|
||||
sv.ReadingStatus = ReadingStatusEnum.ImageNotSubmit;
|
||||
|
||||
//回退后,回退状态恢复
|
||||
sv.RequestBackState = RequestBackStateEnum.NotRequest;
|
||||
sv.IsCheckBack = false;
|
||||
sv.CheckBackTime = null;
|
||||
sv.CheckState = CheckStateEnum.None;
|
||||
sv.CheckChallengeState = CheckChanllengeTypeEnum.None;
|
||||
|
||||
sv.SVENDTC = null;
|
||||
sv.SVSTDTC = null;
|
||||
|
||||
sv.PreliminaryAuditTime = null;
|
||||
sv.SubmitTime = null;
|
||||
sv.ReviewAuditTime = null;
|
||||
sv.CurrentActionUserExpireTime = null;
|
||||
|
||||
|
||||
sv.IsTake = false;
|
||||
sv.CurrentActionUserId = null;
|
||||
sv.PreliminaryAuditUserId = null;
|
||||
sv.ReviewAuditUserId = null;
|
||||
|
||||
|
||||
if (sv.IsBaseLine)
|
||||
{
|
||||
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && (t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit), c => new ReadingClinicalData() { IsSign = false, ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded });
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = false,
|
||||
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded,
|
||||
IsBlind = null,
|
||||
IsComplete = null
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||
#endregion
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
sv.ImageBackState = ImageBackStateEnum.PMNotAgreeBack;
|
||||
|
||||
}
|
||||
|
||||
await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 一致性核查
|
||||
|
||||
/// <summary>
|
||||
@@ -731,7 +864,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||
public async Task<IResponseOutput> SetNodicomStudyState(Guid subjectVisitId, Guid noneDicomStudyId, Guid? noneDicomStudyFileId, int state)
|
||||
public async Task<IResponseOutput> SetNodicomStudyState(Guid subjectVisitId, Guid noneDicomStudyId, Guid? noneDicomStudyFileId, int state)
|
||||
{
|
||||
await VerifyIsCanQCAsync(null, subjectVisitId);
|
||||
|
||||
@@ -757,7 +890,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
else if (state == 5)
|
||||
{
|
||||
noneDicomStudy.IsDeleted = false;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
//设置检查下面的文件
|
||||
@@ -1697,8 +1830,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
//删除 软删除的物理文件
|
||||
var instancePathList = await _dicomInstanceRepository.Where(t => (t.DicomSerie.IsDeleted || t.IsDeleted) && t.SubjectVisitId == subjectVisitId, false, true)
|
||||
.Select(t => t.Path).ToListAsync();
|
||||
var noneDicomFileList = await _noneDicomStudyFileRepository.Where(t => (t.NoneDicomStudy.IsDeleted ||t.IsDeleted) && t.NoneDicomStudy.SubjectVisitId == subjectVisitId, false, true)
|
||||
.Select(t => t.Path).ToListAsync();
|
||||
var noneDicomFileList = await _noneDicomStudyFileRepository.Where(t => (t.NoneDicomStudy.IsDeleted || t.IsDeleted) && t.NoneDicomStudy.SubjectVisitId == subjectVisitId, false, true)
|
||||
.Select(t => t.Path).ToListAsync();
|
||||
|
||||
|
||||
@@ -1739,13 +1872,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
//删除影像
|
||||
await _dicomStudyRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted && t.SubjectVisitId == subjectVisitId);
|
||||
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted && t.SubjectVisitId == subjectVisitId);
|
||||
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted && t.SubjectVisitId == subjectVisitId);
|
||||
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => (t.DicomSerie.IsDeleted || t.IsDeleted) && t.SubjectVisitId == subjectVisitId);
|
||||
await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => (t.NoneDicomStudy.IsDeleted || t.IsDeleted) && t.NoneDicomStudy.SubjectVisitId == subjectVisitId);
|
||||
await _noneDicomStudyRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted && t.SubjectVisitId == subjectVisitId);
|
||||
await _noneDicomStudyRepository.BatchDeleteNoTrackingAsync(t => t.IsDeleted && t.SubjectVisitId == subjectVisitId);
|
||||
await _oSSService.DeleteObjects(instancePathList.Select(t => t.TrimStart('/')).ToList());
|
||||
await _oSSService.DeleteObjects(noneDicomFileList.Select(t => t.TrimStart('/')).ToList());
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -291,6 +291,23 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||
public List<string> SheetNames { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class TestOncologyDto
|
||||
{
|
||||
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string TargetLesion { get; set; }
|
||||
|
||||
|
||||
public string NonTargetLesions { get; set; }
|
||||
|
||||
public string NewLesion { get; set; }
|
||||
|
||||
|
||||
public string OverallEfficacy { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 阅片计算Dto
|
||||
/// </summary>
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||
IRepository<ClinicalDataSystemSet> _clinicalDataSystemSetRepository,
|
||||
IRepository<Dictionary> _dictionaryRepository,
|
||||
IRepository<CriterionNidusSystem> _criterionNidusSystemRepository,
|
||||
IRepository<SystemCriterionDictionaryCode> _systemCriterionDictionaryCodeRepository,
|
||||
IReadingImageTaskService _iReadingImageTaskService,
|
||||
IRepository<ReadingSystemCriterionDictionary> _readingSystemCriterionDictionaryRepository,
|
||||
@@ -961,7 +962,12 @@ namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
question.RelevanceId = copyNewQuestionList.Where(y => x.RelevanceId == y.OriginalId).Select(y => y.Id).FirstOrDefault();
|
||||
}
|
||||
needAddDatas.Add(question);
|
||||
if (question.GroupId != null)
|
||||
{
|
||||
question.GroupId = copyNewQuestionList.Where(y => x.GroupId == y.OriginalId).Select(y => y.Id).FirstOrDefault();
|
||||
}
|
||||
|
||||
needAddDatas.Add(question);
|
||||
};
|
||||
|
||||
await _readingQuestionSystemRepository.BatchDeleteNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == inDto.NewSystemCriterionId);
|
||||
@@ -970,14 +976,24 @@ namespace IRaCIS.Core.Application.Service
|
||||
#region 表格问题
|
||||
var newSystemTableQuestionList = await _readingTableQuestionSystemRepository.Where(x => x.SystemCriterionId == inDto.SourceSystemCriterionId)
|
||||
.ProjectTo<ReadingTableQuestionSystemData>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
|
||||
foreach (var question in newSystemTableQuestionList)
|
||||
{
|
||||
question.SystemCriterionId = inDto.NewSystemCriterionId;
|
||||
question.Id = NewId.NextGuid();
|
||||
}
|
||||
|
||||
var copeNewSystemTableQuestionList = newSystemTableQuestionList.Clone();
|
||||
|
||||
|
||||
var needAddTableDatas = new List<ReadingTableQuestionSystemData>();
|
||||
foreach (var x in newSystemTableQuestionList)
|
||||
{
|
||||
var tableQuestion = x.Clone();
|
||||
tableQuestion.SystemCriterionId = inDto.NewSystemCriterionId;
|
||||
tableQuestion.Id = NewId.NextGuid();
|
||||
if (tableQuestion.ParentId != null)
|
||||
|
||||
tableQuestion.ReadingQuestionId = copyNewQuestionList.Where(y => x.ReadingQuestionId == y.OriginalId).Select(y => y.Id).FirstOrDefault();
|
||||
if (tableQuestion.ParentId != null)
|
||||
{
|
||||
tableQuestion.ParentId = copeNewSystemTableQuestionList.Where(y => x.ParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault();
|
||||
}
|
||||
@@ -989,7 +1005,11 @@ namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
tableQuestion.DependParentId = copeNewSystemTableQuestionList.Where(y => x.DependParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault();
|
||||
}
|
||||
needAddTableDatas.Add(tableQuestion);
|
||||
if (tableQuestion.ClassifyTableQuestionId != null)
|
||||
{
|
||||
tableQuestion.ClassifyTableQuestionId = copeNewSystemTableQuestionList.Where(y => x.ClassifyTableQuestionId == y.OriginalId).Select(y => y.Id).FirstOrDefault();
|
||||
}
|
||||
needAddTableDatas.Add(tableQuestion);
|
||||
}
|
||||
await _readingTableQuestionSystemRepository.BatchDeleteNoTrackingAsync(x => x.SystemCriterionId == inDto.NewSystemCriterionId);
|
||||
await _readingTableQuestionSystemRepository.AddRangeAsync(needAddTableDatas);
|
||||
@@ -1035,7 +1055,17 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
#endregion
|
||||
|
||||
#region criterionNidus
|
||||
var criterionNidusSystems = await _criterionNidusSystemRepository.Where(x => x.CriterionId == inDto.SourceSystemCriterionId).ToListAsync();
|
||||
|
||||
criterionNidusSystems.ForEach(x =>
|
||||
{
|
||||
x.Id = NewId.NextGuid();
|
||||
x.CriterionId = inDto.NewSystemCriterionId;
|
||||
});
|
||||
await _criterionNidusSystemRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == inDto.NewSystemCriterionId);
|
||||
await _criterionNidusSystemRepository.AddRangeAsync(criterionNidusSystems);
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||
{CriterionType.IVUS,typeof(IVUSCalculateService) },
|
||||
{CriterionType.OCT,typeof(OCTCalculateService) },
|
||||
{CriterionType.MRIPDFF,typeof(MRIPDFFCalculateService) },
|
||||
{CriterionType.mRECISTHCC,typeof(MRECISTHCCCalculate) },
|
||||
};
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,7 @@ using Microsoft.Extensions.Options;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using Panda.DynamicWebApi.Attributes;
|
||||
using ZiggyCreatures.Caching.Fusion;
|
||||
using static IRaCIS.Core.Domain.Share.StaticData;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
@@ -105,11 +106,43 @@ namespace IRaCIS.Core.Application.Service
|
||||
//过滤废除的项目
|
||||
public async Task<List<TrialSelectDTO>> GetTrialSelect()
|
||||
{
|
||||
// SuperAdmin Admin OP
|
||||
List<int> sap = new List<int>() { (int)UserTypeEnum.SuperAdmin, (int)UserTypeEnum.Admin, (int)UserTypeEnum.OP };
|
||||
|
||||
// pm
|
||||
List<int> pm = new List<int>() { (int)UserTypeEnum.ProjectManager };
|
||||
|
||||
// QA EA
|
||||
List<int> qAEq= new List<int>() { (int)UserTypeEnum.QA, (int)UserTypeEnum.EA };
|
||||
|
||||
List<int> other = new List<int>() { };
|
||||
|
||||
other.AddRange(sap);
|
||||
other.AddRange(pm);
|
||||
other.AddRange(qAEq);
|
||||
|
||||
List<string> trialState = new List<string>() { StaticData.TrialState.TrialOngoing, StaticData.TrialState.TrialCompleted, StaticData.TrialState.TrialStopped };
|
||||
return await _trialRepository.AsQueryable()
|
||||
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.Admin && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.OP,
|
||||
t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)) && t.IsDeleted == false)
|
||||
.Where(t=>t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId))
|
||||
&& (t.TrialStatusStr != StaticData.TrialState.TrialStopped || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager))
|
||||
|
||||
//SuperAdmin Admin OP
|
||||
.WhereIf(sap.Contains(_userInfo.UserTypeEnumInt),x=> trialState.Contains(x.TrialStatusStr))
|
||||
|
||||
// pm
|
||||
.WhereIf(pm.Contains(_userInfo.UserTypeEnumInt),t=> t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false
|
||||
&& t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false))
|
||||
&& t.IsDeleted == false)
|
||||
|
||||
|
||||
// QA EA
|
||||
.WhereIf(qAEq.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false
|
||||
&& t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false))
|
||||
&& t.IsDeleted == false && trialState.Contains(t.TrialStatusStr))
|
||||
|
||||
|
||||
// other
|
||||
.WhereIf(!other.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false
|
||||
&& t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false))
|
||||
&& t.IsDeleted == false&& t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
|
||||
.ProjectTo<TrialSelectDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
@@ -149,8 +149,8 @@ namespace IRaCIS.Core.Application.Services
|
||||
public async Task<List<TrialSiteSelect>> GetTrialSiteSelectList(string? siteName)
|
||||
{
|
||||
var list = _siteRepository
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(siteName), t => t.SiteName.Contains(siteName) || t.SiteNameCN.Contains(siteName) || t.AliasName.Contains(siteName))
|
||||
.Select(t => new TrialSiteSelect() { SiteId = t.Id, SiteName = _userInfo.IsEn_Us ? t.SiteName : t.SiteNameCN, AliasName = t.AliasName })
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(siteName), t => t.SiteName.Contains(siteName) || t.SiteNameCN.Contains(siteName) || t.AliasName.Contains(siteName))
|
||||
.Select(t => new TrialSiteSelect() { SiteId = t.Id, SiteName = _userInfo.IsEn_Us ? t.SiteName : t.SiteNameCN, AliasName = t.AliasName }).ToList()
|
||||
.OrderBy(x=>x.SiteName)
|
||||
.ToList();
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
TrialReadingCriterionList = intoGroup.Trial.TrialReadingCriterionList.Where(t => t.IsConfirm).Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, IsOncologyReading = t.IsOncologyReading, IsArbitrationReading = t.IsArbitrationReading, IsGlobalReading = t.IsGlobalReading, ReadingInfoSignTime = t.ReadingInfoSignTime, ReadingType = t.ReadingType }).ToList(),
|
||||
|
||||
DoctorCriterionStatusList = intoGroup.EnrollReadingCriteriaList.Select(t => new DoctorCriterionStatus()
|
||||
DoctorCriterionStatusList = intoGroup.EnrollReadingCriteriaList.Where(t=>t.TrialReadingCriterion.IsConfirm).Select(t => new DoctorCriterionStatus()
|
||||
{
|
||||
EnrollId = t.Id,
|
||||
Id = t.Id,
|
||||
@@ -228,9 +228,9 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
|
||||
|
||||
CriterionReadingCategoryList = intoGroup.EnrollReadingCategoryList.Select(t => new TrialCriterionReadingCategory() { EnrollId = t.EnrollId, ReadingCategory = t.ReadingCategory, TrialReadingCriterionId = t.TrialReadingCriterionId }).ToList(),
|
||||
CriterionReadingCategoryList = intoGroup.EnrollReadingCategoryList.Where(t => t.TrialReadingCriterion.IsConfirm).Select(t => new TrialCriterionReadingCategory() { EnrollId = t.EnrollId, ReadingCategory = t.ReadingCategory, TrialReadingCriterionId = t.TrialReadingCriterionId }).ToList(),
|
||||
|
||||
CriterionFileList = doctor.CriterionFileList.Where(x => x.IsEnable && (x.TrialId == null || x.TrialId == trialId)).Select(x => new CriterionFile()
|
||||
CriterionFileList = doctor.CriterionFileList.Where(t => t.TrialReadingCriterion.IsConfirm).Where(x => x.IsEnable && (x.TrialId == null || x.TrialId == trialId)).Select(x => new CriterionFile()
|
||||
{
|
||||
CriterionType = x.CriterionType,
|
||||
DoctorId = x.DoctorId,
|
||||
@@ -242,7 +242,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
Id = x.Id
|
||||
}).ToList(),
|
||||
|
||||
ReadingTaskStateList = intoGroup.DoctorUser.VisitTaskList.Where(x => x.TaskState == TaskState.Effect && x.TrialId == trialId).Select(x => new DoctorUserTask()
|
||||
ReadingTaskStateList = intoGroup.DoctorUser.VisitTaskList.Where(t => t.TrialReadingCriterion.IsConfirm).Where(x => x.TaskState == TaskState.Effect && x.TrialId == trialId).Select(x => new DoctorUserTask()
|
||||
{
|
||||
ReadingTaskState = x.ReadingTaskState,
|
||||
TrialReadingCriterionId = x.TrialReadingCriterionId,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Aliyun.OSS;
|
||||
using DocumentFormat.OpenXml.Spreadsheet;
|
||||
using FellowOakDicom.Imaging;
|
||||
using IRaCIS.Application.Contracts;
|
||||
using IRaCIS.Core.Application.BusinessFilter;
|
||||
using IRaCIS.Core.Application.Contracts;
|
||||
@@ -7,6 +8,7 @@ using IRaCIS.Core.Application.Helper;
|
||||
using IRaCIS.Core.Application.Service.BusinessFilter;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Domain;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
@@ -14,6 +16,7 @@ using IRaCIS.Core.Infrastructure.Encryption;
|
||||
using IRaCIS.Core.Infrastructure.NewtonsoftJson;
|
||||
using MassTransit;
|
||||
using MassTransit.Mediator;
|
||||
using MaxMind.GeoIP2;
|
||||
using Medallion.Threading;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
@@ -26,8 +29,13 @@ using Microsoft.Extensions.Options;
|
||||
using MiniExcelLibs;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using NPOI.XWPF.UserModel;
|
||||
using SharpCompress.Common;
|
||||
using SixLabors.ImageSharp;
|
||||
using SixLabors.ImageSharp.Formats.Jpeg;
|
||||
using SixLabors.ImageSharp.Processing;
|
||||
using System.Globalization;
|
||||
using System.Linq.Dynamic.Core;
|
||||
using System.Reactive.Subjects;
|
||||
using System.Reflection.Metadata.Ecma335;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
@@ -53,6 +61,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
IRepository<DicomSeries> _dicomSeriesRepository,
|
||||
IRepository<UserRole> _userRoleRepository,
|
||||
IRepository<TrialBodyPart> _trialBodyPartRepository,
|
||||
IOSSService _IOSSService,
|
||||
IDistributedLockProvider _distributedLockProvider,
|
||||
ILogger<TestService> _logger, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
|
||||
{
|
||||
@@ -86,6 +95,176 @@ namespace IRaCIS.Core.Application.Service
|
||||
await _readingConsistentClinicalDataRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
public async Task<IResponseOutput> NewIP([FromServices] IRepository<UserLog> _userLogRepository, [FromServices] IRepository<IdentityUser> _identityUserRepository)
|
||||
{
|
||||
var path = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "GeoLite2-City.mmdb");
|
||||
|
||||
|
||||
var ipList = _userLogRepository.Select(t => t.IP).Distinct().ToList();
|
||||
|
||||
foreach (var ip in ipList)
|
||||
{
|
||||
var ipRegion = IPCityHelper.GetCityResponse(ip);
|
||||
|
||||
await _userLogRepository.BatchUpdateNoTrackingAsync(t => t.IP == ip, u => new UserLog() { IPRegion = ipRegion });
|
||||
|
||||
}
|
||||
|
||||
|
||||
#region 用户表最后一次登录的ipRegion 需要维护
|
||||
|
||||
var userList = _identityUserRepository.Where(t => t.LastLoginIP != "").Select(t => new { t.Id, t.LastLoginIP, t.UpdateUserId }).ToList();
|
||||
|
||||
foreach (var user in userList)
|
||||
{
|
||||
var lastLoginRegion = _userLogRepository.Where(t => t.ActionIdentityUserId == user.Id && (t.OptType == UserOptType.Login || t.OptType == UserOptType.LoginLockedAccount)).OrderByDescending(t => t.CreateTime).Select(t => t.IPRegion).FirstOrDefault()??string.Empty;
|
||||
|
||||
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == user.Id, u => new Domain.Models.IdentityUser() { LastLoginIP = lastLoginRegion, UpdateUserId = user.UpdateUserId });
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IQC 回退到影像上传
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitIdList"></param>
|
||||
/// <param name="_subjectVisitRepository"></param>
|
||||
/// <param name="_trialQCQuestionAnswerRepository"></param>
|
||||
/// <param name="_readingClinicalDataReposiotry"></param>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> IQCBackToUpload(Guid[] subjectVisitIdList,
|
||||
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
|
||||
[FromServices] IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||
[FromServices] IRepository<ReadingClinicalData> _readingClinicalDataReposiotry)
|
||||
{
|
||||
|
||||
foreach (var subjectVisitId in subjectVisitIdList)
|
||||
{
|
||||
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||
|
||||
|
||||
//需要重新产生任务
|
||||
sv.IsVisitTaskGenerated = false;
|
||||
sv.IsPMBackOrReReading = true;
|
||||
|
||||
sv.AuditState = AuditStateEnum.None;
|
||||
sv.SubmitState = SubmitStateEnum.ToSubmit;
|
||||
sv.ReadingStatus = ReadingStatusEnum.ImageNotSubmit;
|
||||
|
||||
//回退后,回退状态恢复
|
||||
sv.RequestBackState = RequestBackStateEnum.NotRequest;
|
||||
sv.IsCheckBack = false;
|
||||
sv.CheckBackTime = null;
|
||||
sv.CheckState = CheckStateEnum.None;
|
||||
sv.CheckChallengeState = CheckChanllengeTypeEnum.None;
|
||||
|
||||
sv.SVENDTC = null;
|
||||
sv.SVSTDTC = null;
|
||||
|
||||
sv.PreliminaryAuditTime = null;
|
||||
sv.SubmitTime = null;
|
||||
sv.ReviewAuditTime = null;
|
||||
sv.CurrentActionUserExpireTime = null;
|
||||
|
||||
|
||||
sv.IsTake = false;
|
||||
sv.CurrentActionUserId = null;
|
||||
sv.PreliminaryAuditUserId = null;
|
||||
sv.ReviewAuditUserId = null;
|
||||
|
||||
|
||||
if (sv.IsBaseLine)
|
||||
{
|
||||
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && (t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit), c => new ReadingClinicalData() { IsSign = false, ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded });
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = false,
|
||||
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded,
|
||||
IsBlind = null,
|
||||
IsComplete = null
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
await _trialQCQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisitId == subjectVisitId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 后端处理某个中心缩略图有问题 先下载,生成缩略图上传,然后更新数据库
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
public async Task<IResponseOutput> BackImageResize(Guid trialSiteId, Guid subjectId/* , [FromServices] IRepository<>*/)
|
||||
{
|
||||
///${params.trialId}/ Image /${params.subjectId}/${params.subjectVisitId}/${ dicomInfo.studyUid}/${ v.seriesUid}.jpg
|
||||
|
||||
var dealSeriesList = await _dicomSeriesRepository.Where(t => t.DicomStudy.Subject.TrialSiteId == trialSiteId && t.SubjectId == subjectId).Select(t => new { t.Id, t.SubjectId, t.TrialId, t.SubjectVisitId, t.StudyInstanceUid, t.SeriesInstanceUid, t.ImageResizePath, t.UpdateUserId, FirstInstancePath = t.DicomInstanceList.First().Path }).ToListAsync();
|
||||
|
||||
//下载到本地
|
||||
string tempFolderPath = Path.Combine(Directory.GetCurrentDirectory(), $"DownloadTemp_{NewId.NextGuid()}");
|
||||
Directory.CreateDirectory(tempFolderPath);
|
||||
|
||||
foreach (var dealSeries in dealSeriesList)
|
||||
{
|
||||
var fileName = Path.GetFileNameWithoutExtension(dealSeries.FirstInstancePath);
|
||||
|
||||
var localFilePath = Path.Combine(tempFolderPath, fileName);
|
||||
|
||||
await _IOSSService.DownLoadFromOSSAsync(dealSeries.FirstInstancePath, localFilePath);
|
||||
|
||||
|
||||
var resizePath = localFilePath + "_New.jpg";
|
||||
|
||||
//生成缩略图
|
||||
|
||||
// 读取 DICOM 文件
|
||||
var dicomImage = new DicomImage(localFilePath);
|
||||
|
||||
|
||||
// 渲染 DICOM 图像到 ImageSharp 格式
|
||||
using (var image = dicomImage.RenderImage().AsSharpImage())
|
||||
{
|
||||
// 生成缩略图(调整大小)
|
||||
image.Mutate(x => x.Resize(500, 500));
|
||||
|
||||
// 保存缩略图为 JPEG
|
||||
image.Save(resizePath, new JpegEncoder());
|
||||
}
|
||||
|
||||
var ossFolder = $"{dealSeries.TrialId}/Image/{dealSeries.SubjectId}/{dealSeries.SubjectVisitId}/{dealSeries.StudyInstanceUid}";
|
||||
|
||||
var relativePath = await _IOSSService.UploadToOSSAsync(resizePath, ossFolder, false);
|
||||
|
||||
await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == dealSeries.Id, u => new DicomSeries() { ImageResizePath = relativePath, UpdateUserId = dealSeries.UpdateUserId });
|
||||
|
||||
}
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
|
||||
public async Task<IResponseOutput> DeleteOSSDate(string rootFolder,
|
||||
[FromServices] IOSSService _oSSService, [FromServices] IWebHostEnvironment _hostEnvironment)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using EntityFrameworkCore.Triggered;
|
||||
using IP2Region.Net.Abstractions;
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
using MaxMind.GeoIP2;
|
||||
|
||||
namespace IRaCIS.Core.Application.Triggers
|
||||
{
|
||||
@@ -18,10 +20,11 @@ namespace IRaCIS.Core.Application.Triggers
|
||||
if (context.ChangeType == ChangeType.Added)
|
||||
{
|
||||
|
||||
var ipinfo = _searcher.Search(userLog.IP);
|
||||
//var ipinfo = _searcher.Search(userLog.IP);
|
||||
|
||||
userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||
//userLog.IPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
|
||||
|
||||
userLog.IPRegion = IPCityHelper.GetCityResponse(userLog.IP);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,4 +19,17 @@ namespace IRaCIS.Core.Domain.Share
|
||||
PM_NotAgree=3,
|
||||
}
|
||||
|
||||
public enum ImageBackStateEnum
|
||||
{
|
||||
None=0,
|
||||
|
||||
CRCRequestBack=1,
|
||||
|
||||
IQCRequestBack=2,
|
||||
|
||||
PMAgreeBack=3,
|
||||
|
||||
PMNotAgreeBack = 4,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,10 @@ public class DoctorCriterionFile : BaseAddAuditEntity
|
||||
[JsonIgnore]
|
||||
[ForeignKey("DoctorId")]
|
||||
public Doctor Doctor { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
[ForeignKey("TrialReadingCriterionId")]
|
||||
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
||||
#endregion
|
||||
|
||||
public string CriterionName { get; set; } = null!;
|
||||
|
||||
@@ -9,6 +9,10 @@ public class EnrollReadingCriterion : BaseAddAuditEntity
|
||||
[JsonIgnore]
|
||||
[ForeignKey("EnrollId")]
|
||||
public Enroll Enroll { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
[ForeignKey("TrialReadingCriterionId")]
|
||||
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
||||
#endregion
|
||||
public Guid EnrollId { get; set; }
|
||||
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IRaCIS.Core.Domain.Models
|
||||
{
|
||||
[Comment("稽查文档管理")]
|
||||
[Table("AuditDocument")]
|
||||
public class AuditDocument : BaseFullAuditEntity
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 文件夹名或者文件名
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 文档类型
|
||||
/// </summary>
|
||||
public AuditDocumentType AuditDocumentTypeEnum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 父文件夹Id
|
||||
/// </summary>
|
||||
public Guid? ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 文件路径
|
||||
/// </summary>
|
||||
[StringLength(1000)]
|
||||
public string FilePath { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 文件大小
|
||||
/// </summary>
|
||||
public decimal? FileSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 文件类型
|
||||
/// </summary>
|
||||
public string FileFormat { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 版本
|
||||
/// </summary>
|
||||
public int? Version { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 主文件Id
|
||||
/// </summary>
|
||||
public Guid? MainFileId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否授权
|
||||
/// </summary>
|
||||
public bool IsAuthorization { get; set; } = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 稽查文档类型
|
||||
/// </summary>
|
||||
public enum AuditDocumentType
|
||||
{
|
||||
/// <summary>
|
||||
/// 文件夹
|
||||
/// </summary>
|
||||
Folder = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 文件
|
||||
/// </summary>
|
||||
File = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 历史版本
|
||||
/// </summary>
|
||||
HistoricalVersion = 2,
|
||||
|
||||
}
|
||||
}
|
||||
@@ -44,6 +44,9 @@ public class UserLog : BaseAddAuditEntity
|
||||
[Comment("异地登录")]
|
||||
public bool IsLoginUncommonly { get; set; }
|
||||
|
||||
[Comment("是否忽略异地登录")]
|
||||
public bool IsIgnoreUncommonly { get; set; }
|
||||
|
||||
|
||||
|
||||
#region 后续删除
|
||||
|
||||
@@ -9,6 +9,10 @@ public class EnrollReadingCategory : BaseAddAuditEntity
|
||||
[JsonIgnore]
|
||||
[ForeignKey("EnrollId")]
|
||||
public Enroll Enroll { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
[ForeignKey("TrialReadingCriterionId")]
|
||||
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
||||
#endregion
|
||||
public Guid EnrollId { get; set; }
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
|
||||
@@ -161,6 +161,7 @@ public class SubjectVisit : BaseFullDeleteAuditEntity
|
||||
public DateTime? CheckPassedTime { get; set; }
|
||||
[Comment("计划外上一访视")]
|
||||
public Guid? OutPlanPreviousVisitId { get; set; }
|
||||
[Comment("一致性核查 回退")]
|
||||
public RequestBackStateEnum RequestBackState { get; set; }
|
||||
public bool IsQCConfirmedReupload { get; set; }
|
||||
|
||||
@@ -180,5 +181,8 @@ public class SubjectVisit : BaseFullDeleteAuditEntity
|
||||
|
||||
public Guid? SubmitUserId { get; set; }
|
||||
public ReadingStatusEnum ReadingStatus { get; set; }
|
||||
|
||||
[Comment("影像上传 回退")]
|
||||
public ImageBackStateEnum ImageBackState { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -648,6 +648,8 @@ public class IRaCISDBContext : DbContext
|
||||
|
||||
#region 报告、 文档、记录
|
||||
|
||||
public virtual DbSet<AuditDocument> AuditDocument { get; set; }
|
||||
|
||||
public virtual DbSet<SysFileType> SysFileType { get; set; }
|
||||
public virtual DbSet<TrialFileType> TrialFileType { get; set; }
|
||||
public virtual DbSet<TrialFinalRecord> TrialFinalRecord { get; set; }
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="EFCore.BulkExtensions" Version="8.1.1" />
|
||||
<PackageReference Include="EFCore.BulkExtensions" Version="8.1.3" />
|
||||
<PackageReference Include="EntityFrameworkCore.Triggered" Version="3.2.2" />
|
||||
<PackageReference Include="EntityFrameworkCore.Projectables" Version="3.0.4" />
|
||||
<PackageReference Include="EntityFrameworkCore.Exceptions.SqlServer" Version="8.1.3" />
|
||||
@@ -30,7 +30,7 @@
|
||||
<PackageReference Include="MassTransit.Hangfire" Version="8.3.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.14" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
||||
+19234
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AuditDocument : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "AuditDocument",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||
Name = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
|
||||
AuditDocumentEnum = table.Column<int>(type: "int", nullable: false),
|
||||
ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
||||
FilePath = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: false),
|
||||
FileSize = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: true),
|
||||
FileFormat = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
|
||||
Version = table.Column<int>(type: "int", nullable: true),
|
||||
MainFileId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
|
||||
IsAuthorization = table.Column<bool>(type: "bit", nullable: false),
|
||||
CreateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||
CreateTime = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
UpdateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||
UpdateTime = table.Column<DateTime>(type: "datetime2", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_AuditDocument", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_AuditDocument_User_CreateUserId",
|
||||
column: x => x.CreateUserId,
|
||||
principalTable: "User",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
},
|
||||
comment: "稽查文档管理");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_AuditDocument_CreateUserId",
|
||||
table: "AuditDocument",
|
||||
column: "CreateUserId");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "AuditDocument");
|
||||
}
|
||||
}
|
||||
}
|
||||
+19234
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AuditDocumenttype : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "AuditDocumentEnum",
|
||||
table: "AuditDocument",
|
||||
newName: "AuditDocumentTypeEnum");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "AuditDocumentTypeEnum",
|
||||
table: "AuditDocument",
|
||||
newName: "AuditDocumentEnum");
|
||||
}
|
||||
}
|
||||
}
|
||||
+19267
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,110 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class SVImageBack : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<int>(
|
||||
name: "RequestBackState",
|
||||
table: "SubjectVisit",
|
||||
type: "int",
|
||||
nullable: false,
|
||||
comment: "一致性核查 回退",
|
||||
oldClrType: typeof(int),
|
||||
oldType: "int");
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "ImageBackState",
|
||||
table: "SubjectVisit",
|
||||
type: "int",
|
||||
nullable: false,
|
||||
defaultValue: 0,
|
||||
comment: "影像上传 回退");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EnrollReadingCriterion_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCriterion",
|
||||
column: "TrialReadingCriterionId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_EnrollReadingCategory_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCategory",
|
||||
column: "TrialReadingCriterionId");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_DoctorCriterionFile_TrialReadingCriterionId",
|
||||
table: "DoctorCriterionFile",
|
||||
column: "TrialReadingCriterionId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_DoctorCriterionFile_ReadingQuestionCriterionTrial_TrialReadingCriterionId",
|
||||
table: "DoctorCriterionFile",
|
||||
column: "TrialReadingCriterionId",
|
||||
principalTable: "ReadingQuestionCriterionTrial",
|
||||
principalColumn: "Id");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_EnrollReadingCategory_ReadingQuestionCriterionTrial_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCategory",
|
||||
column: "TrialReadingCriterionId",
|
||||
principalTable: "ReadingQuestionCriterionTrial",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_EnrollReadingCriterion_ReadingQuestionCriterionTrial_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCriterion",
|
||||
column: "TrialReadingCriterionId",
|
||||
principalTable: "ReadingQuestionCriterionTrial",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_DoctorCriterionFile_ReadingQuestionCriterionTrial_TrialReadingCriterionId",
|
||||
table: "DoctorCriterionFile");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_EnrollReadingCategory_ReadingQuestionCriterionTrial_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCategory");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_EnrollReadingCriterion_ReadingQuestionCriterionTrial_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCriterion");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_EnrollReadingCriterion_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCriterion");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_EnrollReadingCategory_TrialReadingCriterionId",
|
||||
table: "EnrollReadingCategory");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_DoctorCriterionFile_TrialReadingCriterionId",
|
||||
table: "DoctorCriterionFile");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ImageBackState",
|
||||
table: "SubjectVisit");
|
||||
|
||||
migrationBuilder.AlterColumn<int>(
|
||||
name: "RequestBackState",
|
||||
table: "SubjectVisit",
|
||||
type: "int",
|
||||
nullable: false,
|
||||
oldClrType: typeof(int),
|
||||
oldType: "int",
|
||||
oldComment: "一致性核查 回退");
|
||||
}
|
||||
}
|
||||
}
|
||||
+19166
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,30 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class IsIgnoreUncommonly : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "IsIgnoreUncommonly",
|
||||
table: "UserLog",
|
||||
type: "bit",
|
||||
nullable: false,
|
||||
defaultValue: false,
|
||||
comment: "是否忽略异地登录");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "IsIgnoreUncommonly",
|
||||
table: "UserLog");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "8.0.10")
|
||||
.HasAnnotation("ProductVersion", "8.0.14")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
@@ -94,6 +94,67 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocument", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<int>("AuditDocumentTypeEnum")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<DateTime>("CreateTime")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<Guid>("CreateUserId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("FileFormat")
|
||||
.IsRequired()
|
||||
.HasMaxLength(400)
|
||||
.HasColumnType("nvarchar(400)");
|
||||
|
||||
b.Property<string>("FilePath")
|
||||
.IsRequired()
|
||||
.HasMaxLength(1000)
|
||||
.HasColumnType("nvarchar(1000)");
|
||||
|
||||
b.Property<decimal?>("FileSize")
|
||||
.HasPrecision(18, 2)
|
||||
.HasColumnType("decimal(18,2)");
|
||||
|
||||
b.Property<bool>("IsAuthorization")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<Guid?>("MainFileId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(400)
|
||||
.HasColumnType("nvarchar(400)");
|
||||
|
||||
b.Property<Guid?>("ParentId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<DateTime>("UpdateTime")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<Guid>("UpdateUserId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<int?>("Version")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("CreateUserId");
|
||||
|
||||
b.ToTable("AuditDocument", t =>
|
||||
{
|
||||
t.HasComment("稽查文档管理");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.CRO", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
@@ -1747,6 +1808,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
|
||||
b.HasIndex("DoctorId");
|
||||
|
||||
b.HasIndex("TrialReadingCriterionId");
|
||||
|
||||
b.ToTable("DoctorCriterionFile", t =>
|
||||
{
|
||||
t.HasComment("医生 - 项目标准签名文档");
|
||||
@@ -2261,6 +2324,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
|
||||
b.HasIndex("EnrollId");
|
||||
|
||||
b.HasIndex("TrialReadingCriterionId");
|
||||
|
||||
b.ToTable("EnrollReadingCategory", t =>
|
||||
{
|
||||
t.HasComment("医生 - 项目阅片标准阅片类型配置表");
|
||||
@@ -2293,6 +2358,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
|
||||
b.HasIndex("EnrollId");
|
||||
|
||||
b.HasIndex("TrialReadingCriterionId");
|
||||
|
||||
b.ToTable("EnrollReadingCriterion", t =>
|
||||
{
|
||||
t.HasComment("医生 - 项目阅片标准参与一致性分析配置表");
|
||||
@@ -8825,6 +8892,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
b.Property<Guid?>("ForwardUserId")
|
||||
.HasColumnType("uniqueidentifier");
|
||||
|
||||
b.Property<int>("ImageBackState")
|
||||
.HasColumnType("int")
|
||||
.HasComment("影像上传 回退");
|
||||
|
||||
b.Property<bool>("InPlan")
|
||||
.HasColumnType("bit");
|
||||
|
||||
@@ -8894,7 +8965,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("RequestBackState")
|
||||
.HasColumnType("int");
|
||||
.HasColumnType("int")
|
||||
.HasComment("一致性核查 回退");
|
||||
|
||||
b.Property<DateTime?>("ReviewAuditTime")
|
||||
.HasColumnType("datetime2");
|
||||
@@ -13488,6 +13560,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
.HasMaxLength(400)
|
||||
.HasColumnType("nvarchar(400)");
|
||||
|
||||
b.Property<bool>("IsIgnoreUncommonly")
|
||||
.HasColumnType("bit")
|
||||
.HasComment("是否忽略异地登录");
|
||||
|
||||
b.Property<bool>("IsLoginUncommonly")
|
||||
.HasColumnType("bit")
|
||||
.HasComment("异地登录");
|
||||
@@ -14547,6 +14623,17 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
b.Navigation("Doctor");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.AuditDocument", b =>
|
||||
{
|
||||
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
|
||||
.WithMany()
|
||||
.HasForeignKey("CreateUserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("CreateUserRole");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.CRO", b =>
|
||||
{
|
||||
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
|
||||
@@ -14913,9 +15000,15 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion")
|
||||
.WithMany()
|
||||
.HasForeignKey("TrialReadingCriterionId");
|
||||
|
||||
b.Navigation("CreateUserRole");
|
||||
|
||||
b.Navigation("Doctor");
|
||||
|
||||
b.Navigation("TrialReadingCriterion");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.DoctorDictionary", b =>
|
||||
@@ -15055,9 +15148,17 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion")
|
||||
.WithMany()
|
||||
.HasForeignKey("TrialReadingCriterionId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("CreateUserRole");
|
||||
|
||||
b.Navigation("Enroll");
|
||||
|
||||
b.Navigation("TrialReadingCriterion");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.EnrollReadingCriterion", b =>
|
||||
@@ -15074,9 +15175,17 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion")
|
||||
.WithMany()
|
||||
.HasForeignKey("TrialReadingCriterionId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("CreateUserRole");
|
||||
|
||||
b.Navigation("Enroll");
|
||||
|
||||
b.Navigation("TrialReadingCriterion");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.EventStoreRecord", b =>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<PackageReference Include="SharpCompress" Version="0.38.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
|
||||
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.6" />
|
||||
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
@@ -49,11 +49,11 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Fluid.Core" Version="2.11.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.10" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10">
|
||||
<PackageReference Include="Fluid.Core" Version="2.21.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="9.0.3" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.11" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.14">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
Reference in New Issue
Block a user