Test.EIImageViewer
hang 2023-04-18 15:52:47 +08:00
parent 96418613dd
commit 469a2e7362
131 changed files with 1544 additions and 1262 deletions

View File

@ -21,6 +21,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Start", "Start\Start.csproj
EndProject EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}" Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Install", "Install\Install.csproj", "{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnInstall", "UnInstall\UnInstall.csproj", "{60B9AC72-5744-4517-93A5-A1ECD573A529}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -30,43 +34,36 @@ Global
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|x86.ActiveCfg = Debug|x86 {F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|x86.ActiveCfg = Debug|x86
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|Any CPU.ActiveCfg = Release|Any CPU {F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x86.ActiveCfg = Release|x86 {F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x86.ActiveCfg = Release|x86
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x86.Build.0 = Release|x86 {F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x86.Build.0 = Release|x86
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|x86.ActiveCfg = Debug|x86 {D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|x86.ActiveCfg = Debug|x86
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x86.ActiveCfg = Release|x86 {D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x86.ActiveCfg = Release|x86
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x86.Build.0 = Release|x86 {D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x86.Build.0 = Release|x86
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|x86.ActiveCfg = Debug|x86 {037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|x86.ActiveCfg = Debug|x86
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|Any CPU.ActiveCfg = Release|Any CPU {037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x86.ActiveCfg = Release|x86 {037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x86.ActiveCfg = Release|x86
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x86.Build.0 = Release|x86 {037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x86.Build.0 = Release|x86
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|x86.ActiveCfg = Debug|x86 {7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|x86.ActiveCfg = Debug|x86
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|Any CPU.ActiveCfg = Release|Any CPU {7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x86.ActiveCfg = Release|x86 {7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x86.ActiveCfg = Release|x86
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x86.Build.0 = Release|x86 {7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x86.Build.0 = Release|x86
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|x86.ActiveCfg = Debug|x86 {3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|x86.ActiveCfg = Debug|x86
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU {3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|x86.ActiveCfg = Release|x86 {3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|x86.ActiveCfg = Release|x86
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|x86.Build.0 = Release|x86 {3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|x86.Build.0 = Release|x86
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|x86.ActiveCfg = Debug|x86 {6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|x86.ActiveCfg = Debug|x86
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x86.ActiveCfg = Release|x86 {6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x86.ActiveCfg = Release|x86
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x86.Build.0 = Release|x86 {6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x86.Build.0 = Release|x86
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|x86.ActiveCfg = Debug|x86 {07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|x86.ActiveCfg = Debug|x86
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|x86.ActiveCfg = Release|x86 {07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|x86.ActiveCfg = Release|x86
@ -82,6 +79,22 @@ Global
{D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}.Debug|x86.ActiveCfg = Debug {D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}.Debug|x86.ActiveCfg = Debug
{D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}.Release|Any CPU.ActiveCfg = Release {D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}.Release|Any CPU.ActiveCfg = Release
{D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}.Release|x86.ActiveCfg = Release {D9570CE2-B58C-4EBA-B4F8-9AB14AB2E1F1}.Release|x86.ActiveCfg = Release
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Debug|x86.ActiveCfg = Debug|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Debug|x86.Build.0 = Debug|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Release|Any CPU.Build.0 = Release|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Release|x86.ActiveCfg = Release|Any CPU
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Release|x86.Build.0 = Release|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Debug|x86.ActiveCfg = Debug|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Debug|x86.Build.0 = Debug|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|Any CPU.Build.0 = Release|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|x86.ActiveCfg = Release|Any CPU
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -1,106 +0,0 @@
{
"needAnonymizeTag": [
{ //PatientsName
"Group": "0010",
"Element": "0010",
"ReplaceValue": "",
"Enable": true
},
{ // PatientID
"Group": "0010",
"Element": "0020",
"ReplaceValue": "",
"Enable": true
},
{ // IssuerOfPatientID
"Group": "0010",
"Element": "0021",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsBirthDate
"Group": "0010",
"Element": "0030",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsBirthTime
"Group": "0010",
"Element": "0032",
"ReplaceValue": "",
"Enable": false
},
{ // PatientsSex
"Group": "0010",
"Element": "0040",
"ReplaceValue": "",
"Enable": false
},
{ // OtherPatientIDs
"Group": "0010",
"Element": "1000",
"ReplaceValue": "",
"Enable": false
},
{ // OtherPatientNames
"Group": "0010",
"Element": "1001",
"ReplaceValue": "",
"Enable": false
},
{ // OtherPatientNames
"Group": "0010",
"Element": "1005",
"ReplaceValue": "",
"Enable": true
},
{ // PatientBirthName
"Group": "0010",
"Element": "1005",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsAge
"Group": "0010",
"Element": "1010",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsAddress
"Group": "0010",
"Element": "1040",
"ReplaceValue": "",
"Enable": true
},
{ // PatientsMothersBirthName
"Group": "0010",
"Element": "1060",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0010",
"Element": "2150",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0010",
"Element": "2152",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0010",
"Element": "2154",
"ReplaceValue": "",
"Enable": true
},
{
"Group": "0012",
"Element": "0040",
"ReplaceValue": "XXX",
"Enable": true
}
]
}

View File

@ -385,7 +385,7 @@ namespace IRaCIS.Core.API.Controllers
if (archivedStudyIds.Count > 0) // 上传成功,处理逻辑 if (archivedStudyIds.Count > 0) // 上传成功,处理逻辑
{ {
// 同一个访视 多个线程上传处理 批量保存 可能造成死锁 https://www.cnblogs.com/johnblogs/p/9945767.html // 同一个检查批次 多个线程上传处理 批量保存 可能造成死锁 https://www.cnblogs.com/johnblogs/p/9945767.html
await _dicomArchiveService.DicomDBDataSaveChange(); await _dicomArchiveService.DicomDBDataSaveChange();

View File

@ -13,6 +13,7 @@
<Version>1.0.1.0412</Version> <Version>1.0.1.0412</Version>
<ApplicationIcon>favicon.ico</ApplicationIcon> <ApplicationIcon>favicon.ico</ApplicationIcon>
<Platforms>AnyCPU</Platforms> <Platforms>AnyCPU</Platforms>
<AssemblyName>EI_Image_Viewer</AssemblyName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@ -58,9 +59,6 @@
<None Remove="GrpcToken.proto" /> <None Remove="GrpcToken.proto" />
<None Remove="IRaCIS.Core.API.xml" /> <None Remove="IRaCIS.Core.API.xml" />
<None Remove="Protos\GrpcToken.proto" /> <None Remove="Protos\GrpcToken.proto" />
<None Remove="sql\bin.bat" />
<None Remove="sql\data.sql" />
<None Remove="sql\dbo.sql" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -69,15 +67,6 @@
<ItemGroup> <ItemGroup>
<Content Include="favicon.ico" /> <Content Include="favicon.ico" />
<Content Include="sql\bin.bat">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="sql\data.sql">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="sql\dbo.sql">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="wwwroot\swagger\ui\abp.js"> <EmbeddedResource Include="wwwroot\swagger\ui\abp.js">
@ -136,9 +125,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Update="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\EmailTemplate\AdminResetUser.html"> <Content Update="wwwroot\EmailTemplate\AdminResetUser.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>
@ -175,7 +161,7 @@
<Folder Include="Properties\PublishProfiles\" /> <Folder Include="Properties\PublishProfiles\" />
</ItemGroup> </ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties anonymizetagsetting_1json__JsonSchema="http://json.schemastore.org/jovo-language-model" properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions> <ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project> </Project>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<doc> <doc>
<assembly> <assembly>
<name>IRaCIS.Core.API</name> <name>EI_Image_Viewer</name>
</assembly> </assembly>
<members> <members>
<member name="M:EasyCaching.Demo.Interceptors.Controllers.ErrorController.Error(System.Int32)"> <member name="M:EasyCaching.Demo.Interceptors.Controllers.ErrorController.Error(System.Int32)">

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<variable name="myvar" value="myvalue"/>
<targets>
<target xsi:type="file" name="File" fileName="${basedir}/logs/${shortdate}/${level}.log"
layout="${longdate}||${level}||${logger}||${message}||${exception:format=ToString:innerFormat=ToString:maxInnerExceptionLevel=10:separator=\r\n}||end" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>

View File

@ -76,50 +76,50 @@ namespace IRaCIS.Core.API
#region ÈÏÖ¤³ÌÐò #region ÈÏÖ¤³ÌÐò
if (!File.Exists($@"C:\ProgramData\.xingcang\config.json")) //if (!File.Exists($@"C:\ProgramData\.xingcang\config.json"))
{ //{
Console.WriteLine("当前未注册"); // Console.WriteLine("当前未注册");
Log.Logger.Error("当前未注册"); // Log.Logger.Error("当前未注册");
Console.ReadLine(); // Console.ReadLine();
return; // return;
} //}
else //else
{ //{
var json = File.ReadAllText($@"C:\ProgramData\.xingcang\config.json"); // var json = File.ReadAllText($@"C:\ProgramData\.xingcang\config.json");
JObject jsonObject = JObject.Parse(json); // JObject jsonObject = JObject.Parse(json);
var key = jsonObject["key"].ToString(); // var key = jsonObject["key"].ToString();
var value = jsonObject["value"].ToString(); // var value = jsonObject["value"].ToString();
var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString()); // var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString());
// 判断文件里面的机器码是否是本机的 // // 判断文件里面的机器码是否是本机的
if (!physicalAddressList.Contains(key)) // if (!physicalAddressList.Contains(key))
{ // {
Console.WriteLine("机器码和本机不对应"); // Console.WriteLine("机器码和本机不对应");
Log.Logger.Error("机器码和本机不对应"); // Log.Logger.Error("机器码和本机不对应");
Console.ReadLine(); // Console.ReadLine();
return; // return;
} // }
var secrete = MD5Helper.Md5($"{key}_XINGCANG"); // var secrete = MD5Helper.Md5($"{key}_XINGCANG");
if (value != secrete) // if (value != secrete)
{ // {
Console.WriteLine("机器码和注册码不匹配"); // Console.WriteLine("机器码和注册码不匹配");
Log.Logger.Error("机器码和注册码不匹配"); // Log.Logger.Error("机器码和注册码不匹配");
Console.ReadLine(); // Console.ReadLine();
return; // return;
} // }
} //}
#endregion #endregion

View File

@ -114,9 +114,11 @@ namespace IRaCIS.Core.API
//注意localhost:8001/swagger是访问不到的去launchSettings.json把launchUrl去掉如果你想换一个路径直接写名字即可比如直接写c.Route = "doc"; //注意localhost:8001/swagger是访问不到的去launchSettings.json把launchUrl去掉如果你想换一个路径直接写名字即可比如直接写c.Route = "doc";
//options.RoutePrefix = string.Empty; //options.RoutePrefix = string.Empty;
var data = Assembly.GetExecutingAssembly().Location;
options.IndexStream = () => Assembly.GetExecutingAssembly()
.GetManifestResourceStream("IRaCIS.Core.API.wwwroot.swagger.ui.Index.html");
//options.IndexStream = () => Assembly.GetExecutingAssembly()
//.GetManifestResourceStream("IRaCIS.Core.API.wwwroot.swagger.ui.Index.html");
options.RoutePrefix = string.Empty; options.RoutePrefix = string.Empty;

View File

@ -10,7 +10,7 @@
"RemoteNew": "Server=localhost;Database=IRaCIS;User ID=sa;Password=123456;TrustServerCertificate=true" "RemoteNew": "Server=localhost;Database=IRaCIS;User ID=sa;Password=123456;TrustServerCertificate=true"
}, },
"BasicSystemConfig": { "BasicSystemConfig": {
"OpenUserComplexPassword": false, "OpenUserComplexPassword": true,
"OpenSignDocumentBeforeWork": false, "OpenSignDocumentBeforeWork": false,
"OpenTrialRelationDelete": true, "OpenTrialRelationDelete": true,
"OpenLoginLimit": false "OpenLoginLimit": false

View File

@ -1,3 +0,0 @@
SQLCMD -i %~dp0\dbo.sql
SQLCMD -i %~dp0\data.sql
pause

Binary file not shown.

Binary file not shown.

View File

@ -11,7 +11,7 @@
尊敬的 {0} ,您好: 尊敬的 {0} ,您好:
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗为您添加了账户,账户信息如下: 行藏医学影像处理软件系统为您添加了账户,账户信息如下:
</div> </div>
<span style="color: #00D1B2"></span> <span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'> <div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@ -32,7 +32,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'> <div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div> <div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div> <div style="font-size: 14px;">武汉行藏科技有限公司</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -11,7 +11,7 @@
尊敬的 {0} ,您好: 尊敬的 {0} ,您好:
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
展影医疗将您的账户密码已重置,账户信息如下: 行藏医学影像处理软件系统将您的账户密码已重置,账户信息如下:
</div> </div>
<span style="color: #00D1B2"></span> <span style="color: #00D1B2"></span>
<div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'> <div style='border: 1px solid #eee;box-sizing:border-box;width: 50%;background: #fff;padding: 20px;line-height: 40px;font-size: 14px;border-radius: 5px;margin-left: 60px;margin-bottom: 30px;'>
@ -29,7 +29,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'> <div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div> <div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div> <div style="font-size: 14px;">武汉行藏科技有限公司</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -11,7 +11,7 @@
您好: 您好:
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
感谢您使用展影云平台 感谢您使用行藏医学影像处理软件
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{0}。 {0}。
@ -19,7 +19,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'> <div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div> <div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div> <div style="font-size: 14px;">武汉行藏科技有限公司</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -11,7 +11,7 @@
{0}您好: {0}您好:
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
感谢您使用展影云平台 感谢您使用行藏医学影像处理软件
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
{1},验证码是: {2}请在3分钟内输入该验证码进行后续操作。如非本人操作请忽略该邮件。 {1},验证码是: {2}请在3分钟内输入该验证码进行后续操作。如非本人操作请忽略该邮件。
@ -19,7 +19,7 @@
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'> <div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
<div>祝您顺利!/Best Regards</div> <div>祝您顺利!/Best Regards</div>
<div style="font-size: 14px;">上海展影医疗科技有限公司</div> <div style="font-size: 14px;">武汉行藏科技有限公司</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -30,7 +30,7 @@ namespace IRaCIS.Core.Application.BackGroundJob
var success = await _subjectVisitRepository.SaveChangesAsync(); var success = await _subjectVisitRepository.SaveChangesAsync();
_logger.LogWarning($"任务建立时间:{startTime} 取消时间:{DateTime.Now} 取消 受试者访视{ subjectVisitId }success:{success}"); _logger.LogWarning($"任务建立时间:{startTime} 取消时间:{DateTime.Now} 取消 患者检查批次{ subjectVisitId }success:{success}");
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -49,7 +49,7 @@ public enum AuditOptType
AddTrialSiteCRC = 7, AddTrialSiteCRC = 7,
DeleteTrialSiteCRC = 8, DeleteTrialSiteCRC = 8,
//访视计划 //检查批次计划
AddOrUpdateTrialVisitPlanItem = 9, AddOrUpdateTrialVisitPlanItem = 9,
DeleteTrialVisitPlanItem = 10, DeleteTrialVisitPlanItem = 10,
ConfirmTrialVisitPlan = 11, ConfirmTrialVisitPlan = 11,
@ -58,7 +58,7 @@ public enum AuditOptType
AddOrUpdateTrialTemplate = 12, AddOrUpdateTrialTemplate = 12,
DeleteTrialTemplate = 13, DeleteTrialTemplate = 13,
//subject 访视计划 //subject 检查批次计划
AddOrUpdateSubjectOutPlanVisit = 14, AddOrUpdateSubjectOutPlanVisit = 14,
DeleteSubjectOutPlanVisit = 15, DeleteSubjectOutPlanVisit = 15,
SetSVExecuted = 16, SetSVExecuted = 16,
@ -378,7 +378,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // //添加访视计划Item // // //添加检查批次计划Item
// // case AuditOptType.AddOrUpdateTrialVisitPlanItem: // // case AuditOptType.AddOrUpdateTrialVisitPlanItem:
// // //接口参数 // // //接口参数
// // var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0]; // // var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0];
@ -390,7 +390,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = visitPlanItem.TrialId, // // TrialId = visitPlanItem.TrialId,
// // SubjectId = Guid.Empty, // // SubjectId = Guid.Empty,
// // AuditType = (int)AuditType.TrialAudit, // // AuditType = (int)AuditType.TrialAudit,
// // Note = visitPlanItem.Id == null ? $"{ _userRealName} 添加了访视计划项 {visitPlanItem.VisitName} " : $"{ _userRealName} 更新了访视计划项为 {visitPlanItem.VisitName} ", // // Note = visitPlanItem.Id == null ? $"{ _userRealName} 添加了检查批次计划项 {visitPlanItem.VisitName} " : $"{ _userRealName} 更新了检查批次计划项为 {visitPlanItem.VisitName} ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -399,7 +399,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // //删除访视计划Item // // //删除检查批次计划Item
// // case AuditOptType.DeleteTrialVisitPlanItem: // // case AuditOptType.DeleteTrialVisitPlanItem:
// // if (result.IsSuccess) // // if (result.IsSuccess)
@ -409,7 +409,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = _visitPlan.TrialId, // // TrialId = _visitPlan.TrialId,
// // SubjectId = Guid.Empty, // // SubjectId = Guid.Empty,
// // AuditType = (int)AuditType.TrialAudit, // // AuditType = (int)AuditType.TrialAudit,
// // Note = $"{ _userRealName} 移除了访视计划项 {_visitPlan.VisitName} ", // // Note = $"{ _userRealName} 移除了检查批次计划项 {_visitPlan.VisitName} ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -418,7 +418,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // //确认了访视计划 // // //确认了检查批次计划
// // case AuditOptType.ConfirmTrialVisitPlan: // // case AuditOptType.ConfirmTrialVisitPlan:
// // var trialId = (Guid)_actionArguments.Values.ToList()[0]; // // var trialId = (Guid)_actionArguments.Values.ToList()[0];
@ -429,7 +429,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = trialId, // // TrialId = trialId,
// // SubjectId = Guid.Empty, // // SubjectId = Guid.Empty,
// // AuditType = (int)AuditType.TrialAudit, // // AuditType = (int)AuditType.TrialAudit,
// // Note = $"{ _userRealName} 确认了访视计划,不允许修改 ", // // Note = $"{ _userRealName} 确认了检查批次计划,不允许修改 ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -484,13 +484,13 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // //受试者审计 // // //者审计
// // case AuditType.SubjectAudit: // // case AuditType.SubjectAudit:
// // switch (_attr._auditOptType) // // switch (_attr._auditOptType)
// // { // // {
// // // 添加或者更新受试 // // // 添加或者更新
// // case AuditOptType.AddOrUpdateSubject: // // case AuditOptType.AddOrUpdateSubject:
// // //接口参数 // // //接口参数
@ -503,7 +503,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = subject.TrialId, // // TrialId = subject.TrialId,
// // SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value, // // SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value,
// // AuditType = (int)AuditType.SubjectAudit, // // AuditType = (int)AuditType.SubjectAudit,
// // Note = subject.Id == null ? $"{ _userRealName} 添加了受试者 {subject.LastName + subject.FirstName} 并初始化了访视计划" : $"{ _userRealName} 对受试者 { subject.LastName + subject.FirstName} 信息进行了更新 ", // // Note = subject.Id == null ? $"{ _userRealName} 添加了患者 {subject.LastName + subject.FirstName} 并初始化了检查批次计划" : $"{ _userRealName} 对患者 { subject.LastName + subject.FirstName} 信息进行了更新 ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -512,7 +512,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // // 删除受试 // // // 删除
// // case AuditOptType.DeleteSubject: // // case AuditOptType.DeleteSubject:
// // if (result.IsSuccess) // // if (result.IsSuccess)
// // { // // {
@ -521,7 +521,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = _subject.TrialId, // // TrialId = _subject.TrialId,
// // SubjectId = _subject.Id, // // SubjectId = _subject.Id,
// // AuditType = (int)AuditType.SubjectAudit, // // AuditType = (int)AuditType.SubjectAudit,
// // Note = $"{ _userRealName} 移除了受试者 {_subject.LastName + _subject.FirstName} ", // // Note = $"{ _userRealName} 移除了者 {_subject.LastName + _subject.FirstName} ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -530,7 +530,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // // 受试者计划外访视 // // // 患者计划外检查批次
// // case AuditOptType.AddOrUpdateSubjectOutPlanVisit: // // case AuditOptType.AddOrUpdateSubjectOutPlanVisit:
// // //接口参数 // // //接口参数
@ -549,7 +549,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = _subject.TrialId, // // TrialId = _subject.TrialId,
// // SubjectId = _subject.Id, // // SubjectId = _subject.Id,
// // AuditType = (int)AuditType.SubjectAudit, // // AuditType = (int)AuditType.SubjectAudit,
// // Note = subjectVisit.Id == null ? $"{ _userRealName} 为受试者 {_subject.LastName + _subject.FirstName} 添加了计划外访视 {subjectVisit.VisitName}" : $"{ _userRealName} 更新受试者 {_subject.LastName + _subject.FirstName} 计划外访视{subjectVisit.VisitName}", // // Note = subjectVisit.Id == null ? $"{ _userRealName} 为患者 {_subject.LastName + _subject.FirstName} 添加了计划外检查批次 {subjectVisit.VisitName}" : $"{ _userRealName} 更新患者 {_subject.LastName + _subject.FirstName} 计划外检查批次{subjectVisit.VisitName}",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -558,7 +558,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // } // // }
// // break; // // break;
// // // 删除计划外访视 // // // 删除计划外检查批次
// // case AuditOptType.DeleteSubjectOutPlanVisit: // // case AuditOptType.DeleteSubjectOutPlanVisit:
// // if (result.IsSuccess) // // if (result.IsSuccess)
@ -568,7 +568,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = _subjectVisit.TrialId, // // TrialId = _subjectVisit.TrialId,
// // SubjectId = _subject.Id, // // SubjectId = _subject.Id,
// // AuditType = (int)AuditType.SubjectAudit, // // AuditType = (int)AuditType.SubjectAudit,
// // Note = $"{ _userRealName} 移除了受试者{_subject.LastName + _subject.FirstName} 计划外访视 {_subjectVisit.VisitName} ", // // Note = $"{ _userRealName} 移除了患者{_subject.LastName + _subject.FirstName} 计划外检查批次 {_subjectVisit.VisitName} ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -587,7 +587,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // TrialId = _subjectVisit.TrialId, // // TrialId = _subjectVisit.TrialId,
// // SubjectId = _subject.Id, // // SubjectId = _subject.Id,
// // AuditType = (int)AuditType.SubjectAudit, // // AuditType = (int)AuditType.SubjectAudit,
// // Note = $"{ _userRealName} 将受试者 {_subject.LastName + _subject.FirstName} 访视 {_subjectVisit.VisitName} 设置为已执行 ", // // Note = $"{ _userRealName} 将患者 {_subject.LastName + _subject.FirstName} 检查批次 {_subjectVisit.VisitName} 设置为已执行 ",
// // Detail = string.Empty, // // Detail = string.Empty,
// // OptUserId = Guid.Parse(_userIdStr), // // OptUserId = Guid.Parse(_userIdStr),
// // OptUser = _userRealName, // // OptUser = _userRealName,
@ -756,7 +756,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// // break; // // break;
// // //受试者审计 // // //者审计
// // case AuditType.SubjectAudit: // // case AuditType.SubjectAudit:
// // switch (_auditOptType) // // switch (_auditOptType)
@ -969,7 +969,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// break; // break;
// //受试者审计 // //者审计
// case AuditType.SubjectAudit: // case AuditType.SubjectAudit:
// switch (_auditOptType) // switch (_auditOptType)
@ -1281,7 +1281,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// //添加访视计划Item // //添加检查批次计划Item
// case AuditOptType.AddOrUpdateTrialVisitPlanItem: // case AuditOptType.AddOrUpdateTrialVisitPlanItem:
// //接口参数 // //接口参数
// var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0]; // var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0];
@ -1293,7 +1293,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = visitPlanItem.TrialId, // TrialId = visitPlanItem.TrialId,
// SubjectId = Guid.Empty, // SubjectId = Guid.Empty,
// AuditType = (int)AuditType.TrialAudit, // AuditType = (int)AuditType.TrialAudit,
// Note = visitPlanItem.Id == null ? $"{ _userRealName} 添加了访视计划项 {visitPlanItem.VisitName} " : $"{ _userRealName} 更新了访视计划项为 {visitPlanItem.VisitName} ", // Note = visitPlanItem.Id == null ? $"{ _userRealName} 添加了检查批次计划项 {visitPlanItem.VisitName} " : $"{ _userRealName} 更新了检查批次计划项为 {visitPlanItem.VisitName} ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1302,7 +1302,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// //删除访视计划Item // //删除检查批次计划Item
// case AuditOptType.DeleteTrialVisitPlanItem: // case AuditOptType.DeleteTrialVisitPlanItem:
// if (result.IsSuccess) // if (result.IsSuccess)
@ -1312,7 +1312,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = _visitPlan.TrialId, // TrialId = _visitPlan.TrialId,
// SubjectId = Guid.Empty, // SubjectId = Guid.Empty,
// AuditType = (int)AuditType.TrialAudit, // AuditType = (int)AuditType.TrialAudit,
// Note = $"{ _userRealName} 移除了访视计划项 {_visitPlan.VisitName} ", // Note = $"{ _userRealName} 移除了检查批次计划项 {_visitPlan.VisitName} ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1321,7 +1321,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// //确认了访视计划 // //确认了检查批次计划
// case AuditOptType.ConfirmTrialVisitPlan: // case AuditOptType.ConfirmTrialVisitPlan:
// var trialId = (Guid)_actionArguments.Values.ToList()[0]; // var trialId = (Guid)_actionArguments.Values.ToList()[0];
@ -1332,7 +1332,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = trialId, // TrialId = trialId,
// SubjectId = Guid.Empty, // SubjectId = Guid.Empty,
// AuditType = (int)AuditType.TrialAudit, // AuditType = (int)AuditType.TrialAudit,
// Note = $"{ _userRealName} 确认了访视计划,不允许修改 ", // Note = $"{ _userRealName} 确认了检查批次计划,不允许修改 ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1364,13 +1364,13 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// //受试者审计 // //者审计
// case AuditType.SubjectAudit: // case AuditType.SubjectAudit:
// switch (_attr._auditOptType) // switch (_attr._auditOptType)
// { // {
// // 添加或者更新受试 // // 添加或者更新
// case AuditOptType.AddOrUpdateSubject: // case AuditOptType.AddOrUpdateSubject:
// //接口参数 // //接口参数
@ -1383,7 +1383,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = subject.TrialId, // TrialId = subject.TrialId,
// SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value, // SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value,
// AuditType = (int)AuditType.SubjectAudit, // AuditType = (int)AuditType.SubjectAudit,
// Note = subject.Id == null ? $"{ _userRealName} 添加了受试者 {subject.ShortName } 并初始化了访视计划" : $"{ _userRealName} 对受试者 { subject.ShortName } 信息进行了更新 ", // Note = subject.Id == null ? $"{ _userRealName} 添加了患者 {subject.ShortName } 并初始化了检查批次计划" : $"{ _userRealName} 对患者 { subject.ShortName } 信息进行了更新 ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1392,7 +1392,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// // 删除受试 // // 删除
// case AuditOptType.DeleteSubject: // case AuditOptType.DeleteSubject:
// if (result.IsSuccess) // if (result.IsSuccess)
// { // {
@ -1401,7 +1401,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = _subject.TrialId, // TrialId = _subject.TrialId,
// SubjectId = _subject.Id, // SubjectId = _subject.Id,
// AuditType = (int)AuditType.SubjectAudit, // AuditType = (int)AuditType.SubjectAudit,
// Note = $"{ _userRealName} 移除了受试者 {_subject.LastName + _subject.FirstName} ", // Note = $"{ _userRealName} 移除了者 {_subject.LastName + _subject.FirstName} ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1410,7 +1410,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// // 受试者计划外访视 // // 患者计划外检查批次
// case AuditOptType.AddOrUpdateSubjectOutPlanVisit: // case AuditOptType.AddOrUpdateSubjectOutPlanVisit:
// //接口参数 // //接口参数
@ -1429,7 +1429,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = _subject.TrialId, // TrialId = _subject.TrialId,
// SubjectId = _subject.Id, // SubjectId = _subject.Id,
// AuditType = (int)AuditType.SubjectAudit, // AuditType = (int)AuditType.SubjectAudit,
// Note = subjectVisit.Id == null ? $"{ _userRealName} 为受试者 {_subject.LastName + _subject.FirstName} 添加了计划外访视 {subjectVisit.VisitName}" : $"{ _userRealName} 更新受试者 {_subject.LastName + _subject.FirstName} 计划外访视{subjectVisit.VisitName}", // Note = subjectVisit.Id == null ? $"{ _userRealName} 为患者 {_subject.LastName + _subject.FirstName} 添加了计划外检查批次 {subjectVisit.VisitName}" : $"{ _userRealName} 更新患者 {_subject.LastName + _subject.FirstName} 计划外检查批次{subjectVisit.VisitName}",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1438,7 +1438,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// } // }
// break; // break;
// // 删除计划外访视 // // 删除计划外检查批次
// case AuditOptType.DeleteSubjectOutPlanVisit: // case AuditOptType.DeleteSubjectOutPlanVisit:
// if (result.IsSuccess) // if (result.IsSuccess)
@ -1448,7 +1448,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = _subjectVisit.TrialId, // TrialId = _subjectVisit.TrialId,
// SubjectId = _subject.Id, // SubjectId = _subject.Id,
// AuditType = (int)AuditType.SubjectAudit, // AuditType = (int)AuditType.SubjectAudit,
// Note = $"{ _userRealName} 移除了受试者{_subject.LastName + _subject.FirstName} 计划外访视 {_subjectVisit.VisitName} ", // Note = $"{ _userRealName} 移除了患者{_subject.LastName + _subject.FirstName} 计划外检查批次 {_subjectVisit.VisitName} ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,
@ -1467,7 +1467,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
// TrialId = _subjectVisit.TrialId, // TrialId = _subjectVisit.TrialId,
// SubjectId = _subject.Id, // SubjectId = _subject.Id,
// AuditType = (int)AuditType.SubjectAudit, // AuditType = (int)AuditType.SubjectAudit,
// Note = $"{ _userRealName} 将受试者 {_subject.LastName + _subject.FirstName} 访视 {_subjectVisit.VisitName} 设置为已执行 ", // Note = $"{ _userRealName} 将患者 {_subject.LastName + _subject.FirstName} 检查批次 {_subjectVisit.VisitName} 设置为已执行 ",
// Detail = string.Empty, // Detail = string.Empty,
// OptUserId = Guid.Parse(_userIdStr), // OptUserId = Guid.Parse(_userIdStr),
// OptUser = _userRealName, // OptUser = _userRealName,

View File

@ -491,7 +491,7 @@ public static class FileStoreHelper
{ {
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment); var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
//加入访视层级 和Data //加入检查批次层级 和Data
var path = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(), var path = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(),
siteId.ToString(), subjectId.ToString(), subjectVisitId.ToString(), StaticData.Folder.DicomFolder, studyId.ToString()); siteId.ToString(), subjectId.ToString(), subjectVisitId.ToString(), StaticData.Folder.DicomFolder, studyId.ToString());

View File

@ -115,7 +115,6 @@
<PackageReference Include="Quartz" Version="3.5.0" /> <PackageReference Include="Quartz" Version="3.5.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" /> <PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.5" /> <PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.5" />
<PackageReference Include="WinSCP" Version="5.21.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -183,9 +183,9 @@
//StudyListService //StudyListService
"TimeTooLow": "当前访视检查时间不能小于该访视之前检查的时间,请核对检查数据是否有误", "TimeTooLow": "当前检查批次检查时间不能小于该检查批次之前检查的时间,请核对检查数据是否有误",
"SomeoneLoading": "当前有人正在上传归档该检查!", "SomeoneLoading": "当前有人正在上传归档该检查!",
"VisitEnd": "受试者访视结束,不允许上传!", "VisitEnd": "患者检查批次结束,不允许上传!",
"DICOMUploaded{0}{1}{2}{3}": "{0}: This DICOM images have been uploaded and allocate to the {1} of the subject {2} (Study ID: {3}), which cannot continue to upload and assign it to others.", "DICOMUploaded{0}{1}{2}{3}": "{0}: This DICOM images have been uploaded and allocate to the {1} of the subject {2} (Study ID: {3}), which cannot continue to upload and assign it to others.",
//StudyService //StudyService

View File

@ -36,7 +36,7 @@
"ProjSetDisable": "项目不在Initializing/Ongoing不允许确认配置", // "ProjSetDisable": "项目不在Initializing/Ongoing不允许确认配置", //
"QCRepate": "QC问题显示序号不允许重复", // QC "QCRepate": "QC问题显示序号不允许重复", // QC
"ParentNumToLow": "父问题的序号要比子问题序号小,请确认", // "ParentNumToLow": "父问题的序号要比子问题序号小,请确认", //
"ExistUnconfirmedItems": "项目、基础配置、流程配置、加急配置、访视计划,有未确认项", // "ExistUnconfirmedItems": "项目、基础配置、流程配置、加急配置、检查批次计划,有未确认项", //
"NotAllCanOperate": "只有“初始化中”和“正在进行中”才能进行操作", // "NotAllCanOperate": "只有“初始化中”和“正在进行中”才能进行操作", //
// TrialExternalUserService // TrialExternalUserService
@ -51,7 +51,7 @@
"OnlyPMAPM": "仅PM/APM可以操作!", "OnlyPMAPM": "仅PM/APM可以操作!",
"TrialIDExist": "相同的试用ID已经存在。", "TrialIDExist": "相同的试用ID已经存在。",
"ProjNot": "项目初始化或者进行中时,才允许操作", "ProjNot": "项目初始化或者进行中时,才允许操作",
"TrialConfirm": "Trial访视计划已经确认,无法删除", "TrialConfirm": "Trial检查批次计划已经确认,无法删除",
"TrialIntoTheGroup": "该Trial有医生入组或在入组流程中无法删除", "TrialIntoTheGroup": "该Trial有医生入组或在入组流程中无法删除",
"TrialHaveSite": "该Trial下面有Site无法删除", "TrialHaveSite": "该Trial下面有Site无法删除",
"TrialHaveParticipants": "该Trial下面有参与者无法删除", "TrialHaveParticipants": "该Trial下面有参与者无法删除",
@ -67,18 +67,18 @@
// SubjectService // SubjectService
"VisitNotConfirmed": "试访计划尚未确定。添加主题前请联系项目经理确认访问计划", "VisitNotConfirmed": "试访计划尚未确定。添加主题前请联系项目经理确认访问计划",
"ExistedTrial": "在本试验中已经存在一个具有相同受试者ID的受试者.", "ExistedTrial": "在本试验中已经存在一个具有相同患者ID的患者.",
"TheLastVisit": "该受试者已经有访视设置为末次访视,不允许将该访视设置为末次访视", "TheLastVisit": "该患者已经有检查批次设置为末次检查批次,不允许将该检查批次设置为末次检查批次",
"ImagesUploaded": "该受试者此访视后有影像上传,该访视不允许设置为末次访视", "ImagesUploaded": "该患者此检查批次后有影像上传,该检查批次不允许设置为末次检查批次",
"StudyImagesCanBotDeleted": "本课题已上传研究图像进行访问,无法删除", "StudyImagesCanBotDeleted": "本课题已上传研究图像进行访问,无法删除",
// SubjectVisitService // SubjectVisitService
"ContainsVisitnum": "这个主题的访问计划已经包含了一个访问次数相同的访问", "ContainsVisitnum": "这个主题的访问计划已经包含了一个访问次数相同的访问",
//访访访访 TheLastVisit // TheLastVisit
"LastEvaluationNotAllowed": "设置末次评估后,不允许添加计划外访视", "LastEvaluationNotAllowed": "设置末次评估后,不允许添加计划外检查批次",
"CRCSubmit": "CRC提交后不允许修改PD确认状态", "CRCSubmit": "CRC提交后不允许修改PD确认状态",
"BacktrackingVisits": "回退的访视不允许修改PD确认状态", "BacktrackingVisits": "回退的检查批次不允许修改PD确认状态",
"ImageUpload": "该受试者此访视后有影像上传,该访视不允许设置为末次访视", "ImageUpload": "该患者此检查批次后有影像上传,该检查批次不允许设置为末次检查批次",
"AssociatedUploaded": "本次访问与上传的研究图片有关,无法删除", "AssociatedUploaded": "本次访问与上传的研究图片有关,无法删除",
"InPlanCanNotDeleted": "此访问为InPlan不能删除", "InPlanCanNotDeleted": "此访问为InPlan不能删除",
@ -86,12 +86,12 @@
"OnlyInitializing": "只有“初始化中”和“正在进行中”才能进行操作", "OnlyInitializing": "只有“初始化中”和“正在进行中”才能进行操作",
"AccordWithVisitNum": "对于访问计划具有较大VisitNum的VisitDay应该大于具有较小VisitNum的VisitDay", "AccordWithVisitNum": "对于访问计划具有较大VisitNum的VisitDay应该大于具有较小VisitNum的VisitDay",
"same/VisitName": "当前访问计划中已经存在具有相同VisitName/VisitNum的访问", "same/VisitName": "当前访问计划中已经存在具有相同VisitName/VisitNum的访问",
"AlreadyBaseline": "已访视是当前访视计划的基线", "AlreadyBaseline": "已检查批次是当前检查批次计划的基线",
"IsUploadVideo": "有CRC已经为基线上传了影像数据,不允许修改基线", "IsUploadVideo": "有CRC已经为基线上传了影像数据,不允许修改基线",
"VisitHasBeenExecuted": "访问计划已分配给受试者并执行", "VisitHasBeenExecuted": "访问计划已分配给者并执行",
"OnlyProgressCanEdit": "仅仅在项目初始化或者进行中时,才允许修改确认", "OnlyProgressCanEdit": "仅仅在项目初始化或者进行中时,才允许修改确认",
"NoBaselineNoConfirmation": "没有基线,不允许确认", "NoBaselineNoConfirmation": "没有基线,不允许确认",
"NotConfirmedCanNotVisit": "项目配置未确认,不允许确认访视计划", "NotConfirmedCanNotVisit": "项目配置未确认,不允许确认检查批次计划",
"VisitDayNotMinimum": "基线VisitDay 不是最小的, 不允许确认", "VisitDayNotMinimum": "基线VisitDay 不是最小的, 不允许确认",
@ -122,11 +122,11 @@
// QCOperationService // QCOperationService
"AuditQuestionMust": "必须填写审核问题,并保存,否则不允许添加质疑", "AuditQuestionMust": "必须填写审核问题,并保存,否则不允许添加质疑",
"VisitNoClose": "当前访视有未关闭的 同意CRC上传的质疑不允许再次添加质疑", "VisitNoClose": "当前检查批次有未关闭的 同意CRC上传的质疑不允许再次添加质疑",
"NotFinish": "CRC申请重传的/QC同意重传的质疑在CRC设置重传完成前不允许关闭质疑", "NotFinish": "CRC申请重传的/QC同意重传的质疑在CRC设置重传完成前不允许关闭质疑",
"QCHasBeenReplied": "此QC质询已回复", "QCHasBeenReplied": "此QC质询已回复",
"OperationUserMustBeCRC/PM": "一致性核查对话操作用户 只允许 CRC/PM", "OperationUserMustBeCRC/PM": "一致性核查对话操作用户 只允许 CRC/PM",
"CanNotCloseQuery": "执行一致性核查的访视 不允许关闭质疑", "CanNotCloseQuery": "执行一致性核查的检查批次 不允许关闭质疑",
"OnlyPMCanSet": "只允许PM 手动设置一致性核查通过", "OnlyPMCanSet": "只允许PM 手动设置一致性核查通过",
"CanNotSettingConsistency": "当前是PM同意回退,不允许设置一致性核查通过", "CanNotSettingConsistency": "当前是PM同意回退,不允许设置一致性核查通过",
"ConsistencyNotClose": "致性核查质疑未关闭/审核状态不是通过,不允许设置一致性核查通过", "ConsistencyNotClose": "致性核查质疑未关闭/审核状态不是通过,不允许设置一致性核查通过",
@ -137,15 +137,15 @@
"OnlyExcelCSV": "只允许Excel、 CSV", "OnlyExcelCSV": "只允许Excel、 CSV",
"ExcelVerificationFailed": "请上传规定格式的Excel文件保证有有效数据", "ExcelVerificationFailed": "请上传规定格式的Excel文件保证有有效数据",
"QCUnconfirmed": "QC问题未确认不允许领取任务", "QCUnconfirmed": "QC问题未确认不允许领取任务",
"MustBeFinish": "您已经领取了其他受试者,完成后才允许领取新的受试者", "MustBeFinish": "您已经领取了其他患者,完成后才允许领取新的患者",
"BeReceive": "当前已被领取,不允许领取", "BeReceive": "当前已被领取,不允许领取",
"CancelQCTask": "项目配置为不审没有领取或者取消QC Task", "CancelQCTask": "项目配置为不审没有领取或者取消QC Task",
"FirstTriaPassed": "初审已通过,不能继续领取", "FirstTriaPassed": "初审已通过,不能继续领取",
"CanNotReceive": "项目配置为单审,不满足SubmmitState已提交 或者 AuditState待审核/审核中, 不允许领取,请刷新界面", "CanNotReceive": "项目配置为单审,不满足SubmmitState已提交 或者 AuditState待审核/审核中, 不允许领取,请刷新界面",
"MustBeDifferent": "复审不能和初审是同一个人", "MustBeDifferent": "复审不能和初审是同一个人",
"IsNotSatisfied": "项目配置为复审,不满足提交状态:已提交 或者 审核状态:待审核/QC中, 不允许领取,请刷新界面", "IsNotSatisfied": "项目配置为复审,不满足提交状态:已提交 或者 审核状态:待审核/QC中, 不允许领取,请刷新界面",
"VisitNotUploaded": "有访视未上传任何Dicom/非Dicom数据 不允许提交", "VisitNotUploaded": "有检查批次未上传任何Dicom/非Dicom数据 不允许提交",
"MandatoryFailed": "项目配置了需要填写首次给药日期 但是受试者没有填写首次给药日期,不允许提交", "MandatoryFailed": "项目配置了需要填写首次给药日期 但是者没有填写首次给药日期,不允许提交",
"YouBeenRemoved": "您已经被移出项目,不允许该操作", "YouBeenRemoved": "您已经被移出项目,不允许该操作",
"QuestionsNotClosed": "有质疑未关闭,不允许该操作", "QuestionsNotClosed": "有质疑未关闭,不允许该操作",
"CanNotSetQCPassed": "不审状态下不允许设置为QC Passed", "CanNotSetQCPassed": "不审状态下不允许设置为QC Passed",
@ -157,7 +157,7 @@
"NotInPrimaryQCQCFailed": "项目配置为单审 当前审核状态不为 InPrimaryQC不能变更到 QCFailed", "NotInPrimaryQCQCFailed": "项目配置为单审 当前审核状态不为 InPrimaryQC不能变更到 QCFailed",
"TrialIsDoubleCheckCanNotQCFailed{0}": "项目配置为双审 当前审核状态为 {0},不能变更到 QCFailed", "TrialIsDoubleCheckCanNotQCFailed{0}": "项目配置为双审 当前审核状态为 {0},不能变更到 QCFailed",
"CRCHasBeenSubmitted": "CRC已提交了 不能修改入组确认状态", "CRCHasBeenSubmitted": "CRC已提交了 不能修改入组确认状态",
"CannotBeChangedPD": "回退的访视不允许修改PD确认状态", "CannotBeChangedPD": "回退的检查批次不允许修改PD确认状态",
"OtherQCProcessAudit": "其他QC正在进行审核当前操作不允许", "OtherQCProcessAudit": "其他QC正在进行审核当前操作不允许",
"ForwardFailed": "转发失败", "ForwardFailed": "转发失败",
@ -185,9 +185,9 @@
//StudyListService //StudyListService
"TimeTooLow": "当前访视检查时间不能小于该访视之前检查的时间,请核对检查数据是否有误", "TimeTooLow": "当前检查批次检查时间不能小于该检查批次之前检查的时间,请核对检查数据是否有误",
"SomeoneLoading": "当前有人正在上传归档该检查!", "SomeoneLoading": "当前有人正在上传归档该检查!",
"VisitEnd": "受试者访视结束,不允许上传!", "VisitEnd": "患者检查批次结束,不允许上传!",
"DICOMUploaded{0}{1}{2}{3}": "{0}:此DICOM图片已上传并分配给课题{2}(研究ID:{3})的{1},课题{2}无法继续上传并分配给他人。", "DICOMUploaded{0}{1}{2}{3}": "{0}:此DICOM图片已上传并分配给课题{2}(研究ID:{3})的{1},课题{2}无法继续上传并分配给他人。",
//StudyService //StudyService
@ -195,15 +195,15 @@
//SystemAnonymizationService //SystemAnonymizationService
//ReadingImageTaskService //ReadingImageTaskService
"ReadingImage_NotVisit": "系统调用错误,当前任务不是访视任务。", "ReadingImage_NotVisit": "系统调用错误,当前任务不是检查批次任务。",
"ReadingImage_CantSplit": "当前任务是基线任务,不能执行分裂病灶的操作。", "ReadingImage_CantSplit": "当前任务是基线任务,不能执行分裂病灶的操作。",
"ReadingImage_BeSigned": "当前任务已经签名,请勿重复提交。", "ReadingImage_BeSigned": "当前任务已经签名,请勿重复提交。",
"ReadingImage_Beinvalid": "当前任务已失效,不能执行阅片。", "ReadingImage_Beinvalid": "当前任务已失效,不能执行阅片。",
"ReadingImage_NotaTask": "合并的病灶并非同一个访视任务", "ReadingImage_NotaTask": "合并的病灶并非同一个检查批次任务",
"ReadingImage_DeleteError": "当前病灶分裂出其他病灶或者其他病灶合并到了当前病灶,删除失败。", "ReadingImage_DeleteError": "当前病灶分裂出其他病灶或者其他病灶合并到了当前病灶,删除失败。",
"ReadingImage_Idnotcorrespond": "病灶标记添加失败影像的Instance ID和Series ID不对应。", "ReadingImage_Idnotcorrespond": "病灶标记添加失败影像的Instance ID和Series ID不对应。",
"ReadingImage_IsLymphNotbigger": "当前访视该淋巴结病灶的短径小于上一访视的值,不能设置为显著增大。", "ReadingImage_IsLymphNotbigger": "当前检查批次该淋巴结病灶的短径小于上一检查批次的值,不能设置为显著增大。",
"ReadingImage_NotLymphNotbigger": "当前访视该非淋巴结病灶的长径小于上一访视的值,不能设置为显著增大。", "ReadingImage_NotLymphNotbigger": "当前检查批次该非淋巴结病灶的长径小于上一检查批次的值,不能设置为显著增大。",
"ReadingImage_Twice": "系统调用错误,提交的问题及答案重复。", "ReadingImage_Twice": "系统调用错误,提交的问题及答案重复。",
"ReadingImage_MaxQuestion": "按照《独立影像评估章程》的相关规则,当前病灶类型的病灶数量不超过{0}个。", "ReadingImage_MaxQuestion": "按照《独立影像评估章程》的相关规则,当前病灶类型的病灶数量不超过{0}个。",
"ReadingImage_Maxlesion": "按照《独立影像评估章程》的相关规则,同一器官的靶病灶数量不超过{0}个,请确认", "ReadingImage_Maxlesion": "按照《独立影像评估章程》的相关规则,同一器官的靶病灶数量不超过{0}个,请确认",
@ -212,7 +212,7 @@
"ReadingImage_RequiredQuestion": "提交前,请完成\"{0}\"", "ReadingImage_RequiredQuestion": "提交前,请完成\"{0}\"",
"ReadingImage_ClinicalRead": "临床数据未阅读,请确认!", "ReadingImage_ClinicalRead": "临床数据未阅读,请确认!",
"ReadingImage_IDMust": "系统调用失败当没有任务ID的时候标准ID必传。", "ReadingImage_IDMust": "系统调用失败当没有任务ID的时候标准ID必传。",
"ReadingImage_TaskFinish": "当前受试者所有阅片任务已完成,请知悉。", "ReadingImage_TaskFinish": "当前者所有阅片任务已完成,请知悉。",
"ReadingImage_NeedRest": "您已连续阅片{0}个小时,请休息{1}分钟后,再继续阅片。", "ReadingImage_NeedRest": "您已连续阅片{0}个小时,请休息{1}分钟后,再继续阅片。",
//ReadingJudgeTaskService //ReadingJudgeTaskService
"ReadingJudge_SouceIdNull": "系统调用失败当前裁判的全局任务的SouceId为null。", "ReadingJudge_SouceIdNull": "系统调用失败当前裁判的全局任务的SouceId为null。",

View File

@ -209,10 +209,10 @@ namespace IRaCIS.Core.Application.ViewModel
{ {
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
//针对访视产生任务的 有用 //针对检查批次产生任务的 有用
public bool IsAssignSubjectToDoctor { get; set; } public bool IsAssignSubjectToDoctor { get; set; }
//访视任务产生的时候传递 //检查批次任务产生的时候传递
public List<VisitGenerataTaskDTO> VisitGenerataTaskList { get; set; } = new List<VisitGenerataTaskDTO>(); public List<VisitGenerataTaskDTO> VisitGenerataTaskList { get; set; } = new List<VisitGenerataTaskDTO>();

View File

@ -82,13 +82,13 @@ namespace IRaCIS.Core.Application.ViewModel
public ReadingTool? ReadingTool { get; set; } public ReadingTool? ReadingTool { get; set; }
/// <summary> /// <summary>
/// 任务展示访视 读片任务显示是否顺序 /// 任务展示检查批次 读片任务显示是否顺序
/// </summary> /// </summary>
public bool IsReadingTaskViewInOrder { get; set; } = true; public bool IsReadingTaskViewInOrder { get; set; } = true;
/// <summary> /// <summary>
/// 阅片是否显示受试者信息 /// 阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } = false; public bool IsReadingShowSubjectInfo { get; set; } = false;
@ -178,7 +178,7 @@ namespace IRaCIS.Core.Application.ViewModel
public ReReadingApplyState ReReadingApplyState { get; set; } public ReReadingApplyState ReReadingApplyState { get; set; }
public DateTime? SuggesteFinishedTime { get; set; } public DateTime? SuggesteFinishedTime { get; set; }
//任务来源访视Id 方便回更访视读片状态 //任务来源检查批次Id 方便回更检查批次读片状态
public Guid? SourceSubjectVisitId { get; set; } public Guid? SourceSubjectVisitId { get; set; }
public Guid? SouceReadModuleId { get; set; } public Guid? SouceReadModuleId { get; set; }

View File

@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Service
#region 废弃 #region 废弃
/// <summary> /// <summary>
/// 获取访视任务 应用Subject后 医生比率情况 /// 获取检查批次任务 应用Subject后 医生比率情况
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]

View File

@ -182,7 +182,7 @@ namespace IRaCIS.Core.Application.Service
}); });
//最后一个访视添加全局 //最后一个检查批次添加全局
if (filterObj.IsGenerateGlobalTask) if (filterObj.IsGenerateGlobalTask)
{ {
var lastTask = (subject.VisitTaskList.Take(filterObj.PlanVisitCount).Last()).Clone(); var lastTask = (subject.VisitTaskList.Take(filterObj.PlanVisitCount).Last()).Clone();
@ -373,7 +373,7 @@ namespace IRaCIS.Core.Application.Service
} }
//最后一个访视添加全局 //最后一个检查批次添加全局
if (filterObj.IsGenerateGlobalTask) if (filterObj.IsGenerateGlobalTask)
{ {
@ -468,7 +468,7 @@ namespace IRaCIS.Core.Application.Service
Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit); Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit);
////所选访视数量 的访视 其中必有一个访视后有全局任务 ////所选检查批次数量 的检查批次 其中必有一个检查批次后有全局任务
//if (filterObj.IsHaveReadingPeriod == true) //if (filterObj.IsHaveReadingPeriod == true)
//{ //{
// //这里的过滤条件 不能用 where(comonTaskFilter) 会报错,奇怪的问题 只能重新写一遍 // //这里的过滤条件 不能用 where(comonTaskFilter) 会报错,奇怪的问题 只能重新写一遍
@ -581,7 +581,7 @@ namespace IRaCIS.Core.Application.Service
Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit); Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit);
////所选访视数量 的访视 其中必有一个访视后有全局任务 ////所选检查批次数量 的检查批次 其中必有一个检查批次后有全局任务
//if (filterObj.IsHaveReadingPeriod == true) //if (filterObj.IsHaveReadingPeriod == true)
//{ //{
// //visitTaskFilter = visitTaskFilter.And(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(u => u.VisitTaskNum == t.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Global] && u.ReadingCategory == ReadingCategory.Global)); // //visitTaskFilter = visitTaskFilter.And(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(u => u.VisitTaskNum == t.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Global] && u.ReadingCategory == ReadingCategory.Global));

View File

@ -22,7 +22,7 @@ namespace IRaCIS.Core.Application.Service
/// <summary> /// <summary>
/// 访视读片任务 /// 检查批次读片任务
/// </summary> /// </summary>
[ApiExplorerSettings(GroupName = "Trial")] [ApiExplorerSettings(GroupName = "Trial")]
public class VisitTaskHelpeService : IVisitTaskHelpeService public class VisitTaskHelpeService : IVisitTaskHelpeService
@ -93,7 +93,7 @@ namespace IRaCIS.Core.Application.Service
//基于标准签名 产生任务 //基于标准签名 产生任务
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId) public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId)
{ {
//找到一致性核查通过且没有产生任务的访视 //找到一致性核查通过且没有产生任务的检查批次
var needGenerateVisit = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed && var needGenerateVisit = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed &&
!t.VisitTaskList.Any(u => u.TrialReadingCriterionId == confirmedTrialReadingCriterionId && u.SourceSubjectVisitId == t.Id && u.TaskState==TaskState.Effect && u.IsAnalysisCreate==false)).ToListAsync(); !t.VisitTaskList.Any(u => u.TrialReadingCriterionId == confirmedTrialReadingCriterionId && u.SourceSubjectVisitId == t.Id && u.TaskState==TaskState.Effect && u.IsAnalysisCreate==false)).ToListAsync();
@ -146,7 +146,7 @@ namespace IRaCIS.Core.Application.Service
// } // }
//} //}
//每个访视 根据项目配置生成任务 双审生成两个 //每个检查批次 根据项目配置生成任务 双审生成两个
TaskUrgentType? taskUrgentType = null; TaskUrgentType? taskUrgentType = null;
@ -323,7 +323,7 @@ namespace IRaCIS.Core.Application.Service
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List<ClinicalDataTrialSet> trialClinicalDataSetList) private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List<ClinicalDataTrialSet> trialClinicalDataSetList)
{ {
//访视 //检查批次
if (readingCategory == ReadingCategory.Visit) if (readingCategory == ReadingCategory.Visit)
{ {
if (isbaseLine) if (isbaseLine)
@ -379,7 +379,7 @@ namespace IRaCIS.Core.Application.Service
var haveSignedCount = _readingClinicalDataRepository var haveSignedCount = _readingClinicalDataRepository
.Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count(); .Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
//访视 //检查批次
if (readingCategory == ReadingCategory.Visit) if (readingCategory == ReadingCategory.Visit)
{ {
if (isbaseLine) if (isbaseLine)
@ -499,7 +499,7 @@ namespace IRaCIS.Core.Application.Service
{ {
case GenerateTaskCategory.Visit: case GenerateTaskCategory.Visit:
//每个Subject 的每个访视 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配) //每个Subject 的每个检查批次 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配)
foreach (var subjectGroup in generateTaskCommand.VisitGenerataTaskList.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() })) foreach (var subjectGroup in generateTaskCommand.VisitGenerataTaskList.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() }))
@ -565,7 +565,7 @@ namespace IRaCIS.Core.Application.Service
//} //}
//每个访视 根据项目配置生成任务 双审生成两个 //每个检查批次 根据项目配置生成任务 双审生成两个
//双重 可能有一个人的任务没分配,然后影像回退不会影响未分配的任务,所以生成的时候 要进行判断 不能每次都生成两个 //双重 可能有一个人的任务没分配,然后影像回退不会影响未分配的任务,所以生成的时候 要进行判断 不能每次都生成两个
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double) if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
@ -661,25 +661,25 @@ namespace IRaCIS.Core.Application.Service
if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign) if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign)
{ {
#region 后续访视 未分配的进行再次分配,重置的或者失效的 需要重新生成新的任务 (PM 有序退回 或者PM 有序 申请重阅) #region 后续检查批次 未分配的进行再次分配,重置的或者失效的 需要重新生成新的任务 (PM 有序退回 或者PM 有序 申请重阅)
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder) if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
{ {
//之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的) //之前有回退到影像上传的检查批次 那么当前检查批次一致性核查通过的时候,当前检查批次生成但是不分配出去(排除失访的)
var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
//之前有回退的,那么当前访视任务生成但是不分配 //之前有回退的,那么当前检查批次任务生成但是不分配
if (beforeBackVisitTask != null) if (beforeBackVisitTask != null)
{ {
//不用进行额外处理 //不用进行额外处理
//访视2 PM 回退 基线回退 访视2先一致性核查通过生成访视2任务但是不分配 //检查批次2 PM 回退 基线回退 检查批次2先一致性核查通过生成检查批次2任务但是不分配
} }
else else
{ {
#region 当前访视根据配置规则分配出去 #region 当前检查批次根据配置规则分配出去
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated; var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
@ -704,12 +704,12 @@ namespace IRaCIS.Core.Application.Service
#endregion #endregion
} }
//后续最近的未一致性核查通过的访视任务 //后续最近的未一致性核查通过的检查批次任务
var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
//大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成 //大于当前检查批次 同时小于最近的未一致性核查通过的检查批次任务分配 或者生成
//存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务 //存在退回检查批次1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是检查批次1还未通过时 生成任务
var followVisitTaskList = await _visitTaskRepository var followVisitTaskList = await _visitTaskRepository
.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true) .Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true)
.WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum) .WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum)
@ -717,7 +717,7 @@ namespace IRaCIS.Core.Application.Service
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum); var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);
//每个访视去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成) //每个检查批次去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成)
foreach (var visitGroup in followVisitGroup) foreach (var visitGroup in followVisitGroup)
{ {
@ -746,7 +746,7 @@ namespace IRaCIS.Core.Application.Service
bool isCanEdit = urgentType == TaskUrgentType.EnrollmentConfirm || urgentType == TaskUrgentType.PDProgress ? false : true; bool isCanEdit = urgentType == TaskUrgentType.EnrollmentConfirm || urgentType == TaskUrgentType.PDProgress ? false : true;
//如果后续访视已分配有效 就不用处理 //如果后续检查批次已分配有效 就不用处理
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm1)) if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm1))
{ {
//不做处理 //不做处理
@ -815,7 +815,7 @@ namespace IRaCIS.Core.Application.Service
} }
//如果后续访视已分配有效 就不用处理 //如果后续检查批次已分配有效 就不用处理
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2)) if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2))
{ {
//不做处理 //不做处理
@ -916,7 +916,7 @@ namespace IRaCIS.Core.Application.Service
} }
else else
//后续访视不自动分配,或者配置的医生数量不足,就不进行分配 //后续检查批次不自动分配,或者配置的医生数量不足,就不进行分配
{ {
} }
@ -991,17 +991,17 @@ namespace IRaCIS.Core.Application.Service
if (assignConfigList.Count > 0) if (assignConfigList.Count > 0)
{ {
#region 重阅/退回的时候,需要将取消分配的访视类型的 任务重新分配 #region 重阅/退回的时候,需要将取消分配的检查批次类型的 任务重新分配
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder) if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
{ {
//之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的) //之前有回退到影像上传的检查批次 那么当前检查批次一致性核查通过的时候,当前检查批次生成但是不分配出去(排除失访的)
var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
if (beforeBackVisitTask == null) if (beforeBackVisitTask == null)
{ {
#region 访视2 PM 回退 基线回退 访视2先一致性核查通过生成访视2任务但是不分配 #region 检查批次2 PM 回退 基线回退 检查批次2先一致性核查通过生成检查批次2任务但是不分配
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated; var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
@ -1023,7 +1023,7 @@ namespace IRaCIS.Core.Application.Service
var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
//存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务 //存在退回检查批次1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是检查批次1还未通过时 生成任务
var followVisitTaskList = await _visitTaskRepository var followVisitTaskList = await _visitTaskRepository
.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true) .Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true)
.WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum) .WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum)
@ -1031,12 +1031,12 @@ namespace IRaCIS.Core.Application.Service
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum); var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);
//每个访视去判断 是分配还是生成 //每个检查批次去判断 是分配还是生成
foreach (var visitGroup in followVisitGroup) foreach (var visitGroup in followVisitGroup)
{ {
//如果后续访视已分配有效 就不用处理 //如果后续检查批次已分配有效 就不用处理
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.SingleReadingArm)) if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.SingleReadingArm))
{ {
//不做处理 //不做处理
@ -1096,7 +1096,7 @@ namespace IRaCIS.Core.Application.Service
} }
} }
//之前有回退的 后续访视不生成或者分配 当前访视生成但是不分配出去 //之前有回退的 后续检查批次不生成或者分配 当前检查批次生成但是不分配出去
else else
{ {

View File

@ -25,7 +25,7 @@ using IRaCIS.Core.Domain.Share.Reading;
namespace IRaCIS.Core.Application.Service.Allocation namespace IRaCIS.Core.Application.Service.Allocation
{ {
/// <summary> /// <summary>
/// 访视读片任务 /// 检查批次读片任务
/// </summary> /// </summary>
[ApiExplorerSettings(GroupName = "Trial")] [ApiExplorerSettings(GroupName = "Trial")]
public class VisitTaskService : BaseService, IVisitTaskService public class VisitTaskService : BaseService, IVisitTaskService
@ -166,7 +166,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//if (inOrder) //if (inOrder)
//{ //{
// //针对有序阅片 只分配< 最小的 不是一致性核查通过状态 和不是失访 的访视 的任务 // //针对有序阅片 只分配< 最小的 不是一致性核查通过状态 和不是失访 的检查批次 的任务
// if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectId && t.CheckState != CheckStateEnum.CVPassed && t.IsLostVisit == false)) // if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectId && t.CheckState != CheckStateEnum.CVPassed && t.IsLostVisit == false))
// { // {
// var notCheckPassedMinVisitNum = await _subjectVisitRepository.Where(t => t.SubjectId == subjectId && t.CheckState != CheckStateEnum.CVPassed).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).FirstOrDefaultAsync(); // var notCheckPassedMinVisitNum = await _subjectVisitRepository.Where(t => t.SubjectId == subjectId && t.CheckState != CheckStateEnum.CVPassed).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).FirstOrDefaultAsync();
@ -312,10 +312,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
throw new BusinessValidationFailedException("出现脏数据 任务来源字段没有值"); throw new BusinessValidationFailedException("出现脏数据 任务来源字段没有值");
} }
//PM 回退了 但是还没生成任务 当前任务编号前有访视进行了回退就不允许分配 //PM 回退了 但是还没生成任务 当前任务编号前有检查批次进行了回退就不允许分配
if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == visitTask.SubjectId && t.IsPMBackOrReReading && t.VisitNum <= visitTask.VisitTaskNum)) if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == visitTask.SubjectId && t.IsPMBackOrReReading && t.VisitNum <= visitTask.VisitTaskNum))
{ {
return ResponseOutput.NotOk("该受试者有访视进入了退回流程,还未经过一致性核查通过,不允许分配"); return ResponseOutput.NotOk("该患者有检查批次进入了退回流程,还未经过一致性核查通过,不允许分配");
} }
@ -340,7 +340,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//是否删除配置规则表里的 Subject 医生绑定关系 重新添加绑定关系 //是否删除配置规则表里的 Subject 医生绑定关系 重新添加绑定关系
//是否其该Subject 其他访视 绑定的医生 也同时变更? //是否其该Subject 其他检查批次 绑定的医生 也同时变更?
} }
@ -618,7 +618,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
/// <summary> /// <summary>
/// 访视任务 /// 检查批次任务
/// </summary> /// </summary>
/// <param name="queryVisitTask"></param> /// <param name="queryVisitTask"></param>
/// <param name="_visitTaskCommonService"></param> /// <param name="_visitTaskCommonService"></param>
@ -626,7 +626,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
[HttpPost] [HttpPost]
public async Task<PageOutput<VisitTaskView>> GetVisitTaskList(VisitTaskQuery queryVisitTask, [FromServices] IVisitTaskHelpeService _visitTaskCommonService) public async Task<PageOutput<VisitTaskView>> GetVisitTaskList(VisitTaskQuery queryVisitTask, [FromServices] IVisitTaskHelpeService _visitTaskCommonService)
{ {
//以前访视未产生任务的,在查询这里要产生 //以前检查批次未产生任务的,在查询这里要产生
var svIdList = await _subjectVisitRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.CheckState == CheckStateEnum.CVPassed && t.IsVisitTaskGenerated == false).Select(t => t.Id).ToListAsync(); var svIdList = await _subjectVisitRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.CheckState == CheckStateEnum.CVPassed && t.IsVisitTaskGenerated == false).Select(t => t.Id).ToListAsync();
//之前没有生成任务的逻辑 但是现在加了,任务要自动生成 //之前没有生成任务的逻辑 但是现在加了,任务要自动生成
@ -1009,7 +1009,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//.Where(t => t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) ) //.Where(t => t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) )
.Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true) .Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true)
//满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang //满足前序检查批次不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活 //但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)) //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
.WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode) && t.IsAnalysisCreate)) .WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode) && t.IsAnalysisCreate))
@ -1211,18 +1211,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (task.ReadingCategory != ReadingCategory.Visit) if (task.ReadingCategory != ReadingCategory.Visit)
{ {
throw new BusinessValidationFailedException("PM 仅仅允许对访视类型的任务申请重阅"); throw new BusinessValidationFailedException("PM 仅仅允许对检查批次类型的任务申请重阅");
} }
// 有序 一个受试者访视重阅未处理完,不能申请其他的 // 有序 一个患者检查批次重阅未处理完,不能申请其他的
if (criterionConfig.IsReadingTaskViewInOrder) if (criterionConfig.IsReadingTaskViewInOrder)
{ {
if (await _visitTaskReReadingRepository.AnyAsync(t => t.OriginalReReadingTask.TrialId == task.TrialId && t.OriginalReReadingTask.SubjectId == task.SubjectId && t.OriginalReReadingTask.TaskState == TaskState.Effect if (await _visitTaskReReadingRepository.AnyAsync(t => t.OriginalReReadingTask.TrialId == task.TrialId && t.OriginalReReadingTask.SubjectId == task.SubjectId && t.OriginalReReadingTask.TaskState == TaskState.Effect
&& t.OriginalReReadingTask.TrialReadingCriterionId == task.TrialReadingCriterionId && t.OriginalReReadingTask.TrialReadingCriterionId == task.TrialReadingCriterionId
&& t.OriginalReReadingTask.ReadingTaskState == ReadingTaskState.HaveSigned && t.RequestReReadingType == RequestReReadingType.TrialGroupApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default)) && t.OriginalReReadingTask.ReadingTaskState == ReadingTaskState.HaveSigned && t.RequestReReadingType == RequestReReadingType.TrialGroupApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default))
{ {
return ResponseOutput.NotOk("当前为有序阅片,该受试者已有访视已申请重阅还未处理(项目组申请),暂不能继续申请重阅"); return ResponseOutput.NotOk("当前为有序阅片,该患者已有检查批次已申请重阅还未处理(项目组申请),暂不能继续申请重阅");
} }
} }
@ -1243,7 +1243,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
&& t.OriginalReReadingTask.TrialReadingCriterionId == task.TrialReadingCriterionId && t.OriginalReReadingTask.TrialReadingCriterionId == task.TrialReadingCriterionId
&& t.OriginalReReadingTask.ReadingTaskState == ReadingTaskState.HaveSigned && t.RequestReReadingType == RequestReReadingType.DocotorApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default)) && t.OriginalReReadingTask.ReadingTaskState == ReadingTaskState.HaveSigned && t.RequestReReadingType == RequestReReadingType.DocotorApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default))
{ {
return ResponseOutput.NotOk("当前为有序阅片,该受试者已有访视已申请重阅还未处理,暂不能继续申请重阅"); return ResponseOutput.NotOk("当前为有序阅片,该患者已有检查批次已申请重阅还未处理,暂不能继续申请重阅");
} }
@ -1273,17 +1273,17 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (task.ReadingCategory == ReadingCategory.Judge && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Global))) if (task.ReadingCategory == ReadingCategory.Judge && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Global)))
{ {
throw new BusinessValidationFailedException("有序阅片,只允许申请该受试者阅片人最后一次完成全局任务重阅"); throw new BusinessValidationFailedException("有序阅片,只允许申请该者阅片人最后一次完成全局任务重阅");
} }
if (task.ReadingCategory == ReadingCategory.Oncology && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Oncology))) if (task.ReadingCategory == ReadingCategory.Oncology && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Oncology)))
{ {
throw new BusinessValidationFailedException("有序阅片,只允许申请该受试者阅片人最后一次完成肿瘤学任务重阅"); throw new BusinessValidationFailedException("有序阅片,只允许申请该者阅片人最后一次完成肿瘤学任务重阅");
} }
if (task.ReadingCategory == ReadingCategory.Judge && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Judge))) if (task.ReadingCategory == ReadingCategory.Judge && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Judge)))
{ {
throw new BusinessValidationFailedException("有序阅片,只允许申请该受试者阅片人最后一次完成裁判的任务重阅"); throw new BusinessValidationFailedException("有序阅片,只允许申请该者阅片人最后一次完成裁判的任务重阅");
} }
} }
@ -1291,7 +1291,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{ {
if (task.ReadingCategory != ReadingCategory.Visit && task.ReadingCategory != ReadingCategory.Global) if (task.ReadingCategory != ReadingCategory.Visit && task.ReadingCategory != ReadingCategory.Global)
{ {
throw new BusinessValidationFailedException("无序阅片仅仅允许IR 申请 全局和访视类型类别的任务进行重阅"); throw new BusinessValidationFailedException("无序阅片仅仅允许IR 申请 全局和检查批次类型类别的任务进行重阅");
} }
} }
@ -1438,10 +1438,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree) if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree)
{ {
//PM申请 SPM / CPM审批 回退访视,在此不生成访视任务 影响多个标准的任务 //PM申请 SPM / CPM审批 回退检查批次,在此不生成检查批次任务 影响多个标准的任务
if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.TrialGroupApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)) if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.TrialGroupApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM))
{ {
#region PM 申请两个IR 同一访视,其他人的申请记录也设置为同意 不会出现,因为在未处理前 一个Subject只能申请一次 #region PM 申请两个IR 同一检查批次,其他人的申请记录也设置为同意 不会出现,因为在未处理前 一个Subject只能申请一次
// await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId && // await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId &&
@ -1454,7 +1454,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
// RequestReReadingResultEnum = RequestReReadingResult.Agree, // RequestReReadingResultEnum = RequestReReadingResult.Agree,
//}); //});
// //只更新 PM 申请 同一访视的数据 // //只更新 PM 申请 同一检查批次的数据
// await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == origenalTask.SubjectId && // await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == origenalTask.SubjectId &&
// t.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed && // t.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed &&
// t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId && // t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId &&
@ -1468,7 +1468,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
#endregion #endregion
// 不管有序 无序 都会 回退访视 // 不管有序 无序 都会 回退检查批次
if (origenalTask.ReadingCategory == ReadingCategory.Visit) if (origenalTask.ReadingCategory == ReadingCategory.Visit)
{ {
//执行类似一致性核查回退流程 //执行类似一致性核查回退流程
@ -1476,7 +1476,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
else else
{ {
throw new BusinessValidationFailedException("仅允许同意访视类型的任务重阅"); throw new BusinessValidationFailedException("仅允许同意检查批次类型的任务重阅");
} }
//有序阅片 //有序阅片
@ -1484,7 +1484,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{ {
//访视影响当前以及当前之后的 两个阅片人的 //检查批次影响当前以及当前之后的 两个阅片人的
filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum); filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum);
@ -1516,7 +1516,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配 //申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != origenalTask.VisitTaskNum) if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != origenalTask.VisitTaskNum)
{ {
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
@ -1540,7 +1540,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.CancelAssign }); trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.CancelAssign });
} }
} }
//当前访视 //当前检查批次
else else
{ {
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
@ -1619,10 +1619,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
//IR申请 PM 审批 注意这里有一致性分析的申请同意 不会回退访视,在此要生成影响的访视任务 //IR申请 PM 审批 注意这里有一致性分析的申请同意 不会回退检查批次,在此要生成影响的检查批次任务
else if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.DocotorApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.AIR)) else if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.DocotorApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.AIR))
{ {
#region 两个IR 申请同一访视,其他人的申请记录也设置为同意 #region 两个IR 申请同一检查批次,其他人的申请记录也设置为同意
await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId && await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId &&
@ -1651,14 +1651,14 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (criterionConfig.IsReadingTaskViewInOrder) if (criterionConfig.IsReadingTaskViewInOrder)
{ {
#region 有序 IR 申请 重阅 影响的其他访视查询 #region 有序 IR 申请 重阅 影响的其他检查批次查询
switch (origenalTask.ReadingCategory) switch (origenalTask.ReadingCategory)
{ {
case ReadingCategory.Visit: case ReadingCategory.Visit:
//影响后续访视已经读完的,正在读的,未读的不做处理 以及其他类型任务 //影响后续检查批次已经读完的,正在读的,未读的不做处理 以及其他类型任务
filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum && filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum &&
((t.DoctorUserId == origenalTask.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) || t.ReadingCategory == ReadingCategory.Global)) ((t.DoctorUserId == origenalTask.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) || t.ReadingCategory == ReadingCategory.Global))
|| ||
@ -1667,7 +1667,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
break; break;
//不影响后续访视 (t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) || //不影响后续检查批次 (t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) ||
case ReadingCategory.Global: case ReadingCategory.Global:
filterExpression = filterExpression.And(t => t.VisitTaskNum > origenalTask.VisitTaskNum && filterExpression = filterExpression.And(t => t.VisitTaskNum > origenalTask.VisitTaskNum &&
@ -1677,7 +1677,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
case ReadingCategory.Oncology: case ReadingCategory.Oncology:
//仅仅影响自己 后续任务如果是访视任务、全局任务或裁判任务,均不处理 //仅仅影响自己 后续任务如果是检查批次任务、全局任务或裁判任务,均不处理
filterExpression = filterExpression.And(t => t.Id == origenalTask.Id); filterExpression = filterExpression.And(t => t.Id == origenalTask.Id);
break; break;
@ -1802,7 +1802,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
//无序阅片 只会申请访视类型和裁判类型的任务 注意这里有一致性分析的申请同意 //无序阅片 只会申请检查批次类型和裁判类型的任务 注意这里有一致性分析的申请同意
else else
{ {
//1.当前任务及裁判任务 //1.当前任务及裁判任务
@ -1966,13 +1966,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned) if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned)
{ {
return ResponseOutput.NotOk("仅仅允许针对生效、未完成的访视任务进行退回操作,请刷新页面数据"); return ResponseOutput.NotOk("仅仅允许针对生效、未完成的检查批次任务进行退回操作,请刷新页面数据");
} }
if( await _subjectVisitRepository.AnyAsync(t=>t.Id==task.SourceSubjectVisitId && t.CheckState!= CheckStateEnum.CVPassed)) if( await _subjectVisitRepository.AnyAsync(t=>t.Id==task.SourceSubjectVisitId && t.CheckState!= CheckStateEnum.CVPassed))
{ {
return ResponseOutput.NotOk("当前访视已回退到影像上传,不允许继续回退!"); return ResponseOutput.NotOk("当前检查批次已回退到影像上传,不允许继续回退!");
} }
@ -1988,7 +1988,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
#region 有序 无序公用流程 #region 有序 无序公用流程
//执行类似一致性核查回退流程 回退访视到影像上传流程 //执行类似一致性核查回退流程 回退检查批次到影像上传流程
await VisitBackAsync(task.SourceSubjectVisitId); await VisitBackAsync(task.SourceSubjectVisitId);
#endregion #endregion
@ -2014,7 +2014,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
#region 方式一 #region 方式一
//foreach (var influenceTask in influenceTaskList) //foreach (var influenceTask in influenceTaskList)
//{ //{
// //申请任务的阅片人 后续任务肯定没做, 只有访视任务,没有其他任务 取消分配 // //申请任务的阅片人 后续任务肯定没做, 只有检查批次任务,没有其他任务 取消分配
// if (influenceTask.DoctorUserId == task.DoctorUserId) // if (influenceTask.DoctorUserId == task.DoctorUserId)
// { // {
@ -2118,7 +2118,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
foreach (var influenceTask in influenceTaskList) foreach (var influenceTask in influenceTaskList)
{ {
//同意的访视 因为要记录具体的操作,所以废弃 //同意的检查批次 因为要记录具体的操作,所以废弃
if (influenceTask.Id == task.Id) if (influenceTask.Id == task.Id)
{ {
//influenceTaskList.ForEach(t => //influenceTaskList.ForEach(t =>
@ -2136,10 +2136,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
influenceTask.IsPMSetBack = true; influenceTask.IsPMSetBack = true;
} }
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配 //申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != task.VisitTaskNum) if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != task.VisitTaskNum)
{ {
//后续访视处理访视 //后续检查批次处理检查批次
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
{ {
influenceTask.TaskState = TaskState.HaveReturned; influenceTask.TaskState = TaskState.HaveReturned;
@ -2163,7 +2163,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
else else
{ {
//申请的访视 全局肿瘤学 //申请的检查批次 全局肿瘤学
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
{ {
@ -2193,7 +2193,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//// 当前任务标为失效 //// 当前任务标为失效
//task.TaskState = TaskState.Adbandon; //task.TaskState = TaskState.Adbandon;
////考虑该访视 另外一个阅片人的任务 ////考虑该检查批次 另外一个阅片人的任务
//var otherReviewerTask = await _visitTaskRepository.FirstOrDefaultAsync(t => t.SourceSubjectVisitId == task.SourceSubjectVisitId && t.Id != task.Id && t.TaskState == TaskState.Effect); //var otherReviewerTask = await _visitTaskRepository.FirstOrDefaultAsync(t => t.SourceSubjectVisitId == task.SourceSubjectVisitId && t.Id != task.Id && t.TaskState == TaskState.Effect);
@ -2208,7 +2208,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//} //}
// 申请该访视的任务 申请人失效 另外一个人重阅重置或者失效 // 申请该检查批次的任务 申请人失效 另外一个人重阅重置或者失效
var currentVisitList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == task.SourceSubjectVisitId && t.ReadingCategory == ReadingCategory.Visit && t.TaskState == TaskState.Effect && t.VisitTaskNum == task.VisitTaskNum, true).ToListAsync(); var currentVisitList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == task.SourceSubjectVisitId && t.ReadingCategory == ReadingCategory.Visit && t.TaskState == TaskState.Effect && t.VisitTaskNum == task.VisitTaskNum, true).ToListAsync();
@ -2232,7 +2232,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon }); origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
} }
////同意的访视 ////同意的检查批次
//if (influenceTask.Id == task.Id) //if (influenceTask.Id == task.Id)
//{ //{
// currentVisitList.ForEach(t => // currentVisitList.ForEach(t =>
@ -2323,7 +2323,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
/// <summary> /// <summary>
/// 影响提示列表 重阅仅仅针对已完成的任务申请 退回针对的是未完成的(退回仅仅针对是访视类型的) /// 影响提示列表 重阅仅仅针对已完成的任务申请 退回针对的是未完成的(退回仅仅针对是检查批次类型的)
/// </summary> /// </summary>
/// <param name="taskId"></param> /// <param name="taskId"></param>
/// <param name="isReReading"> 重阅还是直接回退</param> /// <param name="isReReading"> 重阅还是直接回退</param>
@ -2343,7 +2343,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated; Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated;
//是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的访视和全局) //是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的检查批次和全局)
filterExpression = filterExpression.And(t => t.IsAnalysisCreate == filterObj.IsAnalysisCreate); filterExpression = filterExpression.And(t => t.IsAnalysisCreate == filterObj.IsAnalysisCreate);
@ -2360,7 +2360,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{ {
filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId); filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId);
//当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务 //当前任务及其之后的所有检查批次任务、全局任务、裁判任务、肿瘤学阅片任务
//有序 //有序
if (criterionConfig.IsReadingTaskViewInOrder) if (criterionConfig.IsReadingTaskViewInOrder)
@ -2369,9 +2369,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
switch (filterObj.ReadingCategory) switch (filterObj.ReadingCategory)
{ {
case ReadingCategory.Visit: case ReadingCategory.Visit:
//影响当前医生 以及当前医生之后的 1、访视任务 已经读完的 //影响当前医生 以及当前医生之后的 1、检查批次任务 已经读完的
//2、后续任务如果是全局、肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效 //2、后续任务如果是全局、肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效
//3、当前任务、后续访视任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效 //3、当前任务、后续检查批次任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效
// filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum && // filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum &&
//((t.DoctorUserId == filterObj.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned) || t.ReadingCategory == ReadingCategory.Global)) //((t.DoctorUserId == filterObj.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned) || t.ReadingCategory == ReadingCategory.Global))
// || // ||
@ -2394,7 +2394,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
case ReadingCategory.Global: case ReadingCategory.Global:
// 1、后续任务如果是访视任务,均不处理; // 1、后续任务如果是检查批次任务,均不处理;
//2、后续任务如果是全局、状态为阅片完成则标记为重阅重置若阅片中或待阅片则不处理 //2、后续任务如果是全局、状态为阅片完成则标记为重阅重置若阅片中或待阅片则不处理
//3、当前任务或者全局任务触发了裁判任务若裁判任务状态为阅片完成则标记为重阅重置若在阅片中或待阅片则标记为失效 //3、当前任务或者全局任务触发了裁判任务若裁判任务状态为阅片完成则标记为重阅重置若在阅片中或待阅片则标记为失效
//4、后续任务为肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效 //4、后续任务为肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效
@ -2412,7 +2412,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
break; break;
//1、后续任务如果是访视任务、全局任务或裁判任务,均不处理; //1、后续任务如果是检查批次任务、全局任务或裁判任务,均不处理;
case ReadingCategory.Oncology: case ReadingCategory.Oncology:
//仅仅影响自己 //仅仅影响自己
@ -2422,7 +2422,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//(只允许申请该阅片人最后一次完成裁判的任务重阅)申请的时候做了限制 //(只允许申请该阅片人最后一次完成裁判的任务重阅)申请的时候做了限制
case ReadingCategory.Judge: case ReadingCategory.Judge:
// 1、后续任务如果是访视任务、全局任务,均不处理; // 1、后续任务如果是检查批次任务、全局任务,均不处理;
//2、后续若有肿瘤学阅片若肿瘤学阅片任务状态为阅片完成则标记为重阅重置若为阅片中则标记为失效如为待阅片则取消分配 //2、后续若有肿瘤学阅片若肿瘤学阅片任务状态为阅片完成则标记为重阅重置若为阅片中则标记为失效如为待阅片则取消分配
//裁判的影响自己 和后续肿瘤学阅片(不是自己做的) //裁判的影响自己 和后续肿瘤学阅片(不是自己做的)
@ -2446,7 +2446,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//throw new BusinessValidationFailedException("仅允许PM 同意 IR 申请的任务"); //throw new BusinessValidationFailedException("仅允许PM 同意 IR 申请的任务");
} }
//PM 影响所有阅片人 仅仅针对访视 SPM CPM 掉用 //PM 影响所有阅片人 仅仅针对检查批次 SPM CPM 掉用
else if (((_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM) && applyId != null && await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.ProjectManager) && filterObj.IsAnalysisCreate == false && filterObj.ReadingCategory == ReadingCategory.Visit) else if (((_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM) && applyId != null && await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.ProjectManager) && filterObj.IsAnalysisCreate == false && filterObj.ReadingCategory == ReadingCategory.Visit)
|| (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId == null)) || (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId == null))
@ -2458,7 +2458,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
{ {
case ReadingCategory.Visit: case ReadingCategory.Visit:
//访视影响当前以及当前之后的 两个阅片人的 //检查批次影响当前以及当前之后的 两个阅片人的
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum); filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
break; break;
@ -2484,7 +2484,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
filterExpression = filterExpression.And(t => t.VisitTaskNum == filterObj.VisitTaskNum || t.VisitTaskNum == judegTaskNum); filterExpression = filterExpression.And(t => t.VisitTaskNum == filterObj.VisitTaskNum || t.VisitTaskNum == judegTaskNum);
} }
//throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的访视任务"); //throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的检查批次任务");
} }
else else
{ {
@ -2496,7 +2496,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
//退回影响 仅仅针对是访视类型的 影响多个标准的任务 //退回影响 仅仅针对是检查批次类型的 影响多个标准的任务
else else
{ {
@ -2510,10 +2510,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
//有序 //有序
if (criterionConfig.IsReadingTaskViewInOrder) if (criterionConfig.IsReadingTaskViewInOrder)
{ {
// 当前任务及其之后的所有访视任务 两个阅片人的 // 当前任务及其之后的所有检查批次任务 两个阅片人的
// 1.后续访视不处理 // 1.后续检查批次不处理
//2.当前任务未完成,不会产生全局任务。后续任务均为访视任务,且均为待阅片,取消分配; //2.当前任务未完成,不会产生全局任务。后续任务均为检查批次任务,且均为待阅片,取消分配;
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum); filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
@ -2532,7 +2532,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
else else
{ {
throw new BusinessValidationFailedException("仅仅访视类型的任务支持PM退回"); throw new BusinessValidationFailedException("仅仅检查批次类型的任务支持PM退回");
} }
} }
@ -2589,7 +2589,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//有序 //有序
if (criterionConfig.IsReadingTaskViewInOrder) if (criterionConfig.IsReadingTaskViewInOrder)
{ {
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配 //申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != filterObj.VisitTaskNum) if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != filterObj.VisitTaskNum)
{ {
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
@ -2637,10 +2637,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
//有序 //有序
if (criterionConfig.IsReadingTaskViewInOrder) if (criterionConfig.IsReadingTaskViewInOrder)
{ {
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配 //申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != filterObj.VisitTaskNum) if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != filterObj.VisitTaskNum)
{ {
//后续访视处理访视 //后续检查批次处理检查批次
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
{ {
influenceTask.OptType = ReReadingOrBackOptType.Return; influenceTask.OptType = ReReadingOrBackOptType.Return;
@ -2656,7 +2656,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
else else
{ {
//申请的访视 全局肿瘤学 //申请的检查批次 全局肿瘤学
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned) if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
{ {

View File

@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.Service.Common
/// <summary> /// <summary>
/// 影像上传列表 只导出已上传状态的访视记录 /// 影像上传列表 只导出已上传状态的检查批次记录
/// </summary> /// </summary>
/// <param name="visitSearchDTO"></param> /// <param name="visitSearchDTO"></param>
/// <param name="_commonDocumentRepository"></param> /// <param name="_commonDocumentRepository"></param>
@ -128,7 +128,7 @@ namespace IRaCIS.Core.Application.Service.Common
/// <summary> /// <summary>
/// 受试者信息导出表 /// 者信息导出表
/// </summary> /// </summary>
/// <param name="param"></param> /// <param name="param"></param>
/// <param name="_commonDocumentRepository"></param> /// <param name="_commonDocumentRepository"></param>
@ -148,7 +148,7 @@ namespace IRaCIS.Core.Application.Service.Common
.WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex)) .WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex))
.WhereIf(param.Status != null, t => t.Status == param.Status) .WhereIf(param.Status != null, t => t.Status == param.Status)
.WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId) .WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId)
// CRC 只负责他管理site的受试 // CRC 只负责他管理site的
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
.ProjectTo<SubjectExportDTO>(_mapper.ConfigurationProvider).ToListAsync(); .ProjectTo<SubjectExportDTO>(_mapper.ConfigurationProvider).ToListAsync();
@ -166,7 +166,7 @@ namespace IRaCIS.Core.Application.Service.Common
///// <summary> ///// <summary>
///// 受试者 阅片期 进度表 导出 ///// 者 阅片期 进度表 导出
///// </summary> ///// </summary>
///// <param name="param"></param> ///// <param name="param"></param>
///// <param name="_commonDocumentRepository"></param> ///// <param name="_commonDocumentRepository"></param>
@ -735,7 +735,7 @@ namespace IRaCIS.Core.Application.Service.Common
var subjectQuerybal = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct(); var subjectQuerybal = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct();
var allList = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit) var allList = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
.Where(t => (t.IsSelfAnalysis == true || t.IsSelfAnalysis == null)&& t.VisitTaskNum>0) //一致性分析的结果 + 正常任务的结果 + 仅仅访视的结果 +去除基线 .Where(t => (t.IsSelfAnalysis == true || t.IsSelfAnalysis == null)&& t.VisitTaskNum>0) //一致性分析的结果 + 正常任务的结果 + 仅仅检查批次的结果 +去除基线
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId) //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
//.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState) //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
@ -763,7 +763,7 @@ namespace IRaCIS.Core.Application.Service.Common
//To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译 //To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译
//基线和访视的评估结果翻译枚举 分别对应着 //基线和检查批次的评估结果翻译枚举 分别对应着
foreach (var item in list) foreach (var item in list)
{ {
@ -771,11 +771,11 @@ namespace IRaCIS.Core.Application.Service.Common
var selfAnalysisTask = allList.Where(t => t.IsSelfAnalysis == true && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName).FirstOrDefault(); var selfAnalysisTask = allList.Where(t => t.IsSelfAnalysis == true && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName).FirstOrDefault();
//因为基线的评估结果是 是否存在疾病 而 其他访视的结果是 整体肿瘤评估结果 是用不同的枚举翻译的 所以这里手动翻译 不把翻译逻辑耦合到通用的翻译代码里面 在此特殊处理 //因为基线的评估结果是 是否存在疾病 而 其他检查批次的结果是 整体肿瘤评估结果 是用不同的枚举翻译的 所以这里手动翻译 不把翻译逻辑耦合到通用的翻译代码里面 在此特殊处理
item.AgainEvaluateResult = selfAnalysisTask?.EvaluateResult ?? String.Empty; item.AgainEvaluateResult = selfAnalysisTask?.EvaluateResult ?? String.Empty;
//将自身一致性分析的字段 赋值到访视任务这个字段 //将自身一致性分析的字段 赋值到检查批次任务这个字段
item.IsAnalysisDiffToOriginalData = selfAnalysisTask?.IsAnalysisDiffToOriginalData; item.IsAnalysisDiffToOriginalData = selfAnalysisTask?.IsAnalysisDiffToOriginalData;
} }
@ -817,7 +817,7 @@ namespace IRaCIS.Core.Application.Service.Common
var subjectQuerybal = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == false).Select(t => t.SubjectId).Distinct(); var subjectQuerybal = _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == false).Select(t => t.SubjectId).Distinct();
var allList = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit) var allList = await _repository.Where<VisitTask>(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
.Where(t => (t.IsSelfAnalysis == false || t.IsSelfAnalysis == null) && t.VisitTaskNum > 0) //一致性分析的结果 + 正常任务的结果 +仅仅访视的结果 .Where(t => (t.IsSelfAnalysis == false || t.IsSelfAnalysis == null) && t.VisitTaskNum > 0) //一致性分析的结果 + 正常任务的结果 +仅仅检查批次的结果
//.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId) //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
//.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState) //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
@ -846,7 +846,7 @@ namespace IRaCIS.Core.Application.Service.Common
var newList = new List<GroupAnalysisExport>(); var newList = new List<GroupAnalysisExport>();
// 每个subject访视进行分组 // 每个subject检查批次进行分组
foreach (var group in list.GroupBy(t => new { t.SubjectCode, t.VisitTaskNum, t.TaskName, t.ArmEnum }) foreach (var group in list.GroupBy(t => new { t.SubjectCode, t.VisitTaskNum, t.TaskName, t.ArmEnum })
.OrderBy(g => g.Key.SubjectCode) .OrderBy(g => g.Key.SubjectCode)
@ -857,7 +857,7 @@ namespace IRaCIS.Core.Application.Service.Common
var subjectVisitGroupList = group.ToList(); var subjectVisitGroupList = group.ToList();
//找到当前访视组间一致性分析的任务结果 //找到当前检查批次组间一致性分析的任务结果
var groupTaskList = allList.Where(t => t.IsSelfAnalysis == false && t.SubjectCode == group.Key.SubjectCode && t.VisitTaskNum == group.Key.VisitTaskNum && t.TaskName == group.Key.TaskName).ToList(); var groupTaskList = allList.Where(t => t.IsSelfAnalysis == false && t.SubjectCode == group.Key.SubjectCode && t.VisitTaskNum == group.Key.VisitTaskNum && t.TaskName == group.Key.TaskName).ToList();

View File

@ -192,7 +192,7 @@ namespace IRaCIS.Application.Services
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) => EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
{ {
var code = verificationCode.ToString(); var code = verificationCode.ToString().Trim();
_ = _verificationCodeRepository.AddAsync(new VerificationCode() _ = _verificationCodeRepository.AddAsync(new VerificationCode()
{ {
CodeType = Core.Domain.Share.VerifyType.Email, CodeType = Core.Domain.Share.VerifyType.Email,

View File

@ -436,7 +436,7 @@ namespace IRaCIS.Core.Application.Service
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed) if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
{ {
sendEmailConfig.TopicDescription = $"【入组确认报告】关于{taskInfo.ResearchProgramNo}项目{taskInfo.SubjectCode}受试者"; sendEmailConfig.TopicDescription = $"【入组确认报告】关于{taskInfo.ResearchProgramNo}项目{taskInfo.SubjectCode}者";
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
{ {
@ -450,7 +450,7 @@ namespace IRaCIS.Core.Application.Service
} }
else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed) else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed)
{ {
sendEmailConfig.TopicDescription = $"【疾病进展确认报告】关于{taskInfo.ResearchProgramNo}项目{taskInfo.SubjectCode}受试者"; sendEmailConfig.TopicDescription = $"【疾病进展确认报告】关于{taskInfo.ResearchProgramNo}项目{taskInfo.SubjectCode}者";
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
{ {
@ -540,10 +540,10 @@ namespace IRaCIS.Core.Application.Service
{ {
//仲裁在访视上 就没有全局阅片 没有阅片期 //仲裁在检查批次上 就没有全局阅片 没有阅片期
if (taskInfo.ArbitrationRule == ArbitrationRule.Visit) if (taskInfo.ArbitrationRule == ArbitrationRule.Visit)
{ {
//找到 访视,裁判 所有有效任务(不可能有全局的) 访视和裁判任务的SourceSubjectVisitId 一样 //找到 检查批次,裁判 所有有效任务(不可能有全局的) 检查批次和裁判任务的SourceSubjectVisitId 一样
var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect &&
(t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
@ -581,11 +581,11 @@ namespace IRaCIS.Core.Application.Service
//仲裁在阅片期 //仲裁在阅片期
else if (taskInfo.ArbitrationRule == ArbitrationRule.Reading) else if (taskInfo.ArbitrationRule == ArbitrationRule.Reading)
{ {
//是访视任务 不可能是裁判任务(访视上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null //是检查批次任务 不可能是裁判任务(检查批次上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null
if (taskInfo.SourceSubjectVisitId != null) if (taskInfo.SourceSubjectVisitId != null)
{ {
//访视类型的任务 根本就不需要发送邮件 //检查批次类型的任务 根本就不需要发送邮件
isNeedSend = false; isNeedSend = false;
@ -648,7 +648,7 @@ namespace IRaCIS.Core.Application.Service
////单重 ////单重
//else if (taskInfo.ReadingType == ReadingMethod.Single) //else if (taskInfo.ReadingType == ReadingMethod.Single)
//{ //{
// //仲裁在访视上 或者在阅片期 // //仲裁在检查批次上 或者在阅片期
// if (taskInfo.ArbitrationRule != ArbitrationRule.None) // if (taskInfo.ArbitrationRule != ArbitrationRule.None)
// { // {
@ -656,21 +656,21 @@ namespace IRaCIS.Core.Application.Service
// } // }
// //要求PD 确认的访视 是截止访视 还是非截止访视(根据该访视有没有配置阅片期来判断) // //要求PD 确认的检查批次 是截止检查批次 还是非截止检查批次(根据该检查批次有没有配置阅片期来判断)
// if (taskInfo.ReadingCategory == ReadingCategory.Visit) // if (taskInfo.ReadingCategory == ReadingCategory.Visit)
// { // {
// //存在阅片期 那么就是截止访视 // //存在阅片期 那么就是截止检查批次
// if (await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync()) // if (await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
// { // {
// isNeedSend = false; // isNeedSend = false;
// } // }
// else//非截止访视 在访视读完后,发送 // else//非截止检查批次 在检查批次读完后,发送
// { // {
// answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit, taskInfo.CriterionType); // answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit, taskInfo.CriterionType);
// } // }
// } // }
// //截止访视 在访视读完,并完成全局阅片后发送全局的结果 // //截止检查批次 在检查批次读完,并完成全局阅片后发送全局的结果
// else if (taskInfo.ReadingCategory == ReadingCategory.Global) // else if (taskInfo.ReadingCategory == ReadingCategory.Global)
// { // {
// answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Global, taskInfo.CriterionType); // answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Global, taskInfo.CriterionType);
@ -715,10 +715,10 @@ namespace IRaCIS.Core.Application.Service
// isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, new List<Guid>() { visitTaskId }, minUserIdList); // isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, new List<Guid>() { visitTaskId }, minUserIdList);
// } // }
// //双重 截止访视只在阅片期的时候存在 要求PD确认的访视 肯定是非截止访视 // //双重 截止检查批次只在阅片期的时候存在 要求PD确认的检查批次 肯定是非截止检查批次
// else if (taskInfo.ReadingType == ReadingMethod.Double && taskInfo.ArbitrationRule == ArbitrationRule.Visit) // else if (taskInfo.ReadingType == ReadingMethod.Double && taskInfo.ArbitrationRule == ArbitrationRule.Visit)
// { // {
// //在两位阅片人读完访视后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完 // //在两位阅片人读完检查批次后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完
// var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect // var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect
// && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); // && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
@ -748,7 +748,7 @@ namespace IRaCIS.Core.Application.Service
// } // }
// else // else
// { // {
// throw new BusinessValidationFailedException("无序阅片配置有误(应为单重无仲裁对象,双重针对访视仲裁),请核查!"); // throw new BusinessValidationFailedException("无序阅片配置有误(应为单重无仲裁对象,双重针对检查批次仲裁),请核查!");
// } // }
//} //}
@ -884,7 +884,7 @@ namespace IRaCIS.Core.Application.Service
var trialConfig = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.IsEnrollementQualificationConfirm, t.Trial.IsPDProgressView }).FirstNotNullAsync(); var trialConfig = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.IsEnrollementQualificationConfirm, t.Trial.IsPDProgressView }).FirstNotNullAsync();
//找到入组确认 或者Pd 进展 已生成任务的 访视 //找到入组确认 或者Pd 进展 已生成任务的 检查批次
var subjectVisitList = await _subjectVisitRepository.Where(t => t.SubjectId == subjectId & t.CheckState == CheckStateEnum.CVPassed && (t.IsEnrollmentConfirm == true || t.PDState == PDStateEnum.PDProgress)).ToListAsync(); var subjectVisitList = await _subjectVisitRepository.Where(t => t.SubjectId == subjectId & t.CheckState == CheckStateEnum.CVPassed && (t.IsEnrollmentConfirm == true || t.PDState == PDStateEnum.PDProgress)).ToListAsync();
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed) if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
@ -898,7 +898,7 @@ namespace IRaCIS.Core.Application.Service
var exisitBaseline = subjectVisitList.FirstOrDefault(t => t.IsEnrollmentConfirm); var exisitBaseline = subjectVisitList.FirstOrDefault(t => t.IsEnrollmentConfirm);
if (exisitBaseline == null) if (exisitBaseline == null)
{ {
return ResponseOutput.NotOk("不存在配置了入组确认的并且生成任务的基线访视"); return ResponseOutput.NotOk("不存在配置了入组确认的并且生成任务的基线检查批次");
} }
else else
{ {
@ -949,13 +949,13 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.NotOk("项目未配置PD进展"); return ResponseOutput.NotOk("项目未配置PD进展");
} }
//是否是截止访视 截止访视在全局发 否则就在当前访视 //是否是截止检查批次 截止检查批次在全局发 否则就在当前检查批次
var pdSubjectVisitIdList = subjectVisitList.Where(t => t.PDState == PDStateEnum.PDProgress).OrderBy(t => t.VisitNum).Select(t => (Guid?)t.Id).ToList(); var pdSubjectVisitIdList = subjectVisitList.Where(t => t.PDState == PDStateEnum.PDProgress).OrderBy(t => t.VisitNum).Select(t => (Guid?)t.Id).ToList();
if (pdSubjectVisitIdList.Count == 0) if (pdSubjectVisitIdList.Count == 0)
{ {
return ResponseOutput.NotOk("不存在配置了PD进展的并且生成任务的访视"); return ResponseOutput.NotOk("不存在配置了PD进展的并且生成任务的检查批次");
} }
@ -967,10 +967,10 @@ namespace IRaCIS.Core.Application.Service
// 项目双重 // 项目双重
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double && trialReadingCriterionConfig.IsReadingTaskViewInOrder) if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double && trialReadingCriterionConfig.IsReadingTaskViewInOrder)
{ {
//仲裁在访视上面 //仲裁在检查批次上面
if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Visit) if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Visit)
{ {
//在两位阅片人读完访视后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完 //在两位阅片人读完检查批次后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完
var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == currentLatestPdVisitId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == currentLatestPdVisitId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false
&& t.TaskState == TaskState.Effect && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); && t.TaskState == TaskState.Effect && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
@ -999,7 +999,7 @@ namespace IRaCIS.Core.Application.Service
} }
else else
{ {
return ResponseOutput.NotOk("当前受试者最新PD访视阅片任务完成状态不符合发送条件"); return ResponseOutput.NotOk("当前患者最新PD检查批次阅片任务完成状态不符合发送条件");
} }
} }
@ -1011,7 +1011,7 @@ namespace IRaCIS.Core.Application.Service
if (existReadModule == null) if (existReadModule == null)
{ {
return ResponseOutput.NotOk("项目配置了阅片期仲裁,但是当前受试者最新PD访视没有影像学阅片期"); return ResponseOutput.NotOk("项目配置了阅片期仲裁,但是当前患者最新PD检查批次没有影像学阅片期");
} }
else else
{ {
@ -1045,7 +1045,7 @@ namespace IRaCIS.Core.Application.Service
else else
{ {
return ResponseOutput.NotOk("当前受试者最新PD访视阅片期任务完成状态不符合发送条件"); return ResponseOutput.NotOk("当前患者最新PD检查批次阅片期任务完成状态不符合发送条件");
} }
} }
@ -1058,7 +1058,7 @@ namespace IRaCIS.Core.Application.Service
} }
#region 发送邮件屏蔽单重阅片情况 #region 发送邮件屏蔽单重阅片情况
//// 项目单重 判断最新的Pd 访视是否完成 是否有阅片期即可 //// 项目单重 判断最新的Pd 检查批次是否完成 是否有阅片期即可
//else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single) //else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
//{ //{
@ -1070,11 +1070,11 @@ namespace IRaCIS.Core.Application.Service
// if (task == null) // if (task == null)
// { // {
// return ResponseOutput.NotOk("当前受试者最新PD访视任务未阅片完成"); // return ResponseOutput.NotOk("当前患者最新PD检查批次任务未阅片完成");
// } // }
// else // else
// { // {
// //存在阅片期 那么就是截止访视 // //存在阅片期 那么就是截止检查批次
// var existReadModule = await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading) // var existReadModule = await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
// .FirstOrDefaultAsync(); // .FirstOrDefaultAsync();
@ -1093,11 +1093,11 @@ namespace IRaCIS.Core.Application.Service
// } // }
// else // else
// { // {
// return ResponseOutput.NotOk("当前受试者阅片期任务未阅片完成"); // return ResponseOutput.NotOk("当前者阅片期任务未阅片完成");
// } // }
// } // }
// else//非截止访视 在访视读完后,发送 // else//非截止检查批次 在检查批次读完后,发送
// { // {
// var filePath = await BaseBusinessScenarioSendEmailAsync(task.Id, true, EmailStoreSendMode.OnlyStoreLocalNotSentEmail, string.Empty); // var filePath = await BaseBusinessScenarioSendEmailAsync(task.Id, true, EmailStoreSendMode.OnlyStoreLocalNotSentEmail, string.Empty);
@ -1199,7 +1199,7 @@ namespace IRaCIS.Core.Application.Service
//} //}
else else
{ {
throw new BusinessValidationFailedException("不应有 除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑"); throw new BusinessValidationFailedException("不应有 除检查批次、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
} }
if (answer == OverallAssessment.PD.GetEnumInt()) if (answer == OverallAssessment.PD.GetEnumInt())
@ -1238,7 +1238,7 @@ namespace IRaCIS.Core.Application.Service
//} //}
else else
{ {
throw new BusinessValidationFailedException("不应有 除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑"); throw new BusinessValidationFailedException("不应有 除检查批次、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
} }
if (answer == VisitTumorEvaluation.PD.GetEnumInt()) if (answer == VisitTumorEvaluation.PD.GetEnumInt())

View File

@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.Services
if (imageShareCommand.StudyId == null) if (imageShareCommand.StudyId == null)
{ {
#region 上传不按照访视上传,基线没传,数据可能出错 #region 上传不按照检查批次上传,基线没传,数据可能出错
//var subjectVisit1 = _subjectVisitRepository.FirstOrDefault(t => //var subjectVisit1 = _subjectVisitRepository.FirstOrDefault(t =>
// t.TrialId == imageShareCommand.TrialId && t.SubjectId == imageShareCommand.SubjectId && // t.TrialId == imageShareCommand.TrialId && t.SubjectId == imageShareCommand.SubjectId &&

View File

@ -345,8 +345,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// <summary> /// <summary>
/// 获取某个检查的关联检查列表(该受试者在这个想项目下的所有检查) /// 获取某个检查的关联检查列表(该者在这个想项目下的所有检查)
/// 点击检查检查列表中的一个检查获取对应的序列列表(调用之前的接口:/series/list/根据StudyId获取访视的序列列表) /// 点击检查检查列表中的一个检查获取对应的序列列表(调用之前的接口:/series/list/根据StudyId获取检查批次的序列列表)
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("{subjectVisitId:guid}")] [HttpGet("{subjectVisitId:guid}")]
@ -418,21 +418,21 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
if (trialInfo.IsVerifyVisitImageDate) if (trialInfo.IsVerifyVisitImageDate)
{ {
//小于当前访视 最近的最晚拍片 //小于当前检查批次 最近的最晚拍片
var before = visitList.Where(u => u.VisitNum < verifyInfo.VisitNum).Max(k => k.LatestScanDate); var before = visitList.Where(u => u.VisitNum < verifyInfo.VisitNum).Max(k => k.LatestScanDate);
if (before != null && waitUploadItem.StudyDate != null && before > waitUploadItem.StudyDate) if (before != null && waitUploadItem.StudyDate != null && before > waitUploadItem.StudyDate)
{ {
result.Add(new VerifyStudyUploadResult() { ErrorMesseage = $"当前访视检查时间{waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")}不能早于前序访视检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误", StudyInstanceUid = waitUploadItem.StudyInstanceUid }); result.Add(new VerifyStudyUploadResult() { ErrorMesseage = $"当前检查批次检查时间{waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")}不能早于前序检查批次检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误", StudyInstanceUid = waitUploadItem.StudyInstanceUid });
return; return;
} }
//大于当前访视 最近的最早拍片日期 //大于当前检查批次 最近的最早拍片日期
var after = visitList.Where(u => u.VisitNum > verifyInfo.VisitNum).Min(k => k.EarliestScanDate); var after = visitList.Where(u => u.VisitNum > verifyInfo.VisitNum).Min(k => k.EarliestScanDate);
if (after != null && waitUploadItem.StudyDate != null && after < waitUploadItem.StudyDate) if (after != null && waitUploadItem.StudyDate != null && after < waitUploadItem.StudyDate)
{ {
result.Add(new VerifyStudyUploadResult() { ErrorMesseage = $"当前访视检查时间{waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")}不能晚于该访视之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误", StudyInstanceUid = waitUploadItem.StudyInstanceUid }); result.Add(new VerifyStudyUploadResult() { ErrorMesseage = $"当前检查批次检查时间{waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")}不能晚于该检查批次之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误", StudyInstanceUid = waitUploadItem.StudyInstanceUid });
return; return;
} }
} }
@ -468,7 +468,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
result.AllowReUpload = false; result.AllowReUpload = false;
result.StudyInstanceUid = studyInstanceUid; result.StudyInstanceUid = studyInstanceUid;
result.ErrorMesseage = "受试者访视结束,不允许上传!"; result.ErrorMesseage = "患者检查批次结束,不允许上传!";
return result; return result;
} }
@ -489,12 +489,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
//数据库该项目有该检查 看是否支持重传 //数据库该项目有该检查 看是否支持重传
else else
{ {
//是同一个受试者 支持重传 //是同一个者 支持重传
if (verifyStudyInfo.SubjectId == SubjectId && verifyStudyInfo.SubjectVisitId == currentSubjectVisitId) if (verifyStudyInfo.SubjectId == SubjectId && verifyStudyInfo.SubjectVisitId == currentSubjectVisitId)
{ {
result.AllowReUpload = true; result.AllowReUpload = true;
} }
//不是同一个受试 //不是同一个
else else
{ {
//有默认值,其实不用写,这里为了好理解 //有默认值,其实不用写,这里为了好理解
@ -502,7 +502,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
result.AllowReUpload = false; result.AllowReUpload = false;
result.ErrorMesseage = $"此处不可以上传。当前影像检查已经上传给受试者{verifyStudyInfo.SubjectCode}的{verifyStudyInfo.VisitName}"; result.ErrorMesseage = $"此处不可以上传。当前影像检查已经上传给者{verifyStudyInfo.SubjectCode}的{verifyStudyInfo.VisitName}";
} }
} }
result.StudyInstanceUid = studyInstanceUid; result.StudyInstanceUid = studyInstanceUid;

View File

@ -66,12 +66,12 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
public string SiteName { get; set; } = string.Empty; public string SiteName { get; set; } = string.Empty;
/// <summary> /// <summary>
/// 受试者Code /// 者Code
/// </summary> /// </summary>
public string SubjectCode { get; set; } = string.Empty; public string SubjectCode { get; set; } = string.Empty;
/// <summary> /// <summary>
/// 访视名称 /// 检查批次名称
/// </summary> /// </summary>
public string SubjectVisitName { get; set; } = string.Empty; public string SubjectVisitName { get; set; } = string.Empty;
@ -100,7 +100,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
public string Identification { get; set; } = string.Empty; public string Identification { get; set; } = string.Empty;
/// <summary> /// <summary>
/// 访视计划ID /// 检查批次计划ID
/// </summary> /// </summary>
public Guid? VisitStageId { get; set; } public Guid? VisitStageId { get; set; }
@ -302,7 +302,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
} }
#endregion #endregion
#region 受试 #region
public class InsSubjectCommand : InspectionBase, IInspectionDTO, ISignDTO public class InsSubjectCommand : InspectionBase, IInspectionDTO, ISignDTO
{ {
public SubjectCommand OptCommand { get; set; } public SubjectCommand OptCommand { get; set; }
@ -435,7 +435,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
public Guid? SiteId { get; set; } public Guid? SiteId { get; set; }
/// <summary> /// <summary>
/// 受试 ///
/// </summary> /// </summary>
public string SubjectInfo { get; set; } = string.Empty; public string SubjectInfo { get; set; } = string.Empty;

View File

@ -498,10 +498,6 @@ namespace IRaCIS.Application.Services
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(User)); saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(User));
if (saveItem.IsZhiZhun)
{
saveItem.OrganizationName = AppSettings.DefaultInternalOrganizationName;
}
saveItem.Password = MD5Helper.Md5("123456"); saveItem.Password = MD5Helper.Md5("123456");
@ -541,11 +537,6 @@ namespace IRaCIS.Application.Services
_mapper.Map(model, user); _mapper.Map(model, user);
//if (user.IsZhiZhun)
//{
// user.OrganizationName = AppSettings.DefaultInternalOrganizationName;
//}
var success = await _userRepository.SaveChangesAsync(); var success = await _userRepository.SaveChangesAsync();

View File

@ -9,7 +9,7 @@ using IRaCIS.Core.Application.Service;
namespace IRaCIS.Core.Application.Contracts namespace IRaCIS.Core.Application.Contracts
{ {
/// <summary> /// <summary>
///受试者临床信息 ///者临床信息
/// </summary> /// </summary>
[ApiExplorerSettings(GroupName = "Image")] [ApiExplorerSettings(GroupName = "Image")]
public class ClinicalDataService : BaseService, IClinicalDataService public class ClinicalDataService : BaseService, IClinicalDataService
@ -39,7 +39,7 @@ namespace IRaCIS.Core.Application.Contracts
/// <summary> /// <summary>
/// 获取访视+受试者级别的数据 /// 获取检查批次+患者级别的数据
/// </summary> /// </summary>
/// <param ></param> /// <param ></param>
/// <returns></returns> /// <returns></returns>

View File

@ -67,7 +67,7 @@ namespace IRaCIS.Core.Application.Contracts
/// <summary> /// <summary>
/// 是否是访视 /// 是否是检查批次
/// </summary> /// </summary>
public bool? IsVisist { get; set; } public bool? IsVisist { get; set; }
@ -92,7 +92,7 @@ namespace IRaCIS.Core.Application.Contracts
public Guid? TrialId { get; set; } public Guid? TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }
} }
@ -108,7 +108,7 @@ namespace IRaCIS.Core.Application.Contracts
public string FileName { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty;
/// <summary> /// <summary>
/// 是否是访视 /// 是否是检查批次
/// </summary> /// </summary>
public bool? IsVisist { get; set; } public bool? IsVisist { get; set; }
@ -133,7 +133,7 @@ namespace IRaCIS.Core.Application.Contracts
public Guid? TrialId { get; set; } public Guid? TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }
} }

View File

@ -337,7 +337,7 @@ namespace IRaCIS.Core.Application.Contracts
///// <summary> ///// <summary>
///// 任务展示访视 读片任务显示是否顺序 ///// 任务展示检查批次 读片任务显示是否顺序
///// </summary> ///// </summary>
//public bool IsReadingTaskViewInOrder { get; set; } = true; //public bool IsReadingTaskViewInOrder { get; set; } = true;
} }
@ -356,7 +356,7 @@ namespace IRaCIS.Core.Application.Contracts
//审核状态 //审核状态
public AuditStateEnum AuditState { get; set; } public AuditStateEnum AuditState { get; set; }
//阅片期或者访视 //阅片期或者检查批次
public string ReadingPeriodName { get; set; } public string ReadingPeriodName { get; set; }
@ -410,7 +410,7 @@ namespace IRaCIS.Core.Application.Contracts
[Column(TypeName = "decimal(18,2)")] [Column(TypeName = "decimal(18,2)")]
public decimal VisitTaskNum { get; set; } public decimal VisitTaskNum { get; set; }
//访视会有 //检查批次会有
public bool? Inplan { get; set; } public bool? Inplan { get; set; }
public bool? IsLostVisit { get; set; } public bool? IsLostVisit { get; set; }

View File

@ -40,6 +40,5 @@ namespace IRaCIS.Core.Application.Image.QA
Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId); Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId);
Task<IResponseOutput> ForwardSVDicomImage(Guid[] subjectVisitIdList);
} }
} }

View File

@ -63,21 +63,21 @@ namespace IRaCIS.Core.Application.Service
//小于当前访视 最近的最晚拍片 //小于当前检查批次 最近的最晚拍片
var before = visitList.Where(u => u.VisitNum < currentVisitNum).Max(k => k.LatestScanDate); var before = visitList.Where(u => u.VisitNum < currentVisitNum).Max(k => k.LatestScanDate);
if (before != null && before > imageDate) if (before != null && before > imageDate)
{ {
throw new BusinessValidationFailedException($"当前访视检查时间{imageDate.ToString("yyyy-MM-dd")}不能早于前序访视检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"); throw new BusinessValidationFailedException($"当前检查批次检查时间{imageDate.ToString("yyyy-MM-dd")}不能早于前序检查批次检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误");
} }
//大于当前访视 最近的最早拍片日期 //大于当前检查批次 最近的最早拍片日期
var after = visitList.Where(u => u.VisitNum > currentVisitNum).Min(k => k.EarliestScanDate); var after = visitList.Where(u => u.VisitNum > currentVisitNum).Min(k => k.EarliestScanDate);
if (after != null && after < imageDate) if (after != null && after < imageDate)
{ {
throw new BusinessValidationFailedException($"当前访视检查时间{imageDate.ToString("yyyy-MM-dd")}不能晚于该访视之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"); throw new BusinessValidationFailedException($"当前检查批次检查时间{imageDate.ToString("yyyy-MM-dd")}不能晚于该检查批次之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误");
} }
} }

View File

@ -44,7 +44,7 @@ namespace IRaCIS.Core.Application.Image.QA
#region CRC上传、质疑页面 #region CRC上传、质疑页面
/// <summary> /// <summary>
/// CRC 访视上传列表 /// CRC 检查批次上传列表
/// </summary> /// </summary>
/// <param name="visitSearchDTO"></param> /// <param name="visitSearchDTO"></param>
/// <returns></returns> /// <returns></returns>
@ -261,7 +261,7 @@ namespace IRaCIS.Core.Application.Image.QA
} }
/// <summary> /// <summary>
/// QC 访视列表 /// QC 检查批次列表
/// </summary> /// </summary>
/// <param name="visitSearchDTO"></param> /// <param name="visitSearchDTO"></param>
/// <returns></returns> /// <returns></returns>
@ -299,7 +299,7 @@ namespace IRaCIS.Core.Application.Image.QA
//{ //{
// var visitInfo = visitSearchDTO.VisitPlanInfo.Trim(); // var visitInfo = visitSearchDTO.VisitPlanInfo.Trim();
// if (visitInfo.Contains('.')) // 包含小数点的是计划外访视 // if (visitInfo.Contains('.')) // 包含小数点的是计划外检查批次
// { // {
// subjectVisitLambda = subjectVisitLambda.And(t => t.VisitNum.ToString().Contains(".")); // subjectVisitLambda = subjectVisitLambda.And(t => t.VisitNum.ToString().Contains("."));
// } // }
@ -589,10 +589,10 @@ namespace IRaCIS.Core.Application.Image.QA
#region QC 具体质控页面 各种列表 #region QC 具体质控页面 各种列表
/// <summary> /// <summary>
/// 获取某次访视 QA界面所有信息 单独每一项都有接口(往下看),这里是一个大接口,方便第一次获取完整的所有的数据 /// 获取某次检查批次 QA界面所有信息 单独每一项都有接口(往下看),这里是一个大接口,方便第一次获取完整的所有的数据
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <param name="trialQCProcess">项目配置的针对访视检查是那种审核0 不审1 单审2双审</param> /// <param name="trialQCProcess">项目配置的针对检查批次检查是那种审核0 不审1 单审2双审</param>
/// <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param> /// <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param>
[HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
@ -666,11 +666,11 @@ namespace IRaCIS.Core.Application.Image.QA
} }
/// <summary> /// <summary>
/// 获取某次访视 QC 问题核对答案 列表 初始化进去的时候是模板项QC填写了就是对应的内容 /// 获取某次检查批次 QC 问题核对答案 列表 初始化进去的时候是模板项QC填写了就是对应的内容
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <param name="trialQCProcess">项目配置的针对访视检查是那种审核0 不审1 单审2双审</param> /// <param name="trialQCProcess">项目配置的针对检查批次检查是那种审核0 不审1 单审2双审</param>
/// <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param> /// <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param>
[HttpGet("{trialId:guid}/{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [HttpGet("{trialId:guid}/{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
@ -699,7 +699,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// 获次QC 历史质疑列表 不分页 /// 获次QC 历史质疑列表 不分页
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <param name="trialQCProcess">项目配置的针对访视检查是那种审核0 不审1 单审2双审</param> /// <param name="trialQCProcess">项目配置的针对检查批次检查是那种审核0 不审1 单审2双审</param>
/// <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param> /// <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param>
[HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
@ -715,7 +715,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 获取访视下的受试者访视、受试者、site信息 /// 获取检查批次下的患者检查批次、患者、site信息
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <returns></returns> /// <returns></returns>
@ -730,7 +730,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 访视下的Study 和Series列表 /// 检查批次下的Study 和Series列表
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <returns></returns> /// <returns></returns>
@ -748,7 +748,7 @@ namespace IRaCIS.Core.Application.Image.QA
} }
/// <summary> /// <summary>
/// 访视下的检查列表 /// 检查批次下的检查列表
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <returns></returns> /// <returns></returns>
@ -786,7 +786,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// CRC/PM 看到某次访视下的所有质疑和聊天内容 包括初审和复审的 。 /// CRC/PM 看到某次检查批次下的所有质疑和聊天内容 包括初审和复审的 。
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <param name="trialQCProcess"></param> /// <param name="trialQCProcess"></param>
@ -856,7 +856,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 添加计划外访视 下拉框 选择上一次访视 /// 添加计划外检查批次 下拉框 选择上一次检查批次
/// </summary> /// </summary>
/// <param name="subjectId"></param> /// <param name="subjectId"></param>
/// <returns></returns> /// <returns></returns>
@ -869,7 +869,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 上传界面 受试者 访视、site 基本信息 /// 上传界面 患者 检查批次、site 基本信息
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -6,7 +6,6 @@ using MediatR;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Data; using System.Data;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using WinSCP;
using Newtonsoft.Json; using Newtonsoft.Json;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.DTO;
@ -100,7 +99,7 @@ namespace IRaCIS.Core.Application.Image.QA
{ {
if (await _qcChallengeRepository.AnyAsync(t => t.IsClosed == false && t.SubjectVisitId == qaQuestionCommand.SubjectVisitId && t.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload)) if (await _qcChallengeRepository.AnyAsync(t => t.IsClosed == false && t.SubjectVisitId == qaQuestionCommand.SubjectVisitId && t.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))
{ {
throw new BusinessValidationFailedException("当前访视未关闭的质疑已设置了同意CRC重传影像。请在CRC完成影像重传后先关闭原质疑再添加新的质疑。"); throw new BusinessValidationFailedException("当前检查批次未关闭的质疑已设置了同意CRC重传影像。请在CRC完成影像重传后先关闭原质疑再添加新的质疑。");
} }
@ -309,7 +308,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (sv.RequestBackState == RequestBackStateEnum.CRC_RequestBack) if (sv.RequestBackState == RequestBackStateEnum.CRC_RequestBack)
{ {
ResponseOutput.NotOk("当前访视处于申请回退状态, 不允许关闭质疑。"); ResponseOutput.NotOk("当前检查批次处于申请回退状态, 不允许关闭质疑。");
} }
@ -348,7 +347,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack) if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack)
{ {
ResponseOutput.NotOk("当前访视处于回退状态,不允许设置一致性核查通过"); ResponseOutput.NotOk("当前检查批次处于回退状态,不允许设置一致性核查通过");
} }
if (sv.CheckChallengeState != CheckChanllengeTypeEnum.Closed && sv.AuditState == AuditStateEnum.QCPassed) if (sv.CheckChallengeState != CheckChanllengeTypeEnum.Closed && sv.AuditState == AuditStateEnum.QCPassed)
@ -386,7 +385,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (sv.CheckState == CheckStateEnum.CVPassed) if (sv.CheckState == CheckStateEnum.CVPassed)
{ {
return ResponseOutput.NotOk("当前访视已通过一致性核查,不允许申请回退"); return ResponseOutput.NotOk("当前检查批次已通过一致性核查,不允许申请回退");
} }
var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync(); var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
@ -464,7 +463,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (sv.CheckState == CheckStateEnum.CVPassed || sv.CheckState == CheckStateEnum.ToCheck) if (sv.CheckState == CheckStateEnum.CVPassed || sv.CheckState == CheckStateEnum.ToCheck)
{ {
return ResponseOutput.NotOk("当前访视还未进行核查或者核查已通过,不允许设置回退。"); return ResponseOutput.NotOk("当前检查批次还未进行核查或者核查已通过,不允许设置回退。");
} }
//sv.CheckChallengeState = (int)CheckChanllengeTypeEnum.None; //sv.CheckChallengeState = (int)CheckChanllengeTypeEnum.None;
@ -723,7 +722,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false)) if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
{ {
return ResponseOutput.NotOk("当前访视有质疑未关闭,不允许该操作"); return ResponseOutput.NotOk("当前检查批次有质疑未关闭,不允许该操作");
} }
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }
@ -860,7 +859,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake == false) if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake == false)
{ {
return ResponseOutput.NotOk("当前访视的影像质控任务已被原领取人释放。您可以通过“领取”获得", ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk("当前检查批次的影像质控任务已被原领取人释放。您可以通过“领取”获得", ApiResponseCodeEnum.NeedTips);
} }
@ -902,9 +901,9 @@ namespace IRaCIS.Core.Application.Image.QA
{ {
if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake) if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake)
{ {
//throw new BusinessValidationFailedException("当前访视已被领取,不允许领取"); //throw new BusinessValidationFailedException("当前检查批次已被领取,不允许领取");
return ResponseOutput.NotOk("当前访视的影像质控任务已被其他QC领取不允许领取", ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk("当前检查批次的影像质控任务已被其他QC领取不允许领取", ApiResponseCodeEnum.NeedTips);
} }
@ -921,7 +920,7 @@ namespace IRaCIS.Core.Application.Image.QA
// )) // ))
//{ //{
// return ResponseOutput.NotOk("您已经领取了其他受试者,完成后才允许领取新的受试者"); // return ResponseOutput.NotOk("您已经领取了其他患者,完成后才允许领取新的患者");
//} //}
#region 处理验证 #region 处理验证
@ -1011,7 +1010,7 @@ namespace IRaCIS.Core.Application.Image.QA
else else
{ {
return ResponseOutput.NotOk("当前访视影像质控任务没有当前领取人,不能释放。"); return ResponseOutput.NotOk("当前检查批次影像质控任务没有当前领取人,不能释放。");
} }
} }
else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit) else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit)
@ -1030,7 +1029,7 @@ namespace IRaCIS.Core.Application.Image.QA
else else
{ {
return ResponseOutput.NotOk("当前访视影像质控任务没有当前领取人, 不能释放"); return ResponseOutput.NotOk("当前检查批次影像质控任务没有当前领取人, 不能释放");
} }
} }
@ -1064,7 +1063,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (nameList.Count() > 0) if (nameList.Count() > 0)
{ {
return ResponseOutput.NotOk($"当前访视要求进行疾病进展确认。请在提交当前访视前,先处理未提交的前序访视{string.Join('、', nameList)}。", 1, ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk($"当前检查批次要求进行疾病进展确认。请在提交当前检查批次前,先处理未提交的前序检查批次{string.Join('、', nameList)}。", 1, ApiResponseCodeEnum.NeedTips);
} }
} }
else else
@ -1072,7 +1071,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (nameList.Count() > 0) if (nameList.Count() > 0)
{ {
return ResponseOutput.NotOk($"在提交当前访视后,请尽快处理尚未提交的前序访视{string.Join('、', nameList)}。", 0, ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk($"在提交当前检查批次后,请尽快处理尚未提交的前序检查批次{string.Join('、', nameList)}。", 0, ApiResponseCodeEnum.NeedTips);
} }
} }
} }
@ -1120,17 +1119,17 @@ namespace IRaCIS.Core.Application.Image.QA
if (dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.None)) if (dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.None))
{ {
return ResponseOutput.NotOk("有访视未上传任何Dicom/非Dicom影像数据不允许提交"); return ResponseOutput.NotOk("有检查批次未上传任何Dicom/非Dicom影像数据不允许提交");
} }
//单个提交提示信息 //单个提交提示信息
if (dbSubjectVisitList.Count() == 1 && dbSubjectVisitList.First().SubmitState == SubmitStateEnum.Submitted) if (dbSubjectVisitList.Count() == 1 && dbSubjectVisitList.First().SubmitState == SubmitStateEnum.Submitted)
{ {
return ResponseOutput.NotOk("当前访视的影像数据已经由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk("当前检查批次的影像数据已经由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
} }
else if (dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.Submitted)) else if (dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.Submitted))
{ {
return ResponseOutput.NotOk("当前批量提交访视的影像数据其中部分已由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk("当前批量提交检查批次的影像数据其中部分已由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
} }
//获取确认的临床数据配置 //获取确认的临床数据配置
@ -1143,7 +1142,7 @@ namespace IRaCIS.Core.Application.Image.QA
//基线不验证 //基线不验证
if (trialConfig.IsHaveFirstGiveMedicineDate && !dbSubjectVisit.IsBaseLine && dbSubjectVisit.Subject.FirstGiveMedicineTime == null) if (trialConfig.IsHaveFirstGiveMedicineDate && !dbSubjectVisit.IsBaseLine && dbSubjectVisit.Subject.FirstGiveMedicineTime == null)
{ {
return ResponseOutput.NotOk("项目配置了需要填写访视基准日期。但是受试者没有填写访视基准日期,不允许提交"); return ResponseOutput.NotOk("项目配置了需要填写检查批次基准日期。但是患者没有填写检查批次基准日期,不允许提交");
} }
//基线 且配置了临床数据 //基线 且配置了临床数据
@ -1215,7 +1214,7 @@ namespace IRaCIS.Core.Application.Image.QA
var maxVisit = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.SubmitState == SubmitStateEnum.Submitted) var maxVisit = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.SubmitState == SubmitStateEnum.Submitted)
.OrderByDescending(t => t.VisitNum).Select(t => new { t.Id, t.VisitNum }).FirstOrDefaultAsync(); .OrderByDescending(t => t.VisitNum).Select(t => new { t.Id, t.VisitNum }).FirstOrDefaultAsync();
//修改受试者最新访视 //修改患者最新检查批次
dbSubjectVisit.Subject.LatestSubjectVisitId = maxVisit == null ? dbSubjectVisit.Id : maxVisit.VisitNum < dbSubjectVisit.VisitNum ? dbSubjectVisit.Id : maxVisit.Id; dbSubjectVisit.Subject.LatestSubjectVisitId = maxVisit == null ? dbSubjectVisit.Id : maxVisit.VisitNum < dbSubjectVisit.VisitNum ? dbSubjectVisit.Id : maxVisit.Id;
//var maxVisitNum = maxVisit == null ? dbSubjectVisit.VisitNum : maxVisit.VisitNum < dbSubjectVisit.VisitNum ? dbSubjectVisit.VisitNum : maxVisit.VisitNum; //var maxVisitNum = maxVisit == null ? dbSubjectVisit.VisitNum : maxVisit.VisitNum < dbSubjectVisit.VisitNum ? dbSubjectVisit.VisitNum : maxVisit.VisitNum;
@ -1223,7 +1222,7 @@ namespace IRaCIS.Core.Application.Image.QA
////判断是否有缺失影像 ////判断是否有缺失影像
//dbSubjectVisit.Subject.IsMissingImages = await _subjectVisitRepository.AnyAsync(t => (t.VisitNum < maxVisitNum && t.SubmitState != SubmitStateEnum.Submitted && t.IsLostVisit == false)); //dbSubjectVisit.Subject.IsMissingImages = await _subjectVisitRepository.AnyAsync(t => (t.VisitNum < maxVisitNum && t.SubmitState != SubmitStateEnum.Submitted && t.IsLostVisit == false));
//项目或者Subject IsUrgent 提交时 访视也设置为紧急 //项目或者Subject IsUrgent 提交时 检查批次也设置为紧急
if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.PDState == PDStateEnum.PDProgress && !dbSubjectVisit.IsBaseLine) || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine)) if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.PDState == PDStateEnum.PDProgress && !dbSubjectVisit.IsBaseLine) || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine))
{ {
if (dbSubjectVisit.PDState == PDStateEnum.PDProgress) if (dbSubjectVisit.PDState == PDStateEnum.PDProgress)
@ -1237,7 +1236,7 @@ namespace IRaCIS.Core.Application.Image.QA
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&& await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&&
dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的访视 全局 裁判 及之前 全都加急 dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的检查批次 全局 裁判 及之前 全都加急
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
{ {
@ -1247,13 +1246,13 @@ namespace IRaCIS.Core.Application.Image.QA
}); });
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId
&& x.VisitTaskNum < dbSubjectVisit.VisitNum // 当前的访视 全局 裁判 及之前 全都加急 && x.VisitTaskNum < dbSubjectVisit.VisitNum // 当前的检查批次 全局 裁判 及之前 全都加急
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
{ {
IsUrgent = true, IsUrgent = true,
TaskUrgentType = TaskUrgentType.Other, TaskUrgentType = TaskUrgentType.Other,
TaskUrgentRemake= "后续访视设为pd", TaskUrgentRemake= "后续检查批次设为pd",
IsCanEditUrgentState = false, IsCanEditUrgentState = false,
}); });
} }
@ -1265,7 +1264,7 @@ namespace IRaCIS.Core.Application.Image.QA
}); });
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) &&
x.VisitTaskNum>= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 全都加急 x.VisitTaskNum>= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的检查批次 全局 裁判 全都加急
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
{ {
@ -1277,7 +1276,7 @@ namespace IRaCIS.Core.Application.Image.QA
else else
{ {
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) &&
x.VisitTaskNum >= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 全都加急 x.VisitTaskNum >= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的检查批次 全局 裁判 全都加急
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
{ {
@ -1289,7 +1288,7 @@ namespace IRaCIS.Core.Application.Image.QA
dbSubjectVisit.IsUrgent = true; dbSubjectVisit.IsUrgent = true;
//PD确认的紧急会把前面所有未QC完成的访视均标记为紧急 //PD确认的紧急会把前面所有未QC完成的检查批次均标记为紧急
var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync(); var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync();
@ -1346,7 +1345,7 @@ namespace IRaCIS.Core.Application.Image.QA
dbSubjectVisit.AuditState = AuditStateEnum.ToAudit; dbSubjectVisit.AuditState = AuditStateEnum.ToAudit;
} }
//非基线设置为PD的话 或者设置为末次访视 根据配置自动生成阅片期 //非基线设置为PD的话 或者设置为末次检查批次 根据配置自动生成阅片期
if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit) ) if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit) )
{ {
@ -1413,7 +1412,7 @@ namespace IRaCIS.Core.Application.Image.QA
//判断质疑是否都关闭了 //判断质疑是否都关闭了
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false)) if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
{ {
return ResponseOutput.NotOk("当前访视有影像质控质疑未关闭,不能进行此操作。"); return ResponseOutput.NotOk("当前检查批次有影像质控质疑未关闭,不能进行此操作。");
} }
} }
@ -1487,7 +1486,7 @@ namespace IRaCIS.Core.Application.Image.QA
} }
else else
{ {
return ResponseOutput.NotOk("项目配置影像质控为单审,当前访视影像质控任务不能从当前审核状态变更到 审核通过。"); return ResponseOutput.NotOk("项目配置影像质控为单审,当前检查批次影像质控任务不能从当前审核状态变更到 审核通过。");
} }
@ -1617,7 +1616,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 设置、取消 访视紧急 /// 设置、取消 检查批次紧急
/// </summary> /// </summary>
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
@ -1689,7 +1688,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (await _qcChallengeRepository.CountAsync(t => t.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload && t.SubjectVisitId == qcChallenge.SubjectVisitId && t.IsClosed == false) >= 1) if (await _qcChallengeRepository.CountAsync(t => t.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload && t.SubjectVisitId == qcChallenge.SubjectVisitId && t.IsClosed == false) >= 1)
{ {
return ResponseOutput.NotOk("当前访视,有一个未关闭的质疑 QC设置了同意重传CRC还未完成上传当前不允许再次设置"); return ResponseOutput.NotOk("当前检查批次,有一个未关闭的质疑 QC设置了同意重传CRC还未完成上传当前不允许再次设置");
} }
@ -1869,7 +1868,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <summary> /// <summary>
/// 上传界面 更新受试者访视基准日期 是否入组确认,以及访视 是否PD进展 /// 上传界面 更新患者检查批次基准日期 是否入组确认,以及检查批次 是否PD进展
/// </summary> /// </summary>
/// <param name="command"></param> /// <param name="command"></param>
/// <returns></returns> /// <returns></returns>
@ -1887,13 +1886,13 @@ namespace IRaCIS.Core.Application.Image.QA
if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId) if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId)
.AnyAsync(t => t.SubmitState == SubmitStateEnum.Submitted && t.IsEnrollmentConfirm != command.IsEnrollmentConfirm)) .AnyAsync(t => t.SubmitState == SubmitStateEnum.Submitted && t.IsEnrollmentConfirm != command.IsEnrollmentConfirm))
{ {
return ResponseOutput.NotOk("该访视已提交,不能修改入组确认状态"); return ResponseOutput.NotOk("该检查批次已提交,不能修改入组确认状态");
} }
if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId) if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId)
.AnyAsync(t => t.IsEnrollmentConfirm != command.IsEnrollmentConfirm && t.RequestBackState == RequestBackStateEnum.PM_AgressBack)) .AnyAsync(t => t.IsEnrollmentConfirm != command.IsEnrollmentConfirm && t.RequestBackState == RequestBackStateEnum.PM_AgressBack))
{ {
return ResponseOutput.NotOk("该访视为回退访视不允许修改PD确认状态"); return ResponseOutput.NotOk("该检查批次为回退检查批次不允许修改PD确认状态");
} }
dbSubjectVisit.IsEnrollmentConfirm = command.IsEnrollmentConfirm.Value; dbSubjectVisit.IsEnrollmentConfirm = command.IsEnrollmentConfirm.Value;
@ -1911,108 +1910,6 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPost("{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> ForwardSVDicomImage(Guid[] subjectVisitIdList)
{
bool isSuccess = false;
foreach (var subjectVisitId in subjectVisitIdList)
{
var info = (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo<DicomTrialSiteSubjectInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName;
var path = FileStoreHelper.GetSubjectVisitDicomFolderPhysicalPath(_hostEnvironment, info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId);
try
{
// 主机及端口信息后面可以改到 配置文件
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
PortNumber = 8022,
HostName = "CS-690-sftp.mint-imaging.com",
UserName = "zdong",
Password = "Everest@2021",
SshHostKeyFingerprint = @"ecdsa-sha2-nistp384 384 59gkjJ5lMwv3jsB8Wz2B35tBAIor5pSd8PcJYtoamPo="
};
using (Session session = new Session())
{
var studyFolders = (new DirectoryInfo(path)).GetDirectories();
session.Open(sessionOptions);
if (!session.FileExists(targetPath))
{
session.CreateDirectory(targetPath);
}
foreach (var studyFolder in studyFolders)
{
var targetFolder = Path.Combine(targetPath, studyFolder.Name);
if (!session.FileExists(targetFolder))
{
session.CreateDirectory(targetFolder);
}
foreach (var file in studyFolder.GetFiles())
{
if (file.Extension.Contains("dcm", StringComparison.OrdinalIgnoreCase))
{
string remoteFilePath =
RemotePath.TranslateLocalPathToRemote(file.FullName, studyFolder.FullName, targetFolder);
var result = session.PutFiles(file.FullName, remoteFilePath, false);
if (!result.IsSuccess)
{
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisitId,
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
return ResponseOutput.NotOk("转发影像失败。" + result.Failures.ToString() + result.ToJson());
}
}
}
}
}
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId,
u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded, ForwardUserId = _userInfo.Id, ForwardTime = DateTime.Now });
isSuccess = true;
}
catch (Exception e)
{
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId,
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
return ResponseOutput.NotOk("转发影像失败: " + e.Message);
}
}
await _subjectVisitRepository.SaveChangesAsync();
return isSuccess ? ResponseOutput.Ok() : ResponseOutput.NotOk("转发影像失败。");
}
} }
} }

View File

@ -326,14 +326,14 @@ namespace IRaCIS.Core.Application.Service
CreateMap<CheckChallengeDialogCommand, CheckChallengeDialog>(); CreateMap<CheckChallengeDialogCommand, CheckChallengeDialog>();
CreateMap<PreviousPDFAddOrEdit, PreviousPDF>().ReverseMap(); CreateMap<PreviousPDFAddOrEdit, PreviousPDF>().ReverseMap();
//受试者临床数据 添加编辑 //者临床数据 添加编辑
CreateMap<PreviousHistoryAddOrEdit, PreviousHistory>().ReverseMap(); CreateMap<PreviousHistoryAddOrEdit, PreviousHistory>().ReverseMap();
CreateMap<PreviousOtherAddOrEdit, PreviousOther>().ReverseMap(); CreateMap<PreviousOtherAddOrEdit, PreviousOther>().ReverseMap();
CreateMap<PreviousSurgeryAddOrEdit, PreviousSurgery>().ReverseMap(); CreateMap<PreviousSurgeryAddOrEdit, PreviousSurgery>().ReverseMap();
// 受试者临床数据 视图映射 // 者临床数据 视图映射
Guid subjectVisitId = Guid.Empty; Guid subjectVisitId = Guid.Empty;
CreateMap<SubjectVisit, SubjectClinicalDataDto>() CreateMap<SubjectVisit, SubjectClinicalDataDto>()
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
@ -423,7 +423,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)); .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode));
//QC 界面 受试者 site 基本信息 展平的属性 比如 SubjectAge => Subject.Age //QC 界面 者 site 基本信息 展平的属性 比如 SubjectAge => Subject.Age
CreateMap<SubjectVisit, QARelationInfo>().IncludeMembers(t => t.Subject) CreateMap<SubjectVisit, QARelationInfo>().IncludeMembers(t => t.Subject)
.ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.Id)) .ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.Id))
.ForMember(d => d.SubjectName, u => u.MapFrom(s => s.Subject.ShortName)) .ForMember(d => d.SubjectName, u => u.MapFrom(s => s.Subject.ShortName))

View File

@ -87,7 +87,7 @@ namespace IRaCIS.Application.Services
} }
var clinicalDataTrialSet = (await _clinicalDataTrialSetRepository.Where(x => x.Id == indto.ClinicalDataTrialSetId).FirstOrDefaultAsync()).IfNullThrowException(); var clinicalDataTrialSet = (await _clinicalDataTrialSetRepository.Where(x => x.Id == indto.ClinicalDataTrialSetId).FirstOrDefaultAsync()).IfNullThrowException();
//subject 或者访视级别的 都是在访视 //subject 或者检查批次级别的 都是在检查批次
indto.IsVisit = clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit; indto.IsVisit = clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit;
if (indto.Id == null) if (indto.Id == null)
@ -337,7 +337,7 @@ namespace IRaCIS.Application.Services
if (needSignCount == haveSignedCount /*&& needSignCount != 0*/) if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
{ {
//将该标准 该subject 该访视 任务临床数据状态变更 //将该标准 该subject 该检查批次 任务临床数据状态变更
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SourceSubjectVisitId == readingId, u => new VisitTask() await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SourceSubjectVisitId == readingId, u => new VisitTask()
{ {
IsClinicalDataSign = true IsClinicalDataSign = true
@ -495,7 +495,7 @@ namespace IRaCIS.Application.Services
/// <summary> /// <summary>
/// 获取访视 阅片或任务临床数据 /// 获取检查批次 阅片或任务临床数据
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -195,12 +195,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
/// <summary> /// <summary>
/// 访视或者阅片ID /// 检查批次或者阅片ID
/// </summary> /// </summary>
public Guid VisitOrReadId { get; set; } public Guid VisitOrReadId { get; set; }
} }

View File

@ -20,7 +20,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string? TrialSiteCode { get; set; } public string? TrialSiteCode { get; set; }
/// <summary> /// <summary>
/// 受试者Code /// 者Code
/// </summary> /// </summary>
public string? SubjectCode { get; set; } public string? SubjectCode { get; set; }
@ -63,7 +63,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public ReadingSetType ReadingSetType { get; set; } public ReadingSetType ReadingSetType { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
@ -81,17 +81,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public DateTime? ExpirationDate { get; set; } public DateTime? ExpirationDate { get; set; }
/// <summary> /// <summary>
/// 截止访视 /// 截止检查批次
/// </summary> /// </summary>
public decimal? ExpirationVisitNum { get; set; } public decimal? ExpirationVisitNum { get; set; }
/// <summary> /// <summary>
/// 访视计划ID /// 检查批次计划ID
/// </summary> /// </summary>
public Guid? VisitStageId { get; set; } public Guid? VisitStageId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
@ -124,12 +124,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者Id /// 者Id
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
/// <summary> /// <summary>
/// 访视Id /// 检查批次Id
/// </summary> /// </summary>
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
@ -162,13 +162,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public ModuleTypeEnum ModuleType { get; set; } public ModuleTypeEnum ModuleType { get; set; }
/// <summary> /// <summary>
/// 访视ID /// 检查批次ID
/// </summary> /// </summary>
public Guid? SubjectVisitId { get; set; } public Guid? SubjectVisitId { get; set; }
/// <summary> /// <summary>
/// 访视名称 /// 检查批次名称
/// </summary> /// </summary>
public string SubjectVisitName { get; set; } public string SubjectVisitName { get; set; }
@ -297,7 +297,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class SubjectVisitPlanView public class SubjectVisitPlanView
{ {
/// <summary> /// <summary>
/// Id(阅片期Id 或者 访视ID) /// Id(阅片期Id 或者 检查批次ID)
/// </summary> /// </summary>
public Guid Id { get; set; } public Guid Id { get; set; }

View File

@ -16,12 +16,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
/// <summary> /// <summary>
/// 访视或者阅片ID /// 检查批次或者阅片ID
/// </summary> /// </summary>
public Guid VisitOrReadId { get; set; } public Guid VisitOrReadId { get; set; }
} }

View File

@ -30,7 +30,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public decimal PresentSod { get; set; } public decimal PresentSod { get; set; }
/// <summary> /// <summary>
/// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在) /// 是否存在靶病灶 (当前检查批次 至少一个靶病灶的状态为存在)
/// </summary> /// </summary>
public bool ExistsTargetLesion { get; set; } public bool ExistsTargetLesion { get; set; }
@ -60,22 +60,22 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool SODPercentLess30 { get; set; } public bool SODPercentLess30 { get; set; }
/// <summary> /// <summary>
/// SOD 百分比 整体访视期间SOD最低点SOD相比增加20% /// SOD 百分比 整体检查批次期间SOD最低点SOD相比增加20%
/// </summary> /// </summary>
public bool LowSODPercentLess20 { get; set; } public bool LowSODPercentLess20 { get; set; }
/// <summary> /// <summary>
/// SOD 百分比 比整体访视期间最低点SOD增加≥20% /// SOD 百分比 比整体检查批次期间最低点SOD增加≥20%
/// </summary> /// </summary>
public bool LowSODPercentBigger20 { get; set; } public bool LowSODPercentBigger20 { get; set; }
/// <summary> /// <summary>
/// SOD 变化值 比整体访视期间最低点SOD绝对增加值5 mm /// SOD 变化值 比整体检查批次期间最低点SOD绝对增加值5 mm
/// </summary> /// </summary>
public bool LowSODChangeLess5 { get; set; } public bool LowSODChangeLess5 { get; set; }
/// <summary> /// <summary>
/// 比整体访视期间最低点SOD绝对增加值≥5 mm /// 比整体检查批次期间最低点SOD绝对增加值≥5 mm
/// </summary> /// </summary>
public bool LowSODChangeBigger5 { get; set; } public bool LowSODChangeBigger5 { get; set; }
@ -85,12 +85,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool ExixtsNETargetLesion { get; set; } public bool ExixtsNETargetLesion { get; set; }
/// <summary> /// <summary>
/// 上次访视点整体肿瘤评估 /// 上次检查批次点整体肿瘤评估
/// </summary> /// </summary>
public string LastTargetLesionEvaluate { get; set; } public string LastTargetLesionEvaluate { get; set; }
/// <summary> /// <summary>
/// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 /// 当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
/// </summary> /// </summary>
public bool CurrentMajoreBigger0 { get; set; } public bool CurrentMajoreBigger0 { get; set; }

View File

@ -21,7 +21,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
@ -36,7 +36,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid ClinicalDataTrialSetId { get; set; } public Guid ClinicalDataTrialSetId { get; set; }
/// <summary> /// <summary>
/// 是否是访视 /// 是否是检查批次
/// </summary> /// </summary>
public bool IsVisit { get; set; } public bool IsVisit { get; set; }
@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
} }
/// <summary> /// <summary>
/// 获取访视列表 /// 获取检查批次列表
/// </summary> /// </summary>
public class GetReadingClinicalDataListIndto public class GetReadingClinicalDataListIndto
{ {
@ -205,7 +205,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 是否是访视 /// 是否是检查批次
/// </summary> /// </summary>
public bool IsVisit { get; set; } public bool IsVisit { get; set; }
@ -241,7 +241,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string FileName { get; set; } public string FileName { get; set; }
/// <summary> /// <summary>
/// 是否为访视 /// 是否为检查批次
/// </summary> /// </summary>
public bool IsVisit { get; set; } public bool IsVisit { get; set; }
@ -271,7 +271,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string FileName { get; set; } public string FileName { get; set; }
/// <summary> /// <summary>
/// 是否为访视 /// 是否为检查批次
/// </summary> /// </summary>
public bool IsVisit { get; set; } public bool IsVisit { get; set; }
} }
@ -301,7 +301,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// <summary> /// <summary>
/// 访视Id 或者模块Id /// 检查批次Id 或者模块Id
/// </summary> /// </summary>
public Guid ReadingId { get; set; } public Guid ReadingId { get; set; }
@ -443,7 +443,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }
/// <summary> /// <summary>
/// 是否是访视 /// 是否是检查批次
/// </summary> /// </summary>
public bool IsVisit { get; set; } public bool IsVisit { get; set; }

View File

@ -574,7 +574,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public decimal TaskNum { get; set; } public decimal TaskNum { get; set; }
/// <summary> /// <summary>
/// 任务盲态名称 和访视盲态一样 /// 任务盲态名称 和检查批次盲态一样
/// </summary> /// </summary>
public string BlindName { get; set; } public string BlindName { get; set; }
@ -1275,7 +1275,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool IsReadingShowPreviousResults { get; set; } = false; public bool IsReadingShowPreviousResults { get; set; } = false;
/// <summary> /// <summary>
/// 任务展示访视 读片任务显示是否顺序 /// 任务展示检查批次 读片任务显示是否顺序
/// </summary> /// </summary>
public bool IsReadingTaskViewInOrder { get; set; } = true; public bool IsReadingTaskViewInOrder { get; set; } = true;

View File

@ -157,13 +157,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public ReadingTool? ReadingTool { get; set; } public ReadingTool? ReadingTool { get; set; }
/// <summary> /// <summary>
/// 任务展示访视 读片任务显示是否顺序 /// 任务展示检查批次 读片任务显示是否顺序
/// </summary> /// </summary>
public bool IsReadingTaskViewInOrder { get; set; } = true; public bool IsReadingTaskViewInOrder { get; set; } = true;
/// <summary> /// <summary>
/// 阅片是否显示受试者信息 /// 阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } = false; public bool IsReadingShowSubjectInfo { get; set; } = false;

View File

@ -38,12 +38,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public DateTime? ExpirationDate { get; set; } public DateTime? ExpirationDate { get; set; }
/// <summary> /// <summary>
/// 截止访视 /// 截止检查批次
/// </summary> /// </summary>
public decimal? ExpirationVisitNum { get; set; } public decimal? ExpirationVisitNum { get; set; }
/// <summary> /// <summary>
/// 访视计划ID /// 检查批次计划ID
/// </summary> /// </summary>
public Guid? VisitStageId { get; set; } public Guid? VisitStageId { get; set; }
@ -70,7 +70,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid ReadingPeriodSetId { get; set; } public Guid ReadingPeriodSetId { get; set; }
/// <summary> /// <summary>
/// 访视ID /// 检查批次ID
/// </summary> /// </summary>
public List<Guid> SubjectVisitIds { get; set; } public List<Guid> SubjectVisitIds { get; set; }
} }
@ -107,12 +107,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public DateTime? ExpirationDate { get; set; } public DateTime? ExpirationDate { get; set; }
/// <summary> /// <summary>
/// 截止访视 /// 截止检查批次
/// </summary> /// </summary>
public decimal? ExpirationVisitNum { get; set; } public decimal? ExpirationVisitNum { get; set; }
/// <summary> /// <summary>
/// 访视计划ID /// 检查批次计划ID
/// </summary> /// </summary>
public Guid? VisitStageId { get; set; } public Guid? VisitStageId { get; set; }
@ -145,17 +145,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string TrialSiteCode { get; set; } public string TrialSiteCode { get; set; }
/// <summary> /// <summary>
/// 访视Id /// 检查批次Id
/// </summary> /// </summary>
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
/// <summary> /// <summary>
/// 受试者Id /// 者Id
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
/// <summary> /// <summary>
/// 受试者名称 /// 者名称
/// </summary> /// </summary>
public string SubjectCode { get; set; } public string SubjectCode { get; set; }
@ -221,12 +221,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public DateTime? ExpirationDate { get; set; } public DateTime? ExpirationDate { get; set; }
/// <summary> /// <summary>
/// 截止访视 /// 截止检查批次
/// </summary> /// </summary>
public decimal? ExpirationVisitNum { get; set; } public decimal? ExpirationVisitNum { get; set; }
/// <summary> /// <summary>
/// 访视计划ID /// 检查批次计划ID
/// </summary> /// </summary>
public Guid? VisitStageId { get; set; } public Guid? VisitStageId { get; set; }
@ -322,7 +322,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{ {
/// <summary> /// <summary>
/// 截止访视 /// 截止检查批次
/// </summary> /// </summary>
public decimal? ExpirationVisitNum { get; set; } public decimal? ExpirationVisitNum { get; set; }

View File

@ -274,7 +274,7 @@ namespace IRaCIS.Core.Application.Service
var taskIds = medicalReviewInfo.TaskList.Select(x => x.TaskId).ToList(); var taskIds = medicalReviewInfo.TaskList.Select(x => x.TaskId).ToList();
// 找访视 // 找检查批次
var visitTaskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => taskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo var visitTaskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => taskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo
{ {
Answer = x.Answer, Answer = x.Answer,

View File

@ -258,7 +258,7 @@ namespace IRaCIS.Application.Services
var globalReadingQuestion = await _readingGlobalTaskInfoRepository.Where(x => x.GlobalTaskId == inDto.VisitTaskId).ToListAsync(); var globalReadingQuestion = await _readingGlobalTaskInfoRepository.Where(x => x.GlobalTaskId == inDto.VisitTaskId).ToListAsync();
var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.CriterionType).FirstOrDefaultAsync(); var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.CriterionType).FirstOrDefaultAsync();
// Before的Answer取自于 上一次全局阅片的结果, 如果没有上一次全局阅片的结果 取访视的答案 // Before的Answer取自于 上一次全局阅片的结果, 如果没有上一次全局阅片的结果 取检查批次的答案
var lastGlobalTask = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Global && var lastGlobalTask = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Global &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&

View File

@ -438,7 +438,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> /// <summary>
/// 获取阅片的受试者信息 /// 获取阅片的者信息
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -473,7 +473,7 @@ namespace IRaCIS.Application.Services
/// <summary> /// <summary>
/// 验证是否为基线访视任务 /// 验证是否为基线检查批次任务
/// </summary> /// </summary>
/// <param name="visitTaskId"></param> /// <param name="visitTaskId"></param>
/// <returns></returns> /// <returns></returns>
@ -519,7 +519,7 @@ namespace IRaCIS.Application.Services
#endregion #endregion
#region 访视任务 - Dicom 阅片 表格问题相关查询 #region 检查批次任务 - Dicom 阅片 表格问题相关查询
/// <summary> /// <summary>
@ -1038,7 +1038,7 @@ namespace IRaCIS.Application.Services
#region 访视任务 - Dicom 阅片 表格问题 病灶的拆分与合并 #region 检查批次任务 - Dicom 阅片 表格问题 病灶的拆分与合并
/// <summary> /// <summary>
@ -1152,7 +1152,7 @@ namespace IRaCIS.Application.Services
#region 访视任务 - Dicom 阅片 提交、修改 #region 检查批次任务 - Dicom 阅片 提交、修改
/// <summary> /// <summary>
/// 保存影像质量 /// 保存影像质量
@ -1375,12 +1375,12 @@ namespace IRaCIS.Application.Services
switch (taskinfo.TrialReadingCriterion.CriterionType) switch (taskinfo.TrialReadingCriterion.CriterionType)
{ {
// 对于非靶病灶,如果状态选择为显著增大,请验证: // 对于非靶病灶,如果状态选择为显著增大,请验证:
// 1 对于非淋巴结病灶,验证当前访视该病灶的长径 > 上一访视该病灶的长径。 // 1 对于非淋巴结病灶,验证当前检查批次该病灶的长径 > 上一检查批次该病灶的长径。
// 约束条件:两次访视该病灶的长径有测量值。 // 约束条件:两次检查批次该病灶的长径有测量值。
// 提示语:当前访视该非淋巴结病灶的长径小于上一访视的值,不能设置为显著增大。 // 提示语:当前检查批次该非淋巴结病灶的长径小于上一检查批次的值,不能设置为显著增大。
// 2 对于淋巴结病灶,验证当前访视该病灶的短径 > 上一访视该病灶的短径。 // 2 对于淋巴结病灶,验证当前检查批次该病灶的短径 > 上一检查批次该病灶的短径。
// 约束条件:两次访视该病灶的短径有测量值。 // 约束条件:两次检查批次该病灶的短径有测量值。
// 提示语:当前访视该淋巴结病灶的短径小于上一访视的值,不能设置为显著增大。 // 提示语:当前检查批次该淋巴结病灶的短径小于上一检查批次的值,不能设置为显著增大。
case CriterionType.RECIST1Pointt1: case CriterionType.RECIST1Pointt1:
var lastTaskinfo = await _visitTaskRepository var lastTaskinfo = await _visitTaskRepository
.Where(x => x.IsAnalysisCreate == taskinfo.IsAnalysisCreate && .Where(x => x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
@ -1875,7 +1875,7 @@ namespace IRaCIS.Application.Services
/// <summary> /// <summary>
/// 验证访视提交 /// 验证检查批次提交
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -2315,7 +2315,7 @@ namespace IRaCIS.Application.Services
{ {
// ****** 先生成阅片期 阅片期任务阅片完成之后生成肿瘤学的 如果没有阅片期 直接生成肿瘤学 *********//// // ****** 先生成阅片期 阅片期任务阅片完成之后生成肿瘤学的 如果没有阅片期 直接生成肿瘤学 *********////
#region 建立关系 #region 建立关系
// 访视阅完产生 全局 // 检查批次阅完产生 全局
Dictionary<ModuleTypeEnum, ReadingCategory> typeChangeDic = new Dictionary<ModuleTypeEnum, ReadingCategory>(); Dictionary<ModuleTypeEnum, ReadingCategory> typeChangeDic = new Dictionary<ModuleTypeEnum, ReadingCategory>();
typeChangeDic.Add(ModuleTypeEnum.InPlanSubjectVisit, ReadingCategory.Visit); typeChangeDic.Add(ModuleTypeEnum.InPlanSubjectVisit, ReadingCategory.Visit);
typeChangeDic.Add(ModuleTypeEnum.OutPlanSubjectVisit, ReadingCategory.Visit); typeChangeDic.Add(ModuleTypeEnum.OutPlanSubjectVisit, ReadingCategory.Visit);

View File

@ -124,7 +124,7 @@ namespace IRaCIS.Application.Services
{ {
case ReadingCategory.Visit: case ReadingCategory.Visit:
// 判断是否是全局访视任务 // 判断是否是全局检查批次任务
if (await VerifyIsGlobalVisitTask(taskList[0].Id)) if (await VerifyIsGlobalVisitTask(taskList[0].Id))
{ {
@ -308,7 +308,7 @@ namespace IRaCIS.Application.Services
if (criterionType != CriterionType.PCWG3) if (criterionType != CriterionType.PCWG3)
{ {
// 加全局是否更新 和访视点注释 PCWG3不要 // 加全局是否更新 和检查批次点注释 PCWG3不要
judgeReadingQuestion.JudgeQuestionList.Add(new JudgeQuestion() judgeReadingQuestion.JudgeQuestionList.Add(new JudgeQuestion()
{ {
Answer = item.AfterQuestionList.Any(x => x.IsHaveChange), Answer = item.AfterQuestionList.Any(x => x.IsHaveChange),
@ -349,7 +349,7 @@ namespace IRaCIS.Application.Services
if (criterionType != CriterionType.PCWG3) if (criterionType != CriterionType.PCWG3)
{ {
// 加全局是否更新 和访视点注释 // 加全局是否更新 和检查批次点注释
rTwoJudge.JudgeQuestionList.Add(new JudgeQuestion() rTwoJudge.JudgeQuestionList.Add(new JudgeQuestion()
{ {
Answer = twoItem.AfterQuestionList.Any(x => x.IsHaveChange), Answer = twoItem.AfterQuestionList.Any(x => x.IsHaveChange),
@ -458,7 +458,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> /// <summary>
/// 判断任务是否是全局访视任务 /// 判断任务是否是全局检查批次任务
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task<bool> VerifyIsGlobalVisitTask(Guid visitTaskId) private async Task<bool> VerifyIsGlobalVisitTask(Guid visitTaskId)
@ -572,11 +572,11 @@ namespace IRaCIS.Application.Services
{ {
switch (visitTask.ReadingCategory) switch (visitTask.ReadingCategory)
{ {
// 访视 // 检查批次
case ReadingCategory.Visit: case ReadingCategory.Visit:
// 判断是单访视裁判还是全局访视裁判 // 判断是单检查批次裁判还是全局检查批次裁判
// 查找两个 访视的阅片答案 // 查找两个 检查批次的阅片答案
if (await VerifyIsGlobalVisitTask(visitTask.Id)) if (await VerifyIsGlobalVisitTask(visitTask.Id))
{ {
// 找到所有的的任务 // 找到所有的的任务
@ -798,7 +798,7 @@ namespace IRaCIS.Application.Services
(visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Visit) (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Visit)
|| (visitTask.SouceReadModuleId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading) || (visitTask.SouceReadModuleId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading)
// 全局访视任务仲裁 // 全局检查批次任务仲裁
|| (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading && criterionInfo.IsReadingPeriod && !criterionInfo.IsGlobalReading) || (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading && criterionInfo.IsReadingPeriod && !criterionInfo.IsGlobalReading)

View File

@ -16,7 +16,7 @@ namespace IRaCIS.Application.Services
public partial class ReadingImageTaskService : BaseService, IReadingImageTaskService public partial class ReadingImageTaskService : BaseService, IReadingImageTaskService
{ {
/// <summary> /// <summary>
/// 提交访视阅片问题 /// 提交检查批次阅片问题
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -92,7 +92,7 @@ namespace IRaCIS.Application.Services
}); });
// 找到对应的访视 // 找到对应的检查批次
List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x => List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x =>
x.TrialId == taskInfo.TrialId && x.TrialId == taskInfo.TrialId &&
x.SubjectId == taskInfo.SubjectId && x.SubjectId == taskInfo.SubjectId &&

View File

@ -215,7 +215,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> /// <summary>
/// 添加阅片的时候 获取访视 //标准参数必传 /// 添加阅片的时候 获取检查批次 //标准参数必传
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -271,7 +271,7 @@ namespace IRaCIS.Application.Services
if (await _readModuleRepository.AnyAsync(x => x.SubjectVisitId == visit.Id&&x.ModuleType== moduleType && x.TrialReadingCriterionId == dto.TrialReadingCriterionId)) if (await _readModuleRepository.AnyAsync(x => x.SubjectVisitId == visit.Id&&x.ModuleType== moduleType && x.TrialReadingCriterionId == dto.TrialReadingCriterionId))
{ {
throw new BusinessValidationFailedException($"当前访视已经添加过阅片期"); throw new BusinessValidationFailedException($"当前检查批次已经添加过阅片期");
} }
var readModuleData = new ReadModule() var readModuleData = new ReadModule()
{ {
@ -391,7 +391,7 @@ namespace IRaCIS.Application.Services
} }
else else
{ {
return ResponseOutput.NotOk("未找到符合要求的访视"); return ResponseOutput.NotOk("未找到符合要求的检查批次");
} }
@ -421,7 +421,7 @@ namespace IRaCIS.Application.Services
//增加标准 //增加标准
if (readModule.ModuleType==ModuleTypeEnum.Global&&(await _readModuleRepository.AnyAsync(x=>x.ModuleType==ModuleTypeEnum.Oncology&&x.SubjectVisitId== readModule.SubjectVisitId && x.TrialReadingCriterionId==readModule.TrialReadingCriterionId))) if (readModule.ModuleType==ModuleTypeEnum.Global&&(await _readModuleRepository.AnyAsync(x=>x.ModuleType==ModuleTypeEnum.Oncology&&x.SubjectVisitId== readModule.SubjectVisitId && x.TrialReadingCriterionId==readModule.TrialReadingCriterionId)))
{ {
throw new BusinessValidationFailedException("当前访视存在肿瘤学阅片,请先删除肿瘤学阅片"); throw new BusinessValidationFailedException("当前检查批次存在肿瘤学阅片,请先删除肿瘤学阅片");
} }
if (await _visitTaskRepository.AnyAsync(x => readModuleId==x.SouceReadModuleId)) if (await _visitTaskRepository.AnyAsync(x => readModuleId==x.SouceReadModuleId))

View File

@ -422,7 +422,7 @@ namespace IRaCIS.Application.Services
pageList.CurrentPageData.ForEach(x => pageList.CurrentPageData.ForEach(x =>
{ {
x.SubjectVisitName = x.IsGlobal ? "末次访视" : x.SubjectVisitName; x.SubjectVisitName = x.IsGlobal ? "末次检查批次" : x.SubjectVisitName;
}); });
return pageList; return pageList;
} }
@ -441,7 +441,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> /// <summary>
/// 获取阅片期配置的截至访视的下拉框 (增加标准搜索,已修改) /// 获取阅片期配置的截至检查批次的下拉框 (增加标准搜索,已修改)
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -492,7 +492,7 @@ namespace IRaCIS.Application.Services
.WhereIf(inDto.ReadingScope == ReadingScopeEnum.Site, x => inDto.SiteIds.Contains(x.SiteId)) .WhereIf(inDto.ReadingScope == ReadingScopeEnum.Site, x => inDto.SiteIds.Contains(x.SiteId))
.Where(x=>!x.IsBaseLine);// 排除基线 .Where(x=>!x.IsBaseLine);// 排除基线
// 已经存在的访视 需要排除 // 已经存在的检查批次 需要排除
var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId); var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId);
visitQuery = visitQuery.Where(x => !existsBubjectVisitsQuery.Contains(x.Id)) visitQuery = visitQuery.Where(x => !existsBubjectVisitsQuery.Contains(x.Id))

View File

@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Contracts
public Guid TUId { get; set; } public Guid TUId { get; set; }
public int LesionType { get; set; } //病灶类型 public int LesionType { get; set; } //病灶类型
public string STUDYID { get; set; } = string.Empty; // 项目ID public string STUDYID { get; set; } = string.Empty; // 项目ID
public string USUBJID { get; set; } = string.Empty;// 受试者ID public string USUBJID { get; set; } = string.Empty;// 者ID
public int TUSEQ { get; set; } // 病灶序号 public int TUSEQ { get; set; } // 病灶序号
// 病灶分组,主要是用于将分裂或者结合在一起的已经被标识的肿瘤分类 // 病灶分组,主要是用于将分裂或者结合在一起的已经被标识的肿瘤分类
@ -49,7 +49,7 @@ namespace IRaCIS.Core.Application.Contracts
public string TUEVALID { get; set; } = string.Empty;//这个特定的评估者变量是与 TUEVAL一起使用来提供更详 细的信息 public string TUEVALID { get; set; } = string.Empty;//这个特定的评估者变量是与 TUEVAL一起使用来提供更详 细的信息
public string TUACPTFL { get; set; } = string.Empty; public string TUACPTFL { get; set; } = string.Empty;
// 访视信息 // 检查批次信息
public decimal VISITNUM { get; set; } = 0; public decimal VISITNUM { get; set; } = 0;
public string VISIT { get; set; } = string.Empty; public string VISIT { get; set; } = string.Empty;
public int VISITDY { get; set; } public int VISITDY { get; set; }
@ -102,7 +102,7 @@ namespace IRaCIS.Core.Application.Contracts
} }
public class VisitLesionInfo public class VisitLesionInfo
{ {
//基线病灶信息及本次访视测量信息 //基线病灶信息及本次检查批次测量信息
public IList<VisitLesion> BLLesionList { get; set; } = new List<VisitLesion>(); public IList<VisitLesion> BLLesionList { get; set; } = new List<VisitLesion>();
// public IList<LesionInformation> BLVisitLesionList { get; set; } = new List<LesionInformation>(); // public IList<LesionInformation> BLVisitLesionList { get; set; } = new List<LesionInformation>();
//public IList<LesionInformation> CurrentVisitLesionList { get; set; } = new List<LesionInformation>(); //public IList<LesionInformation> CurrentVisitLesionList { get; set; } = new List<LesionInformation>();

View File

@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Contracts
//IList<LesionInformation> GetBLLesion(string trialCode, string subjectCode); //IList<LesionInformation> GetBLLesion(string trialCode, string subjectCode);
/// <summary> /// <summary>
/// 获取访视病灶信息 /// 获取检查批次病灶信息
/// </summary> /// </summary>
VisitLesionInfo GetVisitLineLesion(string trialCode, string subjectCode, decimal visitNum,string tpCode); VisitLesionInfo GetVisitLineLesion(string trialCode, string subjectCode, decimal visitNum,string tpCode);

View File

@ -177,7 +177,7 @@
// return result; // return result;
// } // }
// /// 获取其他访视病灶信息 // /// 获取其他检查批次病灶信息
// [AllowAnonymous] // [AllowAnonymous]
// [HttpGet, Route("getVisitLineLesion/{trialCode}/{subjectCode}/{visitNum:decimal}/{tpCode}")] // [HttpGet, Route("getVisitLineLesion/{trialCode}/{subjectCode}/{visitNum:decimal}/{tpCode}")]
// public VisitLesionInfo GetVisitLineLesion(string trialCode, string subjectCode, decimal visitNum, string tpCode) // public VisitLesionInfo GetVisitLineLesion(string trialCode, string subjectCode, decimal visitNum, string tpCode)
@ -230,7 +230,7 @@
// tempLesion.TUSEQ = tempLesion.CurrentLesion.TUSEQ; // tempLesion.TUSEQ = tempLesion.CurrentLesion.TUSEQ;
// visitLesionInfo.BLLesionList.Add(tempLesion); // visitLesionInfo.BLLesionList.Add(tempLesion);
// } // }
// // 以往新病灶病灶类型为5访视编号小于当前访视,且不是基线 // // 以往新病灶病灶类型为5检查批次编号小于当前检查批次,且不是基线
// var previousLesion = list.Where(u => u.VISITNUM < visitNum && u.VISITNUM != 1 && u.LesionType == 5).ToList(); // var previousLesion = list.Where(u => u.VISITNUM < visitNum && u.VISITNUM != 1 && u.LesionType == 5).ToList();
// foreach (var item in previousLesion) // foreach (var item in previousLesion)
// { // {
@ -308,7 +308,7 @@
// [HttpPost("{tpId:guid}")] // [HttpPost("{tpId:guid}")]
// public bool SubmiteReport(Guid tpId) // public bool SubmiteReport(Guid tpId)
// { // {
// // 提交报告 同时查询VisitStage项目访视计划,看是否需要添加全局) // // 提交报告 同时查询VisitStage项目检查批次计划,看是否需要添加全局)
// var query = from workloadTp in _workloadTPRepository.Where(u => u.Id == tpId) // var query = from workloadTp in _workloadTPRepository.Where(u => u.Id == tpId)
// join subjectVisit in _subjectVisitRepository.AsQueryable() // join subjectVisit in _subjectVisitRepository.AsQueryable()
@ -371,7 +371,7 @@
// Status = (int)WorkloadStatus.Reading // Status = (int)WorkloadStatus.Reading
// }); // });
// //序号按照每个项目、每个受试者、每个评估者,一条记录 // //序号按照每个项目、每个者、每个评估者,一条记录
// TU lastTu = _tURepository.Where(u => u.STUDYID == addedLesion.STUDYID && u.USUBJID == addedLesion.USUBJID // TU lastTu = _tURepository.Where(u => u.STUDYID == addedLesion.STUDYID && u.USUBJID == addedLesion.USUBJID
// && u.TUEVAL == addedLesion.TUEVAL).OrderByDescending("TUSEQ").FirstOrDefault(); // && u.TUEVAL == addedLesion.TUEVAL).OrderByDescending("TUSEQ").FirstOrDefault();
// int tuSeq = 101; // int tuSeq = 101;
@ -529,7 +529,7 @@
// } // }
// /// <summary> // /// <summary>
// /// 添加访视报告信息 // /// 添加检查批次报告信息
// /// LesionInformation 为新病灶及测量信息(包括分裂及合并产生的) // /// LesionInformation 为新病灶及测量信息(包括分裂及合并产生的)
// /// TRList 已经存在的病灶的测量信息 // /// TRList 已经存在的病灶的测量信息
// /// RSList 疗效信息 // /// RSList 疗效信息

View File

@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.ViewModel
public class VisitStudyTime public class VisitStudyTime
{ {
/// <summary> /// <summary>
/// 访视Id /// 检查批次Id
/// </summary> /// </summary>
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
@ -24,7 +24,7 @@ namespace IRaCIS.Core.Application.ViewModel
public class SiteVisitForTumor public class SiteVisitForTumor
{ {
/// <summary> /// <summary>
/// 访视Id /// 检查批次Id
/// </summary> /// </summary>
public Guid VisitTaskId { get; set; } public Guid VisitTaskId { get; set; }

View File

@ -19,14 +19,14 @@ namespace IRaCIS.Core.Application.Service
Task CalculateTask(CalculateTaskInDto inDto); Task CalculateTask(CalculateTaskInDto inDto);
/// <summary> /// <summary>
/// 验证访视提交 /// 验证检查批次提交
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto); Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto);
/// <summary> /// <summary>
/// 将上一次的访视病灶添加到这一次 /// 将上一次的检查批次病灶添加到这一次
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -18,14 +18,14 @@ namespace IRaCIS.Core.Application.Service
Task CalculateTask(CalculateTaskInDto inDto); Task CalculateTask(CalculateTaskInDto inDto);
/// <summary> /// <summary>
/// 验证访视提交 /// 验证检查批次提交
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto); Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto);
/// <summary> /// <summary>
/// 将上一次的访视病灶添加到这一次 /// 将上一次的检查批次病灶添加到这一次
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -555,13 +555,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// 既往新病灶 // 既往新病灶
new ReadingCalculateData (){QuestionType=QuestionType.AlwaysNewLesionsCount,GetIntFun=GetAlwaysNewLesionsCount}, new ReadingCalculateData (){QuestionType=QuestionType.AlwaysNewLesionsCount,GetIntFun=GetAlwaysNewLesionsCount},
// 自治疗后第二个访视点以来持续的新骨病变数量 // 自治疗后第二个检查批次点以来持续的新骨病变数量
new ReadingCalculateData (){QuestionType=QuestionType.NewBoneLesionsCount,GetIntFun=GetNewBoneLesionCount}, new ReadingCalculateData (){QuestionType=QuestionType.NewBoneLesionsCount,GetIntFun=GetNewBoneLesionCount},
// 间隔天数 // 间隔天数
new ReadingCalculateData (){QuestionType=QuestionType.DaysBetween,GetIntFun=GetNumberOfDaysBetween}, new ReadingCalculateData (){QuestionType=QuestionType.DaysBetween,GetIntFun=GetNumberOfDaysBetween},
// 访视点肿瘤评估 // 检查批次点肿瘤评估
new ReadingCalculateData (){QuestionType=QuestionType.SiteVisitForTumorEvaluation,GetStringFun=GetSiteVisitForTumorEvaluation}, new ReadingCalculateData (){QuestionType=QuestionType.SiteVisitForTumorEvaluation,GetStringFun=GetSiteVisitForTumorEvaluation},
@ -758,9 +758,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion #endregion
#region 自治疗后第二个访视点以来持续的新骨病变数量 #region 自治疗后第二个检查批次点以来持续的新骨病变数量
/// <summary> /// <summary>
/// 自治疗后第二个访视点以来持续的新骨病变数量 /// 自治疗后第二个检查批次点以来持续的新骨病变数量
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -837,9 +837,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#region 访视点肿瘤评估 #region 检查批次点肿瘤评估
/// <summary> /// <summary>
/// 访视点肿瘤评估 /// 检查批次点肿瘤评估
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -876,7 +876,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
/// <summary> /// <summary>
/// 修改上一次访视结果 /// 修改上一次检查批次结果
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -894,24 +894,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (lastTask != null) if (lastTask != null)
{ {
#region 1、基线后第一个访视:新病灶计数≥ 2个2、基线后第二个访视应满足访视间隔6周以上否则顺延新病灶≥ 2个 #region 1、基线后第一个检查批次:新病灶计数≥ 2个2、基线后第二个检查批次应满足检查批次间隔6周以上否则顺延新病灶≥ 2个
//1、基线后第一个访视:新病灶计数≥ 2个2、基线后第二个访视应满足访视间隔6周以上否则顺延新病灶≥ 2个 //1、基线后第一个检查批次:新病灶计数≥ 2个2、基线后第二个检查批次应满足检查批次间隔6周以上否则顺延新病灶≥ 2个
var firstVisit = taskList.FirstOrDefault(); var firstVisit = taskList.FirstOrDefault();
if (baseLineTask.StudyTime != null) if (baseLineTask.StudyTime != null)
{ {
//基线后第二个访视(应满足访视间隔6周以上否则顺延 //基线后第二个检查批次(应满足检查批次间隔6周以上否则顺延
var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.StudyTime >= baseLineTask.StudyTime.Value.AddDays(42)).FirstOrDefault(); var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.StudyTime >= baseLineTask.StudyTime.Value.AddDays(42)).FirstOrDefault();
if (secondVisit != null) if (secondVisit != null)
{ {
var firstTaskNewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstVisit.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); var firstTaskNewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstVisit.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
// 第二访视数量 // 第二检查批次数量
var secondVisitLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); var secondVisitLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
// 判断是否是当前访视 当前访视还未入库 // 判断是否是当前检查批次 当前检查批次还未入库
if (secondVisit.VisitTaskId == inDto.VisitTaskId) if (secondVisit.VisitTaskId == inDto.VisitTaskId)
{ {
secondVisitLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0(); secondVisitLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
@ -963,7 +963,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion #endregion
/// <summary> /// <summary>
/// 获取访视日期信息 /// 获取检查批次日期信息
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -402,22 +402,22 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//与基线SOD相比变化量mm //与基线SOD相比变化量mm
new ReadingCalculateData (){QuestionType=QuestionType.SODChange,GetDecimalNullFun=GetSODChange}, new ReadingCalculateData (){QuestionType=QuestionType.SODChange,GetDecimalNullFun=GetSODChange},
//与基线访视相比SOD变化百分比 //与基线检查批次相比SOD变化百分比
new ReadingCalculateData (){QuestionType=QuestionType.SODPercent,GetDecimalNullFun=GetSODPercent}, new ReadingCalculateData (){QuestionType=QuestionType.SODPercent,GetDecimalNullFun=GetSODPercent},
//与整个访视期间SOD最低点相比增加的值mm //其他任务需要改 //与整个检查批次期间SOD最低点相比增加的值mm //其他任务需要改
new ReadingCalculateData (){QuestionType=QuestionType.LowestIncrease,GetDecimalNullFun=GetLowestIncrease,/*ChangeAllTaskFun=ChangeAllLowestIncrease*/}, new ReadingCalculateData (){QuestionType=QuestionType.LowestIncrease,GetDecimalNullFun=GetLowestIncrease,/*ChangeAllTaskFun=ChangeAllLowestIncrease*/},
//与整个访视期间SOD最低点相比增加的百分比 //其他任务需要改 //与整个检查批次期间SOD最低点相比增加的百分比 //其他任务需要改
new ReadingCalculateData (){QuestionType=QuestionType.LowPercent,GetDecimalNullFun=GetLowPercent,/*ChangeAllTaskFun=ChangeAllLowPercent*/}, new ReadingCalculateData (){QuestionType=QuestionType.LowPercent,GetDecimalNullFun=GetLowPercent,/*ChangeAllTaskFun=ChangeAllLowPercent*/},
//整个访视期间SOD最低点访视名称 //其他任务需要改 //整个检查批次期间SOD最低点检查批次名称 //其他任务需要改
new ReadingCalculateData (){QuestionType=QuestionType.LowVisit,GetStringFun=GetLowVisit,/*ChangeAllTaskFun=ChangeAllLowVisitName*/}, new ReadingCalculateData (){QuestionType=QuestionType.LowVisit,GetStringFun=GetLowVisit,/*ChangeAllTaskFun=ChangeAllLowVisitName*/},
//是否存在非淋巴结靶病灶 //是否存在非淋巴结靶病灶
new ReadingCalculateData (){QuestionType=QuestionType.IsLymphTarget,GetStringFun=GetIsLymphTarget}, new ReadingCalculateData (){QuestionType=QuestionType.IsLymphTarget,GetStringFun=GetIsLymphTarget},
//是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 //是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
new ReadingCalculateData (){QuestionType=QuestionType.IsAddFive,GetStringFun=GetIsAddFive}, new ReadingCalculateData (){QuestionType=QuestionType.IsAddFive,GetStringFun=GetIsAddFive},
//被评估为NE的单个靶病灶 //被评估为NE的单个靶病灶
@ -626,7 +626,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
/// <summary> /// <summary>
/// 验证访视提交 /// 验证检查批次提交
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -701,10 +701,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#region 将上一次的访视病灶添加到这一次 #region 将上一次的检查批次病灶添加到这一次
/// <summary> /// <summary>
/// 将上一次的访视病灶添加到这一次 /// 将上一次的检查批次病灶添加到这一次
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -905,9 +905,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
#endregion #endregion
#region 与基线访视相比SOD变化百分比 #region 与基线检查批次相比SOD变化百分比
/// <summary> /// <summary>
/// 与基线访视相比SOD变化百分比 /// 与基线检查批次相比SOD变化百分比
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -933,9 +933,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
#endregion #endregion
#region 与整个访视期间SOD最低点相比增加的值mm #region 与整个检查批次期间SOD最低点相比增加的值mm
/// <summary> /// <summary>
/// 与整个访视期间SOD最低点相比增加的值mm /// 与整个检查批次期间SOD最低点相比增加的值mm
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <remarks> /// <remarks>
@ -955,9 +955,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
#endregion #endregion
#region 与整个访视期间SOD最低点相比增加的百分比 #region 与整个检查批次期间SOD最低点相比增加的百分比
/// <summary> /// <summary>
/// 与整个访视期间SOD最低点相比增加的百分比 /// 与整个检查批次期间SOD最低点相比增加的百分比
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <remarks> /// <remarks>
@ -987,9 +987,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
#endregion #endregion
#region 整个访视期间SOD最低点访视名称 #region 整个检查批次期间SOD最低点检查批次名称
/// <summary> /// <summary>
/// 整个访视期间SOD最低点访视名称 /// 整个检查批次期间SOD最低点检查批次名称
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <remarks> /// <remarks>
@ -1038,9 +1038,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
#endregion #endregion
#region 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 #region 是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
/// <summary> /// <summary>
/// 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 /// 是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -1058,7 +1058,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
/// <summary> /// <summary>
/// 获取存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上的病灶 /// 获取存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上的病灶
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -1155,10 +1155,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#region 修改其他标准 #region 修改其他标准
#region 修改与整个访视期间SOD最低点相比增加的值mm #region 修改与整个检查批次期间SOD最低点相比增加的值mm
/// <summary> /// <summary>
/// 修改与整个访视期间SOD最低点相比增加的值mm /// 修改与整个检查批次期间SOD最低点相比增加的值mm
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -1180,10 +1180,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion #endregion
#region 修改整个访视期间SOD最低点相比增加的百分比 #region 修改整个检查批次期间SOD最低点相比增加的百分比
/// <summary> /// <summary>
/// 修改整个访视期间SOD最低点相比增加的百分比 /// 修改整个检查批次期间SOD最低点相比增加的百分比
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -1222,7 +1222,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns> /// <returns></returns>
public async Task ChangeAllLowVisitName(ChangeAllTaskDto inDto) public async Task ChangeAllLowVisitName(ChangeAllTaskDto inDto)
{ {
// 找到所有访视任务的Id // 找到所有检查批次任务的Id
var visitTaskIds = await _visitTaskRepository.Where(x => x.IsAnalysisCreate == inDto.IsAnalysisCreate && var visitTaskIds = await _visitTaskRepository.Where(x => x.IsAnalysisCreate == inDto.IsAnalysisCreate &&
x.ReadingCategory == ReadingCategory.Visit && x.ReadingCategory == ReadingCategory.Visit &&
@ -1241,9 +1241,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#region 通用方法 #region 通用方法
#region 修改所有访视任务的答案 #region 修改所有检查批次任务的答案
/// <summary> /// <summary>
/// 修改所有访视任务的答案 /// 修改所有检查批次任务的答案
/// </summary> /// </summary>
/// <param name="visitTaskGuids"></param> /// <param name="visitTaskGuids"></param>
/// <param name="questionId"></param> /// <param name="questionId"></param>
@ -1314,9 +1314,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
return taskAnswerList.OrderBy(x => x.SOD).ToList(); return taskAnswerList.OrderBy(x => x.SOD).ToList();
} }
#region 获取访视任务信息 #region 获取检查批次任务信息
/// <summary> /// <summary>
/// 获取访视任务信息 /// 获取检查批次任务信息
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -1361,18 +1361,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion #endregion
/// <summary> /// <summary>
/// 获取上一个访视任务Id /// 获取上一个检查批次任务Id
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task<Guid> GetLastVisitTaskId(ReadingCalculateDto inDto) private async Task<Guid> GetLastVisitTaskId(ReadingCalculateDto inDto)
{ {
// 拿到这一个访视 // 拿到这一个检查批次
var thisNum = await _subjectVisitRepository.Where(x => x.Id == inDto.SubjectVisitId).Select(x => x.VisitNum).FirstOrDefaultAsync(); var thisNum = await _subjectVisitRepository.Where(x => x.Id == inDto.SubjectVisitId).Select(x => x.VisitNum).FirstOrDefaultAsync();
// 先找到上一个访视 // 先找到上一个检查批次
var lastVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == inDto.SubjectId && !x.IsLostVisit && x.VisitNum < thisNum).OrderByDescending(x => x.VisitNum).Select(x => x.Id).FirstOrDefaultAsync(); var lastVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == inDto.SubjectId && !x.IsLostVisit && x.VisitNum < thisNum).OrderByDescending(x => x.VisitNum).Select(x => x.Id).FirstOrDefaultAsync();
// 找到访视任务Id // 找到检查批次任务Id
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && x.TrialReadingCriterionId == inDto.TrialReadingCriterionId &&
@ -1420,7 +1420,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// ///
///if (最低点SOD > 0) ///if (最低点SOD > 0)
///{ ///{
/// if比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm /// if比整体检查批次期间最低点SOD增加≥20 % 且与整个检查批次期间最低点相比增加的值≥5 mm
/// { /// {
/// 靶病灶疗效为 PD /// 靶病灶疗效为 PD
/// ///
@ -1429,21 +1429,21 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
///else ///else
///{ ///{
/// //进入该分支最低点SOD=0 /// //进入该分支最低点SOD=0
/// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm) /// if (当前检查批次SOD > 0 且与整个检查批次期间最低点相比增加的值≥5 mm)
/// { /// {
/// 靶病灶疗效为PD /// 靶病灶疗效为PD
/// ///
/// } /// }
///} ///}
/// ///
///if上次访视点评估是CR ///if上次检查批次点评估是CR
/// { /// {
/// if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm) /// if (当前检查批次点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
/// { /// {
/// 靶病灶疗效为 PD /// 靶病灶疗效为 PD
/// ///
/// } /// }
/// if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径0 mm。) /// if (当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径0 mm。)
/// { /// {
/// 靶病灶疗效为 PD /// 靶病灶疗效为 PD
/// ///
@ -1490,28 +1490,28 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) > -30, inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) > -30,
// SOD 百分比 整体访视期间SOD最低点SOD相比增加20% // SOD 百分比 整体检查批次期间SOD最低点SOD相比增加20%
LowSODPercentLess20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 20, LowSODPercentLess20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 20,
// SOD 百分比 比整体访视期间SOD最低点SOD增加≥20% // SOD 百分比 比整体检查批次期间SOD最低点SOD增加≥20%
LowSODPercentBigger20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20, LowSODPercentBigger20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
// SOD 变化值 比整体访视期间SOD最低点SOD绝对增加值5 mm // SOD 变化值 比整体检查批次期间SOD最低点SOD绝对增加值5 mm
LowSODChangeLess5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 5, LowSODChangeLess5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 5,
// 比整体访视期间SOD最低点SOD绝对增加值≥5 mm // 比整体检查批次期间SOD最低点SOD绝对增加值≥5 mm
LowSODChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5, LowSODChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
// 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶 // 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶
ExixtsNETargetLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)), ExixtsNETargetLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)),
//// 上次访视点整体肿瘤评估 //// 上次检查批次点整体肿瘤评估
LastTargetLesionEvaluate = string.Empty, LastTargetLesionEvaluate = string.Empty,
// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径0 mm // 当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径0 mm
CurrentMajoreBigger0 = false, CurrentMajoreBigger0 = false,
// 当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm // 当前检查批次点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm
CurrenShortBigger10 = false, CurrenShortBigger10 = false,
// 靶病灶短径增加值有5mm的Index // 靶病灶短径增加值有5mm的Index
@ -1559,7 +1559,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && !x.Answer.EqEnum(YesOrNoOrNa.Yes))) if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && !x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{ {
// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径 // 当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径
resultData.CurrentMajoreBigger0 = resultData.CurrentMajoreBigger0 || (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0; resultData.CurrentMajoreBigger0 = resultData.CurrentMajoreBigger0 || (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0;
} }
} }
@ -1603,7 +1603,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//if (最低点SOD > 0) //if (最低点SOD > 0)
if (resultData.LowSod > 0) if (resultData.LowSod > 0)
{ {
// if比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm // if比整体检查批次期间最低点SOD增加≥20 % 且与整个检查批次期间最低点相比增加的值≥5 mm
if (resultData.LowSODPercentBigger20 && resultData.LowSODChangeBigger5) if (resultData.LowSODPercentBigger20 && resultData.LowSODChangeBigger5)
{ {
// 靶病灶疗效为 PD // 靶病灶疗效为 PD
@ -1613,24 +1613,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
else else
{ {
//进入该分支最低点SOD=0 //进入该分支最低点SOD=0
// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm) // if (当前检查批次SOD > 0 且与整个检查批次期间最低点相比增加的值≥5 mm)
if (resultData.PresentSod > 0 && resultData.LowSODChangeBigger5) if (resultData.PresentSod > 0 && resultData.LowSODChangeBigger5)
{ {
// 靶病灶疗效为PD // 靶病灶疗效为PD
result = TargetAssessment.PD; result = TargetAssessment.PD;
} }
} }
//if上次访视点评估是CR //if上次检查批次点评估是CR
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR)) if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
{ {
//if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm) //if (当前检查批次点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
// 换句话说 就是 短径≥10 的病灶 和 短径增加值≥5的病灶 的交集数量大于0 // 换句话说 就是 短径≥10 的病灶 和 短径增加值≥5的病灶 的交集数量大于0
if (resultData.ShortBigger10Indexs.Intersect(resultData.AddFiveIndexs).ToList().Count() > 0) if (resultData.ShortBigger10Indexs.Intersect(resultData.AddFiveIndexs).ToList().Count() > 0)
{ {
//靶病灶疗效为 PD //靶病灶疗效为 PD
result = TargetAssessment.PD; result = TargetAssessment.PD;
} }
//if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径0 mm。) //if (当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径0 mm。)
if (resultData.CurrentMajoreBigger0) if (resultData.CurrentMajoreBigger0)
{ {
//靶病灶疗效为 PD //靶病灶疗效为 PD
@ -1781,7 +1781,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// 当前访视存在至少一个明确新病灶 // 当前检查批次存在至少一个明确新病灶
if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist))) if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)))
{ {
result = NewLesionAssessment.Yes; result = NewLesionAssessment.Yes;
@ -1791,7 +1791,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{ {
result = NewLesionAssessment.NE; result = NewLesionAssessment.NE;
} }
//当前访视不存在明确新病灶且存在至少一个疑似新病灶 //当前检查批次不存在明确新病灶且存在至少一个疑似新病灶
else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)) && else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)) &&
tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Suspected)) tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Suspected))
) )

View File

@ -101,7 +101,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
/// <summary> /// <summary>
/// 验证访视提交 /// 验证检查批次提交
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
@ -116,7 +116,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
/// <summary> /// <summary>
/// 将上一次的访视病灶添加到这一次 /// 将上一次的检查批次病灶添加到这一次
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -362,7 +362,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion #endregion
/// <summary> /// <summary>
/// 将上一次的访视病灶添加到这一次 /// 将上一次的检查批次病灶添加到这一次
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -13,7 +13,7 @@ namespace IRaCIS.Core.Application.Contracts
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者编号具体规则 /// 者编号具体规则
/// </summary> /// </summary>
public string SubjectCodeRule { get; set; } = string.Empty; public string SubjectCodeRule { get; set; } = string.Empty;
@ -27,7 +27,7 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsVerifyVisitImageDate { get; set; } = false; public bool IsVerifyVisitImageDate { get; set; } = false;
/// <summary> /// <summary>
/// 是否 提醒受试者编号规则 /// 是否 提醒者编号规则
/// </summary> /// </summary>
public bool IsNoticeSubjectCodeRule { get; set; } = true; public bool IsNoticeSubjectCodeRule { get; set; } = true;
@ -37,7 +37,7 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsHaveFirstGiveMedicineDate { get; set; } = true; public bool IsHaveFirstGiveMedicineDate { get; set; } = true;
/// <summary> /// <summary>
/// 是否有 受试者年龄 /// 是否有 者年龄
/// </summary> /// </summary>
public bool IsHaveSubjectAge { get; set; } = false; public bool IsHaveSubjectAge { get; set; } = false;
@ -45,7 +45,7 @@ namespace IRaCIS.Core.Application.Contracts
/// <summary> /// <summary>
/// 出组后计划外访视名称 /// 出组后计划外检查批次名称
/// </summary> /// </summary>
public string OutEnrollmentVisitName { get; set; } = "EOT"; public string OutEnrollmentVisitName { get; set; } = "EOT";
@ -142,7 +142,7 @@ namespace IRaCIS.Core.Application.Contracts
/// <summary> /// <summary>
/// 阅片是否显示受试者信息 /// 阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } = false; public bool IsReadingShowSubjectInfo { get; set; } = false;
@ -227,7 +227,7 @@ namespace IRaCIS.Core.Application.Contracts
//public ReadingMethod ReadingType { get; set; } //public ReadingMethod ReadingType { get; set; }
/// <summary> /// <summary>
/// 阅片是否显示受试者信息 /// 阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } public bool IsReadingShowSubjectInfo { get; set; }
@ -261,7 +261,7 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsReadingTaskViewInOrder { get; set; } = true; public bool IsReadingTaskViewInOrder { get; set; } = true;
/// <summary> /// <summary>
/// 阅片是否显示受试者信息 /// 阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } public bool IsReadingShowSubjectInfo { get; set; }
@ -384,7 +384,7 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsImageIabeled { get; set; } public bool IsImageIabeled { get; set; }
/// <summary> /// <summary>
/// IR阅片是否显示受试者信息 /// IR阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } = false; public bool IsReadingShowSubjectInfo { get; set; } = false;
@ -854,7 +854,7 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsReadingTaskViewInOrder { get; set; } = true; public bool IsReadingTaskViewInOrder { get; set; } = true;
/// <summary> /// <summary>
/// IR阅片是否显示受试者信息 /// IR阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } = false; public bool IsReadingShowSubjectInfo { get; set; } = false;

View File

@ -837,14 +837,14 @@ namespace IRaCIS.Core.Application
var trialInfo = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialConfig.TrialId)).IfNullThrowException(); var trialInfo = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialConfig.TrialId)).IfNullThrowException();
//项目紧急 当前所有已提交,但未完成的访视,设置为加急。后续提交的访视也设置为加急 (在提交的时候,回去判断 项目加急Subject加急是否入组确认是否Pd从而设置访视是否加急) //项目紧急 当前所有已提交,但未完成的检查批次,设置为加急。后续提交的检查批次也设置为加急 (在提交的时候,回去判断 项目加急Subject加急是否入组确认是否Pd从而设置检查批次是否加急)
if (trialConfig.IsUrgent) if (trialConfig.IsUrgent)
{ {
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.TrialId == trialInfo.Id && t.SubmitState == SubmitStateEnum.Submitted && t.ForwardState < ForwardStateEnum.Forwarded, await _repository.BatchUpdateAsync<SubjectVisit>(t => t.TrialId == trialInfo.Id && t.SubmitState == SubmitStateEnum.Submitted && t.ForwardState < ForwardStateEnum.Forwarded,
s => new SubjectVisit() { IsUrgent = trialConfig.IsUrgent }); s => new SubjectVisit() { IsUrgent = trialConfig.IsUrgent });
} }
else //之前设置为加急的访视状态不变。后续提交的访视,为不加急。 else //之前设置为加急的检查批次状态不变。后续提交的检查批次,为不加急。
{ {
} }
@ -862,7 +862,7 @@ namespace IRaCIS.Core.Application
var canOPt = await _trialRepository.AnyAsync(trial => var canOPt = await _trialRepository.AnyAsync(trial =>
trial.Id == trialId && trial.IsTrialBasicLogicConfirmed && trial.IsTrialProcessConfirmed && trial.Id == trialId && trial.IsTrialBasicLogicConfirmed && trial.IsTrialProcessConfirmed &&
trial.IsTrialUrgentConfirmed && trial.VisitPlanConfirmed); trial.IsTrialUrgentConfirmed && trial.VisitPlanConfirmed);
return ResponseOutput.Ok(canOPt, msg: canOPt ? "" : "该项目的项目配置(基础配置、流程配置、加急配置) 、访视管理,有配置未确认,不能设置项目状态为启动。"); return ResponseOutput.Ok(canOPt, msg: canOPt ? "" : "该项目的项目配置(基础配置、流程配置、加急配置) 、检查批次管理,有配置未确认,不能设置项目状态为启动。");
} }
/// <summary> /// <summary>
@ -889,7 +889,7 @@ namespace IRaCIS.Core.Application
} }
else else
{ {
return ResponseOutput.NotOk("无法变更项目状态。该项目的项目配置、访视管理中,有未确认项"); return ResponseOutput.NotOk("无法变更项目状态。该项目的项目配置、检查批次管理中,有未确认项");
} }
} }

View File

@ -248,7 +248,7 @@ namespace IRaCIS.Application.Services
// 添加扩展信息表记录 // 添加扩展信息表记录
await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id }); await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
//添加访视 //添加检查批次
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Batch 1", IsBaseLine = true,IsConfirmed=true,IsHaveFirstConfirmed=true ,VisitWindowLeft=-3,VisitWindowRight=28 }); await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Batch 1", IsBaseLine = true,IsConfirmed=true,IsHaveFirstConfirmed=true ,VisitWindowLeft=-3,VisitWindowRight=28 });
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Batch 2", IsConfirmed = true, IsHaveFirstConfirmed = true, VisitWindowLeft = -3, VisitWindowRight = 3 }); await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Batch 2", IsConfirmed = true, IsHaveFirstConfirmed = true, VisitWindowLeft = -3, VisitWindowRight = 3 });
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 2, BlindName = "B" + 20.ToString("D3"), VisitDay = 60, VisitName = "Batch 3", IsConfirmed = true, IsHaveFirstConfirmed = true, VisitWindowLeft = -3, VisitWindowRight = 3 }); await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 2, BlindName = "B" + 20.ToString("D3"), VisitDay = 60, VisitName = "Batch 3", IsConfirmed = true, IsHaveFirstConfirmed = true, VisitWindowLeft = -3, VisitWindowRight = 3 });
@ -433,7 +433,7 @@ namespace IRaCIS.Application.Services
//if (trial.VisitPlanConfirmed) //if (trial.VisitPlanConfirmed)
//{ //{
// return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除"); // return ResponseOutput.NotOk("Trial检查批次计划已经确认,无法删除");
//} //}
//if (await _repository.AnyAsync<Enroll>(u => u.TrialId == trialId)) //if (await _repository.AnyAsync<Enroll>(u => u.TrialId == trialId))

View File

@ -21,9 +21,9 @@ namespace IRaCIS.Application.Services
} }
/// <summary> /// <summary>
/// 添加或更新受试者信息[New] /// 添加或更新者信息[New]
/// </summary> /// </summary>
/// <param name="subjectCommand">state:1-访视2-出组。0-全部</param> /// <param name="subjectCommand">state:1-检查批次2-出组。0-全部</param>
/// <returns></returns> /// <returns></returns>
[TrialAudit(AuditType.SubjectAudit, AuditOptType.AddOrUpdateSubject)] [TrialAudit(AuditType.SubjectAudit, AuditOptType.AddOrUpdateSubject)]
@ -33,13 +33,13 @@ namespace IRaCIS.Application.Services
var svlist = new List<SubjectVisit>(); var svlist = new List<SubjectVisit>();
if (await _repository.AnyAsync<Trial>(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed)) if (await _repository.AnyAsync<Trial>(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed))
{ {
return ResponseOutput.NotOk("项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。"); return ResponseOutput.NotOk("项目检查批次计划没有确认。请联系项目经理确认项目检查批次计划后,再添加患者。");
} }
var verifyExp1 = new EntityVerifyExp<Subject>() var verifyExp1 = new EntityVerifyExp<Subject>()
{ {
VerifyExp = u => u.Code == subjectCommand.Code && u.TrialId == subjectCommand.TrialId, VerifyExp = u => u.Code == subjectCommand.Code && u.TrialId == subjectCommand.TrialId,
VerifyMsg = "已存在具有相关受试者编号的受试者。" VerifyMsg = "已存在具有相关患者编号的患者。"
}; };
@ -88,7 +88,7 @@ namespace IRaCIS.Application.Services
if (await _subjectVisitRepository.AnyAsync(u => u.SubjectId == id && u.VisitExecuted == VisitExecutedEnum.Executed)) if (await _subjectVisitRepository.AnyAsync(u => u.SubjectId == id && u.VisitExecuted == VisitExecutedEnum.Executed))
{ {
return ResponseOutput.NotOk("该受试者已经有访视已经上传影像,不允许删除。"); return ResponseOutput.NotOk("该患者已经有检查批次已经上传影像,不允许删除。");
} }
await _subjectRepository.UpdatePartialFromQueryAsync(id, x => new Subject await _subjectRepository.UpdatePartialFromQueryAsync(id, x => new Subject
@ -105,8 +105,8 @@ namespace IRaCIS.Application.Services
return ResponseOutput.Result(isSuccess); return ResponseOutput.Result(isSuccess);
} }
/// <summary> 分页获取受试者列表[New] </summary> /// <summary> 分页获取者列表[New] </summary>
/// /// <param name="param">state:1-访视2-出组。0-全部</param> /// /// <param name="param">state:1-检查批次2-出组。0-全部</param>
[HttpPost] [HttpPost]
public async Task<IResponseOutput<PageOutput<SubjectQueryView>, TrialSubjectConfig>> GetSubjectList(SubjectQueryParam param) public async Task<IResponseOutput<PageOutput<SubjectQueryView>, TrialSubjectConfig>> GetSubjectList(SubjectQueryParam param)
{ {
@ -117,7 +117,7 @@ namespace IRaCIS.Application.Services
.WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex)) .WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex))
.WhereIf(param.Status != null, t => t.Status == param.Status) .WhereIf(param.Status != null, t => t.Status == param.Status)
.WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId) .WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId)
// CRC 只负责他管理site的受试 // CRC 只负责他管理site的
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
.ProjectTo<SubjectQueryView>(_mapper.ConfigurationProvider); .ProjectTo<SubjectQueryView>(_mapper.ConfigurationProvider);
@ -133,7 +133,7 @@ namespace IRaCIS.Application.Services
/// <summary> /// <summary>
/// 计划外访视 获取受试者选择下拉框列表 /// 计划外检查批次 获取患者选择下拉框列表
/// </summary> /// </summary>
[HttpGet("{siteId:guid}/{trialId:guid}")] [HttpGet("{siteId:guid}/{trialId:guid}")]
public List<SubjectSelect> GetSubjectListBySiteId(Guid siteId, Guid trialId) public List<SubjectSelect> GetSubjectListBySiteId(Guid siteId, Guid trialId)

View File

@ -68,20 +68,20 @@ namespace IRaCIS.Core.Application.Services
var verifyExp1 = new EntityVerifyExp<SubjectVisit>() var verifyExp1 = new EntityVerifyExp<SubjectVisit>()
{ {
VerifyExp = t => t.VisitNum == svCommand.VisitNum && t.SubjectId == svCommand.SubjectId, VerifyExp = t => t.VisitNum == svCommand.VisitNum && t.SubjectId == svCommand.SubjectId,
VerifyMsg = "该受试者的访视计划中已经包含一个具有相同访视号的访视。" VerifyMsg = "该患者的检查批次计划中已经包含一个具有相同检查批次号的检查批次。"
}; };
var verifyExp2 = new EntityVerifyExp<SubjectVisit>() var verifyExp2 = new EntityVerifyExp<SubjectVisit>()
{ {
VerifyExp = t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit, VerifyExp = t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit,
VerifyMsg = "该受试者已经有访视设置为末次访视,不允许将当前访视设置为末次访视。", VerifyMsg = "该患者已经有检查批次设置为末次检查批次,不允许将当前检查批次设置为末次检查批次。",
IsVerify = svCommand.IsFinalVisit IsVerify = svCommand.IsFinalVisit
}; };
var verifyExp3 = new EntityVerifyExp<SubjectVisit>() var verifyExp3 = new EntityVerifyExp<SubjectVisit>()
{ {
VerifyExp = t => t.SubjectId == svCommand.SubjectId && t.VisitName == svCommand.VisitName, VerifyExp = t => t.SubjectId == svCommand.SubjectId && t.VisitName == svCommand.VisitName,
VerifyMsg = "该受试者的访视计划中已经包含一个具有相同访视名称的访视。" VerifyMsg = "该患者的检查批次计划中已经包含一个具有相同检查批次名称的检查批次。"
}; };
@ -96,17 +96,17 @@ namespace IRaCIS.Core.Application.Services
if (svCommand.Id == null) if (svCommand.Id == null)
{ {
//设置末次评估后,不允许添加计划外访视 //设置末次评估后,不允许添加计划外检查批次
if (svCommand.InPlan == false) if (svCommand.InPlan == false)
{ {
if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit)) if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit))
{ {
throw new BusinessValidationFailedException("设置末次评估后,不允许添加计划外访视。"); throw new BusinessValidationFailedException("设置末次评估后,不允许添加计划外检查批次。");
} }
if (await _repository.AnyAsync<VisitTask>(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder)) if (await _repository.AnyAsync<VisitTask>(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder))
{ {
throw new BusinessValidationFailedException("该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退"); throw new BusinessValidationFailedException("该患者后续检查批次已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退");
} }
} }
@ -138,19 +138,19 @@ namespace IRaCIS.Core.Application.Services
if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.SubmitState == SubmitStateEnum.Submitted) if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.SubmitState == SubmitStateEnum.Submitted)
{ {
throw new BusinessValidationFailedException("当前访视影像提交后不允许修改PD确认状态。"); throw new BusinessValidationFailedException("当前检查批次影像提交后不允许修改PD确认状态。");
} }
if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.RequestBackState == RequestBackStateEnum.PM_AgressBack) if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.RequestBackState == RequestBackStateEnum.PM_AgressBack)
{ {
throw new BusinessValidationFailedException("当前访视为回退的访视不允许修改PD确认状态。"); throw new BusinessValidationFailedException("当前检查批次为回退的检查批次不允许修改PD确认状态。");
} }
if (svCommand.IsLostVisit) if (svCommand.IsLostVisit)
{ {
if (await _subjectVisitRepository.AnyAsync(t => t.Id == svCommand.Id && t.SubmitState == SubmitStateEnum.ToSubmit)) if (await _subjectVisitRepository.AnyAsync(t => t.Id == svCommand.Id && t.SubmitState == SubmitStateEnum.ToSubmit))
{ {
throw new BusinessValidationFailedException("当前访视已经有有影像上传,不允许设置为失访。"); throw new BusinessValidationFailedException("当前检查批次已经有有影像上传,不允许设置为失访。");
} }
} }
@ -158,7 +158,7 @@ namespace IRaCIS.Core.Application.Services
} }
//更新受试者 访视基准日期 是否入组确认 //更新患者 检查批次基准日期 是否入组确认
if (svCommand.SubjectFirstGiveMedicineTime != null && svCommand.IsBaseLine) if (svCommand.SubjectFirstGiveMedicineTime != null && svCommand.IsBaseLine)
{ {
@ -197,15 +197,15 @@ namespace IRaCIS.Core.Application.Services
{ {
if (await _repository.AnyAsync<DicomStudy>(t => t.SubjectVisitId == id)) if (await _repository.AnyAsync<DicomStudy>(t => t.SubjectVisitId == id))
{ {
return ResponseOutput.NotOk("当前访视已经有影像上传,不允许删除。"); return ResponseOutput.NotOk("当前检查批次已经有影像上传,不允许删除。");
} }
if (await _subjectVisitRepository.AnyAsync(t => t.Id == id && t.InPlan)) if (await _subjectVisitRepository.AnyAsync(t => t.Id == id && t.InPlan))
{ {
return ResponseOutput.NotOk("计划内的访视不允许删除。"); return ResponseOutput.NotOk("计划内的检查批次不允许删除。");
} }
if (await _subjectVisitRepository.AnyAsync(t => t.OutPlanPreviousVisitId == id)) if (await _subjectVisitRepository.AnyAsync(t => t.OutPlanPreviousVisitId == id))
{ {
return ResponseOutput.NotOk("当前访视已经被设置为另一访视的上一访视,不允许删除。"); return ResponseOutput.NotOk("当前检查批次已经被设置为另一检查批次的上一检查批次,不允许删除。");
} }
await _subjectVisitRepository.DeleteFromQueryAsync(s => s.Id == id, true); await _subjectVisitRepository.DeleteFromQueryAsync(s => s.Id == id, true);
@ -216,7 +216,7 @@ namespace IRaCIS.Core.Application.Services
/// <summary> /// <summary>
/// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 /// 获取检查批次下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的
/// </summary> /// </summary>
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <param name="sujectVisitId"></param> /// <param name="sujectVisitId"></param>
@ -295,7 +295,7 @@ namespace IRaCIS.Core.Application.Services
} }
/// <summary> /// <summary>
/// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 /// 获取检查批次下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的
/// </summary> /// </summary>
/// <param name="indto"></param> /// <param name="indto"></param>
/// <returns></returns> /// <returns></returns>
@ -538,7 +538,7 @@ namespace IRaCIS.Core.Application.Services
/// <summary> /// <summary>
/// 设置受试者访视已执行 也就是将studyUploaded状态置为true 为了那些没有影像 人工设置准备 /// 设置患者检查批次已执行 也就是将studyUploaded状态置为true 为了那些没有影像 人工设置准备
/// </summary> /// </summary>
/// <param name="subjectVisitId"></param> /// <param name="subjectVisitId"></param>
/// <returns></returns> /// <returns></returns>

View File

@ -38,7 +38,7 @@ namespace IRaCIS.Application.Services
///暂时不用 ///暂时不用
/// <summary> 获取项目访视计划</summary> /// <summary> 获取项目检查批次计划</summary>
[HttpPost] [HttpPost]
public async Task<PageOutput<VisitStageDTO>> GetTrialVisitStageList(VisitPlanQueryDTO param) public async Task<PageOutput<VisitStageDTO>> GetTrialVisitStageList(VisitPlanQueryDTO param)
{ {
@ -51,7 +51,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> 根据项目Id获取项目访视计划(不分页)[New]</summary> /// <summary> 根据项目Id获取项目检查批次计划(不分页)[New]</summary>
[HttpGet("{trialId:guid}")] [HttpGet("{trialId:guid}")]
public async Task<VisitPlanView> GetVisitStageList(Guid trialId) public async Task<VisitPlanView> GetVisitStageList(Guid trialId)
{ {
@ -86,7 +86,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> /// <summary>
/// 获取访视计划下拉框列表 /// 获取检查批次计划下拉框列表
/// </summary> /// </summary>
/// <param name="trialId"></param> /// <param name="trialId"></param>
/// <returns></returns> /// <returns></returns>
@ -100,7 +100,7 @@ namespace IRaCIS.Application.Services
} }
/// <summary> 添加或更新访视计划某项</summary> /// <summary> 添加或更新检查批次计划某项</summary>
[UnitOfWork] [UnitOfWork]
[HttpPost] [HttpPost]
[Authorize(Policy = IRaCISPolicy.PM_APM)] [Authorize(Policy = IRaCISPolicy.PM_APM)]
@ -128,7 +128,7 @@ namespace IRaCIS.Application.Services
//比当前 visitNum小的 visitDay的最大值 还小 不允许添加 //比当前 visitNum小的 visitDay的最大值 还小 不允许添加
if (visitPlan.VisitDay <= visitPlanList.Where(t => t.VisitNum < visitPlan.VisitNum).Select(t => t.VisitDay).Max()) if (visitPlan.VisitDay <= visitPlanList.Where(t => t.VisitNum < visitPlan.VisitNum).Select(t => t.VisitDay).Max())
{ {
throw new BusinessValidationFailedException("访视计划中,访视号大的访视,其访视间隔也应该比访视号小的访视大。"); throw new BusinessValidationFailedException("检查批次计划中,检查批次号大的检查批次,其检查批次间隔也应该比检查批次号小的检查批次大。");
} }
} }
@ -137,7 +137,7 @@ namespace IRaCIS.Application.Services
{ {
if (visitPlan.VisitDay >= visitPlanList.Where(t => t.VisitNum > visitPlan.VisitNum).Select(t => t.VisitDay).Min()) if (visitPlan.VisitDay >= visitPlanList.Where(t => t.VisitNum > visitPlan.VisitNum).Select(t => t.VisitDay).Min())
{ {
throw new BusinessValidationFailedException("访视计划中,访视号大的计划访视,其访视间隔也应该比访视号小的计划访视大。"); throw new BusinessValidationFailedException("检查批次计划中,检查批次号大的计划检查批次,其检查批次间隔也应该比检查批次号小的计划检查批次大。");
} }
} }
@ -148,12 +148,12 @@ namespace IRaCIS.Application.Services
if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum), true)) if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum), true))
{ {
throw new BusinessValidationFailedException("访视计划中已经存在具有项目访视名称或者访视号的计划访视模板。"); throw new BusinessValidationFailedException("检查批次计划中已经存在具有项目检查批次名称或者检查批次号的计划检查批次模板。");
} }
if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine, true) && visitPlan.IsBaseLine) if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine, true) && visitPlan.IsBaseLine)
{ {
throw new BusinessValidationFailedException("访视计划中已经存在基线。"); throw new BusinessValidationFailedException("检查批次计划中已经存在基线。");
} }
//不用前端传递的值 //不用前端传递的值
@ -171,12 +171,12 @@ namespace IRaCIS.Application.Services
if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum) && t.Id != visitPlan.Id, true)) if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum) && t.Id != visitPlan.Id, true))
{ {
throw new BusinessValidationFailedException("访视计划中已经存在具有项目访视名称或者访视号的计划访视模板。"); throw new BusinessValidationFailedException("检查批次计划中已经存在具有项目检查批次名称或者检查批次号的计划检查批次模板。");
} }
if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine && t.Id != visitPlan.Id, true) && visitPlan.IsBaseLine) if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine && t.Id != visitPlan.Id, true) && visitPlan.IsBaseLine)
{ {
throw new BusinessValidationFailedException("访视计划中已经存在基线。"); throw new BusinessValidationFailedException("检查批次计划中已经存在基线。");
} }
visitPlan.IsConfirmed = false; visitPlan.IsConfirmed = false;
@ -189,7 +189,7 @@ namespace IRaCIS.Application.Services
{ {
if (await _repository.Where<SubjectVisit>(t => t.TrialId == visitPlan.TrialId).AnyAsync(v => v.IsBaseLine && v.SubmitState >= SubmitStateEnum.ToSubmit)) if (await _repository.Where<SubjectVisit>(t => t.TrialId == visitPlan.TrialId).AnyAsync(v => v.IsBaseLine && v.SubmitState >= SubmitStateEnum.ToSubmit))
{ {
throw new BusinessValidationFailedException("有受试者的基线已经上传了影像数据,不允许修改基线访视。"); throw new BusinessValidationFailedException("有患者的基线已经上传了影像数据,不允许修改基线检查批次。");
} }
} }
@ -223,7 +223,7 @@ namespace IRaCIS.Application.Services
if (!await _trialRepository.AnyAsync(t => t.Id == trialId && t.IsTrialBasicLogicConfirmed && t.IsTrialProcessConfirmed && t.IsTrialUrgentConfirmed)) if (!await _trialRepository.AnyAsync(t => t.Id == trialId && t.IsTrialBasicLogicConfirmed && t.IsTrialProcessConfirmed && t.IsTrialUrgentConfirmed))
{ {
return ResponseOutput.NotOk("项目配置未确认,不允许确认访视计划"); return ResponseOutput.NotOk("项目配置未确认,不允许确认检查批次计划");
} }
var svList = await _visitStageRepository.Where(t => t.TrialId == trialId).Select(u => new { u.VisitDay, u.IsBaseLine }).ToListAsync(); var svList = await _visitStageRepository.Where(t => t.TrialId == trialId).Select(u => new { u.VisitDay, u.IsBaseLine }).ToListAsync();
@ -234,7 +234,7 @@ namespace IRaCIS.Application.Services
} }
//更新项目访视计划状态为已确认 必定生成更新的sql 通过状态改变 触发操作 //更新项目检查批次计划状态为已确认 必定生成更新的sql 通过状态改变 触发操作
//await _trialRepository.UpdatePartialNowNoQueryAsync(trialId, t => new Trial() { VisitPlanConfirmed = true }); //await _trialRepository.UpdatePartialNowNoQueryAsync(trialId, t => new Trial() { VisitPlanConfirmed = true });
@ -246,9 +246,9 @@ namespace IRaCIS.Application.Services
trial.VisitPlanConfirmed = true; trial.VisitPlanConfirmed = true;
#region 统一给Subject 增加访视任务 #region 统一给Subject 增加检查批次任务
//首次确认时 IsHaveFirstConfirmed都为false 不需要给Subject 加访视 //首次确认时 IsHaveFirstConfirmed都为false 不需要给Subject 加检查批次
if (initTrialVisitPlanConfirmed) if (initTrialVisitPlanConfirmed)
{ {
List<SubjectVisit> subjectVisits = new List<SubjectVisit>(); List<SubjectVisit> subjectVisits = new List<SubjectVisit>();
@ -269,7 +269,7 @@ namespace IRaCIS.Application.Services
svItem.SiteId = subject.SiteId; svItem.SiteId = subject.SiteId;
svItem.SubjectId = subject.SubjectId; svItem.SubjectId = subject.SubjectId;
//设置了末次访视,那么加访视计划的时候,设置为不可用 //设置了末次检查批次,那么加检查批次计划的时候,设置为不可用
if (subjectSVS.Any(t => t.SubjectId == svItem.SubjectId && t.IsFinalVisit)) if (subjectSVS.Any(t => t.SubjectId == svItem.SubjectId && t.IsFinalVisit))
{ {
svItem.VisitExecuted = VisitExecutedEnum.Unavailable; svItem.VisitExecuted = VisitExecutedEnum.Unavailable;
@ -295,9 +295,9 @@ namespace IRaCIS.Application.Services
#region 访视计划修改 影响检查 #region 检查批次计划修改 影响检查
//找到访视计划修改的Item //找到检查批次计划修改的Item
var changedList = await _visitStageRepository.Where(t => t.TrialId == trial.Id && t.IsConfirmed == false) var changedList = await _visitStageRepository.Where(t => t.TrialId == trial.Id && t.IsConfirmed == false)
.Select(t => new .Select(t => new
{ {
@ -320,7 +320,7 @@ namespace IRaCIS.Application.Services
foreach (var changedItem in changedList) foreach (var changedItem in changedList)
{ {
//找到该项目 访视已经执行,并且配置了有首次给药日期 并且更新后超窗的访视,要把超窗之前的值也要查询出来 //找到该项目 检查批次已经执行,并且配置了有首次给药日期 并且更新后超窗的检查批次,要把超窗之前的值也要查询出来
var qcPassedVisitList = await _subjectVisitRepository.Where(t => t.TrialId == trialId var qcPassedVisitList = await _subjectVisitRepository.Where(t => t.TrialId == trialId
&& t.VisitExecuted == VisitExecutedEnum.Executed && t.VisitExecuted == VisitExecutedEnum.Executed
&& t.AuditState == AuditStateEnum.QCPassed && t.AuditState == AuditStateEnum.QCPassed
@ -432,7 +432,7 @@ namespace IRaCIS.Application.Services
//变更某一访视计划Item 受试者访视相关字段 //变更某一检查批次计划Item 患者检查批次相关字段
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.VisitStageId == changedItem.Id, k => new SubjectVisit() await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.VisitStageId == changedItem.Id, k => new SubjectVisit()
{ {
IsBaseLine = changedItem.IsBaseLine, IsBaseLine = changedItem.IsBaseLine,
@ -451,7 +451,7 @@ namespace IRaCIS.Application.Services
//访视计划 整体状态变更为 确认 //检查批次计划 整体状态变更为 确认
await _visitStageRepository.UpdatePartialFromQueryAsync(u => u.TrialId == trialId && u.IsConfirmed == false, t => new VisitStage() { IsConfirmed = true, IsHaveFirstConfirmed = true }); await _visitStageRepository.UpdatePartialFromQueryAsync(u => u.TrialId == trialId && u.IsConfirmed == false, t => new VisitStage() { IsConfirmed = true, IsHaveFirstConfirmed = true });
await _visitStageRepository.SaveChangesAsync(); await _visitStageRepository.SaveChangesAsync();

View File

@ -6,7 +6,7 @@ using MassTransit;
namespace IRaCIS.Core.Application.Triggers namespace IRaCIS.Core.Application.Triggers
{ {
/// <summary> /// <summary>
/// 添加访视计划 要给改项目下的所有Subject 添加该访视 /// 添加检查批次计划 要给改项目下的所有Subject 添加该检查批次
/// </summary> /// </summary>
public class AddSubjectTrigger : IBeforeSaveTrigger<Subject> public class AddSubjectTrigger : IBeforeSaveTrigger<Subject>
{ {
@ -40,7 +40,7 @@ namespace IRaCIS.Core.Application.Triggers
//添加受试者的时候,获取访视计划列表,添加到受试者访视表。 //添加患者的时候,获取检查批次计划列表,添加到患者检查批次表。
var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == subject.TrialId && t.IsConfirmed).ToListAsync(); var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == subject.TrialId && t.IsConfirmed).ToListAsync();
var svList = _mapper.Map<List<SubjectVisit>>(visitPlanList); var svList = _mapper.Map<List<SubjectVisit>>(visitPlanList);
@ -67,8 +67,8 @@ namespace IRaCIS.Core.Application.Triggers
await _subjectVisitRepository.SaveChangesAsync(); await _subjectVisitRepository.SaveChangesAsync();
#region 在f访视计划确认的时候处理 给subject添加访视计划 #region 在f检查批次计划确认的时候处理 给subject添加检查批次计划
////已添加受试者 都不存在该新增的计划名称 那么该项目所有受试者都增加一个访视记录 ////已添加患者 都不存在该新增的计划名称 那么该项目所有患者都增加一个检查批次记录
//if (!await _subjectVisitRepository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId)) //if (!await _subjectVisitRepository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId))
//{ //{
// var subjectSVS = await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId).Select(t => new { t.SubjectId, t.SiteId, t.IsFinalVisit }).Distinct().ToListAsync(); // var subjectSVS = await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId).Select(t => new { t.SubjectId, t.SiteId, t.IsFinalVisit }).Distinct().ToListAsync();
@ -83,7 +83,7 @@ namespace IRaCIS.Core.Application.Triggers
// svItem.SubjectId = subject.SubjectId; // svItem.SubjectId = subject.SubjectId;
// svItem.Id = NewId.NextGuid(); // svItem.Id = NewId.NextGuid();
// //设置了末次访视,那么加访视计划的时候,设置为不可用 // //设置了末次检查批次,那么加检查批次计划的时候,设置为不可用
// if (subjectSVS.Any(t => t.SubjectId == svItem.SubjectId && t.IsFinalVisit)) // if (subjectSVS.Any(t => t.SubjectId == svItem.SubjectId && t.IsFinalVisit))
// { // {
// svItem.VisitExecuted = VisitExecutedEnum.Unavailable; // svItem.VisitExecuted = VisitExecutedEnum.Unavailable;

View File

@ -4,7 +4,7 @@ using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers namespace IRaCIS.Core.Application.Triggers
{ {
//访视 质疑状态 触发修改 //检查批次 质疑状态 触发修改
public class ChallengeStateTrigger : IAfterSaveTrigger<QCChallenge> public class ChallengeStateTrigger : IAfterSaveTrigger<QCChallenge>
{ {
private readonly IRepository _repository; private readonly IRepository _repository;

View File

@ -43,13 +43,13 @@ namespace IRaCIS.Core.Application.Triggers
#region 废弃 #region 废弃
////如果访视结束了 需要删除计划外未执行的访视 ////如果检查批次结束了 需要删除计划外未执行的检查批次
//if (mapedSubject.Status == SubjectStatus.EndOfVisit) //if (mapedSubject.Status == SubjectStatus.EndOfVisit)
//{ //{
// await _repository.DeleteFromQueryAsync<SubjectVisit>(t => t.VisitExecuted == VisitExecutedEnum.UnExecuted && t.SubjectId == mapedSubject.Id && t.InPlan == false); // await _repository.DeleteFromQueryAsync<SubjectVisit>(t => t.VisitExecuted == VisitExecutedEnum.UnExecuted && t.SubjectId == mapedSubject.Id && t.InPlan == false);
//} //}
////如果是出组了 将受试者未执行的 设置为不可用 ////如果是出组了 将者未执行的 设置为不可用
//if (mapedSubject.Status == SubjectStatus.OutOfEnrollment) //if (mapedSubject.Status == SubjectStatus.OutOfEnrollment)
//{ //{
// await _repository.UpdateFromQueryAsync<SubjectVisit>(t => t.SubjectId == mapedSubject.Id && t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); // await _repository.UpdateFromQueryAsync<SubjectVisit>(t => t.SubjectId == mapedSubject.Id && t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable });
@ -67,7 +67,7 @@ namespace IRaCIS.Core.Application.Triggers
{ {
throw new BusinessValidationFailedException( throw new BusinessValidationFailedException(
"该受试者已经有访视被设置为末次访视,不允许将当前访视设置为末次访视。"); "该患者已经有检查批次被设置为末次检查批次,不允许将当前检查批次设置为末次检查批次。");
} }
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == dbSubject.FinalSubjectVisitId).IfNullThrowException(); var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == dbSubject.FinalSubjectVisitId).IfNullThrowException();
@ -76,14 +76,14 @@ namespace IRaCIS.Core.Application.Triggers
{ {
throw new BusinessValidationFailedException( throw new BusinessValidationFailedException(
"该受试者当前访视后有访视的影像已上传,当前访视不允许设置为末次访视。"); "该患者当前检查批次后有检查批次的影像已上传,当前检查批次不允许设置为末次检查批次。");
} }
sv.IsFinalVisit = true; sv.IsFinalVisit = true;
await _subjectVisitRepository.SaveChangesAsync(); await _subjectVisitRepository.SaveChangesAsync();
//末次访视后的 访视设置为不可用 //末次检查批次后的 检查批次设置为不可用
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == dbSubject.Id && t.VisitNum > sv.VisitNum, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == dbSubject.Id && t.VisitNum > sv.VisitNum, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable });
} }
} }

View File

@ -9,7 +9,7 @@ using IRaCIS.Core.Infrastructure;
namespace IRaCIS.Core.Application.Triggers namespace IRaCIS.Core.Application.Triggers
{ {
/// <summary> /// <summary>
/// 处理 访视 末次评估 会影响Subject 状态 /// 处理 检查批次 末次评估 会影响Subject 状态
/// </summary> /// </summary>
public class SubjectVisitCheckPassedTrigger : IBeforeSaveTrigger<SubjectVisit> public class SubjectVisitCheckPassedTrigger : IBeforeSaveTrigger<SubjectVisit>
{ {

View File

@ -8,7 +8,7 @@ using MassTransit;
namespace IRaCIS.Core.Application.Triggers namespace IRaCIS.Core.Application.Triggers
{ {
/// <summary> /// <summary>
/// 处理 访视 末次评估 会影响Subject 状态 /// 处理 检查批次 末次评估 会影响Subject 状态
/// </summary> /// </summary>
public class SubjectVisitFinalVisitTrigger : IAfterSaveTrigger<SubjectVisit> public class SubjectVisitFinalVisitTrigger : IAfterSaveTrigger<SubjectVisit>
{ {
@ -83,7 +83,7 @@ namespace IRaCIS.Core.Application.Triggers
} }
/// <summary> /// <summary>
/// 处理生成阅片期 以及后续访视状态 /// 处理生成阅片期 以及后续检查批次状态
/// </summary> /// </summary>
/// <param name="subjectVisit"></param> /// <param name="subjectVisit"></param>
/// <returns></returns> /// <returns></returns>
@ -94,12 +94,12 @@ namespace IRaCIS.Core.Application.Triggers
u => new Subject() { Status = SubjectStatus.OutOfVisit, FinalSubjectVisitId = subjectVisit.Id }); u => new Subject() { Status = SubjectStatus.OutOfVisit, FinalSubjectVisitId = subjectVisit.Id });
//末次访视后的 访视设置为不可用 //末次检查批次后的 检查批次设置为不可用
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum &&
t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable });
#region 末次访视生成阅片器和任务 #region 末次检查批次生成阅片器和任务
var trialId = subjectVisit.TrialId; var trialId = subjectVisit.TrialId;
@ -180,7 +180,7 @@ namespace IRaCIS.Core.Application.Triggers
if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum &&
(t.SubmitState == SubmitStateEnum.ToSubmit || t.SubmitState == SubmitStateEnum.Submitted))) (t.SubmitState == SubmitStateEnum.ToSubmit || t.SubmitState == SubmitStateEnum.Submitted)))
{ {
throw new BusinessValidationFailedException("该受试者已有后续访视已上传影像或已提交,当前访视不允许设置为末次访视。"); throw new BusinessValidationFailedException("该患者已有后续检查批次已上传影像或已提交,当前检查批次不允许设置为末次检查批次。");
} }
} }

View File

@ -4,7 +4,7 @@ using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers namespace IRaCIS.Core.Application.Triggers
{ {
/// <summary> /// <summary>
/// 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期 /// 处理 检查批次 1、提交状态 2、执行状态 3、最早最晚 拍片日期
/// </summary> /// </summary>
public class SubjectVisitTrigger : IAfterSaveTrigger<NoneDicomStudy>, IAfterSaveTrigger<DicomStudy>, IAfterSaveTrigger<NoneDicomStudyFile> public class SubjectVisitTrigger : IAfterSaveTrigger<NoneDicomStudy>, IAfterSaveTrigger<DicomStudy>, IAfterSaveTrigger<NoneDicomStudyFile>
{ {
@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Triggers
public async Task UpdateSubjectVisitSubmitStateAsync(Guid subjectVisitId) public async Task UpdateSubjectVisitSubmitStateAsync(Guid subjectVisitId)
{ {
//一个访视下面有多个检查,所以需要检测 没有的时候才清空 非dicom 是检查文件 不是表记录 //一个检查批次下面有多个检查,所以需要检测 没有的时候才清空 非dicom 是检查文件 不是表记录
if (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.StudyList).CountAsync() == 0 && if (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.StudyList).CountAsync() == 0 &&
await _subjectVisitRepository.Where(t => t.Id == subjectVisitId) await _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
.SelectMany(t => t.NoneDicomStudyList).SelectMany(u => u.NoneDicomFileList).CountAsync() == 0) .SelectMany(t => t.NoneDicomStudyList).SelectMany(u => u.NoneDicomFileList).CountAsync() == 0)

View File

@ -77,14 +77,14 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
public string SiteCode { get; set; } = string.Empty; public string SiteCode { get; set; } = string.Empty;
//[Required(ErrorMessage = "受试者筛选号不能为空")] //[Required(ErrorMessage = "者筛选号不能为空")]
[ImporterHeader(Name = "受试者筛选号", AutoTrim = true)] [ImporterHeader(Name = "者筛选号", AutoTrim = true)]
[ExcelColumnName("受试者筛选号")] [ExcelColumnName("者筛选号")]
public string SubjectCode { get; set; } = string.Empty; public string SubjectCode { get; set; } = string.Empty;
//[Required(ErrorMessage = "访视名称不能为空")] //[Required(ErrorMessage = "检查批次名称不能为空")]
[ImporterHeader(Name = "访视名称", AutoTrim = true)] [ImporterHeader(Name = "检查批次名称", AutoTrim = true)]
[ExcelColumnName("访视名称")] [ExcelColumnName("检查批次名称")]
public string VisitName { get; set; } = string.Empty; public string VisitName { get; set; } = string.Empty;
@ -141,10 +141,10 @@ namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
[ExporterHeader(DisplayName = "中心编号")] [ExporterHeader(DisplayName = "中心编号")]
public string TrialSiteCode { get; set; } = string.Empty; public string TrialSiteCode { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "受试者")] [ExporterHeader(DisplayName = "者")]
public string SubjectCode { get; set; } = string.Empty; public string SubjectCode { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "访视名称")] [ExporterHeader(DisplayName = "检查批次名称")]
public string VisitName { get; set; } = string.Empty; public string VisitName { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "检查时间", Format = "yyyy-mm-dd hh:mm:ss")] [ExporterHeader(DisplayName = "检查时间", Format = "yyyy-mm-dd hh:mm:ss")]

View File

@ -88,11 +88,11 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList); var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList);
////按照数据库数据访视分组 按照数据库的数据 一个个的访视对比 ////按照数据库数据检查批次分组 按照数据库的数据 一个个的检查批次对比
//var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName }) //var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
// .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList(); // .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
//按照Excel数据访视分组 按照数据库的数据 一个个的访视对比 //按照Excel数据检查批次分组 按照数据库的数据 一个个的检查批次对比
var svExcelGroup = etcList.GroupBy(t => new { t.SiteCode, t.SubjectCode, t.VisitName }) var svExcelGroup = etcList.GroupBy(t => new { t.SiteCode, t.SubjectCode, t.VisitName })
.Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, ExcelStudyList = g.ToList() }).ToList(); .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, ExcelStudyList = g.ToList() }).ToList();
@ -100,7 +100,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
foreach (var sv in svExcelGroup) foreach (var sv in svExcelGroup)
{ {
//Excel 的数据 在IRC 中可以找到该访视 //Excel 的数据 在IRC 中可以找到该检查批次
if (dbCheckList.Any(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName)) if (dbCheckList.Any(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName))
{ {
@ -112,7 +112,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
StringBuilder dialogMsg = new StringBuilder(); StringBuilder dialogMsg = new StringBuilder();
dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下"); dialogMsg.Append("您好,根据本系统自动识别,该患者当前检查批次在IRC系统中已提交的影像检查情况如下");
var num = 0; var num = 0;
List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>(); List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
foreach (var item in dbVisitStudyList) foreach (var item in dbVisitStudyList)
@ -130,7 +130,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
#region 更换核对的顺序 以Excel 数据为准 注释 #region 更换核对的顺序 以Excel 数据为准 注释
//// 该访视 在EDC Excel中没有任何数据 //// 该检查批次 在EDC Excel中没有任何数据
//if (etcVisitStudyList.Count == 0) //if (etcVisitStudyList.Count == 0)
//{ //{
// dialogMsg.AppendLine($"<br/>"); // dialogMsg.AppendLine($"<br/>");
@ -143,9 +143,9 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
// } // }
// dialogMsg.AppendLine($"<br/>"); // dialogMsg.AppendLine($"<br/>");
// dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致部分检查如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); // dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致部分检查如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该检查批次正确的影像检查情况。");
// dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致"; // dbSV.CheckResult = "当前检查批次在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
// dbSV.CheckState = CheckStateEnum.CVIng; // dbSV.CheckState = CheckStateEnum.CVIng;
// dbSV.ForwardState = ForwardStateEnum.ToForward; // dbSV.ForwardState = ForwardStateEnum.ToForward;
// dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply; // dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
@ -178,7 +178,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
dialogMsg.AppendLine($"核对EDC数据完全一致, 审核通过"); dialogMsg.AppendLine($"核对EDC数据完全一致, 审核通过");
// dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致部分检查如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); // dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致部分检查如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该检查批次正确的影像检查情况。");
dbSV.CheckState = CheckStateEnum.CVPassed; dbSV.CheckState = CheckStateEnum.CVPassed;
dbSV.CheckUserId = _userInfo.Id; dbSV.CheckUserId = _userInfo.Id;
dbSV.CheckPassedTime = DateTime.Now; dbSV.CheckPassedTime = DateTime.Now;
@ -218,9 +218,9 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
} }
dialogMsg.AppendLine($"<br/>"); dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致部分检查如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致部分检查如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该检查批次正确的影像检查情况。");
dbSV.CheckResult = "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:" + String.Join(" | ", dbExceptExcel.Select(t => $"EDC 缺少:{t.StudyDate} {t.Modality} ")) + " | " dbSV.CheckResult = "根据导入的一致性核查数据,请确认本检查批次以下不一致检查项信息:" + String.Join(" | ", dbExceptExcel.Select(t => $"EDC 缺少:{t.StudyDate} {t.Modality} ")) + " | "
+ String.Join(" | ", excelExceptDB.Select(t => $"IRC 缺少:{t.StudyDate} {t.Modality}")); + String.Join(" | ", excelExceptDB.Select(t => $"IRC 缺少:{t.StudyDate} {t.Modality}"));
//新增一致性核查质疑记录 //新增一致性核查质疑记录

View File

@ -4,7 +4,7 @@ namespace IRaCIS.Core.Domain.Share
{ {
public enum ReadingCategory public enum ReadingCategory
{ {
//访视 //检查批次
Visit = 1, Visit = 1,
////阅片周期 ////阅片周期
@ -28,7 +28,7 @@ namespace IRaCIS.Core.Domain.Share
public enum GenerateTaskCategory public enum GenerateTaskCategory
{ {
//访视 //检查批次
Visit = 1, Visit = 1,
////阅片周期 ////阅片周期
@ -238,7 +238,7 @@ namespace IRaCIS.Core.Domain.Share
None = 0, None = 0,
/// <summary> /// <summary>
/// 访视 /// 检查批次
/// </summary> /// </summary>
Visit=1, Visit=1,
@ -265,10 +265,10 @@ namespace IRaCIS.Core.Domain.Share
public enum ReadingTaskViewMethod public enum ReadingTaskViewMethod
{ {
//受试 //
Subject = 0, Subject = 0,
//访视/阅片期 //检查批次/阅片期
ReadingPeriodOrVisit = 2, ReadingPeriodOrVisit = 2,
} }
@ -316,7 +316,7 @@ namespace IRaCIS.Core.Domain.Share
PDProgress=2, PDProgress=2,
/// <summary> /// <summary>
/// 访视加急 /// 检查批次加急
/// </summary> /// </summary>
VisitUrgent=3, VisitUrgent=3,

View File

@ -20,7 +20,7 @@ namespace IRaCIS.Core.Domain.Share
public enum RelevanceType public enum RelevanceType
{ {
/// <summary> /// <summary>
/// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合 /// 关联的检查批次任务ID (当前任务是检查批次任务的话会有自己)集合
/// </summary> /// </summary>
Related = 0, Related = 0,
@ -686,12 +686,12 @@ namespace IRaCIS.Core.Domain.Share
public enum ModuleTypeEnum public enum ModuleTypeEnum
{ {
/// <summary> /// <summary>
/// 计划内访视 /// 计划内检查批次
/// </summary> /// </summary>
InPlanSubjectVisit = 0, InPlanSubjectVisit = 0,
/// <summary> /// <summary>
/// 计划外访视 /// 计划外检查批次
/// </summary> /// </summary>
OutPlanSubjectVisit = 1, OutPlanSubjectVisit = 1,
@ -914,15 +914,15 @@ namespace IRaCIS.Core.Domain.Share
public enum ClinicalLevel public enum ClinicalLevel
{ {
/// <summary> /// <summary>
/// 受试 ///
/// </summary> /// </summary>
[DisplayAttribute(Name = "受试者")] [DisplayAttribute(Name = "者")]
Subject = 0, Subject = 0,
/// <summary> /// <summary>
/// 访视 /// 检查批次
/// </summary> /// </summary>
[DisplayAttribute(Name = "访视")] [DisplayAttribute(Name = "检查批次")]
SubjectVisit = 1, SubjectVisit = 1,
/// <summary> /// <summary>
@ -1039,22 +1039,22 @@ namespace IRaCIS.Core.Domain.Share
SODChange = 2, SODChange = 2,
/// <summary> /// <summary>
/// 与基线访视相比SOD变化百分比 /// 与基线检查批次相比SOD变化百分比
/// </summary> /// </summary>
SODPercent = 3, SODPercent = 3,
/// <summary> /// <summary>
/// 与整个访视期间SOD最低点相比增加的值mm 其他任务需要改 /// 与整个检查批次期间SOD最低点相比增加的值mm 其他任务需要改
/// </summary> /// </summary>
LowestIncrease = 4, LowestIncrease = 4,
/// <summary> /// <summary>
/// 与整个访视期间SOD最低点相比增加的百分比 其他任务需要改 /// 与整个检查批次期间SOD最低点相比增加的百分比 其他任务需要改
/// </summary> /// </summary>
LowPercent = 5, LowPercent = 5,
/// <summary> /// <summary>
/// 整个访视期间SOD最低点访视名称 其他任务需要改 /// 整个检查批次期间SOD最低点检查批次名称 其他任务需要改
/// </summary> /// </summary>
LowVisit = 6, LowVisit = 6,
@ -1064,7 +1064,7 @@ namespace IRaCIS.Core.Domain.Share
IsLymphTarget = 7, IsLymphTarget = 7,
/// <summary> /// <summary>
/// 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 /// 是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
/// </summary> /// </summary>
IsAddFive = 8, IsAddFive = 8,
@ -1094,7 +1094,7 @@ namespace IRaCIS.Core.Domain.Share
Tumor = 13, Tumor = 13,
/// <summary> /// <summary>
/// 访视点备注 --注册证环境 评估总结 /// 检查批次点备注 --注册证环境 评估总结
/// </summary> /// </summary>
/// </summary> /// </summary>
AdjustReason = 14, AdjustReason = 14,
@ -1120,7 +1120,7 @@ namespace IRaCIS.Core.Domain.Share
AlwaysNewLesionsCount = 18, AlwaysNewLesionsCount = 18,
/// <summary> /// <summary>
/// 自治疗后第二个访视点以来持续的新骨病变数量 /// 自治疗后第二个检查批次点以来持续的新骨病变数量
/// </summary> /// </summary>
NewBoneLesionsCount = 19, NewBoneLesionsCount = 19,
@ -1130,7 +1130,7 @@ namespace IRaCIS.Core.Domain.Share
TherapeuticEffectEvaluationGroup=20, TherapeuticEffectEvaluationGroup=20,
/// <summary> /// <summary>
/// 访视点肿瘤评估 /// 检查批次点肿瘤评估
/// </summary> /// </summary>
SiteVisitForTumorEvaluation = 21, SiteVisitForTumorEvaluation = 21,
@ -1143,7 +1143,7 @@ namespace IRaCIS.Core.Domain.Share
} }
/// <summary> /// <summary>
/// 访视点肿瘤评估 /// 检查批次点肿瘤评估
/// </summary> /// </summary>
public enum VisitTumorEvaluation public enum VisitTumorEvaluation
{ {
@ -1190,7 +1190,7 @@ namespace IRaCIS.Core.Domain.Share
GlobalChange = 2, GlobalChange = 2,
/// <summary> /// <summary>
/// 访视点注释 /// 检查批次点注释
/// </summary> /// </summary>
VisitRemark = 3, VisitRemark = 3,
} }

View File

@ -25,7 +25,7 @@ namespace IRaCIS.Core.Domain.Models
public string VisitName { get; set; } public string VisitName { get; set; }
// 项目Id受试者Idnum 共同决定 Global 关联的所有study // 项目Id者Idnum 共同决定 Global 关联的所有study
// 暂定设计成这样,后期如有需要,爱用中间表 关联。 // 暂定设计成这样,后期如有需要,爱用中间表 关联。
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }

View File

@ -23,7 +23,7 @@ namespace IRaCIS.Core.Domain.Models
public string TaskBlindName { get; set; } = string.Empty; public string TaskBlindName { get; set; } = string.Empty;
//任务来源访视Id 方便回更访视读片状态 //任务来源检查批次Id 方便回更检查批次读片状态
public Guid? SourceSubjectVisitId { get; set; } public Guid? SourceSubjectVisitId { get; set; }
[JsonIgnore] [JsonIgnore]

View File

@ -23,7 +23,7 @@ namespace IRaCIS.Core.Domain.Models
public string TaskBlindName { get; set; } = string.Empty; public string TaskBlindName { get; set; } = string.Empty;
//任务来源访视Id 方便回更访视读片状态 //任务来源检查批次Id 方便回更检查批次读片状态
public Guid? SourceSubjectVisitId { get; set; } public Guid? SourceSubjectVisitId { get; set; }
public Guid? SouceReadModuleId { get; set; } public Guid? SouceReadModuleId { get; set; }
@ -170,7 +170,7 @@ namespace IRaCIS.Core.Domain.Models
//随访任务号 取访视的号 计划外是 访视+0.1 裁判任务在访视任务上+0.002 全局任务在截止访视号上+0.03 肿瘤待定 //随访任务号 取检查批次的号 计划外是 检查批次+0.1 裁判任务在检查批次任务上+0.002 全局任务在截止检查批次号上+0.03 肿瘤待定
public decimal VisitTaskNum { get; set; } public decimal VisitTaskNum { get; set; }
@ -191,12 +191,12 @@ namespace IRaCIS.Core.Domain.Models
public bool IsReadClinicalData { get; set; } = false; public bool IsReadClinicalData { get; set; } = false;
/// <summary> /// <summary>
/// 关联的访视任务ID (当前任务是访视任务的话会有自己) /// 关联的检查批次任务ID (当前任务是检查批次任务的话会有自己)
/// </summary> /// </summary>
public string RelatedVisitTaskIds { get; set; } = "[]"; public string RelatedVisitTaskIds { get; set; } = "[]";
/// <summary> /// <summary>
/// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合 /// 关联的检查批次任务ID (当前任务是检查批次任务的话会有自己)集合
/// </summary> /// </summary>
[NotMapped] [NotMapped]
public List<Guid> RelatedVisitTaskIdList public List<Guid> RelatedVisitTaskIdList
@ -344,7 +344,7 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore] [JsonIgnore]
//对于全局任务而言 才可以用的 关联的访视阅片结果 //对于全局任务而言 才可以用的 关联的检查批次阅片结果
public List<ReadingGlobalTaskInfo> GlobalVisitResultList { get; set; } = new List<ReadingGlobalTaskInfo>(); public List<ReadingGlobalTaskInfo> GlobalVisitResultList { get; set; } = new List<ReadingGlobalTaskInfo>();

View File

@ -61,7 +61,7 @@ namespace IRaCIS.Core.Domain.Models
public bool IsCopyOrigenalForms { get; set; } public bool IsCopyOrigenalForms { get; set; }
//仅仅包括全局和访视 //仅仅包括全局和检查批次
public bool IsCopyFollowForms { get; set; } public bool IsCopyFollowForms { get; set; }

View File

@ -45,7 +45,7 @@ namespace IRaCIS.Core.Domain.Models
// 内部用户 外部用户 // 内部用户 外部用户
public bool IsZhiZhun { get; set; } public bool? IsZhiZhun { get; set; }
public UserTypeEnum UserTypeEnum { get; set; } public UserTypeEnum UserTypeEnum { get; set; }

View File

@ -50,7 +50,7 @@ namespace IRaCIS.Core.Domain.Models
/// <summary> /// <summary>
/// 是否是访视 /// 是否是检查批次
/// </summary> /// </summary>
public bool? IsVisist { get; set; } public bool? IsVisist { get; set; }
@ -75,7 +75,7 @@ namespace IRaCIS.Core.Domain.Models
public Guid? TrialId { get; set; } public Guid? TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }

View File

@ -20,12 +20,12 @@ namespace IRaCIS.Core.Domain.Models
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 访视Id 或者模块Id /// 检查批次Id 或者模块Id
/// </summary> /// </summary>
public Guid ReadingId { get; set; } public Guid ReadingId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
@ -35,7 +35,7 @@ namespace IRaCIS.Core.Domain.Models
public Guid ClinicalDataTrialSetId { get; set; } public Guid ClinicalDataTrialSetId { get; set; }
/// <summary> /// <summary>
/// 是否为访视 /// 是否为检查批次
/// </summary>xiu /// </summary>xiu
public bool IsVisit { get; set; } public bool IsVisit { get; set; }

View File

@ -139,7 +139,7 @@ namespace IRaCIS.Core.Domain.Models
/// <summary> /// <summary>
/// 阅片是否显示受试者信息 /// 阅片是否显示者信息
/// </summary> /// </summary>
public bool IsReadingShowSubjectInfo { get; set; } = true; public bool IsReadingShowSubjectInfo { get; set; } = true;
@ -197,7 +197,7 @@ namespace IRaCIS.Core.Domain.Models
public bool IsOncologyReading { get; set; } public bool IsOncologyReading { get; set; }
/// <summary> /// <summary>
/// 任务展示访视 读片任务显示是否顺序 /// 任务展示检查批次 读片任务显示是否顺序
/// </summary> /// </summary>
public bool IsReadingTaskViewInOrder { get; set; } = true; public bool IsReadingTaskViewInOrder { get; set; } = true;
@ -206,7 +206,7 @@ namespace IRaCIS.Core.Domain.Models
public TaskAllocateObj TaskAllocateObjEnum { get; set; } public TaskAllocateObj TaskAllocateObjEnum { get; set; }
//后续访视任务自动分配 //后续检查批次任务自动分配
public bool IsFollowVisitAutoAssign { get; set; } = true; public bool IsFollowVisitAutoAssign { get; set; } = true;
//后续全局自动分配 //后续全局自动分配
@ -216,7 +216,7 @@ namespace IRaCIS.Core.Domain.Models
public TaskAllocateDefaultState FollowJudgeTaskAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated; public TaskAllocateDefaultState FollowJudgeTaskAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
//后续访视自动分配默认状态 //后续检查批次自动分配默认状态
public TaskAllocateDefaultState FollowVisitAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated; public TaskAllocateDefaultState FollowVisitAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
//后续全局自动分配默认状态 //后续全局自动分配默认状态

View File

@ -49,7 +49,7 @@ namespace IRaCIS.Core.Domain.Models
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
[Required] [Required]
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }

View File

@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace IRaCIS.Core.Domain.Models namespace IRaCIS.Core.Domain.Models
{ {
/// <summary> /// <summary>
/// 阅片肿瘤学 针对访视任务 添加了一个结果 /// 阅片肿瘤学 针对检查批次任务 添加了一个结果
/// </summary> /// </summary>
[Table("ReadingOncologyTaskInfo")] [Table("ReadingOncologyTaskInfo")]
public class ReadingOncologyTaskInfo : Entity, IAuditAdd public class ReadingOncologyTaskInfo : Entity, IAuditAdd
@ -22,7 +22,7 @@ namespace IRaCIS.Core.Domain.Models
public Guid OncologyTaskId { get; set; } public Guid OncologyTaskId { get; set; }
/// <summary> /// <summary>
/// 产生肿瘤学阅片任务的 访视类型的阅片任务Id /// 产生肿瘤学阅片任务的 检查批次类型的阅片任务Id
/// </summary> /// </summary>
public Guid VisitTaskId { get; set; } public Guid VisitTaskId { get; set; }
@ -52,7 +52,7 @@ namespace IRaCIS.Core.Domain.Models
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者Id /// 者Id
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }

View File

@ -30,7 +30,7 @@ namespace IRaCIS.Core.Domain.Models
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
/// <summary> /// <summary>
/// 受试者Id /// 者Id
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }

View File

@ -23,7 +23,7 @@ namespace IRaCIS.Core.Domain.Models
public List<VisitTask> ModuleTaskList { get; set; } public List<VisitTask> ModuleTaskList { get; set; }
/// <summary> /// <summary>
/// 受试者ID /// 者ID
/// </summary> /// </summary>
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
@ -45,7 +45,7 @@ namespace IRaCIS.Core.Domain.Models
public bool? IsUrgent { get; set; } public bool? IsUrgent { get; set; }
/// <summary> /// <summary>
/// 访视ID /// 检查批次ID
/// </summary> /// </summary>
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
@ -98,7 +98,7 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore] [JsonIgnore]
/// <summary> /// <summary>
/// 受试 ///
/// </summary> /// </summary>
[ForeignKey("SubjectId")] [ForeignKey("SubjectId")]
@ -113,7 +113,7 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore] [JsonIgnore]
/// <summary> /// <summary>
/// 访视 /// 检查批次
/// </summary> /// </summary>
[ForeignKey("SubjectVisitId")] [ForeignKey("SubjectVisitId")]
public SubjectVisit SubjectVisit { get; set; } public SubjectVisit SubjectVisit { get; set; }

View File

@ -20,12 +20,12 @@ namespace IRaCIS.Core.Domain.Models
public Guid ReadingPeriodSetId { get; set; } public Guid ReadingPeriodSetId { get; set; }
/// <summary> /// <summary>
/// 访视 /// 检查批次
/// </summary> /// </summary>
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
/// <summary> /// <summary>
/// 访视 /// 检查批次
/// </summary> /// </summary>
[ForeignKey("SubjectVisitId")] [ForeignKey("SubjectVisitId")]
[JsonIgnore] [JsonIgnore]

View File

@ -38,18 +38,18 @@ namespace IRaCIS.Core.Domain.Models
public DateTime? ExpirationDate { get; set; } public DateTime? ExpirationDate { get; set; }
/// <summary> /// <summary>
/// 截止访视 /// 截止检查批次
/// </summary> /// </summary>
public decimal? ExpirationVisitNum { get; set; } public decimal? ExpirationVisitNum { get; set; }
/// <summary> /// <summary>
/// 访视计划ID /// 检查批次计划ID
/// </summary> /// </summary>
public Guid? VisitStageId { get; set; } public Guid? VisitStageId { get; set; }
[JsonIgnore] [JsonIgnore]
/// <summary> /// <summary>
/// 访视模板 /// 检查批次模板
/// </summary> /// </summary>
[ForeignKey("VisitStageId")] [ForeignKey("VisitStageId")]
public VisitStage VisitStage { get; set; } public VisitStage VisitStage { get; set; }

Some files were not shown because too many files have changed in this diff Show More